Github user merrimanr commented on a diff in the pull request:

    https://github.com/apache/metron/pull/768#discussion_r143729308
  
    --- Diff: 
metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.ts
 ---
    @@ -0,0 +1,319 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
    +import {Router} from '@angular/router';
    +import {Subscription} from 'rxjs/Rx';
    +
    +import {TableViewComponent} from '../table-view/table-view.component';
    +import {SearchResponse} from '../../../model/search-response';
    +import {SearchService} from '../../../service/search.service';
    +import {TreeGroupData, TreeAlertsSubscription} from './tree-group-data';
    +import {GroupResponse} from '../../../model/group-response';
    +import {GroupResult} from '../../../model/group-result';
    +import {Group} from '../../../model/group';
    +import {SortField} from '../../../model/sort-field';
    +import {Sort} from '../../../utils/enums';
    +import {MetronDialogBox, DialogType} from 
'../../../shared/metron-dialog-box';
    +import {ElasticsearchUtils} from '../../../utils/elasticsearch-utils';
    +import {SearchRequest} from '../../../model/search-request';
    +
    +@Component({
    +  selector: 'app-tree-view',
    +  templateUrl: './tree-view.component.html',
    +  styleUrls: ['./tree-view.component.scss']
    +})
    +
    +export class TreeViewComponent extends TableViewComponent implements 
OnChanges {
    +
    +  groupByFields: string[] = [];
    +  topGroups: TreeGroupData[] = [];
    +  groupResponse: GroupResponse = new GroupResponse();
    +  treeGroupSubscriptionMap: {[key: string]: TreeAlertsSubscription } = {};
    +
    +  constructor(router: Router,
    +              searchService: SearchService,
    +              metronDialogBox: MetronDialogBox) {
    +    super(router, searchService, metronDialogBox);
    +  }
    +
    +  collapseGroup(groupArray: TreeGroupData[], level: number, index: number) 
{
    +    for (let i = index + 1; i < groupArray.length; i++) {
    +      if (groupArray[i].level > (level)) {
    +        groupArray[i].show = false;
    +        groupArray[i].expand = false;
    +      } else {
    +        break;
    +      }
    +    }
    +  }
    +
    +  createQuery(selectedGroup: TreeGroupData) {
    +    let searchQuery = this.queryBuilder.generateSelect();
    +    let groupQery = Object.keys(selectedGroup.groupQueryMap).map(key => {
    +      return key.replace(/:/g, '\\:') +
    +          ':' +
    +          String(selectedGroup.groupQueryMap[key])
    +          .replace(/[\*\+\-=~><\"\?^\${}\(\)\:\!\/[\]\\\s]/g, '\\$&') // 
replace single  special characters
    +          .replace(/\|\|/g, '\\||') // replace ||
    +          .replace(/\&\&/g, '\\&&'); // replace &&
    +    }).join(' AND ');
    +
    +    groupQery += searchQuery === '*' ? '' : (' AND ' + searchQuery);
    +    return groupQery;
    +  }
    +
    +  expandGroup(groupArray: TreeGroupData[], level: number, index: number) {
    +    for (let i = index + 1; i < groupArray.length; i++) {
    +      if (groupArray[i].level === (level + 1)) {
    +        groupArray[i].show = true;
    +      } else {
    +        break;
    +      }
    +    }
    +  }
    +
    +  getAlerts(selectedGroup: TreeGroupData): Subscription {
    +    let searchRequest = new SearchRequest();
    +    searchRequest.query = this.createQuery(selectedGroup);
    +    searchRequest.from = selectedGroup.pagingData.from;
    +    searchRequest.size = selectedGroup.pagingData.size;
    +    searchRequest.sort = selectedGroup.sortField ? 
[selectedGroup.sortField] : [];
    +
    +    return this.searchGroup(selectedGroup, searchRequest);
    --- End diff --
    
    Do we have a test case for this?  I didn't see one in the commit that 
addressed this issue.


---

Reply via email to