Skip to content

Commit 098e2c5

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

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

puppetboard/app.py

+18-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,7 @@
2123
from pypuppetdb.QueryBuilder import (ExtractOperator, AndOperator,
2224
EqualsOperator, FunctionOperator,
2325
NullOperator, OrOperator,
24-
LessEqualOperator, RegexOperator)
26+
LessEqualOperator, RegexOperator, GreaterEqualOperator)
2527

2628
from puppetboard.forms import ENABLED_QUERY_ENDPOINTS, QueryForm
2729
from puppetboard.utils import (get_or_abort, yield_or_stop,
@@ -470,6 +472,7 @@ def reports_ajax(env, node_name):
470472
order_dir = request.args.get('order[0][dir]', 'desc')
471473
order_args = '[{"field": "%s", "order": "%s"}]' % (order_filter, order_dir)
472474
status_args = request.args.get('columns[1][search][value]', '').split('|')
475+
date_args = request.args.get('columns[0][search][value]', '')
473476
max_col = len(REPORTS_COLUMNS)
474477
for i in range(len(REPORTS_COLUMNS)):
475478
if request.args.get("columns[%s][data]" % i, None):
@@ -493,6 +496,20 @@ def reports_ajax(env, node_name):
493496
"configuration_version", r"%s" % search_arg))
494497
reports_query.add(search_query)
495498

499+
if date_args:
500+
dates = json.loads(date_args)
501+
502+
if len(dates) > 0:
503+
date_query = AndOperator()
504+
505+
if 'min' in dates:
506+
date_query.add(GreaterEqualOperator('end_time', dates['min']))
507+
508+
if 'max' in dates:
509+
date_query.add(LessEqualOperator('end_time', dates['max']))
510+
511+
reports_query.add(date_query)
512+
496513
status_query = OrOperator()
497514
for status_arg in status_args:
498515
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)