Skip to content

Commit 9317c03

Browse files
committed
[OGUI-914] Filter change is now observed, default level setting is moved to within resetCriteria, contextMenu resets to OPS level
Attach Log to LogFilter as an observer and make filter updates drive behaviour instead of manual notifications. Adjust tests to take into account new default filter state.
1 parent e5a3399 commit 9317c03

6 files changed

Lines changed: 28 additions & 48 deletions

File tree

InfoLogger/public/log/Log.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ export default class Log extends Observable {
3232
this.model = model;
3333

3434
this.filter = new LogFilter(model);
35-
this.filter.setCriteria('level', 'max', 1);
3635
this.filter.bubbleTo(this);
36+
this.filter.observe(this.onFilterChange.bind(this));
3737

3838
this.focus = { // show date picker on focus
3939
timestampSince: false,
@@ -401,23 +401,13 @@ export default class Log extends Observable {
401401
}
402402
value = copy.join(' ');
403403
}
404-
if (this.filter.setCriteria(field, operator, value)) {
405-
this.notifyFilterChanged();
406-
}
407-
}
408-
409-
/**
410-
* Reset all filter criteria and notify active mode of the change.
411-
*/
412-
resetFilters() {
413-
this.filter.resetCriteria();
414-
this.notifyFilterChanged();
404+
this.filter.setCriteria(field, operator, value);
415405
}
416406

417407
/**
418408
* Notify the active mode (live or query) that filters have changed.
419409
*/
420-
notifyFilterChanged() {
410+
onFilterChange() {
421411
if (this.isLiveModeRunning()) {
422412
this.model.ws.setFilter(this.filter.toStringifyFunction());
423413
this.model.notification.show(

InfoLogger/public/log/cellContextMenu.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,10 @@ export const cellContextMenu = (model) => {
125125
hideMenu();
126126
},
127127
),
128-
createMenuItem(iconTrash(), 'danger', 'Clear Level Filter', () => {
129-
model.log.setCriteria('level', 'max', null);
128+
createMenuItem(iconTrash(), 'danger', 'Reset Level Filter', () => {
129+
model.log.setCriteria('level', 'max', 1);
130130
hideMenu();
131-
}, model.log.filter.criterias.level.max === null),
131+
}, model.log.filter.criterias.level.max === 1),
132132
];
133133
}
134134
return [

InfoLogger/public/logFilter/LogFilter.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,8 @@ export default class LogFilter extends Observable {
429429
$in: ['I', 'W', 'E', 'F'],
430430
},
431431
level: {
432-
max: null, // 0, 1, 6, 11, 21
433-
$max: null, // 0, 1, 6, 11, 21
432+
max: 1,
433+
$max: 1,
434434
},
435435
};
436436
this.notify();

InfoLogger/public/logFilter/commandFilters.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,6 @@ const buttonLogLimit = (model, label, limit) => h('button.btn', {
104104
* @returns {vnode} - component representing the creation of a button to reset filters
105105
*/
106106
const buttonReset = (model) => h('button.btn', {
107-
onclick: () => model.log.resetFilters(),
107+
onclick: () => model.log.filter.resetCriteria(),
108108
title: 'Reset date, time, matches, excludes, log levels',
109109
}, 'Reset filters');

InfoLogger/test/public/log-context-menu-mocha.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ describe('Cell Context Menu', async () => {
276276
it('should show correct actions for level field', async () => {
277277
await openContextMenu(page, 'level', '3', 100, 120);
278278
const labels = await getMenuActionLabels(page);
279-
assert.deepStrictEqual(labels, ['Set Level To Support', 'Set Level To Ops', 'Clear Level Filter', 'Copy', 'Open Inspector']);
279+
assert.deepStrictEqual(labels, ['Set Level To Support', 'Set Level To Ops', 'Reset Level Filter', 'Copy', 'Open Inspector']);
280280
});
281281
});
282282

@@ -561,7 +561,7 @@ describe('Cell Context Menu', async () => {
561561
});
562562
});
563563

564-
describe('Set/Clear level filter for level field', async () => {
564+
describe('Set/Reset Level Filter for level field', async () => {
565565
it('should set level to nearest threshold above via include', async () => {
566566
await openContextMenu(page, 'level', '3', 100, 120);
567567

@@ -586,34 +586,38 @@ describe('Cell Context Menu', async () => {
586586
assert.strictEqual(level.$max, 1);
587587
});
588588

589-
it('should disable "Clear Level Filter" when no level filter is set', async () => {
589+
it('should disable "Reset Level Filter" when level is already cleared', async () => {
590+
await page.evaluate(() => {
591+
window.model.log.filter.setCriteria('level', 'max', 1);
592+
});
593+
590594
await openContextMenu(page, 'level', '3', 100, 120);
591595

592-
assert.strictEqual(await isMenuItemDisabled(page, 'Clear Level Filter'), true);
596+
assert.strictEqual(await isMenuItemDisabled(page, 'Reset Level Filter'), true);
593597
});
594598

595-
it('should enable "Clear Level Filter" when a level filter is active', async () => {
599+
it('should enable "Reset Level Filter" when a level filter is active', async () => {
596600
await page.evaluate(() => {
597601
window.model.log.filter.setCriteria('level', 'max', 6);
598602
});
599603

600604
await openContextMenu(page, 'level', '3', 100, 120);
601605

602-
assert.strictEqual(await isMenuItemDisabled(page, 'Clear Level Filter'), false);
606+
assert.strictEqual(await isMenuItemDisabled(page, 'Reset Level Filter'), false);
603607
});
604608

605-
it('should clear level filter back to null', async () => {
609+
it('should reset level filter back to default', async () => {
606610
await page.evaluate(() => {
607611
window.model.log.filter.setCriteria('level', 'max', 6);
608612
});
609613

610614
await openContextMenu(page, 'level', '3', 100, 120);
611615

612-
await clickMenuItemByLabel(page, 'Clear Level Filter');
616+
await clickMenuItemByLabel(page, 'Reset Level Filter');
613617

614618
const level = await page.evaluate(() => window.model.log.filter.criterias.level);
615-
assert.strictEqual(level.max, null);
616-
assert.strictEqual(level.$max, null);
619+
assert.strictEqual(level.max, 1);
620+
assert.strictEqual(level.$max, 1);
617621
});
618622
});
619623

InfoLogger/test/public/log-filter-actions-mocha.js

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe('Filter actions test-suite', async () => {
9595
});
9696

9797
it('should redirect to default filters and show JSON parse error on malformed q in URI', async () => {
98-
const expectedDefaultParams = '?q={"severity":{"in":"I W E F"}}';
98+
const expectedDefaultParams = '?q={"severity":{"in":"I W E F"},"level":{"max":1}}';
9999

100100
const locationAndNotification = await page.evaluate(() => {
101101
const params = { q: '{"severity":{"in":"W I E F"' };
@@ -116,8 +116,8 @@ describe('Filter actions test-suite', async () => {
116116

117117
it('should update URI with new encoded "match" criteria', async () => {
118118
/* eslint-disable max-len */
119-
const decodedParams = '?q={"hostname":{"match":"\\"%ald_qdip01%"},"severity":{"in":"I W E F"}}';
120-
const expectedParams = '?q={%22hostname%22:{%22match%22:%22%5C%22%25ald_qdip01%25%22},%22severity%22:{%22in%22:%22I%20W%20E%20F%22}}';
119+
const decodedParams = '?q={"hostname":{"match":"\\"%ald_qdip01%"},"severity":{"in":"I W E F"},"level":{"max":1}}';
120+
const expectedParams = '?q={%22hostname%22:{%22match%22:%22%5C%22%25ald_qdip01%25%22},%22severity%22:{%22in%22:%22I%20W%20E%20F%22},%22level%22:{%22max%22:1}}';
121121
const searchParams = await page.evaluate(() => {
122122
window.model.log.filter.setCriteria('hostname', 'match', '"%ald_qdip01%');
123123
window.model.updateRouteOnModelChange();
@@ -130,8 +130,8 @@ describe('Filter actions test-suite', async () => {
130130

131131
it('should update URI with new encoded "exclude" criteria', async () => {
132132
/* eslint-disable max-len */
133-
const decodedParams = '?q={"hostname":{"exclude":"\\"%ald_qdip01%"},"severity":{"in":"I W E F"}}';
134-
const expectedParams = '?q={%22hostname%22:{%22exclude%22:%22%5C%22%25ald_qdip01%25%22},%22severity%22:{%22in%22:%22I%20W%20E%20F%22}}';
133+
const decodedParams = '?q={"hostname":{"exclude":"\\"%ald_qdip01%"},"severity":{"in":"I W E F"},"level":{"max":1}}';
134+
const expectedParams = '?q={%22hostname%22:{%22exclude%22:%22%5C%22%25ald_qdip01%25%22},%22severity%22:{%22in%22:%22I%20W%20E%20F%22},%22level%22:{%22max%22:1}}';
135135
const searchParams = await page.evaluate(() => {
136136
window.model.log.filter.resetCriteria();
137137
window.model.log.filter.setCriteria('hostname', 'exclude', '"%ald_qdip01%');
@@ -286,20 +286,6 @@ describe('Filter actions test-suite', async () => {
286286
assert.ok(!severity.in.includes('D'));
287287
});
288288

289-
it('should re-enable DEBUG after reset', async () => {
290-
const result = await page.evaluate(() => {
291-
window.model.log.filter.setCriteria('level', 'max', 1);
292-
window.model.log.resetFilters();
293-
return {
294-
disabled: window.model.log.filter.isSeverityDisabled('D'),
295-
level: window.model.log.filter.criterias.level.max,
296-
};
297-
});
298-
299-
assert.strictEqual(result.disabled, false);
300-
assert.strictEqual(result.level, null);
301-
});
302-
303289
it('should disable DEBUG button at OPS level', async () => {
304290
await page.evaluate(() => {
305291
window.model.log.filter.setCriteria('level', 'max', 1);

0 commit comments

Comments
 (0)