Skip to content

Commit 69a9f9a

Browse files
authored
Merge pull request #638 from sebastianrakel/fix-issue-625
Add from/till filter for reports
2 parents 968751a + 8bc7556 commit 69a9f9a

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
@@ -11,11 +11,13 @@
1111
)
1212

1313
import logging
14+
import json
1415

1516
from pypuppetdb.QueryBuilder import (ExtractOperator, AndOperator,
1617
EqualsOperator, FunctionOperator,
1718
NullOperator, OrOperator,
18-
LessEqualOperator, RegexOperator)
19+
LessEqualOperator, RegexOperator,
20+
GreaterEqualOperator)
1921

2022
from puppetboard.forms import ENABLED_QUERY_ENDPOINTS, QueryForm
2123
from puppetboard.utils import (get_or_abort, yield_or_stop,
@@ -457,6 +459,7 @@ def reports_ajax(env, node_name):
457459
order_dir = request.args.get('order[0][dir]', 'desc')
458460
order_args = '[{"field": "%s", "order": "%s"}]' % (order_filter, order_dir)
459461
status_args = request.args.get('columns[1][search][value]', '').split('|')
462+
date_args = request.args.get('columns[0][search][value]', '')
460463
max_col = len(REPORTS_COLUMNS)
461464
for i in range(len(REPORTS_COLUMNS)):
462465
if request.args.get("columns[%s][data]" % i, None):
@@ -480,6 +483,20 @@ def reports_ajax(env, node_name):
480483
"configuration_version", r"%s" % search_arg))
481484
reports_query.add(search_query)
482485

486+
if date_args:
487+
dates = json.loads(date_args)
488+
489+
if len(dates) > 0:
490+
date_query = AndOperator()
491+
492+
if 'min' in dates:
493+
date_query.add(GreaterEqualOperator('end_time', dates['min']))
494+
495+
if 'max' in dates:
496+
date_query.add(LessEqualOperator('end_time', dates['max']))
497+
498+
reports_query.add(date_query)
499+
483500
status_query = OrOperator()
484501
for status_arg in status_args:
485502
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)