diff --git a/README.md b/README.md index 31aad70..e89a89f 100644 --- a/README.md +++ b/README.md @@ -227,9 +227,9 @@ EXCLUDE_URL_PATTERN = [] API_EXPLORER_APP_NAME = 'xxx' #Map Java: yyyy-MM-dd'T'HH:mm'Z' -API_DATE_TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ' +API_DATE_FORMAT_WITH_SECONDS = '%Y-%m-%dT%H:%M:%SZ' #Map Java: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' -API_DATE_FORMAT = '%Y-%m-%dT%H:%M:%S.000Z' +API_DATE_FORMAT_WITH_MILLISECONDS = '%Y-%m-%dT%H:%M:%S.000Z' ``` diff --git a/apimanager/apimanager/settings.py b/apimanager/apimanager/settings.py index ad52a2a..b36da49 100644 --- a/apimanager/apimanager/settings.py +++ b/apimanager/apimanager/settings.py @@ -244,9 +244,9 @@ LOGGING = { LOGIN_URL = reverse_lazy('home') #Map Java: yyyy-MM-dd'T'HH:mm'Z' -API_DATE_TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ' +API_DATE_FORMAT_WITH_SECONDS = '%Y-%m-%dT%H:%M:%SZ' #Map Java: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' -API_DATE_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ' +API_DATE_FORMAT_WITH_MILLISECONDS = '%Y-%m-%dT%H:%M:%S.%fZ' # the API_Manager the web form date format, eg: 2020-10-11 API_MANAGER_DATE_FORMAT= '%Y-%m-%d' diff --git a/apimanager/base/filters.py b/apimanager/base/filters.py index a0f74c2..9d014fd 100644 --- a/apimanager/base/filters.py +++ b/apimanager/base/filters.py @@ -77,7 +77,7 @@ class FilterTime(BaseFilter): print(filtered) for item in data: item_date = datetime.strptime( - item[self.time_fieldname], settings.API_DATE_TIME_FORMAT) + item[self.time_fieldname], settings.API_DATE_FORMAT_WITH_SECONDS ) if now - item_date <= delta: filtered.append(item) return filtered diff --git a/apimanager/base/utils.py b/apimanager/base/utils.py index a1418b5..bc60c5d 100644 --- a/apimanager/base/utils.py +++ b/apimanager/base/utils.py @@ -4,7 +4,7 @@ Base utilities """ from django.contrib.humanize.templatetags.humanize import naturaltime from datetime import datetime, timedelta -from apimanager.settings import API_DATE_FORMAT, API_MANAGER_DATE_FORMAT +from apimanager.settings import API_DATE_FORMAT_WITH_MILLISECONDS, API_MANAGER_DATE_FORMAT from base import context_processors from django.contrib import messages import functools @@ -61,7 +61,7 @@ def convert_form_date_to_obpapi_datetime_format(form_to_date_string): """ convert the String 2020-10-22 to 2020-10-22T00:00:00.000000Z """ - return datetime.strptime(form_to_date_string, API_MANAGER_DATE_FORMAT).strftime(API_DATE_FORMAT) + return datetime.strptime(form_to_date_string, API_MANAGER_DATE_FORMAT).strftime(API_DATE_FORMAT_WITH_MILLISECONDS) def return_to_days_ago(date, days): """ @@ -70,4 +70,4 @@ def return_to_days_ago(date, days): days =1 return 2020-10-21T00:00:00.000000Z """ - return (datetime.strptime(date, API_DATE_FORMAT) - timedelta(days)).strftime(API_DATE_FORMAT) \ No newline at end of file + return (datetime.strptime(date, API_DATE_FORMAT_WITH_MILLISECONDS) - timedelta(days)).strftime(API_DATE_FORMAT_WITH_MILLISECONDS) \ No newline at end of file diff --git a/apimanager/consumers/views.py b/apimanager/consumers/views.py index ecfdb93..7f8336f 100644 --- a/apimanager/consumers/views.py +++ b/apimanager/consumers/views.py @@ -44,7 +44,7 @@ class IndexView(LoginRequiredMixin, TemplateView): """Scrubs data in the given consumers to adher to certain formats""" for consumer in consumers: consumer['created'] = datetime.strptime( - consumer['created'], settings.API_DATE_TIME_FORMAT) + consumer['created'], settings.API_DATE_FORMAT_WITH_SECONDS ) return consumers def compile_statistics(self, consumers): @@ -146,7 +146,7 @@ class DetailView(LoginRequiredMixin, FormView): urlpath = '/management/consumers/{}'.format(self.kwargs['consumer_id']) consumer = api.get(urlpath) consumer['created'] = datetime.strptime( - consumer['created'], settings.API_DATE_TIME_FORMAT) + consumer['created'], settings.API_DATE_FORMAT_WITH_SECONDS ) call_limits_urlpath = '/management/consumers/{}/consumer/call-limits'.format(self.kwargs['consumer_id']) consumer_call_limtis = api.get(call_limits_urlpath) diff --git a/apimanager/customers/forms.py b/apimanager/customers/forms.py index 75039ef..23caeb4 100644 --- a/apimanager/customers/forms.py +++ b/apimanager/customers/forms.py @@ -85,7 +85,7 @@ class CreateCustomerForm(forms.Form): ) face_image_date = forms.DateTimeField( label=_('Face Image Date'), - input_formats=[settings.API_DATE_TIME_FORMAT], + input_formats=[settings.API_DATE_FORMAT_WITH_SECONDS ], widget=forms.DateTimeInput( attrs={ 'placeholder': PLACEHOLDER, @@ -214,7 +214,7 @@ class CreateCustomerForm(forms.Form): ) last_ok_date = forms.DateTimeField( label=_('Last OK Date'), - input_formats=[settings.API_DATE_TIME_FORMAT], + input_formats=[settings.API_DATE_FORMAT_WITH_SECONDS ], widget=forms.DateTimeInput( attrs={ 'placeholder': PLACEHOLDER, @@ -231,7 +231,7 @@ class CreateCustomerForm(forms.Form): def clean_face_image_date(self): data = self.cleaned_data['face_image_date'] if data: - return data.strftime(settings.API_DATE_TIME_FORMAT) + return data.strftime(settings.API_DATE_FORMAT_WITH_SECONDS ) else: return None diff --git a/apimanager/customers/views.py b/apimanager/customers/views.py index a4113eb..cb32767 100644 --- a/apimanager/customers/views.py +++ b/apimanager/customers/views.py @@ -38,7 +38,7 @@ class CreateView(LoginRequiredMixin, FormView): except Exception as err: messages.error(self.request, err) fields['last_ok_date'].initial =\ - datetime.datetime.now().strftime(settings.API_DATE_TIME_FORMAT) + datetime.datetime.now().strftime(settings.API_DATE_FORMAT_WITH_SECONDS ) return form def form_valid(self, form): @@ -75,7 +75,7 @@ class CreateView(LoginRequiredMixin, FormView): 'employment_status': data['employment_status'], 'kyc_status': data['kyc_status'], 'last_ok_date': - data['last_ok_date'].strftime(settings.API_DATE_TIME_FORMAT), + data['last_ok_date'].strftime(settings.API_DATE_FORMAT_WITH_SECONDS ), } try: result = self.api.post(urlpath, payload=payload) diff --git a/apimanager/entitlementrequests/views.py b/apimanager/entitlementrequests/views.py index 8662014..f486e31 100644 --- a/apimanager/entitlementrequests/views.py +++ b/apimanager/entitlementrequests/views.py @@ -24,7 +24,7 @@ class IndexView(LoginRequiredMixin, TemplateView): """Scrubs data in the given entitlement requests to adher to certain formats""" for entitlement_request in entitlement_requests: entitlement_request['created'] = datetime.strptime( - entitlement_request['created'], settings.API_DATE_TIME_FORMAT) + entitlement_request['created'], settings.API_DATE_FORMAT_WITH_SECONDS ) return entitlement_requests def get_context_data(self, **kwargs): diff --git a/apimanager/metrics/forms.py b/apimanager/metrics/forms.py index e2ad226..e53f59c 100644 --- a/apimanager/metrics/forms.py +++ b/apimanager/metrics/forms.py @@ -11,36 +11,40 @@ from datetime import datetime, timedelta from django.utils.translation import ugettext_lazy as _ from bootstrap_datepicker_plus import DatePickerInput, DateTimePickerInput -from apimanager.settings import API_MANAGER_DATE_FORMAT, API_DATE_FORMAT +from apimanager.settings import API_MANAGER_DATE_FORMAT, API_DATE_FORMAT_WITH_MILLISECONDS +from apimanager.settings import API_FIELD_DATE_FORMAT, API_FIELD_TIME_FORMAT -API_DATE_FORMAT_PLACEHOLDER = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" +API_DATE_FORMAT_WITH_MILLISECONDS_PLACEHOLDER = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" FORM_CONTROL = 'form-control' FROM_DATE = 'From Date' TO_DATE = 'To Date' +PLACEHOLDER = "2013-01-22" +PLACEHOLDER1 = "23:59:59" +PLACEHOLDER2 = "00:00:00" class MetricsForm(forms.Form): from_date = forms.DateTimeField( label=_(FROM_DATE), - input_formats=[settings.API_DATE_FORMAT], + input_formats=[settings.API_DATE_FORMAT_WITH_MILLISECONDS], widget=forms.DateTimeInput( attrs={ - 'placeholder': API_DATE_FORMAT, + 'placeholder': API_DATE_FORMAT_WITH_MILLISECONDS, 'class': FORM_CONTROL, } ), - initial=(datetime.now() - timedelta(30)).strftime(settings.API_DATE_FORMAT), + initial=(datetime.now() - timedelta(30)).strftime(settings.API_DATE_FORMAT_WITH_MILLISECONDS), required=False, ) to_date = forms.DateTimeField( label=_(TO_DATE), - input_formats=[settings.API_DATE_FORMAT], + input_formats=[settings.API_DATE_FORMAT_WITH_MILLISECONDS], widget=forms.DateTimeInput( attrs={ - 'placeholder': API_DATE_FORMAT, + 'placeholder': API_DATE_FORMAT_WITH_MILLISECONDS, 'class': FORM_CONTROL, } ), - initial=str(datetime.now().strftime(settings.API_DATE_FORMAT)), + initial=str(datetime.now().strftime(settings.API_DATE_FORMAT_WITH_MILLISECONDS)), required=False, ) limit = forms.IntegerField( @@ -89,7 +93,6 @@ class APIMetricsForm(MetricsForm): 'class': FORM_CONTROL, } ), - choices=[], required=False, ) user_id = forms.CharField( @@ -109,7 +112,7 @@ class APIMetricsForm(MetricsForm): 'class': FORM_CONTROL, } ), - initial='false', + initial='', required=False, ) app_name = forms.CharField( @@ -152,14 +155,12 @@ class APIMetricsForm(MetricsForm): ) implemented_in_version = forms.ChoiceField( label=_('Implemented In Version'), - #choices=VERSION, widget=forms.Select( attrs={ 'class': FORM_CONTROL, } ), choices=[], - #initial='', required=False, ) @@ -201,18 +202,48 @@ class ConnectorMetricsForm(MetricsForm): class CustomSummaryForm(forms.Form): - to_date = forms.DateField( + """ to_date = forms.DateField( label=_(TO_DATE), widget=DatePickerInput(format=API_MANAGER_DATE_FORMAT), required=True, initial=str(datetime.now().strftime(API_MANAGER_DATE_FORMAT)), ) + """ + to_date = forms.DateField( + label=_("Date"), + widget=DatePickerInput(format=API_FIELD_DATE_FORMAT), + required=True, + initial=str(datetime.now().strftime(API_FIELD_DATE_FORMAT)), + ) + to_date_time = forms.TimeField( + label=_('Time'), + widget=forms.TimeInput( + format='%H:%M:%S', + attrs={ + 'placeholder': PLACEHOLDER2, + 'class': 'form-control', + } + ), + required=False, + ) from_date_custom = forms.DateField( label=_(FROM_DATE), - widget=DatePickerInput(format=API_MANAGER_DATE_FORMAT), + #widget=DatePickerInput(format=API_MANAGER_DATE_FORMAT), + widget=DatePickerInput(format=API_FIELD_DATE_FORMAT), required=True, - initial=(datetime.now() - timedelta(6)).strftime(API_MANAGER_DATE_FORMAT), + initial=(datetime.now() - timedelta(6)).strftime(API_FIELD_DATE_FORMAT), + ) + from_time_custom = forms.TimeField( + label=_('Time'), + widget=forms.TimeInput( + format='%H:%M:%S', + attrs={ + 'placeholder': PLACEHOLDER1, + 'class': 'form-control', + } + ), + required=False, ) include_app_names = forms.CharField( label=_('Include App Names'), @@ -230,12 +261,29 @@ class CustomSummaryForm(forms.Form): super(CustomSummaryForm, self).__init__(*args, **kwargs) class MonthlyMetricsSummaryForm(forms.Form): - to_date = forms.DateField( + """ to_date = forms.DateField( label=_(TO_DATE), widget=DatePickerInput(format=API_MANAGER_DATE_FORMAT), required=True, #initial=str(datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%fZ')), initial=str(datetime.now().strftime(API_MANAGER_DATE_FORMAT)), + ) """ + to_date = forms.DateField( + label=_("Date"), + widget=DatePickerInput(format=API_FIELD_DATE_FORMAT), + required=True, + initial=str(datetime.now().strftime(API_FIELD_DATE_FORMAT)), + ) + to_date_time = forms.TimeField( + label=_('Time'), + widget=forms.TimeInput( + format='%H:%M:%S', + attrs={ + 'placeholder': PLACEHOLDER1, + 'class': 'form-control', + } + ), + required=False, ) include_app_names = forms.CharField( label=_('Include App Names'), diff --git a/apimanager/metrics/templates/metrics/api.html b/apimanager/metrics/templates/metrics/api.html index f6a6be4..738b717 100644 --- a/apimanager/metrics/templates/metrics/api.html +++ b/apimanager/metrics/templates/metrics/api.html @@ -4,8 +4,13 @@ {% block page_title %}{{ block.super }} / API Metrics{% endblock page_title %} +{% load bootstrap3 %} {% block content %}
+ {% bootstrap_javascript jquery='full' %} {# Embed Bootstrap JS+jQuery #} + {% block extrahead %} {# Extra Resources Start #} + {{ form.media }} {# Form required JS and CSS #} + {% endblock %}

{% trans "API Metrics" %}

diff --git a/apimanager/metrics/templates/metrics/custom_summary.html b/apimanager/metrics/templates/metrics/custom_summary.html index a95e0b2..15f2ce9 100644 --- a/apimanager/metrics/templates/metrics/custom_summary.html +++ b/apimanager/metrics/templates/metrics/custom_summary.html @@ -8,16 +8,16 @@

{% trans "API Usage Report" %}

{% trans "API instance" %} {{ api_host_name }}

-
@@ -41,13 +41,29 @@ {% trans "From Date Custom" %} {{ form.from_date_custom }}
+
+
+ {% if form.from_time_custom.errors %}
{{ form.from_time_custom.errors }}
{% endif %} +
+ {% trans "From Time Custom" %} + {{ form.from_time_custom }} +
+
+
{% if form.to_date.errors %}
{{ form.to_date.errors }}
{% endif %}
{% trans "To Date Custom" %} {{ form.to_date }}
+
+
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {% trans "To Time Custom" %} + {{ form.to_date_time }} +
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %} @@ -60,16 +76,14 @@
-
- {% block tab_content %} -
-

{% if include_app_names != "" %} {{ include_app_names }} : {% endif %}{{ from_date }} - {{ to_date }}

- +
+ {% block tab_content %} +

{% if include_app_names != "" %} {{ include_app_names }} : {% endif %}{{ from_date }} - {{ to_date }}

- - - - + + + + @@ -136,10 +150,10 @@ -->
{% trans "Total API calls" %}: {{ api_calls }}
-
- {% endblock tab_content %} -
-
+
+ {% endblock tab_content %} +
+
diff --git a/apimanager/metrics/templates/metrics/daily_summary.html b/apimanager/metrics/templates/metrics/daily_summary.html index 02c2eb4..27bb969 100644 --- a/apimanager/metrics/templates/metrics/daily_summary.html +++ b/apimanager/metrics/templates/metrics/daily_summary.html @@ -49,6 +49,13 @@ {{ form.to_date }} +
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {{ form.to_date_time.label_tag }} + {{ form.to_date_time }} +
+
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %}
diff --git a/apimanager/metrics/templates/metrics/hourly_summary.html b/apimanager/metrics/templates/metrics/hourly_summary.html index bef6d8d..e549cdd 100644 --- a/apimanager/metrics/templates/metrics/hourly_summary.html +++ b/apimanager/metrics/templates/metrics/hourly_summary.html @@ -48,6 +48,13 @@ {{ form.to_date }}
+
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {{ form.to_date_time.label_tag }} + {{ form.to_date_time }} +
+
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %}
diff --git a/apimanager/metrics/templates/metrics/monthly_summary.html b/apimanager/metrics/templates/metrics/monthly_summary.html index 2932ed6..3a695d6 100644 --- a/apimanager/metrics/templates/metrics/monthly_summary.html +++ b/apimanager/metrics/templates/metrics/monthly_summary.html @@ -44,6 +44,14 @@ {{ form.to_date }}
+
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {{ form.to_date_time.label_tag }} + {{ form.to_date_time }} +
+
+
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %}
diff --git a/apimanager/metrics/templates/metrics/quarterly_summary.html b/apimanager/metrics/templates/metrics/quarterly_summary.html index d47fcfc..b89af7d 100644 --- a/apimanager/metrics/templates/metrics/quarterly_summary.html +++ b/apimanager/metrics/templates/metrics/quarterly_summary.html @@ -48,6 +48,14 @@ {{ form.to_date }}
+
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {{ form.to_date_time.label_tag }} + {{ form.to_date_time }} +
+
+
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %}
diff --git a/apimanager/metrics/templates/metrics/weekly_summary.html b/apimanager/metrics/templates/metrics/weekly_summary.html index 91d2857..a0c1f66 100644 --- a/apimanager/metrics/templates/metrics/weekly_summary.html +++ b/apimanager/metrics/templates/metrics/weekly_summary.html @@ -50,6 +50,14 @@ {{ form.to_date }}
+
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {{ form.to_date_time.label_tag }} + {{ form.to_date_time }} +
+
+
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %}
diff --git a/apimanager/metrics/templates/metrics/yearly_summary.html b/apimanager/metrics/templates/metrics/yearly_summary.html index 67d7f76..11a45ec 100644 --- a/apimanager/metrics/templates/metrics/yearly_summary.html +++ b/apimanager/metrics/templates/metrics/yearly_summary.html @@ -50,6 +50,13 @@ {{ form.to_date }}
+
+ {% if form.to_date_time.errors %}
{{ form.to_date_time.errors }}
{% endif %} +
+ {{ form.to_date_time.label_tag }} + {{ form.to_date_time }} +
+
{% if form.include_app_names.errors %}
{{ form.include_app_names.errors }}
{% endif %}
diff --git a/apimanager/metrics/views.py b/apimanager/metrics/views.py index 218c2e6..ef21536 100644 --- a/apimanager/metrics/views.py +++ b/apimanager/metrics/views.py @@ -11,7 +11,7 @@ from enum import Enum from django.conf import settings from apimanager import local_settings -from apimanager.settings import API_HOST, EXCLUDE_APPS, EXCLUDE_FUNCTIONS, EXCLUDE_URL_PATTERN, API_EXPLORER_APP_NAME, API_DATE_FORMAT, API_DATE_TIME_FORMAT, DEBUG +from apimanager.settings import API_HOST, EXCLUDE_APPS, EXCLUDE_FUNCTIONS, EXCLUDE_URL_PATTERN, API_EXPLORER_APP_NAME, API_DATE_FORMAT_WITH_MILLISECONDS, API_DATE_FORMAT_WITH_SECONDS , DEBUG from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import TemplateView @@ -115,7 +115,7 @@ class MetricsView(LoginRequiredMixin, TemplateView): """ for metric in metrics: metric['date'] = datetime.datetime.strptime( - metric['date'], settings.API_DATE_TIME_FORMAT) + metric['date'], settings.API_DATE_FORMAT_WITH_SECONDS ) return metrics def to_api(self, cleaned_data): @@ -130,7 +130,7 @@ class MetricsView(LoginRequiredMixin, TemplateView): # Maybe we should define the API format as Django format to not # have to convert in places like this? if value.__class__.__name__ == 'datetime': - value = value.strftime(settings.API_DATE_FORMAT) + value = value.strftime(settings.API_DATE_FORMAT_WITH_MILLISECONDS) if value: # API does not like quoted data params.append('{}={}'.format(name, value)) @@ -259,7 +259,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): """ for metric in metrics: metric['date'] = datetime.datetime.strptime( - metric['date'], API_DATE_FORMAT) + metric['date'], API_DATE_FORMAT_WITH_MILLISECONDS) return metrics def to_api(self, cleaned_data): @@ -274,7 +274,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): # Maybe we should define the API format as Django format to not # have to convert in places like this? if value.__class__.__name__ == 'datetime': - value = value.strftime(settings.API_DATE_FORMAT) + value = value.strftime(settings.API_DATE_FORMAT_WITH_MILLISECONDS) if value: # API does not like quoted data params.append('{}={}'.format(name, value)) @@ -364,8 +364,8 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): to_date, urlpath): api_calls_total = metrics[0]["count"] average_response_time = metrics[0]["average_response_time"] - to_date = datetime.datetime.strptime(to_date, API_DATE_FORMAT) - from_date = datetime.datetime.strptime(from_date, API_DATE_FORMAT) + to_date = datetime.datetime.strptime(to_date, API_DATE_FORMAT_WITH_MILLISECONDS) + from_date = datetime.datetime.strptime(from_date, API_DATE_FORMAT_WITH_MILLISECONDS) number_of_days = abs((to_date - from_date).days) # if number_of_days= 0, then it means calls_per_hour average_calls_per_day = api_calls_total if (number_of_days == 0) else api_calls_total / number_of_days @@ -413,12 +413,12 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): def get_total_number_of_apps(self, cleaned_data, from_date, to_date): apps = [] - from_date = datetime.datetime.strptime(from_date, API_DATE_FORMAT) - to_date = datetime.datetime.strptime(to_date, API_DATE_FORMAT) + from_date = datetime.datetime.strptime(from_date, API_DATE_FORMAT_WITH_MILLISECONDS) + to_date = datetime.datetime.strptime(to_date, API_DATE_FORMAT_WITH_MILLISECONDS) apps_list = self.get_all_consumers() for app in apps_list: - app_created_date = datetime.datetime.strptime(app["created"], API_DATE_TIME_FORMAT) + app_created_date = datetime.datetime.strptime(app["created"], API_DATE_FORMAT_WITH_SECONDS ) if app_created_date < from_date and app_created_date > to_date: apps_list.remove(app) @@ -485,18 +485,18 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): """ # we need to convert string to datetime object, then we can calculate the date - from_datetime_object = datetime.datetime.strptime(from_date_string, API_DATE_FORMAT) - to_datetime_object = datetime.datetime.strptime(to_date_string , API_DATE_FORMAT) + from_datetime_object = datetime.datetime.strptime(from_date_string, API_DATE_FORMAT_WITH_MILLISECONDS) + to_datetime_object = datetime.datetime.strptime(to_date_string , API_DATE_FORMAT_WITH_MILLISECONDS) time_delta_in_loop = from_datetime_object + timedelta(**delta) result_list = [] result_list_pure = [] date_list = [] - while time_delta_in_loop <= to_datetime_object: + while time_delta_in_loop <= to_datetime_object + timedelta(days=1, hours=1): try: # here we need to first convert datetime object to String - form_date= from_datetime_object.strftime(API_DATE_FORMAT) - to_date= time_delta_in_loop.strftime(API_DATE_FORMAT) + form_date= from_datetime_object.strftime(API_DATE_FORMAT_WITH_MILLISECONDS) + to_date= time_delta_in_loop.strftime(API_DATE_FORMAT_WITH_MILLISECONDS) aggregate_metrics = self.get_aggregate_metrics(form_date, to_date, include_app_names) result = aggregate_metrics[0] result_list_pure.append(result) @@ -813,15 +813,15 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): for app in apps_list: created_date = datetime.datetime.strptime(app['created'], '%Y-%m-%dT%H:%M:%SZ') - created_date = created_date.strftime(API_DATE_FORMAT) - created_date = datetime.datetime.strptime(created_date, API_DATE_FORMAT) - if created_date >= datetime.datetime.strptime(from_date, API_DATE_FORMAT): + created_date = created_date.strftime(API_DATE_FORMAT_WITH_MILLISECONDS) + created_date = datetime.datetime.strptime(created_date, API_DATE_FORMAT_WITH_MILLISECONDS) + if created_date >= datetime.datetime.strptime(from_date, API_DATE_FORMAT_WITH_MILLISECONDS): new_apps_list.append(app) times_to_first_call = [] - strfrom_date=datetime.datetime.strptime(from_date, API_DATE_FORMAT) - strto_date=datetime.datetime.strptime(to_date, API_DATE_FORMAT) + strfrom_date=datetime.datetime.strptime(from_date, API_DATE_FORMAT_WITH_MILLISECONDS) + strto_date=datetime.datetime.strptime(to_date, API_DATE_FORMAT_WITH_MILLISECONDS) 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') @@ -887,8 +887,10 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): #if exclude_app_names not in local_settings.EXCLUDE_APPS: # error_once_only(self.request, "Invalid Exclude App Name, Please select" + str(local_settings.EXCLUDE_APPS) + "Anyone of these") form_to_date_string = form.data['to_date'] + print(form.data, "Form data") to_date = convert_form_date_to_obpapi_datetime_format(form_to_date_string) - + print("to_date", to_date) + #to_date = datetime.datetime.strptime(f"{form.data['to_date']}T{form.data['to_date_time']}Z", API_DATE_FORMAT_WITH_SECONDS ).strftime(API_DATE_FORMAT_WITH_MILLISECONDS) if (web_page_type == SummaryType.DAILY): # for one day, the from_date is 1 day ago. from_date = return_to_days_ago(to_date, 1) @@ -909,7 +911,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): if (web_page_type == SummaryType.QUARTERLY): # for one quarter, the from_date is 90 days ago. - from_date = (datetime.datetime.strptime(to_date, API_DATE_FORMAT) - timedelta(90)).strftime(API_DATE_FORMAT) + from_date = (datetime.datetime.strptime(to_date, API_DATE_FORMAT_WITH_MILLISECONDS) - timedelta(90)).strftime(API_DATE_FORMAT_WITH_MILLISECONDS) calls_per_month_list, calls_per_month, month_list = self.calls_per_month(from_date, to_date, include_app_names) per_month_chart = self.plot_line_chart(calls_per_month, month_list, 'month') @@ -965,8 +967,8 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): 'user_email_cansearchwarehouse': user_email_cansearchwarehouse, 'number_of_users_with_cansearchwarehouse': number_of_users_with_cansearchwarehouse, 'api_host_name': api_host_name, - 'from_date': (datetime.datetime.strptime(from_date, API_DATE_FORMAT)).strftime('%d %B %Y'), - 'to_date': (datetime.datetime.strptime(to_date, API_DATE_FORMAT)).strftime('%d %B %Y'), + 'from_date': (datetime.datetime.strptime(from_date, API_DATE_FORMAT_WITH_MILLISECONDS)).strftime('%d %B %Y'), + 'to_date': (datetime.datetime.strptime(to_date, API_DATE_FORMAT_WITH_MILLISECONDS)).strftime('%d %B %Y'), 'top_apis': top_apis, 'top_apis_bar_chart': top_apis_bar_chart, 'top_consumers_bar_chart': top_consumers_bar_chart, @@ -1004,7 +1006,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView): if (web_page_type == SummaryType.QUARTERLY): # for one quarter, the from_date is 90 days ago. - from_date = (datetime.datetime.strptime(to_date, API_DATE_FORMAT) - timedelta(90)).strftime(API_DATE_FORMAT) + from_date = (datetime.datetime.strptime(to_date, API_DATE_FORMAT_WITH_MILLISECONDS) - timedelta(90)).strftime(API_DATE_FORMAT_WITH_MILLISECONDS) calls_per_month_list, calls_per_month, month_list = self.calls_per_month(from_date, to_date, include_app_names) per_month_chart = self.plot_line_chart(calls_per_month, month_list, 'month')