Exemplo n.º 1
0
    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(**kwargs)
        api = API(self.request.session.get('obp'))
        try:
            urlpath = '/management/consumers/{}'.format(self.kwargs['consumer_id'])
            consumer = api.get(urlpath)
            consumer['created'] = datetime.strptime(
                consumer['created'], settings.API_DATETIMEFORMAT)

            call_limits_urlpath = '/management/consumers/{}/consumer/call-limits'.format(self.kwargs['consumer_id'])
            consumer_call_limtis = api.get(call_limits_urlpath)
            if 'code' in consumer_call_limtis and consumer_call_limtis['code'] > 400:
                messages.error(self.request, "{}".format(consumer_call_limtis['message']))
            else:
                consumer['per_minute_call_limit'] = consumer_call_limtis['per_minute_call_limit']
                consumer['per_hour_call_limit'] = consumer_call_limtis['per_hour_call_limit']
                consumer['per_day_call_limit'] = consumer_call_limtis['per_day_call_limit']
                consumer['per_week_call_limit'] = consumer_call_limtis['per_week_call_limit']
                consumer['per_month_call_limit'] = consumer_call_limtis['per_month_call_limit']

        except APIError as err:
            messages.error(self.request, err)
        except Exception as err:
            messages.error(self.request, "{}".format(err))
        finally:
            context.update({
                'consumer': consumer
            })
        return context
Exemplo n.º 2
0
    def get_active_apps(self, cleaned_data, from_date, to_date):
        apps = []
        form = self.get_form()
        active_apps_list = []
        if cleaned_data.get('include_obp_apps'):
            urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}'.format(
                from_date, to_date)
            api = API(self.request.session.get('obp'))
            try:
                apps = api.get(urlpath)
                active_apps_list = list(apps)
            except APIError as err:
                messages.error(self.request, err)
        else:
            urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
                from_date, to_date, ",".join(EXCLUDE_APPS),
                ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
            api = API(self.request.session.get('obp'))
            try:
                apps = api.get(urlpath)
                active_apps_list = list(apps)
            except APIError as err:
                messages.error(self.request, err)

        return active_apps_list
Exemplo n.º 3
0
    def get_top_apis(self, cleaned_data, from_date, to_date):
        top_apis = []
        form = self.get_form()
        if cleaned_data.get('include_obp_apps'):
            urlpath = '/management/metrics/top-apis?from_date={}&to_date={}'.format(from_date, to_date)
            api = API(self.request.session.get('obp'))
            try:
                top_apis = api.get(urlpath)['top_apis']
            except APIError as err:
                error_once_only(self.request, err)
        else:
            urlpath = '/management/metrics/top-apis?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
                from_date, to_date, ",".join(EXCLUDE_APPS), ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
            api = API(self.request.session.get('obp'))
            try:
                top_apis = api.get(urlpath)['top_apis']
            except APIError as err:
                error_once_only(self.request, err)

        for api in top_apis:
            if api['Implemented_by_partial_function'] == "":
                top_apis.remove(api)

        for api in top_apis:
            api['Implemented_by_partial_function'] = api['Implemented_by_partial_function'] + '(' + api['implemented_in_version'] + ')'
        top_apis = top_apis[:10]
        top_apis = reversed(top_apis)

        return top_apis
Exemplo n.º 4
0
    def calls_per_delta(self, cleaned_data, from_date, to_date, **delta):
        """
        Prints how many calls were made in total per given delta
        """
        form = self.get_form()
        to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)

        from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)

        date_from = from_date
        date_to = from_date + timedelta(**delta)

        sum = 0
        metrics = []
        result_list = []
        result_list_pure = []
        date_list = []
        date_list.append(date_from)

        # If include_obp_apps is selected
        if cleaned_data.get('include_obp_apps'):
            while date_to <= to_date:
                urlpath = '/management/aggregate-metrics?from_date={}&to_date={}'.format(
                    date_from.strftime(API_DATEFORMAT),
                    date_to.strftime(API_DATEFORMAT))
                api = API(self.request.session.get('obp'))
                try:
                    metrics = api.get(urlpath)
                    result = metrics[0]["count"]
                    result_list_pure.append(result)
                    result_list.append('{} - {} # {}'.format(
                        date_from, date_to, result))
                    sum += result
                except APIError as err:
                    messages.error(self.request, err)

                date_from = date_to
                date_list.append(date_from)
                date_to = date_to + timedelta(**delta)
        else:
            while date_to <= to_date:
                urlpath = '/management/aggregate-metrics?from_date={}&to_date={}&exclude_app_names={}'.format(
                    date_from.strftime(API_DATEFORMAT),
                    date_to.strftime(API_DATEFORMAT), ",".join(EXCLUDE_APPS))
                api = API(self.request.session.get('obp'))
                try:
                    metrics = api.get(urlpath)
                    result = metrics[0]["count"]
                    result_list_pure.append(result)
                    result_list.append('{} - {} # {}'.format(
                        date_from, date_to, result))
                    sum += result
                except APIError as err:
                    messages.error(self.request, err)

                date_from = date_to
                date_list.append(date_from)
                date_to = date_to + timedelta(**delta)
        return result_list, result_list_pure, date_list
Exemplo n.º 5
0
    def median_time_to_first_api_call(self, from_date, to_date):
        form = self.get_form()
        new_apps_list = []
        apps = []
        apps_list = []

        urlpath_consumers = '/management/consumers'
        api = API(self.request.session.get('obp'))
        try:
            apps = api.get(urlpath_consumers)
            apps_list = apps["list"]
        except APIError as err:
            messages.error(self.request, err)

        for app in apps_list:
            created_date = datetime.datetime.strptime(app['created'],
                                                      '%Y-%m-%dT%H:%M:%SZ')
            created_date = created_date.strftime(API_DATEFORMAT)
            created_date = datetime.datetime.strptime(created_date,
                                                      API_DATEFORMAT)
            if created_date >= datetime.datetime.strptime(
                    from_date, API_DATEFORMAT):
                new_apps_list.append(app)

        times_to_first_call = []

        for app in new_apps_list:
            urlpath_metrics = '/management/metrics?from_date={}&to_date={}&consumer_id={}&sort_by={}&direction={}&limit={}'.format(
                from_date, to_date, app['consumer_id'], 'date', 'asc', '1')
            api = API(self.request.session.get('obp'))
            try:
                metrics = api.get(urlpath_metrics)
                metrics = list(metrics['metrics'])
                if metrics:
                    time_difference = datetime.datetime.strptime(
                        metrics[0]['date'],
                        '%Y-%m-%dT%H:%M:%S.%fZ') - datetime.datetime.strptime(
                            app['created'], '%Y-%m-%dT%H:%M:%SZ')
                    times_to_first_call.append(time_difference.total_seconds())

            except APIError as err:
                messages.error(self.request, err)

        if times_to_first_call:
            median = statistics.median(times_to_first_call)
            delta = datetime.timedelta(seconds=median)
        else:
            delta = 0

        return delta
Exemplo n.º 6
0
    def get_aggregate_metrics_api_explorer(self, from_date, to_date):
        """
        Gets the metrics from the API, using given cleaned form data.
        """
        form = self.get_form()
        metrics = []
        api_calls_total = 0
        average_response_time = 0

        urlpath = '/management/aggregate-metrics?from_date={}&to_date={}&app_name={}'.format(from_date, to_date, API_EXPLORER_APP_NAME)
        api = API(self.request.session.get('obp'))
        try:
            metrics = api.get(urlpath)
            api_calls_total = metrics[0]["count"]
            average_response_time = metrics[0]["average_response_time"]
        except APIError as err:
            error_once_only(self.request, err)


        to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
        from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)
        number_of_days = abs((to_date - from_date).days)
        average_calls_per_day = api_calls_total / number_of_days

        return api_calls_total, average_response_time, int(average_calls_per_day)
Exemplo n.º 7
0
    def get_users_rolenames(self, context):

        api = API(self.request.session.get('obp'))

        role_names = []
        try:
            urlpath = '/entitlements'
            entitlements = api.get(urlpath)
            if 'code' in entitlements and entitlements['code'] >= 400:
                messages.error(self.request, entitlements['message'])
            else:
                for entitlement in entitlements['list']:
                    role_names.append(entitlement['role_name'])
        except APIError as err:
            messages.error(self.request, err)
            return [], []
        # fail gracefully in case API provides new structure
        except KeyError as err:
            messages.error(self.request, 'KeyError: {}'.format(err))
            return [], []

        role_names = list(set(role_names))
        role_names.sort()

        return role_names
Exemplo n.º 8
0
    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(**kwargs)
        api_collection_id = context['view'].kwargs['api_collection_id']

        api = API(self.request.session.get('obp'))
        urlpath = '/my/api-collection-ids/{}/api-collection-endpoints'.format(
            api_collection_id)
        api_collection_endpoints = []
        try:
            response = api.get(urlpath)
            if 'code' in response and response['code'] >= 400:
                error_once_only(self.request, response['message'])
            else:
                api_collection_endpoints = response['api_collection_endpoints']
        except APIError as err:
            error_once_only(
                self.request,
                Exception(
                    "OBP-API server is not running or do not response properly. "
                    "Please check OBP-API server.    "
                    "Details: " + str(err)))
        except BaseException as err:
            error_once_only(self.request,
                            (Exception("Unknown Error. Details:" + str(err))))
        else:
            context.update({
                'api_collection_endpoints': api_collection_endpoints,
                'api_collection_id': api_collection_id
            })
        return context
Exemplo n.º 9
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        api = API(self.request.session.get('obp'))
        urlpath = '/my/api-collections'
        api_collections = []
        try:
            response = api.get(urlpath)
            if 'code' in response and response['code'] >= 400:
                error_once_only(self.request, response['message'])
            else:
                api_collections = response['api_collections']
        except APIError as err:
            error_once_only(
                self.request,
                Exception(
                    "OBP-API server is not running or do not response properly. "
                    "Please check OBP-API server.    "
                    "Details: " + str(err)))
        except BaseException as err:
            error_once_only(self.request,
                            (Exception("Unknown Error. Details:" + str(err))))
        else:
            # set the default endpoint there, the first item will be the new endpoint.
            default_api_endpoint = {
                "api_collection_name": "Customer",
                "is_sharable": True,
                "description": "Describe the purpose of the collection"
            }
            api_collections.insert(0, json.dumps(default_api_endpoint))

            context.update({'api_collections': api_collections})
        return context
Exemplo n.º 10
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)

        api = API(self.request.session.get('obp'))
        limit = self.request.GET.get('limit', 50)
        offset = self.request.GET.get('offset', 0)
        email = self.request.GET.get('email')
        username = self.request.GET.get('username')

        if email:
            urlpath = '/users/email/{}/terminator'.format(email)
        elif username:
            urlpath = '/users/username/{}'.format(username)
        else:
            urlpath = '/users?limit={}&offset={}'.format(limit, offset)

        users = []
        try:
            users = api.get(urlpath)
        except APIError as err:
            messages.error(self.request, err)

        role_names = self.get_users_rolenames(context)
        users = FilterRoleName(context, self.request.GET) \
            .apply([users] if username else users['users'])
        context.update({
            'role_names': role_names,
            'statistics': {
                'users_num': len(users),
            },
            'users': users,
            'limit': limit,
            'offset': offset
        })
        return context
Exemplo n.º 11
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        api = API(self.request.session.get('obp'))
        urlpath = '/management/webui_props?active=true'

        try:
            response = api.get(urlpath)
            if 'code' in response and response['code'] >= 400:
                messages.error(self.request, response['message'])
                context.update({'webui_props': []})
            else:
                # Here is response of getWebuiProps.
                # {
                #     "webui_props": [
                #         {
                #             "name": "webui_header_logo_left_url ",
                #             "value": " /media/images/logo.png",
                #             "web_ui_props_id": "default"
                #         }
                #     ]
                # }
                #print(response)
                context.update(response)
        except APIError as err:
            messages.error(self.request, Exception("The OBP-API server is not running or does not respond properly."
                                                   "Please check OBP-API server.    "
                                                   "Details: " + str(err)))
        except BaseException as err:
            messages.error(self.request, (Exception("Unknown Error. Details:" + str(err))))
        return context
Exemplo n.º 12
0
 def get_all_consumers(self):
     urlpath = '/management/consumers'
     api = API(self.request.session.get('obp'))
     cache_key = get_cache_key_for_current_call(self.request, urlpath)
     apicaches = None
     try:
         apicaches = cache.get(cache_key)
     except Exception as err:
         apicaches = None
     if not apicaches is None:
         apps_list = apicaches
     else:
         try:
             apps = api.get(urlpath)
             apps_list = apps["consumers"]
             cache.set(
                 cache_key, apps_list, 60 * 60
             )  # for the consumers we cache for 1 hour, consumers may be increased
             LOGGER.warning(
                 'The cache is setting, url is: {}'.format(urlpath))
             LOGGER.warning(
                 'The cache is setting key is: {}'.format(cache_key))
         except APIError as err:
             error_once_only(self.request, err)
         except Exception as err:
             error_once_only(self.request, 'Unknown Error. {}'.format(err))
     return apps_list
Exemplo n.º 13
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        api = API(self.request.session.get('obp'))
        urlpath = '/management/method_routings?active=true'
        method_routings = []
        try:
            response = api.get(urlpath)
            if 'code' in response and response['code'] >= 400:
                error_once_only(self.request, response['message'])
            else:
                method_routings = response['method_routings']
        except APIError as err:
            error_once_only(
                self.request,
                Exception(
                    "OBP-API server is not running or do not response properly. "
                    "Please check OBP-API server.    "
                    "Details: " + str(err)))
        except BaseException as err:
            error_once_only(self.request,
                            (Exception("Unknown Error. Details:" + str(err))))
        else:
            for i in range(len(method_routings)):
                method_routings[i]['parameters'] = json.dumps(
                    method_routings[i]['parameters'])

            context.update({
                'method_routings':
                method_routings,
                "methodSwaggerUrl":
                json.dumps(
                    '{}/message-docs/rest_vMar2019/swagger2.0?functions'.
                    format(settings.API_ROOT))
            })
        return context
Exemplo n.º 14
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        consumers = []
        sorted_consumers=[]
        api = API(self.request.session.get('obp'))
        try:
            urlpath = '/management/consumers'
            consumers = api.get(urlpath)
            if 'code' in consumers and consumers['code']==403:
                messages.error(self.request, consumers['message'])
            else:
                consumers = FilterEnabled(context, self.request.GET)\
                        .apply(consumers['consumers'])
                consumers = FilterAppType(context, self.request.GET)\
                    .apply(consumers)
                consumers = FilterTime(context, self.request.GET, 'created')\
                    .apply(consumers)
                consumers = self.scrub(consumers)
                sorted_consumers = sorted(
                    consumers, key=lambda consumer: consumer['created'], reverse=True)

                context.update({
                    'consumers': sorted_consumers,
                    'statistics': self.compile_statistics(consumers),
                })
        except APIError as err:
            messages.error(self.request, err)

        return context
Exemplo n.º 15
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        entitlement_requests = []
        api = API(self.request.session.get('obp'))
        try:
            urlpath = '/entitlement-requests'
            entitlement_requests = api.get(urlpath)
            if 'code' in entitlement_requests and entitlement_requests[
                    'code'] >= 400:
                messages.error(self.request, entitlement_requests['message'])
                entitlement_requests = []
            else:
                entitlement_requests = entitlement_requests[
                    'entitlement_requests']
                entitlement_requests = FilterTime(context, self.request.GET, 'created') \
                    .apply(entitlement_requests)
                entitlement_requests = self.scrub(entitlement_requests)
                entitlement_requests = sorted(entitlement_requests,
                                              key=lambda k: k['created'],
                                              reverse=True)
        except APIError as err:
            messages.error(self.request, err)
        except:
            messages.error(self.request, "Unknown Error")

        context.update({
            'entitlementrequests': entitlement_requests,
        })
        return context
Exemplo n.º 16
0
    def get_users_cansearchwarehouse(self):
        users = []
        api = API(self.request.session.get('obp'))
        try:
            urlpath = '/users'
            users = api.get(urlpath)
        except APIError as err:
            error_once_only(self.request, err)

        users_with_cansearchwarehouse = []
        email_with_cansearchwarehouse = []

        try:
            for user in users['users']:
                for entitlement in user['entitlements']['list']:
                    if 'CanSearchWarehouse' in entitlement['role_name']:
                        users_with_cansearchwarehouse.append(user["username"])
                        email_with_cansearchwarehouse.append(user["email"])
        # fail gracefully in case API provides new structure
        except KeyError as err:
            messages.error(self.request, 'KeyError: {}'.format(err))

        user_email_cansearchwarehouse = dict(zip(users_with_cansearchwarehouse, email_with_cansearchwarehouse))
        number_of_users_with_cansearchwarehouse = len(user_email_cansearchwarehouse)
        return user_email_cansearchwarehouse, number_of_users_with_cansearchwarehouse
Exemplo n.º 17
0
def api_user_id(request):
    """Returns the API user id of the logged-in user"""
    user_id = 'not authenticated'
    get_current_user_api_url = '/users/current'
    #Here we can not get the user from obp-api side, so we use the django auth user id here.
    cache_key_django_user_id = request.session._session.get('_auth_user_id')
    cache_key = '{},{},{}'.format('api_user_id', get_current_user_api_url,
                                  cache_key_django_user_id)
    apicaches = None
    try:
        apicaches = cache.get(cache_key)
    except Exception as err:
        apicaches = None
    if not apicaches is None:
        return apicaches
    else:
        if request.user.is_authenticated:
            try:
                api = API(request.session.get('obp'))
                data = api.get('/users/current')
                user_id = data['user_id']
                apicaches = cache.set(cache_key, {'API_USER_ID': user_id})
                LOGGER.warning('The cache is setting try to api_user_id:')
                LOGGER.warning(
                    'The cache is setting key is: {}'.format(cache_key))
            except APIError as err:
                messages.error(request, err)
            except Exception as err:
                messages.error(request, err)
        return {'API_USER_ID': user_id}
Exemplo n.º 18
0
    def get_users_rolenames(self, context):
        users = []
        api = API(self.request.session.get('obp'))
        try:
            urlpath = '/users'
            users = api.get(urlpath)
        except APIError as err:
            messages.error(self.request, err)
            return [], []

        role_names = []
        try:
            for user in users['users']:
                for entitlement in user['entitlements']['list']:
                    role_names.append(entitlement['role_name'])
        # fail gracefully in case API provides new structure
        except KeyError as err:
            messages.error(self.request, 'KeyError: {}'.format(err))
            return [], []

        role_names = list(set(role_names))
        role_names.sort()
        users = FilterRoleName(context, self.request.GET)\
            .apply(users['users'])
        users = FilterEmail(context, self.request.GET)\
            .apply(users)
        users = FilterUsername(context, self.request.GET)\
            .apply(users)
        return users, role_names
Exemplo n.º 19
0
    def get_top_consumers(self, cleaned_data, from_date, to_date):
        top_consumers = []
        form = self.get_form()
        if cleaned_data.get('include_obp_apps'):
            urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}'.format(
                from_date, to_date)
            api = API(self.request.session.get('obp'))
            try:
                top_consumers = api.get(urlpath)
                if top_consumers is not None and 'code' in top_consumers and top_consumers[
                        'code'] == 403:
                    error_once_only(self.request, top_consumers['message'])
                    top_consumers = []
                else:
                    top_consumers = top_consumers['top_consumers']
            except APIError as err:
                error_once_only(self.request, err)
            except Exception as err:
                error_once_only(self.request, 'Unknown Error. {}'.format(err))
        else:
            urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
                from_date, to_date, ",".join(EXCLUDE_APPS),
                ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
            api = API(self.request.session.get('obp'))
            try:
                top_consumers = api.get(urlpath)
                if top_consumers is not None and 'code' in top_consumers and top_consumers[
                        'code'] == 403:
                    error_once_only(self.request, top_consumers['message'])
                    top_consumers = []
                else:
                    top_consumers = top_consumers['top_consumers']
            except APIError as err:
                error_once_only(self.request, err)
            except Exception as err:
                error_once_only(self.request, 'Unknown Error. {}'.format(err))
        for consumer in top_consumers:
            if consumer['app_name'] == "":
                top_consumers.remove(consumer)

        top_consumers = top_consumers[:10]
        top_consumers = reversed(top_consumers)

        return top_consumers
Exemplo n.º 20
0
    def get_aggregate_metrics(self, cleaned_data, from_date, to_date):
        """
        Gets the metrics from the API, using given cleaned form data.
        """
        form = self.get_form()
        metrics = []
        api_calls_total = 0
        average_response_time = 0

        # If Include OBP Apps is selected
        if cleaned_data.get('include_obp_apps'):
            urlpath = '/management/aggregate-metrics?from_date={}&to_date={}'.format(
                from_date, to_date)
            api = API(self.request.session.get('obp'))
            try:
                metrics = api.get(urlpath)
                # metrics = self.to_django(metrics)
                api_calls_total = metrics[0]["count"]
                average_response_time = metrics[0]["average_response_time"]
            except APIError as err:
                messages.error(self.request, err)

        else:
            urlpath = '/management/aggregate-metrics?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
                from_date, to_date, ",".join(EXCLUDE_APPS),
                ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
            api = API(self.request.session.get('obp'))
            try:
                metrics = api.get(urlpath)
                # metrics = self.to_django(metrics)
                api_calls_total = metrics[0]["count"]
                average_response_time = metrics[0]["average_response_time"]
            except APIError as err:
                messages.error(self.request, err)

        to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
        from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)
        number_of_days = abs((to_date - from_date).days)
        average_calls_per_day = api_calls_total / number_of_days

        return api_calls_total, average_response_time, int(
            average_calls_per_day)
Exemplo n.º 21
0
def api_username(request):
    """Returns the API username of the logged-in user"""
    username = '******'
    if request.user.is_authenticated:
        try:
            api = API(request.session.get('obp'))
            data = api.get('/users/current')
            username = data['username']
        except APIError as err:
            messages.error(request, err)
    return {'API_USERNAME': username}
Exemplo n.º 22
0
 def get_banks(self):
     api = API(self.request.session.get('obp'))
     try:
         urlpath = '/banks'
         result = api.get(urlpath)
         if 'banks' in result:
             return [bank['id'] for bank in result['banks']]
         else:
             return []
     except APIError as err:
         messages.error(self.request, err)
         return []
Exemplo n.º 23
0
class DetailView(LoginRequiredMixin, FormView):
    """Detail view for a user"""
    form_class = AddEntitlementForm
    template_name = 'users/detail.html'

    def dispatch(self, request, *args, **kwargs):
        self.api = API(request.session.get('obp'))
        return super(DetailView, self).dispatch(request, *args, **kwargs)

    def get_form(self, *args, **kwargs):
        form = super(DetailView, self).get_form(*args, **kwargs)
        try:
            form.fields['bank_id'].choices = self.api.get_bank_id_choices()
        except APIError as err:
            messages.error(self.request, err)
        return form

    def form_valid(self, form):
        """Posts entitlement data to API"""
        try:
            data = form.cleaned_data
            urlpath = '/users/{}/entitlements'.format(data['user_id'])
            payload = {
                'bank_id': data['bank_id'],
                'role_name': data['role_name'],
            }
            entitlement = self.api.post(urlpath, payload=payload)
        except APIError as err:
            messages.error(self.request, err)
            return super(DetailView, self).form_invalid(form)

        msg = 'Entitlement with role {} has been added.'.format(
            entitlement['role_name'])
        messages.success(self.request, msg)
        self.success_url = self.request.path
        return super(DetailView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(**kwargs)
        # NOTE: assuming there is just one user with that email address
        # The API needs a call 'get user by id'!
        user = {}
        try:
            urlpath = '/users/user_id/{}'.format(self.kwargs['user_id'])
            user = self.api.get(urlpath)
            context['form'].fields['user_id'].initial = user['user_id']
        except APIError as err:
            messages.error(self.request, err)

        context.update({
            'apiuser': user,  # 'user' is logged-in user in template context
        })
        return context
Exemplo n.º 24
0
def api_user_id(request):
    """Returns the API user id of the logged-in user"""
    user_id = 'not authenticated'
    if request.user.is_authenticated:
        try:
            api = API(request.session.get('obp'))
            data = api.get('/users/current')
            user_id = data['user_id']
        except APIError as err:
            messages.error(request, err)
        except Exception as err:
            messages.error(request, err)
    return {'API_USER_ID': user_id}
Exemplo n.º 25
0
    def get_aggregate_metrics(self,
                              from_date,
                              to_date,
                              is_included_obp_apps,
                              only_show_api_explorer_metrics=False):
        """
        Gets the metrics from the API, using given parameters,
        There are different use cases, so we accept different parameters.
        only_show_api_explorer_metrics has the default value False, because it is just used for app = API_Explorer. 
        """
        try:
            api_calls_total = 0
            average_response_time = 0
            urlpath = '/management/aggregate-metrics'
            if only_show_api_explorer_metrics:
                urlpath = urlpath + '?from_date={}&to_date={}&app_name={}'.format(
                    from_date, to_date, API_EXPLORER_APP_NAME)
            elif ((not only_show_api_explorer_metrics)
                  and (not is_included_obp_apps)):
                urlpath = urlpath + '?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
                    from_date, to_date, ",".join(EXCLUDE_APPS),
                    ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
            else:
                urlpath = urlpath + '?from_date={}&to_date={}'.format(
                    from_date, to_date)
            cache_key = get_cache_key_for_current_call(self.request, urlpath)
            apicaches = None
            try:
                apicaches = cache.get(cache_key)
            except Exception as err:
                apicaches = None
            if not apicaches is None:
                metrics = apicaches
            else:
                api = API(self.request.session.get('obp'))
                metrics = api.get(urlpath)
                apicaches = cache.set(cache_key, metrics)
                LOGGER.warning(
                    'The cache is setting, url is: {}'.format(urlpath))
                LOGGER.warning(
                    'The cache is setting key is: {}'.format(cache_key))

            api_calls_total, average_calls_per_day, average_response_time = self.get_internal_api_call_metrics(
                api_calls_total, average_response_time, cache_key, from_date,
                metrics, to_date, urlpath)
            return api_calls_total, average_response_time, int(
                average_calls_per_day)
        except APIError as err:
            error_once_only(self.request, err)
        except Exception as err:
            error_once_only(self.request, 'Unknown Error. {}'.format(err))
Exemplo n.º 26
0
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        api = API(self.request.session.get('obp'))
        try:
            urlpath = '/config'
            config = api.get(urlpath)
        except APIError as err:
            messages.error(self.request, err)
            config = {}

        context.update({
            'config_json': json.dumps(config, indent=4),
        })
        return context
Exemplo n.º 27
0
    def get_top_apps_using_warehouse(self, from_date, to_date):
        form = self.get_form()
        top_apps_using_warehouse = []

        urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&implemented_by_partial_function={}'.format(
            from_date, to_date, "elasticSearchWarehouse")
        api = API(self.request.session.get('obp'))
        try:
            top_apps_using_warehouse = api.get(urlpath)
            top_apps_using_warehouse = top_apps_using_warehouse["top_consumers"][:2]
        except APIError as err:
            error_once_only(self.request, err)

        return top_apps_using_warehouse
Exemplo n.º 28
0
 def get_metrics(self, cleaned_data):
     """
     Gets the metrics from the API, using given cleaned form data.
     """
     metrics = []
     params = self.to_api(cleaned_data)
     urlpath = '{}?{}'.format(self.api_urlpath, params)
     api = API(self.request.session.get('obp'))
     try:
         metrics = api.get(urlpath)
         metrics = self.to_django(metrics['metrics'])
     except APIError as err:
         error_once_only(self.request, err)
     return metrics
Exemplo n.º 29
0
    def get_active_apps(self, is_included_obp_apps, from_date, to_date):
        """
         Gets the metrics from the API, using given parameters,
         There are different use cases, so we accept different parameters.
         only_show_api_explorer_metrics has the default value False, because it is just used for app = API_Explorer. 
         """
        apps = []
        form = self.get_form()
        active_apps_list = []
        if is_included_obp_apps:
            urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}'.format(
                from_date, to_date)
            api = API(self.request.session.get('obp'))
            try:
                apps = api.get(urlpath)
                if apps is not None and 'code' in apps and apps['code'] == 403:
                    error_once_only(self.request, apps['message'])
                else:
                    active_apps_list = list(apps)
            except APIError as err:
                error_once_only(self.request, err)
            except Exception as err:
                error_once_only(self.request, 'Unknown Error. {}'.format(err))
        else:
            urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
                from_date, to_date, ",".join(EXCLUDE_APPS),
                ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
            api = API(self.request.session.get('obp'))
            try:
                apps = api.get(urlpath)
                active_apps_list = list(apps['top_consumers'])
            except APIError as err:
                error_once_only(self.request, err)
            except Exception as err:
                error_once_only(self.request, 'Unknown Error. {}'.format(err))

        return active_apps_list
Exemplo n.º 30
0
    def get_total_number_of_apps(self, cleaned_data, from_date, to_date):
        apps = []
        apps_list = []
        from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)
        to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
        urlpath = '/management/consumers'
        api = API(self.request.session.get('obp'))
        try:
            apps = api.get(urlpath)
            apps_list = apps["list"]
        except APIError as err:
            messages.error(self.request, err)

        for app in apps_list:
            app_created_date = datetime.datetime.strptime(
                app["created"], '%Y-%m-%dT%H:%M:%SZ')

            if app_created_date < from_date and app_created_date > to_date:
                apps_list.remove(app)

        app_names = []

        for apps in apps_list:
            app_names.append(apps["app_name"])

        # If include OBP Apps is selected
        if cleaned_data.get('include_obp_apps'):
            app_names = app_names
        else:
            for app in app_names:
                if app in EXCLUDE_APPS:
                    app_names.remove(app)

        app_names = list(filter(None, app_names))

        unique_app_names = list(set(app_names))

        developer_emails = []
        for apps in apps_list:
            developer_emails.append(apps["developer_email"])

        developer_emails = list(filter(None, developer_emails))
        unique_developer_emails = list(set(developer_emails))

        number_of_apps_with_unique_app_name = len(unique_app_names)
        number_of_apps_with_unique_developer_email = len(
            unique_developer_emails)

        return unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email