mirror of
https://github.com/OpenBankProject/API-Manager.git
synced 2026-02-06 10:59:00 +00:00
Added raw version of metrics #14
This commit is contained in:
parent
dca74343de
commit
5e7d60c88e
@ -48,6 +48,7 @@ INSTALLED_APPS = [
|
||||
'oauth',
|
||||
'consumers',
|
||||
'users',
|
||||
'metrics',
|
||||
#'api_calls',
|
||||
#'api_config',
|
||||
]
|
||||
|
||||
@ -13,6 +13,7 @@ urlpatterns = [
|
||||
url(r'^oauth/', include('oauth.urls')),
|
||||
url(r'^consumers/', include('consumers.urls')),
|
||||
url(r'^users/', include('users.urls')),
|
||||
url(r'^metrics/', include('metrics.urls')),
|
||||
#url(r'^api_calls/', include('api_calls.urls')),
|
||||
#url(r'^api_config/', include('api_config.urls')),
|
||||
]
|
||||
|
||||
@ -28,9 +28,11 @@
|
||||
<div id="navbar" class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
{% url "consumers-index" as consumers_index_url %}
|
||||
<li{% if consumers_index_url in request.path %} class="active" {% endif %}><a href="{{ consumers_index_url }}">Consumers</a></li>
|
||||
<li{% if consumers_index_url in request.path %} class="active"{% endif %}><a href="{{ consumers_index_url }}">Consumers</a></li>
|
||||
{% url "users-index" as users_index_url %}
|
||||
<li{% if users_index_url in request.path %} class="active" {% endif %}><a href="{{ users_index_url }}">Users</a></li>
|
||||
<li{% if users_index_url in request.path %} class="active"{% endif %}><a href="{{ users_index_url }}">Users</a></li>
|
||||
{% url "metrics-index" as metrics_index_url %}
|
||||
<li{% if metrics_index_url in request.path %} class="active"{% endif %}><a href="{{ metrics_index_url }}">Metrics</a></li>
|
||||
{% comment %}
|
||||
{% url "api-calls-grouped" as api_calls_grouped_url %}
|
||||
<li{% ifequal request.path api_calls_grouped_url %} class="active" {% endifequal %}><a href="{{ api_calls_grouped_url }}">API Calls Grouped</a></li>
|
||||
|
||||
0
apimanager/metrics/__init__.py
Normal file
0
apimanager/metrics/__init__.py
Normal file
12
apimanager/metrics/apps.py
Normal file
12
apimanager/metrics/apps.py
Normal file
@ -0,0 +1,12 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
App config for metrics app
|
||||
"""
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
|
||||
class MetricsConfig(AppConfig):
|
||||
"""Config for metrics"""
|
||||
name = 'metrics'
|
||||
15
apimanager/metrics/static/metrics/css/metrics.css
Normal file
15
apimanager/metrics/static/metrics/css/metrics.css
Normal file
@ -0,0 +1,15 @@
|
||||
#metrics form {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#metrics #metrics-list {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#metrics #metrics-list ul {
|
||||
margin-left: -25px;
|
||||
}
|
||||
|
||||
#metrics .noborder {
|
||||
border: none;
|
||||
}
|
||||
2
apimanager/metrics/static/metrics/js/metrics.js
Normal file
2
apimanager/metrics/static/metrics/js/metrics.js
Normal file
@ -0,0 +1,2 @@
|
||||
$(document).ready(function($) {
|
||||
});
|
||||
166
apimanager/metrics/templates/metrics/index.html
Normal file
166
apimanager/metrics/templates/metrics/index.html
Normal file
@ -0,0 +1,166 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block page_title %}{{ block.super }} / Metrics{% endblock page_title %}
|
||||
|
||||
{% block content %}
|
||||
<div id="metrics">
|
||||
<h1>Metrics</h1>
|
||||
|
||||
<h2>Filter</h2>
|
||||
<form action="" method="GET">
|
||||
<div class="row">
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="from_start_date">From Start Date</label>
|
||||
<input type="date" class="form-control" id="from_start_date" name="from_start_date" value="{{ request.GET.from_start_date }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="to_start_date">To Start Date</label>
|
||||
<input type="date" class="form-control" id="to_start_date" name="to_start_date" value="{{ request.GET.to_start_date }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="limit">Limit</label>
|
||||
<input type="number" class="form-control" id="limit" name="limit" min="1" value="{{ request.GET.limit|default:200 }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="offset">Offset</label>
|
||||
<input type="number" class="form-control" id="offset" name="offset" min="0" value="{{ request.GET.offset|default:0 }}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="consumer_id">Consumer ID</label>
|
||||
<input type="text" class="form-control" id="consumer_id" name="consumer_id" value="{{ request.GET.consumer_id }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="user_id">User ID</label>
|
||||
<input type="text" class="form-control" id="user_id" name="user_id" value="{{ request.GET.user_id }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="anon">Anonymous</label>
|
||||
{% with request.GET.anon as anon %}
|
||||
<select id="anon" name="anon" class="form-control">
|
||||
<option value="true"{% if anon == 'true' %} selected="selected"{% endif %}>Yes</option>
|
||||
<option value="false"{% if anon == 'false' %} selected="selected"{% endif %}>No</option>
|
||||
<option value=""{% if not anon %} selected="selected"{% endif %}>Anonymous and Non-Anonymous</option>
|
||||
</select>
|
||||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
<div class="form-group">
|
||||
<label for="app_name">App Name</label>
|
||||
<input type="text" class="form-control" id="app_name" name="app_name" value="{{ request.GET.app_name }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-2">
|
||||
<div class="form-group">
|
||||
<label for="verb">Verb</label>
|
||||
<input type="text" class="form-control" id="verb" name="verb" value="{{ request.GET.verb }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-10">
|
||||
<div class="form-group">
|
||||
<label for="url">URL</label>
|
||||
<input type="text" class="form-control" id="url" name="url" value="{{ request.GET.url }}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label for="implemented_by_partial_function">Implemented By Partial Function</label>
|
||||
<input type="text" class="form-control" id="implemented_by_partial_function" name="implemented_by_partial_function" value="{{ request.GET.implemented_by_partial_function }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label for="implemented_in_version">Implemented In Version</label>
|
||||
<input type="text" class="form-control" id="implemented_in_version" name="implemented_in_version" value="{{ request.GET.implemented_in_version }}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<button type="submit" class="btn btn-primary">Update</button>
|
||||
</form>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover" id="metrics-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Verb</th>
|
||||
<th>URL</th>
|
||||
<th>Date</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for metric in metrics %}
|
||||
<tr>
|
||||
<td>{{ forloop.counter }}</td>
|
||||
<td>{{ metric.verb }}</td>
|
||||
<td>
|
||||
{{ metric.url }}
|
||||
</td>
|
||||
<td>{{ metric.date|date:"Y-m-d H:m:s" }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5" class="noborder">
|
||||
<ul>
|
||||
<li>User Name: {{ metric.user_name }}</li>
|
||||
<li>User ID: {{ metric.user_id }}</li>
|
||||
<li>Developer Email: {{ metric.developer_email }}</li>
|
||||
<li>App Name: {{ metric.app_name }}</li>
|
||||
<li>Consumer ID: {{ metric.consumer_id }}</li>
|
||||
<li>Implemented by Partial Function: {{ metric.implemented_by_partial_function }}</li>
|
||||
<li>Implemented In Version: {{ metric.implemented_in_version }}</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extrajs %}
|
||||
{% comment %}
|
||||
<script type="text/javascript" src="{% static 'metrics/js/metrics.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
</script>
|
||||
{% endcomment %}
|
||||
{% endblock extrajs %}
|
||||
|
||||
|
||||
{% block extracss %}
|
||||
<link href="{% static 'metrics/css/metrics.css' %}" rel="stylesheet">
|
||||
{% endblock extracss %}
|
||||
14
apimanager/metrics/urls.py
Normal file
14
apimanager/metrics/urls.py
Normal file
@ -0,0 +1,14 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
URLs for metrics app
|
||||
"""
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
from .views import IndexView
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$',
|
||||
IndexView.as_view(),
|
||||
name='metrics-index'),
|
||||
]
|
||||
56
apimanager/metrics/views.py
Normal file
56
apimanager/metrics/views.py
Normal file
@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Views of metrics app
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from base.api import api, APIError
|
||||
|
||||
|
||||
|
||||
class IndexView(LoginRequiredMixin, TemplateView):
|
||||
"""Index view for metrics"""
|
||||
template_name = "metrics/index.html"
|
||||
|
||||
def scrub(self, metrics):
|
||||
"""Scrubs data in the given consumers to adher to certain formats"""
|
||||
for metric in metrics:
|
||||
metric['date'] = datetime.strptime(
|
||||
metric['date'], settings.API_DATETIMEFORMAT)
|
||||
return metrics
|
||||
|
||||
|
||||
def get_params(self, request_get):
|
||||
"""
|
||||
API treats empty parameters as actual values, so we have to filter
|
||||
them out
|
||||
"""
|
||||
querydict = request_get.copy()
|
||||
keys = list(querydict.keys())
|
||||
for key in keys:
|
||||
if not querydict[key]:
|
||||
querydict.pop(key)
|
||||
return querydict.urlencode()
|
||||
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(IndexView, self).get_context_data(**kwargs)
|
||||
metrics = []
|
||||
params = self.get_params(self.request.GET)
|
||||
try:
|
||||
urlpath = '/management/metrics?{}'.format(params)
|
||||
metrics = api.get(self.request, urlpath)
|
||||
metrics = self.scrub(metrics['metrics'])
|
||||
except APIError as err:
|
||||
messages.error(self.request, err)
|
||||
|
||||
context.update({
|
||||
'metrics': metrics,
|
||||
})
|
||||
return context
|
||||
Loading…
Reference in New Issue
Block a user