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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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}
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
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
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)
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}
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 []
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
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}
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))
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
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
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
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
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