Skip to content
Snippets Groups Projects
Commit 4bf3c0e5 authored by Tim van Dijen's avatar Tim van Dijen
Browse files

Twigify statistics module

parent 6c540849
No related branches found
No related tags found
No related merge requests found
{% set pagetitle = 'SimpleSAMLphp Statistics'|trans %}
{% extends "base.twig" %}
{% block preload %}
<link href="{{ baseurlpath }}style.css" rel="stylesheet" />
{% endblock %}
{% block postload %}
<script src="{{ baseurlpath }}javascript.js"></script>
{% endblock %}
{% block content %}
<h1>{{ current_rule.name }}</h1>
<p>{{ current_rule.descr }}</p>
<table class="selecttime">
<tr>
<td class="selecttime_icon">
<img src="/{{ baseurlpath }}resources/icons/crystal_project/kchart.32x32.png" alt="Report settings" />
</td>
<td>
<form action="#">
{% for key, value in post_rule %}
<input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
{% endfor %}
<select onchange="submit();" name="rule">
{% for key, rule in available_rules %}
{% if key == selected_rule %}
<option selected="selected" value="{{ key }}">{{ rule.name }}</option>
{% else %}
<option value="{{ key }}">{{ rule.name }}</option>
{% endif %}
{% endfor %}
</select>
</form>
</td>
<td class="td_right">
<form action="#">
{% for key, value in post_d %}
<input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
{% endfor %}
<select onchange="submit();" name="d">
{% for key, delim in availdelimiters %}
{% set delimName = delim %}
{% if delimiterPresentation[delim] is defined %}
{% set delimName = delimiterPresentation[delim] %}
{% endif %}
{% if key == "_" %}
<option value="_">Total</option>
{% elseif request_d is defined and delim == request_d %}
<option selected="selected" value="{{ delim|escape('html') }}">{{ delimName|escape('html') }}</option>
{% else %}
<option value="{{ delim|escape('html') }}">{{ delimName|escape('html') }}</option>
{% endif %}
{% endfor %}
</select>
</form>
</td>
</tr>
</table>
<table class="selecttime">
<tr>
<td class="selecttime_icon">
<img src="/{{ baseurlpath }}resources/icons/crystal_project/date.32x32.png" alt="Select date and time" />
</td>
{% if available_times_prev %}
<td><a href="{{ get_times_prev }}">&laquo; Previous</a></td>
{% else %}
<td class="selecttime_link_grey">&laquo; Previous</td>
{% endif %}
<td class="td_right">
<form action="#">
{% for key, value in post_res %}
<input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
{% endfor %}
<select onchange="submit();" name="res">
{% for key, timeresname in available_timeres %}
{% if key == selected_timeres %}
<option selected="selected" value="{{ key }}">{{ timeresname }}</option>
{% else %}
<option value="{{ key }}">{{ timeresname }}</option>
{% endif %}
{% endfor %}
</select>
</form>
</td>
<td class="td_left">
<form action="#">
{% for key, value in post_time %}
<input type="hidden" name="{{ key|escape('html') }}" value="{{ value|escape('html') }}">
{% endfor %}
<select onchange="submit();" name=time>
{% for key, timedescr in available_times %}
{% if key == selected_time %}
<option selected="selected" value="{{ key }}">{{ timedescr }}</option>
{% else %}
<option value="{{ key }}">{{ timedescr }}</option>
{% endif%}
{% endfor %}
</select>
</form>
</td>
{% if available_times_next %}
<td class="td_right td_next_right"><a href="{{ get_times_next }}">Next &raquo;</a></td>
{% else %}
<td class="td_right selecttime_link_grey">Next &raquo;</td>
{% endif %}
</tr>
</table>
<div id="tabdiv">
<ul class="tabset_tabs">
<li class="tab-link current" data-tab="graph"><a href="#graph">Graph</a></li>
<li class="tab-link" data-tab="table"><a href="#table">Summary table</a></li>
<li class="tab-link" data-tab="debug"><a href="#debug">Time serie</a></li>
</ul>
<div id="graph" class="tabset_content current">
<img src="{{ imgurl }}" alt="Graph" />
<form action="#">
<p class="p_right">Compare with total from this dataset
<select onchange="submit();" name="rule2">
<option value="_">None</option>
{% for key, rule in available_rules %}
{% if key == selected_rule2 %}
<option selected="selected" value="{{ key }}">{{ rule.name }}</option>
{% else %}
<option value="{{ key }}">{{ rule.name }}</option>
{% endif %}
{% endfor %}
</select>
</p>
</form>
</div>
<div id="table" class="tabset_content">
{% if pieimgurl is defined %}
<img src="{{ pieimgurl }}" alt="Pie chart" />
{% endif %}
<table class="tableview">
<tr>
<th class="value">Value</th>
<th class="category">Data range</th>
</tr>
{% for key, value in summaryDataset %}
{% if loop.index0 % 2 == 0 %}
{% set class = 'even' %}
{% else %}
{% set class = 'odd' %}
{% endif %}
{% set keyName = key %}
{% if delimiterPresentation[key] is defined %}
{% set keyName = delimiterPresentation[key] %}
{% endif %}
{% if key == "_" %}
<tr class="total {{ class }}">
<td class="value">{{ value }}</td>
<td class="category">{{ keyName }}</td>
</tr>
{% else %}
<tr class="{{ class }}">
<td class="value">{{ value }}</td>
<td class="category">{{ keyName }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
</div>
<div id="debug" class="tabset_content">
<table class="timeseries">
<tr>
<th>Time</th>
<th>Total</th>
{% for key, value in topdelimiters %}
{% set keyName = key %}
{% if delimiterPresentation[key] is defined %}
{% set keyName = delimiterPresentation[key] %}
{% endif %}
<th>{{ keyName }}</th>
{% endfor %}
</tr>
{% set i = 0 %}
{% for slot, dd in debugdata %}
{% if i % 2 == 0 %}
{% set class = 'even' %}
{% else %}
{% set class = 'odd' %}
{% endif %}
<tr class="{{ class }}">
<td>{{ dd[0] }}</td>
<td class="datacontent">{{ dd[1] }}</td>
{% for key, value in topdelimiters %}
{% if results.slot is defined %}
<td class="datacontent">{{ results.slot.key }}</td>
{% else %}
<td class="datacontent">&nbsp;</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}
{% set pagetitle = 'SimpleSAMLphp Statistics Metadata'|trans %}
{% extends "base.twig" %}
{% block preload %}
<link href="{{ baseurlpath }}style.css" rel="stylesheet" />
{% endblock %}
{% block content %}
<table id="statmeta">
{% if metadata is defined %}
{% if metadata.lastrun is defined %}
<tr><td>Aggregator last run at</td><td>{{ metadata.lastrun }}</td></tr>
{% endif %}
{% if metadata.notBefore is defined %}
<tr><td>Aggregated data until</td><td>{{ metadata.notBefore }}</td></tr>
{% endif %}
{% if metadata.memory is defined %}
<tr><td>Memory usage</td><td>{{ metadata.memory }} MB</td></tr>
{% endif %}
{% if metadata.memory is defined %}
<tr><td>Execution time</td><td>{{ metadata.time }} seconds</td></tr>
{% endif %}
{% if metadata.memory is defined %}
<tr><td>SHA1 of last processed logline</td><td>{{ metadata.lastlinehash }}</td></tr>
{% endif %}
{% if metadata.memory is defined %}
<tr><td>Last processed logline</td><td>{{ metadata.lastline }}</td></tr>
{% endif %}
{% else %}
<tr><td>No metadata found</td></tr>
{% endif %}
</table>
<p>[ <a href="{{ baseurlpath }}showstats.php">Show statistics</a> ]</p>
{% endblock %}
$(document).ready(function() { $(document).ready(function() {
$("#tabdiv").tabs(); $('ul.tabset_tabs li').click(
}); function() {
var tab_id = $(this).attr('data-tab');
$('ul.tabset_tabs li').removeClass('current');
$('.tabset_content').removeClass('current');
$(this).addClass('current');
$("#"+tab_id).addClass('current');
$("html, body").animate({ scrollTop: 0 }, "slow");
}
)
})
...@@ -29,6 +29,7 @@ if (array_key_exists('res', $_REQUEST)) { ...@@ -29,6 +29,7 @@ if (array_key_exists('res', $_REQUEST)) {
} }
if (array_key_exists('d', $_REQUEST)) { if (array_key_exists('d', $_REQUEST)) {
$delimiter = $_REQUEST['d']; $delimiter = $_REQUEST['d'];
$t->data['request_d'] = $delimiter;
} }
if ($preferRule2 === '_') { if ($preferRule2 === '_') {
...@@ -100,17 +101,19 @@ $t->data['imgurl'] = $grapher->show($axis['axis'], $axis['axispos'], $datasets, ...@@ -100,17 +101,19 @@ $t->data['imgurl'] = $grapher->show($axis['axis'], $axis['axispos'], $datasets,
if (isset($piedata)) { if (isset($piedata)) {
$t->data['pieimgurl'] = $grapher->showPie( $dataset->getDelimiterPresentationPie(), $piedata); $t->data['pieimgurl'] = $grapher->showPie( $dataset->getDelimiterPresentationPie(), $piedata);
} }
$t->data['available.rules'] = $ruleset->availableRulesNames(); $t->data['available_rules'] = $ruleset->availableRulesNames();
$t->data['available.times'] = $statrule->availableFileSlots($timeres); $t->data['available_times'] = $statrule->availableFileSlots($timeres);
$t->data['available.timeres'] = $statrule->availableTimeRes(); $t->data['available_timeres'] = $statrule->availableTimeRes();
$t->data['available.times.prev'] = $timeNavigation['prev']; $t->data['available_times_prev'] = $timeNavigation['prev'];
$t->data['available.times.next'] = $timeNavigation['next']; $t->data['available_times_next'] = $timeNavigation['next'];
$t->data['selected.rule']= $rule; $t->data['current_rule'] = $t->data['available_rules'][$rule];
$t->data['selected.rule2']= $preferRule2;
$t->data['selected.time'] = $fileslot; $t->data['selected_rule'] = $rule;
$t->data['selected.timeres'] = $timeres; $t->data['selected_rule2'] = $preferRule2;
$t->data['selected.delimiter'] = $delimiter; $t->data['selected_time'] = $fileslot;
$t->data['selected_timeres'] = $timeres;
$t->data['selected_delimiter'] = $delimiter;
$t->data['debugdata'] = $dataset->getDebugData(); $t->data['debugdata'] = $dataset->getDebugData();
$t->data['results'] = $dataset->getResults(); $t->data['results'] = $dataset->getResults();
...@@ -118,30 +121,31 @@ $t->data['summaryDataset'] = $dataset->getSummary(); ...@@ -118,30 +121,31 @@ $t->data['summaryDataset'] = $dataset->getSummary();
$t->data['topdelimiters'] = $dataset->getTopDelimiters(); $t->data['topdelimiters'] = $dataset->getTopDelimiters();
$t->data['availdelimiters'] = $dataset->availDelimiters(); $t->data['availdelimiters'] = $dataset->availDelimiters();
$t->data['delimiterPresentation'] = $dataset->getDelimiterPresentation(); $t->data['delimiterPresentation'] = $dataset->getDelimiterPresentation();
$t->data['post_rule'] = getBaseURL($t, 'post', 'rule'); $t->data['post_rule'] = getBaseURL($t, 'post', 'rule');
$t->data['post_rule2'] = getBaseURL($t, 'post', 'rule2'); $t->data['post_rule2'] = getBaseURL($t, 'post', 'rule2');
$t->data['post_d'] = getBaseURL($t, 'post', 'd'); $t->data['post_d'] = getBaseURL($t, 'post', 'd');
$t->data['post_res'] = getBaseURL($t, 'post', 'res'); $t->data['post_res'] = getBaseURL($t, 'post', 'res');
$t->data['post_time'] = getBaseURL($t, 'post', 'time'); $t->data['post_time'] = getBaseURL($t, 'post', 'time');
$t->data['get_times_prev'] = getBaseURL($t, 'get', 'time', $t->data['available.times.prev']); $t->data['get_times_prev'] = getBaseURL($t, 'get', 'time', $t->data['available_times_prev']);
$t->data['get_times_next'] = getBaseURL($t, 'get', 'time', $t->data['available.times.next']); $t->data['get_times_next'] = getBaseURL($t, 'get', 'time', $t->data['available_times_next']);
//$t->data['jquery'] = array('ui' => true, 'core' => true);
$t->show(); $t->show();
function getBaseURL($t, $type = 'get', $key = null, $value = null) function getBaseURL($t, $type = 'get', $key = null, $value = null)
{ {
$vars = array( $vars = array(
'rule' => $t->data['selected.rule'], 'rule' => $t->data['selected_rule'],
'time' => $t->data['selected.time'], 'time' => $t->data['selected_time'],
'res' => $t->data['selected.timeres'], 'res' => $t->data['selected_timeres'],
); );
if (isset($t->data['selected.delimiter'])) { if (isset($t->data['selected_delimiter'])) {
$vars['d'] = $t->data['selected.delimiter']; $vars['d'] = $t->data['selected_delimiter'];
} }
if (!empty($t->data['selected.rule2']) && $t->data['selected.rule2'] !== '_') { if (!empty($t->data['selected_rule2']) && $t->data['selected_rule2'] !== '_') {
$vars['rule2'] = $t->data['selected.rule2']; $vars['rule2'] = $t->data['selected_rule2'];
} }
if (isset($key)) { if (isset($key)) {
...@@ -154,12 +158,7 @@ function getBaseURL($t, $type = 'get', $key = null, $value = null) ...@@ -154,12 +158,7 @@ function getBaseURL($t, $type = 'get', $key = null, $value = null)
} }
if ($type === 'get') { if ($type === 'get') {
return SimpleSAML\Module::getModuleURL("statistics/showstats.php") . '?' . http_build_query($vars, '', '&amp;'); return SimpleSAML\Module::getModuleURL("statistics/showstats.php") . '?' . http_build_query($vars, '', '&');
} else {
$text = '';
foreach($vars as $k => $v) {
$text .= '<input type="hidden" name="' . $k . '" value="'. htmlspecialchars($v) . '" />' . "\n";
}
return $text;
} }
return $vars;
} }
@media all { @media all {
.ui-tabs-panel { padding: .5em }
div#content { div#content {
margin: .4em ! important; margin: .4em ! important;
} }
...@@ -35,10 +33,6 @@ ...@@ -35,10 +33,6 @@
text-align: right; text-align: right;
} }
div.corner_t {
max-width: none ! important;
}
table.timeseries tr.odd td { table.timeseries tr.odd td {
background-color: #f4f4f4; background-color: #f4f4f4;
} }
...@@ -92,4 +86,33 @@ ...@@ -92,4 +86,33 @@
table#statmeta { table#statmeta {
width: 100%; width: 100%;
} }
ul.tabset_tabs {
margin: 0px;
padding: 0px;
list-style: none;
}
ul.tabset_tabs li {
background: none;
color: #222;
display: inline-block;
padding: 10px 15px;
cursor: pointer;
}
ul.tabset_tabs li.current {
background: #ededed;
color: #222;
}
.tabset_content {
display: none;
background: #ededed;
padding: 15px;
}
.tabset_content.current {
display: inherit;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment