You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by sa...@apache.org on 2019/12/13 23:18:45 UTC
[metron] branch master updated: METRON-2292 [UI] Manual query
can'
t be saved on the Alerts UI (ruffle1986 via sardell) closes
apache/metron#1533
This is an automated email from the ASF dual-hosted git repository.
sardell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metron.git
The following commit(s) were added to refs/heads/master by this push:
new e57a795 METRON-2292 [UI] Manual query can't be saved on the Alerts UI (ruffle1986 via sardell) closes apache/metron#1533
e57a795 is described below
commit e57a795dc0f4781a9807bb08570b2b3948b79a97
Author: ruffle1986 <tf...@gmail.com>
AuthorDate: Fri Dec 13 18:18:23 2019 -0500
METRON-2292 [UI] Manual query can't be saved on the Alerts UI (ruffle1986 via sardell) closes apache/metron#1533
---
.../alerts-list/alerts-list.component.spec.ts | 80 +++++++++++++++++++++-
.../alerts/alerts-list/alerts-list.component.ts | 22 +++++-
.../src/app/alerts/alerts-list/query-builder.ts | 4 ++
.../alerts/save-search/save-search.component.ts | 6 +-
.../metron-alerts/src/app/model/save-search.ts | 2 +
5 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.spec.ts b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.spec.ts
index 7238555..27db478 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.spec.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.spec.ts
@@ -42,7 +42,6 @@ import { SearchRequest } from 'app/model/search-request';
import { query } from '@angular/core/src/render3';
import { RestError } from 'app/model/rest-error';
import { DialogType } from 'app/shared/metron-dialog/metron-dialog.component';
-import { DateFilterValue } from 'app/model/date-filter-value';
import { SaveSearch } from 'app/model/save-search';
@Component({
@@ -179,7 +178,7 @@ describe('AlertsListComponent', () => {
fireLoadSavedSearch: (savedSearch: any) => {
this.loadSavedSearch$.next(savedSearch);
},
- saveAsRecentSearches: (savedSearch: any) => of(),
+ saveAsRecentSearches: () => of(null),
} } },
{ provide: MetaAlertService, useClass: () => { return {
alertChanged$: new Observable(),
@@ -202,6 +201,7 @@ describe('AlertsListComponent', () => {
setManualQuery: () => {},
getFilteringMode: () => {},
setFilteringMode: () => {},
+ generateNameForSearchRequest: () => '',
setSearch: () => {},
} } },
{ provide: AutoPollingService, useClass: () => { return {
@@ -781,4 +781,80 @@ describe('AlertsListComponent', () => {
expect(component.search).toHaveBeenCalled();
});
});
+
+ describe('save/load manual query search', () => {
+
+ it('should switch to manual mode if the saved search is manual', () => {
+
+ const saveSearchSvc = TestBed.get(SaveSearchService);
+ const savedSearch = new SaveSearch();
+ savedSearch.isManual = true;
+ savedSearch.searchRequest = new SearchRequest();
+ savedSearch.searchRequest.query = 'foo:bar';
+ savedSearch.filters = [];
+
+ saveSearchSvc.loadSavedSearch$ = of(savedSearch);
+
+ const spySetFilteringMode = spyOn(component.queryBuilder, 'setFilteringMode');
+ const spySetManualQuery = spyOn(component.queryBuilder, 'setManualQuery');
+
+ component.addLoadSavedSearchListener();
+
+ expect(spySetFilteringMode).toHaveBeenCalledTimes(1);
+ expect(spySetFilteringMode).toHaveBeenCalledWith(FilteringMode.MANUAL);
+
+ expect(spySetManualQuery).toHaveBeenCalledWith('foo:bar');
+ });
+
+ it('should switch to builder mode if the saved search is not manual', () => {
+ const saveSearchSvc = TestBed.get(SaveSearchService);
+ const savedSearch = new SaveSearch();
+ savedSearch.isManual = false;
+ savedSearch.searchRequest = new SearchRequest();
+ savedSearch.searchRequest.query = 'foo:bar';
+ savedSearch.filters = [];
+
+ saveSearchSvc.loadSavedSearch$ = of(savedSearch);
+
+ const spySetFilteringMode = spyOn(component.queryBuilder, 'setFilteringMode');
+ const spySetManualQuery = spyOn(component.queryBuilder, 'setManualQuery');
+
+ component.addLoadSavedSearchListener();
+
+ expect(spySetFilteringMode).toHaveBeenCalledTimes(1);
+ expect(spySetFilteringMode).toHaveBeenCalledWith(FilteringMode.BUILDER);
+
+ expect(spySetManualQuery).not.toHaveBeenCalledWith('foo:bar');
+ });
+
+ it('should save the search filter mode (manual)', (done) => {
+ const saveSearchSvc = TestBed.get(SaveSearchService);
+
+ saveSearchSvc.saveAsRecentSearches = (saveSearch) => {
+ expect(saveSearch.isManual).toBe(true);
+ expect(saveSearch.searchRequest.query).toBe('foo:bar');
+ done();
+ return of(null);
+ };
+
+ component.queryBuilder.getFilteringMode = () => FilteringMode.MANUAL;
+ component.queryBuilder.query = 'foo:bar';
+ component.saveCurrentSearch();
+ });
+
+ it('should save the search filter mode (builder)', (done) => {
+ const saveSearchSvc = TestBed.get(SaveSearchService);
+
+ saveSearchSvc.saveAsRecentSearches = (saveSearch) => {
+ expect(saveSearch.isManual).toBe(false);
+ expect(saveSearch.searchRequest.query).toBe('');
+ done();
+ return of(null);
+ };
+
+ component.queryBuilder.getFilteringMode = () => FilteringMode.BUILDER;
+ component.queryBuilder.query = 'foo:bar';
+ component.saveCurrentSearch();
+ });
+ });
});
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
index 66c0f0f..f525b24 100755
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
@@ -147,6 +147,13 @@ export class AlertsListComponent implements OnInit, OnDestroy {
addLoadSavedSearchListener() {
this.saveSearchService.loadSavedSearch$.subscribe((savedSearch: SaveSearch) => {
+ if (savedSearch.isManual === true) {
+ this.queryBuilder.setFilteringMode(FilteringMode.MANUAL);
+ this.queryBuilder.setManualQuery(savedSearch.searchRequest.query);
+ } else {
+ this.queryBuilder.setFilteringMode(FilteringMode.BUILDER);
+ }
+
this.queryBuilder.searchRequest = savedSearch.searchRequest;
this.queryBuilder.filters = savedSearch.filters;
this.setSelectedTimeRange(savedSearch.filters);
@@ -433,10 +440,19 @@ export class AlertsListComponent implements OnInit, OnDestroy {
}
}
- saveCurrentSearch(savedSearch: SaveSearch) {
+ saveCurrentSearch(savedSearch?: SaveSearch) {
+ const isManual = () => this.queryBuilder.getFilteringMode() === FilteringMode.MANUAL;
if (this.queryBuilder.query !== '*') {
- this.saveSearchService.saveAsRecentSearches(savedSearch).subscribe(() => {
- });
+ if (!savedSearch) {
+ savedSearch = new SaveSearch();
+ savedSearch.searchRequest = this.queryBuilder.searchRequest;
+ savedSearch.tableColumns = this.alertsColumns;
+ savedSearch.filters = this.queryBuilder.filters;
+ savedSearch.searchRequest.query = isManual() ? this.queryBuilder.query : '';
+ savedSearch.name = this.queryBuilder.generateNameForSearchRequest();
+ savedSearch.isManual = isManual();
+ }
+ this.saveSearchService.saveAsRecentSearches(savedSearch).subscribe();
}
}
diff --git a/metron-interface/metron-alerts/src/app/alerts/alerts-list/query-builder.ts b/metron-interface/metron-alerts/src/app/alerts/alerts-list/query-builder.ts
index 500cbb5..5f3e3fc 100644
--- a/metron-interface/metron-alerts/src/app/alerts/alerts-list/query-builder.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/alerts-list/query-builder.ts
@@ -43,6 +43,10 @@ export class QueryBuilder {
return this.searchRequest.query;
}
+ set query(value: string) {
+ this.searchRequest.query = value;
+ }
+
get displayQuery(): string {
return this.generateSelectForDisplay();
}
diff --git a/metron-interface/metron-alerts/src/app/alerts/save-search/save-search.component.ts b/metron-interface/metron-alerts/src/app/alerts/save-search/save-search.component.ts
index 276cb9b..57dd94f 100644
--- a/metron-interface/metron-alerts/src/app/alerts/save-search/save-search.component.ts
+++ b/metron-interface/metron-alerts/src/app/alerts/save-search/save-search.component.ts
@@ -22,6 +22,7 @@ import {SaveSearchService} from '../../service/save-search.service';
import {SaveSearch} from '../../model/save-search';
import { DialogService } from 'app/service/dialog.service';
import { ConfirmationType } from 'app/model/confirmation-type';
+import { FilteringMode } from '../alerts-list/query-builder';
@Component({
selector: 'app-save-search',
@@ -46,10 +47,13 @@ export class SaveSearchComponent implements OnInit {
}
save() {
+ const isManual = () => this.saveSearchService.queryBuilder.getFilteringMode() === FilteringMode.MANUAL;
+
this.saveSearch.searchRequest = this.saveSearchService.queryBuilder.searchRequest;
this.saveSearch.tableColumns = this.saveSearchService.tableColumns;
this.saveSearch.filters = this.saveSearchService.queryBuilder.filters;
- this.saveSearch.searchRequest.query = '';
+ this.saveSearch.searchRequest.query = isManual() ? this.saveSearchService.queryBuilder.query : '';
+ this.saveSearch.isManual = isManual()
this.saveSearchService.saveSearch(this.saveSearch).subscribe(() => {
this.goBack();
diff --git a/metron-interface/metron-alerts/src/app/model/save-search.ts b/metron-interface/metron-alerts/src/app/model/save-search.ts
index 173f60e..f185de7 100644
--- a/metron-interface/metron-alerts/src/app/model/save-search.ts
+++ b/metron-interface/metron-alerts/src/app/model/save-search.ts
@@ -27,6 +27,7 @@ export class SaveSearch {
searchRequest: SearchRequest;
tableColumns: ColumnMetadata[];
filters: Filter[];
+ isManual = false
public static fromJSON(obj: SaveSearch): SaveSearch {
let saveSearch = new SaveSearch();
@@ -35,6 +36,7 @@ export class SaveSearch {
saveSearch.searchRequest = obj.searchRequest;
saveSearch.filters = Filter.fromJSON(obj.filters);
saveSearch.tableColumns = ColumnMetadata.fromJSON(obj.tableColumns);
+ saveSearch.isManual = obj.isManual;
return saveSearch;
}