feature/clean the get_aggregate_metrics method and set the proper cache for it.

This commit is contained in:
Hongwei 2020-10-22 14:19:16 +02:00
parent 62189a95fd
commit 33ec1d14c2

View File

@ -9,11 +9,13 @@ import operator
from datetime import datetime, timedelta
from django.conf import settings
from apimanager.settings import API_HOST, EXCLUDE_APPS, EXCLUDE_FUNCTIONS, EXCLUDE_URL_PATTERN, API_EXPLORER_APP_NAME, API_DATEFORMAT,CACHE_DATEFORMAT,CACHE_TIME,CACHE_TIME_SHORT
from apimanager.settings import API_HOST, EXCLUDE_APPS, EXCLUDE_FUNCTIONS, EXCLUDE_URL_PATTERN, API_EXPLORER_APP_NAME, API_DATEFORMAT
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
from obp.api import API, APIError
from obp.api import API, APIError, LOGGER
from utils.ErrorHandler import error_once_only
from utils.utils import get_cache_key_for_current_call
from .forms import APIMetricsForm, ConnectorMetricsForm, MetricsSummaryForm, CustomSummaryForm
from pylab import *
from django.core.cache import cache
@ -29,19 +31,6 @@ import base64
import matplotlib.pyplot as plt
import statistics
def error_once_only(request, err):
"""
Just add the error once
:param request:
:param err:
:return:
"""
storage = messages.get_messages(request)
if str(err) not in [str(m.message) for m in storage]:
messages.error(request, err)
def get_random_color(to_hash):
hashed = str(int(hashlib.md5(to_hash.encode('utf-8')).hexdigest(), 16))
r = int(hashed[0:3]) % 255
@ -148,7 +137,7 @@ class MetricsView(LoginRequiredMixin, TemplateView):
except KeyError as err:
error_once_only(self.request, metrics['message'])
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
return metrics
def get_context_data(self, **kwargs):
@ -246,87 +235,54 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
return params
def get_aggregate_metrics(self, cleaned_data, from_date, to_date):
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 cleaned form data.
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.
"""
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)
if metrics is not None and 'code' in metrics and metrics['code']==403:
error_once_only(self.request, metrics['message'])
# metrics = self.to_django(metrics)
else:
api_calls_total = metrics[0]["count"]
average_response_time = metrics[0]["average_response_time"]
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
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 = '/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'))
urlpath = urlpath + '?from_date={}&to_date={}'.format(from_date, to_date)
cache_key = get_cache_key_for_current_call(self.request, urlpath)
try:
apicaches = None
try:
metrics = api.get(urlpath)
if metrics is not None and 'code' in metrics and metrics['code']==403:
error_once_only(self.request, metrics['message'])
# metrics = self.to_django(metrics)
else:
api_calls_total = metrics[0]["count"]
average_response_time = metrics[0]["average_response_time"]
except APIError as err:
error_once_only(self.request, err)
apicaches = cache.get(cache_key)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
apicaches = None
if not apicaches is None:
api_calls_total = apicaches[0]["count"]
average_response_time = apicaches[0]["average_response_time"]
else:
api = API(self.request.session.get('obp'))
metrics = api.get(urlpath)
api_calls_total = metrics[0]["count"]
average_response_time = metrics[0]["average_response_time"]
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))
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
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(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_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)
if metrics is not None and 'code' in metrics and metrics['code']==403:
error_once_only(self.request, metrics['message'])
else:
api_calls_total = metrics[0]["count"]
average_response_time = metrics[0]["average_response_time"]
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, "Unknown Error. {}".format(type(err).__name__))
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)
return self.get_aggregate_metrics(from_date, to_date, True, True)
def get_active_apps(self, cleaned_data, from_date, to_date):
apps = []
@ -344,7 +300,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
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))
@ -358,7 +314,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
return active_apps_list
@ -368,11 +324,12 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
apps_list = []
from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)
to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
urlpath='/management/consumers'
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('consumers,{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token']))
apicaches=cache.get(cache_key)
except Exception as err:
apicaches=None
if not apicaches is None:
@ -384,11 +341,13 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
error_once_only(self.request, apps['message'])
else:
apps_list = apps["consumers"]
cache.set('consumers,{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token']),apps_list)
cache.set(cache_key, apps_list)
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(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
for app in apps_list:
@ -426,117 +385,55 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
return unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email
def calls_per_delta(self, cleaned_data, from_date, to_date, **delta ):
def calls_per_delta(self, is_included_obp_apps, from_date_string, to_date_string, **delta ):
"""
Prints how many calls were made in total per given delta
return how many calls were made in total per given delta.
Here we need to convert date_string to datetime object, and calculate the dates.
"""
form = self.get_form()
to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
# we need to convert string to datetime object, then we can calculate the date
from_datetime_object = datetime.datetime.strptime(from_date_string, API_DATEFORMAT)
to_datetime_object = datetime.datetime.strptime(to_date_string , API_DATEFORMAT)
time_delta_in_loop = from_datetime_object + timedelta(**delta)
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 = []
while time_delta_in_loop <= to_datetime_object:
try:
# here we need to first convert datetime object to String
form_date= from_datetime_object.strftime(API_DATEFORMAT)
to_date= time_delta_in_loop.strftime(API_DATEFORMAT)
aggregate_metrics = self.get_aggregate_metrics(form_date, to_date, is_included_obp_apps)
result = aggregate_metrics[0]
result_list_pure.append(result)
result_list.append('{} - {} # {}'.format(from_datetime_object, time_delta_in_loop, result))
date_list.append(from_datetime_object)
except Exception as err:
break
error_once_only(self.request, 'Unknown Error. {}'.format(err))
from_datetime_object = time_delta_in_loop
time_delta_in_loop = time_delta_in_loop + timedelta(**delta)
# 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))
apicaches=None
try:
apicaches=cache.get('aggregate-metrics,{},{},{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token'],date_from.strftime(CACHE_DATEFORMAT), date_to.strftime(CACHE_DATEFORMAT)))
except Exception as err:
apicaches=None
if not apicaches is None:
result = apicaches
result_list_pure.append(result)
result_list.append('{} - {} # {}'.format(date_from, date_to, result))
sum += result
else:
api = API(self.request.session.get('obp'))
try:
metrics = api.get(urlpath)
if metrics is not None and 'code' in metrics and metrics['code'] == 403:
error_once_only(self.request, metrics['message'])
if(metrics['message'].startswith('OBP-20006')):
break
else:
result = metrics[0]["count"]
result_list_pure.append(result)
result_list.append('{} - {} # {}'.format(date_from, date_to, result))
sum += result
cache.set('aggregate-metrics,{},{},{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token'],date_from.strftime(CACHE_DATEFORMAT), date_to.strftime(CACHE_DATEFORMAT)),result,CACHE_TIME if date_from.minute==0 and date_from.second==0 and date_to.minute==0 and date_to.second==0 else CACHE_TIME_SHORT)
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
return (result_list, result_list_pure, date_list)
date_list.append(date_from)
date_from = date_to
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))
apicaches=None
try:
apicaches=cache.get('aggregate-metrics,{},{},{},{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token'],date_from.strftime(CACHE_DATEFORMAT), date_to.strftime(CACHE_DATEFORMAT),",".join(EXCLUDE_APPS)))
except Exception as err:
apicaches=None
if not apicaches is None:
result = apicaches
result_list_pure.append(result)
result_list.append('{} - {} # {}'.format(date_from, date_to, result))
sum += result
else:
api = API(self.request.session.get('obp'))
try:
metrics = api.get(urlpath)
if metrics is not None and 'code' in metrics and metrics['code'] == 403:
error_once_only(self.request, metrics['message'])
if(metrics['message'].startswith('OBP-20006')):
break
else:
result = metrics[0]["count"]
result_list_pure.append(result)
result_list.append('{} - {} # {}'.format(date_from, date_to, result))
sum += result
cache.set('aggregate-metrics,{},{},{},{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token'],date_from.strftime(CACHE_DATEFORMAT), date_to.strftime(CACHE_DATEFORMAT),",".join(EXCLUDE_APPS)),result,CACHE_TIME if date_from.minute==0 and date_from.second==0 and date_to.minute==0 and date_to.second==0 else CACHE_TIME_SHORT)
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
date_list.append(date_from)
date_from = date_to
date_to = date_to + timedelta(**delta)
return result_list, result_list_pure, date_list
def calls_per_month(self, cleaned_data, from_date, to_date):
def calls_per_month(self, is_included_obp_apps, from_date, to_date):
"""
Convenience function to print number of calls per month
It is actually 30 days, not a month
"""
calls_per_month_list, calls_per_month, month_list = self.calls_per_delta(cleaned_data, from_date, to_date, days=30)
calls_per_month_list, calls_per_month, month_list = self.calls_per_delta(is_included_obp_apps, from_date, to_date, days=30)
return calls_per_month_list, calls_per_month, month_list
def calls_per_day(self, cleaned_data, from_date, to_date):
def calls_per_day(self, is_included_obp_apps, from_date, to_date):
"""
Convenience function to print number of calls per day
"""
index = []
calls_per_day, calls_per_day_pure, date_list = self.calls_per_delta(cleaned_data, from_date, to_date, days=1)
calls_per_day, calls_per_day_pure, date_list = self.calls_per_delta(is_included_obp_apps, from_date, to_date, days=1)
if len(calls_per_day) >= 90:
calls_per_day = calls_per_day[-90:]
@ -550,18 +447,18 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
return calls_per_day, calls_per_day_pure, date_list
def calls_per_half_day(self, cleaned_data, from_date):
def calls_per_half_day(self, is_included_obp_apps, from_date):
"""
Convenience function to print number of calls per half day
"""
return self.calls_per_delta(cleaned_data, from_date, hours=12)
return self.calls_per_delta(is_included_obp_apps, from_date, hours=12)
def calls_per_hour(self, cleaned_data, from_date, to_date):
def calls_per_hour(self, is_included_obp_apps, from_date, to_date):
"""
Convenience function to print number of calls per hour
"""
calls_per_hour_list, calls_per_hour, hour_list = self.calls_per_delta(cleaned_data, from_date, to_date, hours=1)
calls_per_hour_list, calls_per_hour, hour_list = self.calls_per_delta(is_included_obp_apps, from_date, to_date, hours=1)
return calls_per_hour_list, calls_per_hour, hour_list
def plot_line_chart(self, plot_data, date_month_list, period):
@ -683,7 +580,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
else:
try:
@ -696,7 +593,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except KeyError as err:
messages.error(self.request, 'KeyError: {}'.format(err))
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
user_email_cansearchwarehouse = dict(zip(users_with_cansearchwarehouse, email_with_cansearchwarehouse))
number_of_users_with_cansearchwarehouse = len(user_email_cansearchwarehouse)
@ -718,7 +615,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(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))
@ -733,7 +630,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
for api in top_apis:
if api['Implemented_by_partial_function'] == "":
@ -762,7 +659,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
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))
@ -777,7 +674,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
for consumer in top_consumers:
if consumer['app_name'] == "":
top_consumers.remove(consumer)
@ -797,7 +694,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
return top_warehouse_calls
def get_top_apps_using_warehouse(self, from_date, to_date):
@ -817,7 +714,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
return top_apps_using_warehouse
@ -830,9 +727,10 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
apps_list = []
urlpath_consumers = '/management/consumers'
cache_key = get_cache_key_for_current_call(self.request, urlpath_consumers)
apicaches=None
try:
apicaches=cache.get('consumers,{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token']))
apicaches=cache.get(cache_key)
except Exception as err:
apicaches=None
if not apicaches is None:
@ -845,11 +743,13 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
error_once_only(self.request, apps['message'])
else:
apps_list = apps["consumers"]
cache.set('consumers,{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token']),apps_list)
cache.set(cache_key, apps_list)
LOGGER.warning('The cache is setting, url is: {}'.format(urlpath_consumers))
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(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
for app in apps_list:
created_date = datetime.datetime.strptime(app['created'], '%Y-%m-%dT%H:%M:%SZ')
@ -865,11 +765,12 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
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')
cache_key = get_cache_key_for_current_call(self.request, urlpath_metrics)
api = API(self.request.session.get('obp'))
try:
apicaches=None
try:
apicaches=cache.get('metrics,{},{},{},{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token'],app['consumer_id'],strfrom_date.strftime(CACHE_DATEFORMAT), strto_date.strftime(CACHE_DATEFORMAT)))
apicaches=cache.get(cache_key)
except Exception as err:
apicaches=None
metrics=[]
@ -885,7 +786,9 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
metrics = []
else:
metrics = list(metrics['metrics'])
cache.set('metrics,{},{},{},{}'.format(self.request.session.get('obp')['authenticator_kwargs']['token'],app['consumer_id'],strfrom_date.strftime(CACHE_DATEFORMAT), strto_date.strftime(CACHE_DATEFORMAT)),metrics,CACHE_TIME if strfrom_date.minute==0 and strfrom_date.second==0 and strto_date.minute==0 and strto_date.second==0 else CACHE_TIME_SHORT)
cache.set(cache_key, metrics)
LOGGER.warning('The cache is setting, url is: {}'.format(urlpath_metrics))
LOGGER.warning('The cache is setting key is: {}'.format(cache_key))
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())
@ -894,7 +797,7 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
except APIError as err:
error_once_only(self.request, err)
except Exception as err:
error_once_only(self.request, 'Unknown Error. {}'.format(type(err).__name__))
error_once_only(self.request, 'Unknown Error. {}'.format(err))
if times_to_first_call:
median = statistics.median(times_to_first_call)
@ -918,15 +821,16 @@ class MetricsSummaryView(LoginRequiredMixin, TemplateView):
user_email_cansearchwarehouse, number_of_users_with_cansearchwarehouse = self.get_users_cansearchwarehouse()
median_time_to_first_api_call = self.median_time_to_first_api_call(from_date, to_date)
if form.is_valid():
is_included_obp_apps = form.cleaned_data.get('include_obp_apps')
top_apis = self.get_top_apis(form.cleaned_data, from_date, to_date)
top_apis_bar_chart = self.plot_bar_chart(top_apis)
top_consumers=self.get_top_consumers(form.cleaned_data, from_date, to_date)
top_consumers_bar_chart = self.plot_topconsumer_bar_chart(top_consumers)
top_warehouse_calls = self.get_top_warehouse_calls(form.cleaned_data, from_date, to_date)
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(form.cleaned_data, from_date, to_date)
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(from_date, to_date, is_included_obp_apps)
calls_by_api_explorer, average_response_time_api_explorer, average_calls_per_day_api_explorer = self.get_aggregate_metrics_api_explorer(from_date, to_date)
#calls_per_month_list, calls_per_month, date_list = self.calls_per_month(form.cleaned_data, from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(form.cleaned_data, from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date)
per_day_chart = self.plot_line_chart(calls_per_day, date_list, "day")
unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email = self.get_total_number_of_apps(form.cleaned_data, from_date, to_date)
active_apps_list = self.get_active_apps(form.cleaned_data, from_date, to_date)
@ -963,7 +867,7 @@ class YearlySummaryView(MetricsSummaryView):
def get_context_data(self, **kwargs):
form = self.get_form()
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d %H:%M:%S')
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d')
to_date = to_date.strftime(API_DATEFORMAT)
from_date = (datetime.datetime.strptime(to_date, API_DATEFORMAT) - timedelta(365)).strftime(API_DATEFORMAT)
@ -974,9 +878,10 @@ class YearlySummaryView(MetricsSummaryView):
median_time_to_first_api_call = self.median_time_to_first_api_call(from_date, to_date)
if form.is_valid():
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(form.cleaned_data, from_date, to_date)
is_included_obp_apps = form.cleaned_data.get('include_obp_apps')
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(from_date, to_date, is_included_obp_apps)
calls_by_api_explorer, average_response_time_api_explorer, average_calls_per_day_api_explorer = self.get_aggregate_metrics_api_explorer(from_date, to_date)
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(form.cleaned_data, from_date, to_date)
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(is_included_obp_apps, from_date, to_date)
per_month_chart = self.plot_line_chart(calls_per_month, month_list, "month")
unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email = self.get_total_number_of_apps(form.cleaned_data, from_date, to_date)
active_apps_names = self.get_active_apps(form.cleaned_data, from_date, to_date)
@ -1019,7 +924,7 @@ class QuarterlySummaryView(MetricsSummaryView):
def get_context_data(self, **kwargs):
form = self.get_form()
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d %H:%M:%S')
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d')
to_date = to_date.strftime(API_DATEFORMAT)
from_date = (datetime.datetime.strptime(to_date, API_DATEFORMAT) - timedelta(90)).strftime(API_DATEFORMAT)
@ -1030,10 +935,11 @@ class QuarterlySummaryView(MetricsSummaryView):
median_time_to_first_api_call = self.median_time_to_first_api_call(from_date, to_date)
if form.is_valid():
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(form.cleaned_data, from_date, to_date)
is_included_obp_apps = form.cleaned_data.get('include_obp_apps')
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(from_date, to_date, is_included_obp_apps)
calls_by_api_explorer, average_response_time_api_explorer, average_calls_per_day_api_explorer = self.get_aggregate_metrics_api_explorer(from_date, to_date)
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(form.cleaned_data, from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(form.cleaned_data, from_date, to_date)
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(is_included_obp_apps, from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date)
per_month_chart = self.plot_line_chart(calls_per_month, month_list, 'month')
per_day_chart = self.plot_line_chart(calls_per_day, date_list, 'day')
unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email = self.get_total_number_of_apps(form.cleaned_data, from_date, to_date)
@ -1079,7 +985,7 @@ class WeeklySummaryView(MetricsSummaryView):
def get_context_data(self, **kwargs):
form = self.get_form()
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d %H:%M:%S')
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d')
to_date = to_date.strftime(API_DATEFORMAT)
from_date = (datetime.datetime.strptime(to_date, API_DATEFORMAT) - timedelta(7)).strftime(API_DATEFORMAT)
@ -1091,9 +997,10 @@ class WeeklySummaryView(MetricsSummaryView):
median_time_to_first_api_call = self.median_time_to_first_api_call(from_date, to_date)
if form.is_valid():
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(form.cleaned_data, from_date, to_date)
is_included_obp_apps = form.cleaned_data.get('include_obp_apps')
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(from_date, to_date, is_included_obp_apps)
calls_by_api_explorer, average_response_time_api_explorer, average_calls_per_day_api_explorer = self.get_aggregate_metrics_api_explorer(from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(form.cleaned_data, from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date)
per_day_chart = self.plot_line_chart(calls_per_day, date_list, 'day')
unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email = self.get_total_number_of_apps(form.cleaned_data, from_date, to_date)
active_apps_names = self.get_active_apps(form.cleaned_data, from_date, to_date)
@ -1137,7 +1044,7 @@ class DailySummaryView(MetricsSummaryView):
def get_context_data(self, **kwargs):
form = self.get_form()
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d %H:%M:%S')
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d')
to_date = to_date.strftime(API_DATEFORMAT)
from_date = (datetime.datetime.strptime(to_date, API_DATEFORMAT) - timedelta(1)).strftime(API_DATEFORMAT)
@ -1148,9 +1055,10 @@ class DailySummaryView(MetricsSummaryView):
median_time_to_first_api_call = self.median_time_to_first_api_call(from_date, to_date)
if form.is_valid():
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(form.cleaned_data, from_date, to_date)
is_included_obp_apps = form.cleaned_data.get('include_obp_apps')
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(from_date, to_date, is_included_obp_apps)
calls_by_api_explorer, average_response_time_api_explorer, average_calls_per_day_api_explorer = self.get_aggregate_metrics_api_explorer(from_date, to_date)
calls_per_hour_list, calls_per_hour, hour_list = self.calls_per_hour(form.cleaned_data, from_date, to_date)
calls_per_hour_list, calls_per_hour, hour_list = self.calls_per_hour(is_included_obp_apps, from_date, to_date)
per_hour_chart = self.plot_line_chart(calls_per_hour, hour_list, 'hour')
# calls_per_hour_list, calls_per_hour = self.calls_per_hour(form.cleaned_data, from_date)
# per_hour_chart = self.get_per_hour_chart(form.cleaned_data, from_date)
@ -1200,10 +1108,10 @@ class CustomSummaryView(MetricsSummaryView):
def get_context_data(self, **kwargs):
form = self.get_form()
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d %H:%M:%S')
to_date = datetime.datetime.strptime(form.data['to_date'], '%Y-%m-%d')
to_date = to_date.strftime(API_DATEFORMAT)
from_date = datetime.datetime.strptime(form.data['from_date_custom'], '%Y-%m-%d %H:%M:%S')
from_date = datetime.datetime.strptime(form.data['from_date_custom'], '%Y-%m-%d')
from_date = from_date.strftime(API_DATEFORMAT)
context = super(MetricsSummaryView, self).get_context_data(**kwargs)
api_host_name = API_HOST
@ -1214,9 +1122,10 @@ class CustomSummaryView(MetricsSummaryView):
median_time_to_first_api_call = self.median_time_to_first_api_call(from_date, to_date)
if form.is_valid():
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(form.cleaned_data, from_date, to_date)
is_included_obp_apps = form.cleaned_data.get('include_obp_apps')
api_calls, average_response_time, average_calls_per_day = self.get_aggregate_metrics(from_date, to_date, is_included_obp_apps)
calls_by_api_explorer, average_response_time_api_explorer, average_calls_per_day_api_explorer = self.get_aggregate_metrics_api_explorer(from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(form.cleaned_data, from_date, to_date)
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date)
per_day_chart = self.plot_line_chart(calls_per_day, date_list, 'day')
unique_app_names, number_of_apps_with_unique_app_name, number_of_apps_with_unique_developer_email = self.get_total_number_of_apps(form.cleaned_data, from_date, to_date)
active_apps_names = self.get_active_apps(form.cleaned_data, from_date, to_date)