Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

METRON-2292: [UI] Manual query can't be saved on the Alerts UI #1533

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -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({
Expand Down Expand Up @@ -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(),
Expand All @@ -202,6 +201,7 @@ describe('AlertsListComponent', () => {
setManualQuery: () => {},
getFilteringMode: () => {},
setFilteringMode: () => {},
generateNameForSearchRequest: () => '',
setSearch: () => {},
} } },
{ provide: AutoPollingService, useClass: () => { return {
Expand Down Expand Up @@ -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();
});
});
});
Expand Up @@ -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);
Expand Down Expand Up @@ -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();
}
}

Expand Down
Expand Up @@ -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();
}
Expand Down
Expand Up @@ -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',
Expand All @@ -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();
Expand Down
2 changes: 2 additions & 0 deletions metron-interface/metron-alerts/src/app/model/save-search.ts
Expand Up @@ -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();
Expand All @@ -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;
}
Expand Down