Skip to content

Commit e12382f

Browse files
Add from/till filter for reports
this should fix issue #625
1 parent d879ab7 commit e12382f

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

puppetboard/app.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44

55
# load python 3, fallback to python 2 if it fails
6+
import json
7+
68
try:
79
from urllib.parse import unquote, unquote_plus, quote_plus
810
except ImportError:
@@ -21,7 +23,8 @@
2123
from pypuppetdb.QueryBuilder import (ExtractOperator, AndOperator,
2224
EqualsOperator, FunctionOperator,
2325
NullOperator, OrOperator,
24-
LessEqualOperator, RegexOperator)
26+
LessEqualOperator, RegexOperator,
27+
GreaterEqualOperator)
2528

2629
from puppetboard.forms import ENABLED_QUERY_ENDPOINTS, QueryForm
2730
from puppetboard.utils import (get_or_abort, yield_or_stop,
@@ -470,6 +473,7 @@ def reports_ajax(env, node_name):
470473
order_dir = request.args.get('order[0][dir]', 'desc')
471474
order_args = '[{"field": "%s", "order": "%s"}]' % (order_filter, order_dir)
472475
status_args = request.args.get('columns[1][search][value]', '').split('|')
476+
date_args = request.args.get('columns[0][search][value]', '')
473477
max_col = len(REPORTS_COLUMNS)
474478
for i in range(len(REPORTS_COLUMNS)):
475479
if request.args.get("columns[%s][data]" % i, None):
@@ -493,6 +497,20 @@ def reports_ajax(env, node_name):
493497
"configuration_version", r"%s" % search_arg))
494498
reports_query.add(search_query)
495499

500+
if date_args:
501+
dates = json.loads(date_args)
502+
503+
if len(dates) > 0:
504+
date_query = AndOperator()
505+
506+
if 'min' in dates:
507+
date_query.add(GreaterEqualOperator('end_time', dates['min']))
508+
509+
if 'max' in dates:
510+
date_query.add(LessEqualOperator('end_time', dates['max']))
511+
512+
reports_query.add(date_query)
513+
496514
status_query = OrOperator()
497515
for status_arg in status_args:
498516
if status_arg in ['failed', 'changed', 'unchanged']:

puppetboard/templates/reports.html

+30-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22
{% import '_macros.html' as macros %}
33
{% block content %}
44
<div class="ui wide grid">
5+
<div class="wide row">
6+
<div class="three wide column">
7+
<div class="ui">End Time (between)</div>
8+
</div>
9+
<div class="three wide column">
10+
<label for="min"></label><input type="date" id="min" name="min">
11+
</div>
12+
<div class="three wide column">
13+
<label for="max"></label><input type="date" id="max" name="max">
14+
</div>
15+
</div>
516
<div class="wide row">
617
<div class="three wide column">
718
<div class="ui">Status</div>
@@ -34,6 +45,22 @@
3445
"deferLoading": true,
3546
{% endmacro %}
3647
{{ macros.datatable_init(table_html_id="reports_table", ajax_url=url_for('reports_ajax', env=current_env, node_name=node_name), default_length=config.NORMAL_TABLE_COUNT, length_selector=config.TABLE_COUNT_SELECTOR, extra_options=extra_options) }}
48+
function date_filter_change(){
49+
var minDate = $('#min').prop('value');
50+
var maxDate = $('#max').prop('value');
51+
52+
var data = {};
53+
54+
if(minDate != '') {
55+
data['min'] = minDate;
56+
}
57+
58+
if(maxDate != '') {
59+
data['max'] = maxDate;
60+
}
61+
62+
table.column(0).search(JSON.stringify(data)).draw();
63+
}
3764

3865
// Event listener for status filters
3966
function status_filter_change(){
@@ -52,7 +79,9 @@
5279
}
5380
table.column(1).search(sum).draw();
5481
}
55-
$('#failed, #changed, #unchanged, #noop').change(status_filter_change);
82+
$('#failed, #changed, #unchanged, #noop').change(status_filter_change);
83+
$('#min, #max').change(date_filter_change);
5684
// Call at init - fix page reload behavior
5785
status_filter_change();
86+
date_filter_change();
5887
{% endblock onload_script %}

0 commit comments

Comments
 (0)