Browse Source

AMBARI-22825 Add different options of field name display

Istvan Tobias 7 years ago
parent
commit
4df8e38835
36 changed files with 2441 additions and 3168 deletions
  1. 2 0
      ambari-logsearch/ambari-logsearch-web/package.json
  2. 0 225
      ambari-logsearch/ambari-logsearch-web/src/app/classes/models/audit-log-field.ts
  3. 0 27
      ambari-logsearch/ambari-logsearch-web/src/app/classes/models/log-field.ts
  4. 0 107
      ambari-logsearch/ambari-logsearch-web/src/app/classes/models/service-log-field.ts
  5. 3 4
      ambari-logsearch/ambari-logsearch-web/src/app/classes/models/store.ts
  6. 21 0
      ambari-logsearch/ambari-logsearch-web/src/app/classes/object.ts
  7. 2 14
      ambari-logsearch/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.spec.ts
  8. 2 14
      ambari-logsearch/ambari-logsearch-web/src/app/components/audit-logs-entries/audit-logs-entries.component.spec.ts
  9. 2 14
      ambari-logsearch/ambari-logsearch-web/src/app/components/audit-logs-table/audit-logs-table.component.spec.ts
  10. 2 6
      ambari-logsearch/ambari-logsearch-web/src/app/components/context-menu/context-menu.component.spec.ts
  11. 2 6
      ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.spec.ts
  12. 3 2
      ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
  13. 2 6
      ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
  14. 2 7
      ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
  15. 37 21
      ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
  16. 2 14
      ambari-logsearch/ambari-logsearch-web/src/app/components/log-context/log-context.component.spec.ts
  17. 2 14
      ambari-logsearch/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.spec.ts
  18. 1 1
      ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
  19. 2 15
      ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
  20. 5 15
      ambari-logsearch/ambari-logsearch-web/src/app/components/service-logs-table/service-logs-table.component.spec.ts
  21. 2 13
      ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.spec.ts
  22. 3 13
      ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
  23. 3 14
      ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
  24. 2177 0
      ambari-logsearch/ambari-logsearch-web/src/app/mock-data-by-url.ts
  25. 0 2508
      ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
  26. 3 14
      ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
  27. 2 1
      ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.ts
  28. 4 14
      ambari-logsearch/ambari-logsearch-web/src/app/services/history-manager.service.spec.ts
  29. 2 14
      ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
  30. 20 30
      ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
  31. 23 16
      ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
  32. 46 3
      ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs-fields.service.ts
  33. 4 14
      ambari-logsearch/ambari-logsearch-web/src/app/services/user-settings.service.spec.ts
  34. 11 1
      ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
  35. 25 1
      ambari-logsearch/ambari-logsearch-web/src/app/test-config.spec.ts
  36. 24 0
      ambari-logsearch/ambari-logsearch-web/yarn.lock

+ 2 - 0
ambari-logsearch/ambari-logsearch-web/package.json

@@ -28,6 +28,7 @@
     "angular-moment-timezone": "^0.2.1",
     "angular-pipes": "^6.5.3",
     "angular2-moment": "^1.4.0",
+    "angular2-take-until-destroy": "^2.0.1",
     "bootstrap": "^3.3.7",
     "core-js": "^2.4.1",
     "d3": "^4.10.0",
@@ -74,6 +75,7 @@
     "postcss-loader": "^1.3.3",
     "postcss-url": "^5.1.2",
     "protractor": "~5.1.0",
+    "randomatic": "^3.0.0",
     "raw-loader": "^0.5.1",
     "sass-loader": "^6.0.3",
     "source-map-loader": "^0.2.0",

+ 0 - 225
ambari-logsearch/ambari-logsearch-web/src/app/classes/models/audit-log-field.ts

@@ -1,225 +0,0 @@
-/**
- * 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 {LogField} from '@app/classes/models/log-field';
-
-const columnsNamesMap = {
-  access: {
-    displayName: 'logs.accessType',
-    isDisplayed: true
-  },
-  action: {
-    displayName: 'logs.action'
-  },
-  agent: {
-    displayName: 'logs.agent'
-  },
-  agentHost: {
-    displayName: 'logs.agentHost'
-  },
-  authType: {
-    displayName: 'logs.authType'
-  },
-  bundle_id: {
-    displayName: 'logs.bundleId'
-  },
-  case_id: {
-    displayName: 'logs.caseId'
-  },
-  cliIP: {
-    displayName: 'logs.clientIp',
-    isDisplayed: true
-  },
-  cliType: {
-    displayName: 'logs.clientType'
-  },
-  cluster: {
-    displayName: 'logs.cluster'
-  },
-  dst: {
-    displayName: 'logs.dst'
-  },
-  evtTime: {
-    displayName: 'logs.eventTime',
-    isDisplayed: true
-  },
-  file: {
-    displayName: 'logs.file'
-  },
-  host: {
-    displayName: 'logs.host'
-  },
-  id: {
-    displayName: 'logs.id'
-  },
-  ip: {
-    displayName: 'logs.ip'
-  },
-  level: {
-    displayName: 'logs.level'
-  },
-  log_message: {
-    displayName: 'logs.message'
-  },
-  logType: {
-    displayName: 'logs.logType'
-  },
-  logfile_line_number: {
-    displayName: 'logs.logfileLineNumber'
-  },
-  logger_name: {
-    displayName: 'logs.loggerName'
-  },
-  logtime: {
-    displayName: 'logs.logTime'
-  },
-  path: {
-    displayName: 'logs.path'
-  },
-  perm: {
-    displayName: 'logs.perm'
-  },
-  policy: {
-    displayName: 'logs.policy'
-  },
-  proxyUsers: {
-    displayName: 'logs.proxyUsers'
-  },
-  reason: {
-    displayName: 'logs.reason'
-  },
-  repo: {
-    displayName: 'logs.repo',
-    isDisplayed: true
-  },
-  repoType: {
-    displayName: 'logs.repoType'
-  },
-  req_caller_id: {
-    displayName: 'logs.reqCallerId'
-  },
-  reqContext: {
-    displayName: 'logs.reqContext'
-  },
-  reqData: {
-    displayName: 'logs.reqData'
-  },
-  req_self_id: {
-    displayName: 'logs.reqSelfId'
-  },
-  resType: {
-    displayName: 'logs.resType'
-  },
-  resource: {
-    displayName: 'logs.resource',
-    isDisplayed: true
-  },
-  result: {
-    displayName: 'logs.result',
-    isDisplayed: true
-  },
-  sess: {
-    displayName: 'logs.session'
-  },
-  text: {
-    displayName: 'logs.text'
-  },
-  type: {
-    displayName: 'logs.type'
-  },
-  ugi: {
-    displayName: 'logs.ugi'
-  },
-  reqUser: {
-    displayName: 'logs.user',
-    isDisplayed: true
-  },
-  ws_base_url: {
-    displayName: 'logs.baseUrl'
-  },
-  ws_command: {
-    displayName: 'logs.command'
-  },
-  ws_component: {
-    displayName: 'logs.component'
-  },
-  ws_details: {
-    displayName: 'logs.details'
-  },
-  ws_display_name: {
-    displayName: 'logs.displayName'
-  },
-  ws_os: {
-    displayName: 'logs.os'
-  },
-  ws_repo_id: {
-    displayName: 'logs.repoId'
-  },
-  ws_repo_version: {
-    displayName: 'logs.repoVersion'
-  },
-  ws_repositories: {
-    displayName: 'logs.repositories'
-  },
-  ws_request_id: {
-    displayName: 'logs.requestId'
-  },
-  ws_result_status: {
-    displayName: 'logs.resultStatus'
-  },
-  ws_roles: {
-    displayName: 'logs.roles'
-  },
-  ws_stack_version: {
-    displayName: 'logs.stackVersion'
-  },
-  ws_stack: {
-    displayName: 'logs.stack'
-  },
-  ws_status: {
-    displayName: 'logs.status'
-  },
-  ws_task_id: {
-    displayName: 'logs.taskId'
-  },
-  ws_version_note: {
-    displayName: 'logs.versionNote'
-  },
-  ws_version_number: {
-    displayName: 'logs.versionNumber'
-  },
-  tags: {
-    isAvailable: false
-  },
-  tags_str: {
-    isAvailable: false
-  },
-  seq_num: {
-    isAvailable: false
-  }
-};
-
-export class AuditLogField extends LogField {
-  constructor(name: string) {
-    super(name);
-    const preset = columnsNamesMap[this.name];
-    if (preset) {
-      Object.assign(this, preset);
-    }
-  }
-}

+ 0 - 27
ambari-logsearch/ambari-logsearch-web/src/app/classes/models/log-field.ts

@@ -1,27 +0,0 @@
-/**
- * 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.
- */
-
-export class LogField {
-  constructor(name: string) {
-    this.name = name;
-  }
-  name: string;
-  displayName: string = this.name;
-  isDisplayed: boolean = false;
-  isAvailable: boolean = true;
-}

+ 0 - 107
ambari-logsearch/ambari-logsearch-web/src/app/classes/models/service-log-field.ts

@@ -1,107 +0,0 @@
-/**
- * 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 {LogField} from '@app/classes/models/log-field';
-
-const columnsNamesMap = {
-  log_message: {
-    displayName: 'logs.message',
-    isDisplayed: true
-  },
-  bundle_id: {
-    displayName: 'logs.bundleId'
-  },
-  case_id: {
-    displayName: 'logs.caseId'
-  },
-  cluster: {
-    displayName: 'logs.cluster'
-  },
-  event_count: {
-    displayName: 'logs.eventCount'
-  },
-  file: {
-    displayName: 'logs.file'
-  },
-  host: {
-    displayName: 'logs.host'
-  },
-  id: {
-    displayName: 'logs.id'
-  },
-  ip: {
-    displayName: 'logs.ip'
-  },
-  level: {
-    displayName: 'logs.level',
-    isDisplayed: true
-  },
-  line_number: {
-    displayName: 'logs.lineNumber'
-  },
-  logtype: {
-    displayName: 'logs.logType'
-  },
-  logfile_line_number: {
-    displayName: 'logs.logfileLineNumber'
-  },
-  logger_name: {
-    displayName: 'logs.loggerName'
-  },
-  logtime: {
-    isDisplayed: true
-  },
-  method: {
-    displayName: 'logs.method'
-  },
-  path: {
-    displayName: 'logs.path'
-  },
-  rowtype: {
-    displayName: 'logs.rowType'
-  },
-  thread_name: {
-    displayName: 'logs.threadName'
-  },
-  type: {
-    displayName: 'logs.type',
-    isDisplayed: true
-  },
-  tags: {
-    isAvailable: false
-  },
-  text: {
-    isAvailable: false
-  },
-  message: {
-    isAvailable: false
-  },
-  seq_num: {
-    isAvailable: false
-  }
-};
-
-export class ServiceLogField extends LogField {
-  constructor(name: string) {
-    super(name);
-    const preset = columnsNamesMap[this.name];
-    if (preset) {
-      Object.assign(this, preset);
-    }
-  }
-}

+ 3 - 4
ambari-logsearch/ambari-logsearch-web/src/app/classes/models/store.ts

@@ -27,9 +27,8 @@ import {BarGraph} from '@app/classes/models/bar-graph';
 import {Graph} from '@app/classes/models/graph';
 import {NodeItem} from '@app/classes/models/node-item';
 import {UserConfig} from '@app/classes/models/user-config';
-import {AuditLogField} from '@app/classes/models/audit-log-field';
-import {ServiceLogField} from '@app/classes/models/service-log-field';
 import {Tab} from '@app/classes/models/tab';
+import {LogField} from "@app/classes/object";
 import {UtilsService} from '@app/services/utils.service';
 
 const storeActions = {
@@ -60,8 +59,8 @@ export interface AppStore {
   userConfigs: UserConfig[];
   clusters: string[];
   components: NodeItem[];
-  serviceLogsFields: ServiceLogField[];
-  auditLogsFields: AuditLogField[];
+  serviceLogsFields: LogField[];
+  auditLogsFields: LogField[];
   tabs: Tab[];
 }
 

+ 21 - 0
ambari-logsearch/ambari-logsearch-web/src/app/classes/object.ts

@@ -25,3 +25,24 @@ export interface LogLevelObject {
   label: string;
   color: string;
 }
+
+/**
+ * This is an interface for the service and audit log fields.
+ */
+export interface LogField {
+  group?: string; // eg.: HDFS, Ambari, etc this prop is only used in Audit logs
+  label: string;
+  name: string;
+  filterable: boolean; // it can be used in a filter query
+  visible: boolean; // visible by default in the log list
+}
+
+/**
+ * This is an interface for the service and audit log fields.
+ */
+export interface AuditFieldsDefinitionSet {
+  defaults: LogField[],
+  overrides: {
+    [key: string]: LogField[]
+  }
+}

+ 2 - 14
ambari-logsearch/ambari-logsearch-web/src/app/components/action-menu/action-menu.component.spec.ts

@@ -19,7 +19,7 @@
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {FormsModule, ReactiveFormsModule} from '@angular/forms';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -37,7 +37,6 @@ import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
 import {HistoryManagerService} from '@app/services/history-manager.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UserSettingsService} from '@app/services/user-settings.service';
 import {UtilsService} from '@app/services/utils.service';
@@ -51,14 +50,6 @@ describe('ActionMenuComponent', () => {
   let fixture: ComponentFixture<ActionMenuComponent>;
 
   beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       imports: [
         FormsModule,
@@ -86,10 +77,7 @@ describe('ActionMenuComponent', () => {
         TimerSecondsPipe
       ],
       providers: [
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
+        ...MockHttpRequestModules,
         HistoryManagerService,
         LogsContainerService,
         UserSettingsService,

+ 2 - 14
ambari-logsearch/ambari-logsearch-web/src/app/components/audit-logs-entries/audit-logs-entries.component.spec.ts

@@ -17,7 +17,7 @@
 
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -36,7 +36,6 @@ import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/s
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
 import {TabsComponent} from '@app/components/tabs/tabs.component';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 
 import {AuditLogsEntriesComponent} from './audit-logs-entries.component';
@@ -46,14 +45,6 @@ describe('AuditLogsEntriesComponent', () => {
   let fixture: ComponentFixture<AuditLogsEntriesComponent>;
 
   beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       declarations: [
         AuditLogsEntriesComponent,
@@ -78,11 +69,8 @@ describe('AuditLogsEntriesComponent', () => {
         }),
       ],
       providers: [
+        ...MockHttpRequestModules,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         UtilsService,
         AuditLogsService,
         ServiceLogsService,

+ 2 - 14
ambari-logsearch/ambari-logsearch-web/src/app/components/audit-logs-table/audit-logs-table.component.spec.ts

@@ -22,7 +22,7 @@ import {FormsModule, ReactiveFormsModule} from '@angular/forms';
 import {StoreModule} from '@ngrx/store';
 import {MomentModule} from 'angular2-moment';
 import {MomentTimezoneModule} from 'angular-moment-timezone';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
 import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
@@ -40,7 +40,6 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UtilsService} from '@app/services/utils.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {PaginationComponent} from '@app/components/pagination/pagination.component';
 import {DropdownListComponent} from '@app/components/dropdown-list/dropdown-list.component';
 
@@ -49,14 +48,6 @@ import {AuditLogsTableComponent} from './audit-logs-table.component';
 describe('AuditLogsTableComponent', () => {
   let component: AuditLogsTableComponent;
   let fixture: ComponentFixture<AuditLogsTableComponent>;
-  const httpClient = {
-    get: () => {
-      return {
-        subscribe: () => {
-        }
-      };
-    }
-  };
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
@@ -88,12 +79,9 @@ describe('AuditLogsTableComponent', () => {
         })
       ],
       providers: [
+        ...MockHttpRequestModules,
         LogsContainerService,
         UtilsService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         AuditLogsService,
         ServiceLogsService,
         AuditLogsFieldsService,

+ 2 - 6
ambari-logsearch/ambari-logsearch-web/src/app/components/context-menu/context-menu.component.spec.ts

@@ -20,7 +20,7 @@ import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {FormsModule} from '@angular/forms';
 import {StoreModule} from '@ngrx/store';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -38,7 +38,6 @@ import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/s
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
 import {ComponentGeneratorService} from '@app/services/component-generator.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {AuthService} from '@app/services/auth.service';
 import {UtilsService} from '@app/services/utils.service';
 import {DropdownListComponent} from '@app/components/dropdown-list/dropdown-list.component';
@@ -84,12 +83,9 @@ describe('ContextMenuComponent', () => {
         FormsModule
       ],
       providers: [
+        ...MockHttpRequestModules,
         ComponentGeneratorService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         HostsService,
         AuditLogsService,
         ServiceLogsService,

+ 2 - 6
ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.spec.ts

@@ -19,7 +19,7 @@
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {FormsModule} from '@angular/forms';
 import {StoreModule} from '@ngrx/store';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -37,7 +37,6 @@ import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/s
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
 import {ComponentGeneratorService} from '@app/services/component-generator.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {AuthService} from '@app/services/auth.service';
 import {UtilsService} from '@app/services/utils.service';
 
@@ -78,12 +77,9 @@ describe('DropdownListComponent', () => {
         FormsModule
       ],
       providers: [
+        ...MockHttpRequestModules,
         ComponentGeneratorService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         HostsService,
         AuditLogsService,
         ServiceLogsService,

+ 3 - 2
ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts

@@ -18,7 +18,7 @@
 
 import {
   Component, OnChanges, AfterViewChecked, SimpleChanges, Input, Output, EventEmitter, ViewChildren, ViewContainerRef,
-  QueryList
+  QueryList, ChangeDetectorRef
 } from '@angular/core';
 import {ListItem} from '@app/classes/list-item';
 import {ComponentGeneratorService} from '@app/services/component-generator.service';
@@ -30,7 +30,7 @@ import {ComponentGeneratorService} from '@app/services/component-generator.servi
 })
 export class DropdownListComponent implements OnChanges, AfterViewChecked {
 
-  constructor(private componentGenerator: ComponentGeneratorService) {
+  constructor(private componentGenerator: ComponentGeneratorService, private changeDetector: ChangeDetectorRef) {
   }
 
   private shouldRenderAdditionalComponents: boolean = false;
@@ -71,6 +71,7 @@ export class DropdownListComponent implements OnChanges, AfterViewChecked {
     if (this.shouldRenderAdditionalComponents && setter && containers) {
       containers.forEach((container, index) => this.componentGenerator[setter](this.items[index].value, container));
       this.shouldRenderAdditionalComponents = false;
+      this.changeDetector.detectChanges();
     }
   }
 

+ 2 - 6
ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts

@@ -17,7 +17,7 @@
 
 import {NO_ERRORS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
@@ -36,7 +36,6 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {UtilsService} from '@app/services/utils.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {AuthService} from '@app/services/auth.service';
 
 import {FilterDropdownComponent} from './filter-dropdown.component';
@@ -91,6 +90,7 @@ describe('FilterDropdownComponent', () => {
         ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         AppSettingsService,
         AppStateService,
         AuditLogsService,
@@ -110,10 +110,6 @@ describe('FilterDropdownComponent', () => {
         },
         UtilsService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         AuthService
       ],
       schemas: [NO_ERRORS_SCHEMA]

+ 2 - 7
ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts

@@ -19,7 +19,7 @@
 import {NO_ERRORS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {FormGroup, FormControl} from '@angular/forms';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
@@ -36,7 +36,6 @@ import {
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 
@@ -78,6 +77,7 @@ describe('FiltersPanelComponent', () => {
         ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         AppSettingsService,
         ClustersService,
         ComponentsService,
@@ -92,10 +92,6 @@ describe('FiltersPanelComponent', () => {
         ServiceLogsTruncatedService,
         TabsService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         UtilsService
       ],
       schemas: [NO_ERRORS_SCHEMA]
@@ -109,7 +105,6 @@ describe('FiltersPanelComponent', () => {
     component.filtersForm = new FormGroup({
       control: new FormControl()
     });
-    component.logsType = 'auditLogs';
     fixture.detectChanges();
   });
 

+ 37 - 21
ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts

@@ -16,50 +16,66 @@
  * limitations under the License.
  */
 
-import {Component, OnChanges, SimpleChanges, Input, ViewContainerRef} from '@angular/core';
+import {Component, OnDestroy, Input, ViewContainerRef, OnInit} from '@angular/core';
 import {FormGroup} from '@angular/forms';
 import {Observable} from 'rxjs/Observable';
 import {Subject} from 'rxjs/Subject';
 import 'rxjs/add/observable/from';
+import {TakeUntilDestroy} from "angular2-take-until-destroy";
 import {FilterCondition, SearchBoxParameter, SearchBoxParameterTriggered} from '@app/classes/filtering';
 import {ListItem} from '@app/classes/list-item';
 import {HomogeneousObject} from '@app/classes/object';
 import {LogsType} from '@app/classes/string';
 import {LogsContainerService} from '@app/services/logs-container.service';
+import {UtilsService} from "@app/services/utils.service";
+import {AppStateService} from "@app/services/storage/app-state.service";
+import {Subscription} from "rxjs/Subscription";
 
 @Component({
   selector: 'filters-panel',
   templateUrl: './filters-panel.component.html',
   styleUrls: ['./filters-panel.component.less']
 })
-export class FiltersPanelComponent implements OnChanges {
+@TakeUntilDestroy
+export class FiltersPanelComponent implements OnDestroy, OnInit {
+  componentDestroy;
+  constructor(private logsContainer: LogsContainerService, public viewContainerRef: ViewContainerRef,
+              private utils: UtilsService, private appState: AppStateService) {
+  }
 
-  constructor(private logsContainer: LogsContainerService, public viewContainerRef: ViewContainerRef) {
+  ngOnInit() {
+    this.appState.getParameter('activeLogsType').takeUntil(this.componentDestroy()).subscribe(this.onLogsTypeChange);
   }
 
-  ngOnChanges(changes: SimpleChanges): void {
-    if (changes.hasOwnProperty('logsType')) {
-      let result;
-      switch (changes.logsType.currentValue) {
-        case 'auditLogs':
-          result = this.logsContainer.auditLogsColumns;
-          break;
-        case 'serviceLogs':
-          result = this.logsContainer.serviceLogsColumns;
-          break;
-        default:
-          result = Observable.from([]);
-          break;
-      }
-      this.searchBoxItems = result;
+  ngOnDestroy() {}
+
+  private onLogsTypeChange = (currentLogsType: LogsType): void => {
+    const logsType = this.logsContainer.logsTypeMap[currentLogsType];
+    const fieldsModel: any = logsType && logsType.fieldsModel;
+    let subType:string;
+    let fields:Observable<any>;
+    switch (currentLogsType) {
+      case 'auditLogs':
+        fields = fieldsModel.getParameter(subType ? 'overrides' : 'defaults');
+        if (subType) {
+          fields = fields.map(items => items[subType]);
+        }
+        break;
+      case 'serviceLogs':
+        fields = fieldsModel.getAll();
+        break;
+      default:
+        fields = Observable.from([]);
+        break;
     }
-  }
+    this.searchBoxItems = fields.map(items => items.filter(field => field.filterable))
+      .map(this.utils.logFieldToListItemMapper);
+  };
 
   @Input()
   filtersForm: FormGroup;
 
-  @Input()
-  logsType: LogsType;
+  private subscriptions$: Subscription[] = [];
 
   searchBoxItems: Observable<ListItem[]>;
 

+ 2 - 14
ambari-logsearch/ambari-logsearch-web/src/app/components/log-context/log-context.component.spec.ts

@@ -33,10 +33,9 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {ModalComponent} from '@app/components/modal/modal.component';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 
 import {LogContextComponent} from './log-context.component';
@@ -46,14 +45,6 @@ describe('LogContextComponent', () => {
   let fixture: ComponentFixture<LogContextComponent>;
 
   beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       declarations: [
         LogContextComponent,
@@ -78,6 +69,7 @@ describe('LogContextComponent', () => {
         ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         AuditLogsService,
         ServiceLogsService,
         AuditLogsFieldsService,
@@ -92,10 +84,6 @@ describe('LogContextComponent', () => {
         ServiceLogsTruncatedService,
         TabsService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         UtilsService
       ],
       schemas: [CUSTOM_ELEMENTS_SCHEMA]

+ 2 - 14
ambari-logsearch/ambari-logsearch-web/src/app/components/log-index-filter/log-index-filter.component.spec.ts

@@ -19,7 +19,7 @@
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {FormsModule} from '@angular/forms';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -37,7 +37,6 @@ import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
 import {ComponentGeneratorService} from '@app/services/component-generator.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UserSettingsService} from '@app/services/user-settings.service';
 import {UtilsService} from '@app/services/utils.service';
@@ -51,14 +50,6 @@ describe('LogIndexFilterComponent', () => {
   let fixture: ComponentFixture<LogIndexFilterComponent>;
 
   beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       imports: [
         FormsModule,
@@ -85,11 +76,8 @@ describe('LogIndexFilterComponent', () => {
         DropdownListComponent
       ],
       providers: [
+        ...MockHttpRequestModules,
         ComponentGeneratorService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         LogsContainerService,
         UserSettingsService,
         UtilsService,

+ 1 - 1
ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html

@@ -25,7 +25,7 @@
   </div>
 </div>
 <div #container [ngClass]="{'container-fluid': true, 'fixed-filterbar': isFilterPanelFixedPostioned}">
-  <filters-panel class="row" [filtersForm]="filtersForm" [logsType]="logsType" #filtersPanel></filters-panel>
+  <filters-panel class="row" [filtersForm]="filtersForm" #filtersPanel></filters-panel>
   <div class="row events-count">
     <div *ngIf="autoRefreshRemainingSeconds" class="col-md-12">
       <div class="auto-refresh-message pull-right">

+ 2 - 15
ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts

@@ -19,7 +19,7 @@
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {StoreModule} from '@ngrx/store';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
@@ -35,7 +35,6 @@ import {
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {TabsComponent} from '@app/components/tabs/tabs.component';
@@ -43,14 +42,6 @@ import {TabsComponent} from '@app/components/tabs/tabs.component';
 import {LogsContainerComponent} from './logs-container.component';
 
 describe('LogsContainerComponent', () => {
-  const httpClient = {
-    get: () => {
-      return {
-        subscribe: () => {
-        }
-      };
-    }
-  };
   let component: LogsContainerComponent;
   let fixture: ComponentFixture<LogsContainerComponent>;
 
@@ -79,10 +70,7 @@ describe('LogsContainerComponent', () => {
         ...TranslationModules
       ],
       providers: [
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
+        ...MockHttpRequestModules,
         AppSettingsService,
         AppStateService,
         ClustersService,
@@ -107,7 +95,6 @@ describe('LogsContainerComponent', () => {
   beforeEach(() => {
     fixture = TestBed.createComponent(LogsContainerComponent);
     component = fixture.componentInstance;
-    component['logsType'] = 'serviceLogs';
     fixture.detectChanges();
   });
 

+ 5 - 15
ambari-logsearch/ambari-logsearch-web/src/app/components/service-logs-table/service-logs-table.component.spec.ts

@@ -23,7 +23,7 @@ import {StoreModule} from '@ngrx/store';
 import {MomentModule} from 'angular2-moment';
 import {MomentTimezoneModule} from 'angular-moment-timezone';
 import {TooltipModule} from 'ngx-bootstrap';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
 import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
@@ -41,32 +41,25 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UtilsService} from '@app/services/utils.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {ComponentGeneratorService} from '@app/services/component-generator.service';
 import {AuthService} from '@app/services/auth.service';
 import {PaginationComponent} from '@app/components/pagination/pagination.component';
 import {DropdownListComponent} from '@app/components/dropdown-list/dropdown-list.component';
 
 import {ServiceLogsTableComponent, ListLayout} from './service-logs-table.component';
+import {ComponentLabelPipe} from "@app/pipes/component-label";
 
 describe('ServiceLogsTableComponent', () => {
   let component: ServiceLogsTableComponent;
   let fixture: ComponentFixture<ServiceLogsTableComponent>;
-  const httpClient = {
-    get: () => {
-      return {
-        subscribe: () => {
-        }
-      };
-    }
-  };
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
       declarations: [
         ServiceLogsTableComponent,
         PaginationComponent,
-        DropdownListComponent
+        DropdownListComponent,
+        ComponentLabelPipe
       ],
       imports: [
         FormsModule,
@@ -92,12 +85,9 @@ describe('ServiceLogsTableComponent', () => {
         TooltipModule.forRoot()
       ],
       providers: [
+        ...MockHttpRequestModules,
         LogsContainerService,
         UtilsService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         AuditLogsService,
         ServiceLogsService,
         AuditLogsFieldsService,

+ 2 - 13
ambari-logsearch/ambari-logsearch-web/src/app/components/time-range-picker/time-range-picker.component.spec.ts

@@ -19,7 +19,7 @@
 import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {StoreModule} from '@ngrx/store';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
 import {ClustersService, clusters} from '@app/services/storage/clusters.service';
@@ -46,14 +46,6 @@ describe('TimeRangePickerComponent', () => {
   let fixture: ComponentFixture<TimeRangePickerComponent>;
 
   beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       declarations: [TimeRangePickerComponent],
       imports: [
@@ -75,10 +67,7 @@ describe('TimeRangePickerComponent', () => {
         ...TranslationModules
       ],
       providers: [
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
+        ...MockHttpRequestModules,
         LogsContainerService,
         UtilsService,
         AppSettingsService,

+ 3 - 13
ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts

@@ -17,7 +17,6 @@
  */
 
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
 import {AppStateService, appState} from '@app/services/storage/app-state.service';
@@ -42,6 +41,8 @@ import {AuthService} from '@app/services/auth.service';
 import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
 import {ModalComponent} from '@app/components/modal/modal.component';
 
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
+
 import {TimeZonePickerComponent} from './timezone-picker.component';
 
 describe('TimeZonePickerComponent', () => {
@@ -49,14 +50,6 @@ describe('TimeZonePickerComponent', () => {
   let fixture: ComponentFixture<TimeZonePickerComponent>;
 
   beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       declarations: [
         TimeZonePickerComponent,
@@ -82,6 +75,7 @@ describe('TimeZonePickerComponent', () => {
         ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         AppSettingsService,
         AppStateService,
         ClustersService,
@@ -95,10 +89,6 @@ describe('TimeZonePickerComponent', () => {
         ServiceLogsHistogramDataService,
         ServiceLogsTruncatedService,
         TabsService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         LogsContainerService,
         AuthService,
         UserSettingsService,

+ 3 - 14
ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts

@@ -20,7 +20,6 @@ import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 import {ReactiveFormsModule} from '@angular/forms';
 import {StoreModule} from '@ngrx/store';
-import {TranslationModules} from '@app/test-config.spec';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
 import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
@@ -37,23 +36,16 @@ import {ClustersService, clusters} from '@app/services/storage/clusters.service'
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {AuthService} from '@app/services/auth.service';
 import {UtilsService} from '@app/services/utils.service';
 
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
+
 import {TopMenuComponent} from './top-menu.component';
 
 describe('TopMenuComponent', () => {
   let component: TopMenuComponent;
   let fixture: ComponentFixture<TopMenuComponent>;
-  const httpClient = {
-    get: () => {
-      return {
-        subscribe: () => {
-        }
-      };
-    }
-  };
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
@@ -78,11 +70,8 @@ describe('TopMenuComponent', () => {
       ],
       declarations: [TopMenuComponent],
       providers: [
+        ...MockHttpRequestModules,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         AuthService,
         UtilsService,
         AuditLogsService,

+ 2177 - 0
ambari-logsearch/ambari-logsearch-web/src/app/mock-data-by-url.ts

@@ -0,0 +1,2177 @@
+/**
+ * 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 * as moment from 'moment';
+import * as randomize from 'randomatic';
+import {Moment} from "moment";
+
+const currentTime: Moment = moment();
+
+const clusters: string[] = ['cl0', 'cl1', 'cl2'];
+
+const hosts: string[] = ["c64001", "c64002", "c64003"];
+
+const services: string[] = ['hdfs', 'ambari'];
+
+const users: string[] = ['hdfs', 'admin', 'user'];
+
+const components = [
+  "ambari_agent",
+  "hdfs_secondarynamenode",
+  "infra_solr",
+  "logsearch_app",
+  "logsearch_feeder"
+];
+
+const levels = [
+  "INFO",
+  "WARN",
+  "ERROR",
+  "FATAL",
+  "DEBUG"
+];
+
+function ucFirst(str) {
+  return str.charAt(0).toUpperCase() + str.slice(1);
+}
+
+function getRandomInt(max) {
+  return Math.floor(Math.random() * Math.floor(max));
+}
+
+function getRandomElement(list: Array<any>) {
+  return list[getRandomInt(list.length)];
+}
+
+function generatePath(c: number = 3, addComponent: boolean | string = true, addService: boolean | string = false, folderNameMaxLength: number = 12): string {
+  let path = "/var/log";
+  if (addService) {
+    path += ("/" + (addService === true ? getRandomElement(services) : addService));
+    c -= 1;
+  }
+  if (addComponent) {
+    path += ("/" + (addComponent === true ? getRandomElement(components) : addComponent));
+    c -= 1;
+  }
+  for (let i=0; i<c; i+=1) {
+    path += ("/" + randomize('Aa0?', getRandomInt(folderNameMaxLength), {chars: '-_'}));
+  }
+  return path;
+}
+
+function generateServiceLog(defaults?: {[key:string]: any}) {
+  const component = (defaults && defaults.type) || getRandomElement(components);
+  const host = (defaults && defaults.host) || getRandomElement(hosts);
+  return Object.assign({
+    "id": randomize('a0', 32, {chars: '-'}),
+    "bundle_id": null,
+    "case_id": null,
+    "cluster": getRandomElement(clusters),
+    "seq_num": randomize('0', 5),
+    "log_message": randomize('a0?a0', getRandomInt(1000), {chars: " \n"}),
+    "logfile_line_number": randomize('0', 4),
+    "event_dur_ms": null,
+    "file": randomize('a0?a0', 16, {chars: '-_'}) + ".java",
+    "type": component,
+    "event_count": getRandomInt(1000),
+    "event_md5": randomize('a0', 32),
+    "message_md5": randomize('a0', 32),
+    "_ttl_": `-${getRandomInt(30)}DAYS`,
+    "_expire_at_": 1518188622956,
+    "_version_": randomize('0', 20),
+    "_router_field_": null,
+    "level": getRandomElement(levels),
+    "line_number": getRandomInt(999),
+    "logtime": moment().subtract(getRandomInt(14), 'days').valueOf(),
+    "ip": `${getRandomInt(255)}.${getRandomInt(255)}.${getRandomInt(255)}.${getRandomInt(255)}`,
+    "path": generatePath(3, component) + ".json",
+    "host": host + ".ambari.apache.org",
+    "group": host + ".ambari.apache.org"
+  }, defaults || {});
+}
+
+function generateAuditLog(defaults?: {[key: string]: any}) {
+  const component:string = (defaults && defaults.component)  || getRandomElement(components); // meta default
+  const service:string = (defaults && defaults.repo)  || getRandomElement(services);
+  const time = moment().subtract(getRandomInt(14), 'days');
+  return Object.assign({
+    policy: 'policy',
+    reason: randomize('aA', {
+      length: getRandomInt(50),
+      chars: ' .:'
+    }),
+    result: 0,
+    text: randomize('aA', {
+      length: getRandomInt(50),
+      chars: ' .:'
+    }),
+    tags: [component],
+    resource: '/' + component,
+    sess: '0',
+    access: '0',
+    logType: ucFirst(service) + 'Audit',
+    tags_str: component,
+    resType: 'agent',
+    reqUser: 'admin',
+    reqData: 'data',
+    repoType: 1,
+    repo: service,
+    proxyUsers: ['admin'],
+    evtTime: time.valueOf(),
+    enforcer: service + '-acl',
+    reqContext: service,
+    cliType: getRandomElement(['GET', 'POST']),
+    cliIP: '192.168.0.1',
+    agent: 'agent',
+    agentHost: 'localhost',
+    action: 'SERVICE_CHECK',
+    type: service + '-audit',
+    _version_: 2,
+    id: 'id0',
+    file: component + '.log',
+    seq_num: 3,
+    bundle_id: 'b0',
+    case_id: 'c0',
+    log_message: `User(${getRandomElement(users)}), Operation(SERVICE_CHECK)`,
+    logfile_line_number: 4,
+    message_md5: randomize('a0',20),
+    cluster: getRandomElement(clusters),
+    event_count: getRandomInt(100),
+    event_md5: randomize('0',20),
+    event_dur_ms: getRandomInt(900),
+    _ttl_: '+7DAYS',
+    _expire_at_: time.format(),
+    _router_field_: getRandomInt(20)
+  }, defaults || {});
+}
+
+export const mockDataByUrl = {
+  "login": {},
+  "logout": {},
+
+  "api/v1/audit/logs": function (query) {
+    let list = [];
+    let params = query.rawParams.split('&').reduce((currentObj, param) => {
+      let [key, value] = param.split('=');
+      switch (key) {
+        case 'page':
+        case 'pageSize':
+        case 'startIndex':
+          value = parseInt(value);
+          break;
+        case 'from':
+        case 'to':
+          value = decodeURIComponent(value);
+          value = moment(value);
+          break;
+        case 'userList':
+          value = decodeURIComponent(value).split(',');
+          break;
+      }
+      currentObj[key] = value;
+      return currentObj;
+    }, {});
+    console.info(params);
+    const pageSize = params.pageSize || 50;
+    const intervalSteps = params.to.diff(params.from) / pageSize;
+    const startTime = params.from.valueOf();
+    for (let i = 0; i < pageSize; i += 1) {
+      let defaults: {[key:string]: any} = {logtime: startTime + (i * intervalSteps)};
+      list.push(generateAuditLog(defaults));
+    }
+    return {
+      "startIndex": params.startIndex,
+      "pageSize": pageSize,
+      "totalCount": 10 * pageSize,
+      "resultSize": 10 * pageSize,
+      "sortType": params.sortType,
+      "sortBy": params.sortBy,
+      "queryTimeMS": 1518013198573,
+      "logList": list
+    };
+  },
+  "api/v1/audit/logs/bargraph": {
+    graphData: [{
+      dataCount: [
+        {
+          name: currentTime.toISOString(),
+          value: '75'
+        },
+        {
+          name: currentTime.clone().subtract(20, 'm').toISOString(),
+          value: '100'
+        },
+        {
+          name: currentTime.clone().subtract(40, 'm').toISOString(),
+          value: '75'
+        },
+        {
+          name: currentTime.clone().subtract(1, 'h').toISOString(),
+          value: '50'
+        }
+      ],
+      name: 'AMBARI'
+    }, {
+      dataCount: [
+        {
+          name: currentTime.toISOString(),
+          value: '150'
+        },
+        {
+          name: currentTime.clone().subtract(20, 'm').toISOString(),
+          value: '50'
+        },
+        {
+          name: currentTime.clone().subtract(40, 'm').toISOString(),
+          value: '75'
+        },
+        {
+          name: currentTime.clone().subtract(1, 'h').toISOString(),
+          value: '100'
+        }
+      ],
+      name: 'HDFS'
+    }
+  ]},
+  "api/v1/audit/logs/components": {
+    "groups": {},
+    "metadata": components.map(comp => {
+      return {
+        name: comp,
+        label: comp.split('_').map(ucFirst).join(' '),
+        group: null
+      }
+    })
+  },
+  "api/v1/audit/logs/resources/\\d": function (query) {
+    let graphData = users.map((user:string) => {
+      return {
+        name: user,
+        dataCount: services.map((service:string) => {
+          return {
+            name: service,
+            value: getRandomInt(1000)
+          }
+        })
+      };
+    });
+    return {
+      graphData: graphData
+    }
+  },
+  "api/v1/audit/logs/schema/fields": {
+    "defaults": [
+      {
+        "name": "logType",
+        "label": "Log Type",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "cluster",
+        "label": "Cluster",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "reason",
+        "label": "Reason",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "agent",
+        "label": "Agent",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "access",
+        "label": "Access Type",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "dst",
+        "label": "DST",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "perm",
+        "label": "Perm",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "event_count",
+        "label": "Event Count",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "repo",
+        "label": "Repo",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "sess",
+        "label": "Session",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "reqUser",
+        "label": "User",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "task_id",
+        "label": "Task Id",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "type",
+        "label": "Type",
+        "filterable": true,
+        "visible": true
+      },
+      {
+        "name": "reqData",
+        "label": "Req Data",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "result",
+        "label": "Result",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "path",
+        "label": "Path",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "file",
+        "label": "File",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "ugi",
+        "label": "UGI",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "case_id",
+        "label": "Case Id",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "host",
+        "label": "Host",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "action",
+        "label": "Action",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "log_message",
+        "label": "Log Message",
+        "filterable": true,
+        "visible": true
+      },
+      {
+        "name": "agentHost",
+        "label": "Agent Host",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "id",
+        "label": "Id",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "logger_name",
+        "label": "Logger Name",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "text",
+        "label": "Text",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "authType",
+        "label": "Auth Type",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "logfile_line_number",
+        "label": "Logfile Line Number",
+        "filterable": true,
+        "visible": true
+      },
+      {
+        "name": "policy",
+        "label": "Policy",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "cliIP",
+        "label": "Client Ip",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "level",
+        "label": "Level",
+        "filterable": true,
+        "visible": true
+      },
+      {
+        "name": "resource",
+        "label": "Resource",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "resType",
+        "label": "Res Type",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "ip",
+        "label": "IP",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "evtTime",
+        "label": "Event Time",
+        "filterable": true,
+        "visible": true
+      },
+      {
+        "name": "req_self_id",
+        "label": "Req Self Id",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "repoType",
+        "label": "Repo Type",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "req_caller_id",
+        "label": "Req Caller Id",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "enforcer",
+        "label": "Access Enforcer",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "bundle_id",
+        "label": "Bundle Id",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "cliType",
+        "label": "Client Type",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "reqContext",
+        "label": "Req Context",
+        "filterable": true,
+        "visible": false
+      },
+      {
+        "name": "proxyUsers",
+        "label": "Proxy Users",
+        "filterable": true,
+        "visible": false
+      }
+    ],
+    "overrides": {
+      "ambari": [
+        {
+          "name": "logType",
+          "label": "Log Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cluster",
+          "label": "Cluster",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reason",
+          "label": "Reason",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "agent",
+          "label": "Agent",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "access",
+          "label": "Access",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "dst",
+          "label": "Dst",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "perm",
+          "label": "Perm",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "event_count",
+          "label": "Event Count",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "repo",
+          "label": "Repo",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "sess",
+          "label": "Sess",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqUser",
+          "label": "Req User",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "task_id",
+          "label": "Task Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "type",
+          "label": "Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqData",
+          "label": "Req Data",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "result",
+          "label": "Result",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "path",
+          "label": "Path",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "file",
+          "label": "File",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "ugi",
+          "label": "Ugi",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "case_id",
+          "label": "Case Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "host",
+          "label": "Host",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "action",
+          "label": "Action",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "log_message",
+          "label": "Log Message",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "agentHost",
+          "label": "Agent Host",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "id",
+          "label": "Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "logger_name",
+          "label": "Logger Name",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "text",
+          "label": "Text",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "authType",
+          "label": "Auth Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "logfile_line_number",
+          "label": "Logfile Line Number",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "policy",
+          "label": "Policy",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cliIP",
+          "label": "Cli I P",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "level",
+          "label": "Level",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "resource",
+          "label": "Resource",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "resType",
+          "label": "Res Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "ip",
+          "label": "Ip",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "evtTime",
+          "label": "Evt Time",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "req_self_id",
+          "label": "Req Self Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "repoType",
+          "label": "Repo Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "req_caller_id",
+          "label": "Req Caller Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "enforcer",
+          "label": "Enforcer",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "bundle_id",
+          "label": "Bundle Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cliType",
+          "label": "Cli Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqContext",
+          "label": "Req Context",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "proxyUsers",
+          "label": "Proxy Users",
+          "filterable": true,
+          "visible": false
+        }
+      ],
+      "RangerAudit": [
+        {
+          "name": "logType",
+          "label": "Log Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cluster",
+          "label": "Cluster",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reason",
+          "label": "Reason",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "agent",
+          "label": "Agent",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "access",
+          "label": "Access",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "dst",
+          "label": "Dst",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "perm",
+          "label": "Perm",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "event_count",
+          "label": "Event Count",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "repo",
+          "label": "Repo",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "sess",
+          "label": "Sess",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqUser",
+          "label": "Req User",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "task_id",
+          "label": "Task Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "type",
+          "label": "Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqData",
+          "label": "Req Data",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "result",
+          "label": "Result",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "path",
+          "label": "Path",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "file",
+          "label": "File",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "ugi",
+          "label": "Ugi",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "case_id",
+          "label": "Case Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "host",
+          "label": "Host",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "action",
+          "label": "Action",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "log_message",
+          "label": "Log Message",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "agentHost",
+          "label": "Agent Host",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "id",
+          "label": "Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "logger_name",
+          "label": "Logger Name",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "text",
+          "label": "Text",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "authType",
+          "label": "Auth Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "logfile_line_number",
+          "label": "Logfile Line Number",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "policy",
+          "label": "Policy",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cliIP",
+          "label": "Cli I P",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "level",
+          "label": "Level",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "resource",
+          "label": "Resource",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "resType",
+          "label": "Res Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "ip",
+          "label": "Ip",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "evtTime",
+          "label": "Evt Time",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "req_self_id",
+          "label": "Req Self Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "repoType",
+          "label": "Repo Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "req_caller_id",
+          "label": "Req Caller Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "enforcer",
+          "label": "Enforcer",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "bundle_id",
+          "label": "Bundle Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cliType",
+          "label": "Cli Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqContext",
+          "label": "Req Context",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "proxyUsers",
+          "label": "Proxy Users",
+          "filterable": true,
+          "visible": false
+        }
+      ],
+      "hdfs": [
+        {
+          "name": "logType",
+          "label": "Log Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cluster",
+          "label": "Cluster",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reason",
+          "label": "Reason",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "agent",
+          "label": "Agent",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "access",
+          "label": "Access",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "dst",
+          "label": "Dst",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "perm",
+          "label": "Perm",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "event_count",
+          "label": "Event Count",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "repo",
+          "label": "Repo",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "sess",
+          "label": "Sess",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqUser",
+          "label": "Req User",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "task_id",
+          "label": "Task Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "type",
+          "label": "Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqData",
+          "label": "Req Data",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "result",
+          "label": "Result",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "path",
+          "label": "Path",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "file",
+          "label": "File",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "ugi",
+          "label": "Ugi",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "case_id",
+          "label": "Case Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "host",
+          "label": "Host",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "action",
+          "label": "Action",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "log_message",
+          "label": "Log Message",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "agentHost",
+          "label": "Agent Host",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "id",
+          "label": "Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "logger_name",
+          "label": "Logger Name",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "text",
+          "label": "Text",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "authType",
+          "label": "Auth Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "logfile_line_number",
+          "label": "Logfile Line Number",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "policy",
+          "label": "Policy",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cliIP",
+          "label": "Cli I P",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "level",
+          "label": "Level",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "resource",
+          "label": "Resource",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "resType",
+          "label": "Res Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "ip",
+          "label": "Ip",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "evtTime",
+          "label": "Evt Time",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "req_self_id",
+          "label": "Req Self Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "repoType",
+          "label": "Repo Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "req_caller_id",
+          "label": "Req Caller Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "enforcer",
+          "label": "Enforcer",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "bundle_id",
+          "label": "Bundle Id",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "cliType",
+          "label": "Cli Type",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "reqContext",
+          "label": "Req Context",
+          "filterable": true,
+          "visible": false
+        },
+        {
+          "name": "proxyUsers",
+          "label": "Proxy Users",
+          "filterable": true,
+          "visible": false
+        }
+      ]
+    }
+  },
+  "api/v1/audit/logs/serviceload": {
+    graphData: [
+      {
+        dataCount: [
+          {
+            name: 'n4',
+            value: 1
+          },
+          {
+            name: 'n5',
+            value: 2
+          }
+        ],
+        name: 'graph2'
+      },
+      {
+        dataCount: [
+          {
+            name: 'n6',
+            value: 10
+          },
+          {
+            name: 'n7',
+            value: 20
+          }
+        ],
+        name: 'graph3'
+      }
+    ]
+  },
+
+  "api/v1/public/config": {},
+
+  "api/v1/service/logs": function (query) {
+    let list = [];
+    let params = query.rawParams.split('&').reduce((currentObj, param) => {
+      let [key, value] = param.split('=');
+      switch (key) {
+        case 'page':
+        case 'pageSize':
+        case 'startIndex':
+          value = parseInt(value);
+          break;
+        case 'from':
+        case 'to':
+          value = decodeURIComponent(value);
+          value = moment(value);
+          break;
+        case 'mustBe':
+        case 'hostList':
+        case 'level':
+          value = decodeURIComponent(value).split(',');
+          break;
+      }
+      currentObj[key] = value;
+      return currentObj;
+    }, {});
+    const pageSize = params.pageSize || 50;
+    const intervalSteps = params.to.diff(params.from) / pageSize;
+    const startTime = params.from.valueOf();
+
+    for (let i = 0; i < pageSize; i += 1) {
+      let defaults: {[key:string]: any} = {logtime: startTime + (i * intervalSteps)};
+      if (params.mustBe) {
+        defaults.type = getRandomElement(params.mustBe);
+      }
+      if (params.hostList) {
+        defaults.host = getRandomElement(params.hostList);
+      }
+      if (params.level) {
+        defaults.level = getRandomElement(params.level);
+      }
+      list.push(generateServiceLog(defaults));
+    }
+    return {
+      "startIndex": params.startIndex,
+      "pageSize": pageSize,
+      "totalCount": 10 * pageSize,
+      "resultSize": 10 * pageSize,
+      "sortType": params.sortType,
+      "sortBy": params.sortBy,
+      "queryTimeMS": 1518013198573,
+      "logList": list
+    };
+  },
+  "api/v1/service/logs/logList": (query) => {
+    let list = [];
+    let params = query.rawParams.split('&').reduce((currentObj, param) => {
+      let [key, value] = param.split('=');
+      switch (key) {
+        case 'page':
+        case 'pageSize':
+        case 'startIndex':
+          value = parseInt(value);
+          break;
+        case 'from':
+        case 'to':
+          value = decodeURIComponent(value);
+          value = moment(value);
+          break;
+        case 'mustBe':
+        case 'hostList':
+        case 'level':
+          value = decodeURIComponent(value).split(',');
+          break;
+      }
+      currentObj[key] = value;
+      return currentObj;
+    }, {});
+    const pageSize = params.pageSize || 50;
+    const intervalSteps = params.to.diff(params.from) / pageSize;
+    const startTime = params.from.valueOf();
+
+    for (let i = 0; i < pageSize; i += 1) {
+      let defaults: {[key:string]: any} = {
+        logtime: startTime + (i * intervalSteps),
+        event_dur_ms: getRandomInt(1000)
+      };
+      if (params.mustBe) {
+        defaults.type = getRandomElement(params.mustBe);
+      }
+      if (params.hostList) {
+        defaults.host = getRandomElement(params.hostList);
+      }
+      if (params.level) {
+        defaults.level = getRandomElement(params.level);
+      }
+      list.push(generateServiceLog(defaults));
+    }
+    return list;
+  },
+  "api/v1/service/logs/aggregated": {
+    graphData: [
+      {
+        name: 'n0',
+        count: 100,
+        dataList: [
+          {
+            name: 'n1',
+            count: 50,
+            dataList: null
+          },
+          {
+            name: 'n2',
+            count: 200,
+            dataList: null
+          }
+        ]
+      },
+      {
+        name: 'n3',
+        count: 10,
+        dataList: [
+          {
+            name: 'n4',
+            count: 5,
+            dataList: null
+          },
+          {
+            name: 'n5',
+            count: 20,
+            dataList: null
+          }
+        ]
+      }
+    ]
+  },
+  "api/v1/service/logs/components": {
+    "groups": {},
+    "metadata": components.map(comp => {
+      return {
+        name: comp,
+        label: comp.split('_').map(ucFirst).join(' '),
+        group: null
+      }
+    })
+  },
+  "api/v1/service/logs/components/levels/counts": {
+    vNodeList: [
+      {
+        name: 'ambari',
+        type: 0,
+        logLevelCount: [
+          {
+            name: 'ERROR',
+            value: '10'
+          },
+          {
+            name: 'WARN',
+            value: '50'
+          }
+        ],
+        childs: [
+          {
+            name: 'hdfs',
+            type: 2,
+            logLevelCount: [
+              {
+                name: 'ERROR',
+                value: '10'
+              },
+              {
+                name: 'WARN',
+                value: '20'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          },
+          {
+            name: 'zookeeper',
+            type: 3,
+            logLevelCount: [
+              {
+                name: 'ERROR',
+                value: '20'
+              },
+              {
+                name: 'WARN',
+                value: '40'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          }
+        ],
+        isParent: true,
+        isRoot: false
+      },
+      {
+        name: 'ambari_agent',
+        type: 1,
+        logLevelCount: [
+          {
+            name: 'ERROR',
+            value: '100'
+          },
+          {
+            name: 'WARN',
+            value: '500'
+          }
+        ],
+        isParent: false,
+        isRoot: false
+      }
+    ]
+  },
+  "api/v1/service/logs/files": {
+    hostLogFiles: {
+      clusters: clusters,
+      services: services
+    }
+  },
+  "api/v1/service/logs/histogram": {
+    graphData: [
+      {
+        dataCount: [
+          {
+            name: currentTime.toISOString(),
+            value: '1000'
+          },
+          {
+            name: currentTime.clone().subtract(1, 'h').toISOString(),
+            value: '2000'
+          }
+        ],
+        name: 'ERROR'
+      },
+      {
+        dataCount: [
+          {
+            name: currentTime.toISOString(),
+            value: '700'
+          },
+          {
+            name: currentTime.clone().subtract(1, 'h').toISOString(),
+            value: '900'
+          }
+        ],
+        name: 'WARN'
+      }
+    ]
+  },
+  "api/v1/service/logs/hosts": {
+    groupList: hosts.map(host => Object.assign({}, {host}))
+  },
+  "api/v1/service/logs/schema/fields": [{
+    "name": "cluster",
+    "label": "Cluster",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "key_log_message",
+    "label": "Key Log Message",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "type",
+    "label": "Component",
+    "filterable": true,
+    "visible": true
+  }, {
+    "name": "path",
+    "label": "Path",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "logtype",
+    "label": "Logtype",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "file",
+    "label": "File",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "line_number",
+    "label": "Line Number",
+    "filterable": true,
+    "visible": true
+  }, {
+    "name": "host",
+    "label": "Host",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "log_message",
+    "label": "Message",
+    "filterable": true,
+    "visible": true
+  }, {
+    "name": "logger_name",
+    "label": "Logger Name",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "logfile_line_number",
+    "label": "Logfile Line Number",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "group",
+    "label": "Group",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "method",
+    "label": "Method",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "level",
+    "label": "Level",
+    "filterable": true,
+    "visible": true
+  }, {
+    "name": "ip",
+    "label": "Ip",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "thread_name",
+    "label": "Thread",
+    "filterable": true,
+    "visible": false
+  }, {
+    "name": "logtime",
+    "label": "Log Time",
+    "filterable": true,
+    "visible": true
+  }],
+  "api/v1/service/logs/serviceconfig": "",
+  "api/v1/service/logs/tree": {
+    vNodeList: [
+      {
+        name: hosts[0],
+        type: 'H',
+        value: '1',
+        childs: [
+          {
+            name: 'ams_collector',
+            type: 'C',
+            value: '1',
+            logLevelCount: [
+              {
+                name: 'WARN',
+                value: '1'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          }
+        ],
+        logLevelCount: [
+          {
+            name: 'WARN',
+            value: '1'
+          }
+        ],
+        isParent: true,
+        isRoot: true
+      },
+      {
+        name: hosts[1],
+        type: 'H',
+        value: '6',
+        childs: [
+          {
+            name: 'ams_collector',
+            type: 'C',
+            value: '1',
+            logLevelCount: [
+              {
+                name: 'ERROR',
+                value: '1'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          },
+          {
+            name: 'ambari_agent',
+            type: 'C',
+            value: '1',
+            logLevelCount: [
+              {
+                name: 'FATAL',
+                value: '1'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          },
+          {
+            name: 'zookeeper_server',
+            type: 'C',
+            value: '2',
+            logLevelCount: [
+              {
+                name: 'INFO',
+                value: '1'
+              },
+              {
+                name: 'DEBUG',
+                value: '1'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          },
+          {
+            name: 'zookeeper_client',
+            type: 'C',
+            value: '2',
+            logLevelCount: [
+              {
+                name: 'TRACE',
+                value: '1'
+              },
+              {
+                name: 'UNKNOWN',
+                value: '1'
+              }
+            ],
+            isParent: false,
+            isRoot: false
+          }
+        ],
+        logLevelCount: [
+          {
+            name: 'ERROR',
+            value: '1'
+          },
+          {
+            name: 'FATAL',
+            value: '1'
+          },
+          {
+            name: 'INFO',
+            value: '1'
+          },
+          {
+            name: 'DEBUG',
+            value: '1'
+          },
+          {
+            name: 'TRACE',
+            value: '1'
+          },
+          {
+            name: 'UNKNOWN',
+            value: '1'
+          }
+        ],
+        isParent: true,
+        isRoot: true
+      }
+    ]
+  },
+  "api/v1/service/logs/truncated": {
+    logList: [
+      {
+        path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+        host: 'h0',
+        level: 'WARN',
+        logtime: '2017-05-28T11:30:22.531Z',
+        ip: '192.168.0.1',
+        logfile_line_number: 8,
+        type: 'ams_collector',
+        _version_: 9,
+        id: 'id2',
+        file: 'ambari-metrics-collector.log',
+        seq_num: 10,
+        bundle_id: 'b2',
+        case_id: 'c2',
+        log_message: 'Connection refused',
+        message_md5: '1357908642',
+        cluster: 'cl2',
+        event_count: 5,
+        event_md5: '1908755391',
+        event_dur_ms: 200,
+        _ttl_: '+5DAYS',
+        _expire_at_: '2017-05-29T11:30:22.531Z',
+        _router_field_: 20
+      },
+      {
+        path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+        host: 'h1',
+        level: 'ERROR',
+        logtime: '2017-05-28T10:30:22.531Z',
+        ip: '192.168.0.2',
+        type: 'ams_collector',
+        _version_: 14,
+        id: 'id3',
+        file: 'ambari-metrics-collector.log',
+        seq_num: 15,
+        bundle_id: 'b3',
+        case_id: 'c3',
+        log_message: 'Connection refused',
+        logfile_line_number: 16,
+        message_md5: '1357908642',
+        cluster: 'cl3',
+        event_count: 2,
+        event_md5: '1029384756',
+        event_dur_ms: 700,
+        _ttl_: '+5DAYS',
+        _expire_at_: '2017-05-29T10:30:22.531Z',
+        _router_field_: 5
+      }
+    ]
+  },
+  "api/v1/service/logs/clusters": clusters,
+
+  "api/v1/status": {
+    auditlogs: {
+      znodeReady: true,
+      solrCollectionReady: true,
+      solrAliasReady: false,
+      configurationUploaded: true
+    },
+    servicelogs: {
+      znodeReady: true,
+      solrCollectionReady: true,
+      configurationUploaded: true
+    },
+    userconfig: {
+      znodeReady: true,
+      solrCollectionReady: true,
+      configurationUploaded: true
+    }
+  },
+  "api/v1/shipper/{clusterName}/level": {
+    filter: {
+      ambari_agent: {
+        label: 'ambari_agent',
+        hosts: [
+          'h0'
+        ],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [
+          'FATAL'
+        ],
+        expiryTime: currentTime.clone().add(1, 'd').toISOString()
+      },
+      ambari_alerts: {
+        label: 'ambari_alerts',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ambari_audit: {
+        label: 'ambari_audit',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ambari_config_changes: {
+        label: 'ambari_config_changes',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ambari_eclipselink: {
+        label: 'ambari_eclipselink',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ambari_server: {
+        label: 'ambari_server',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ambari_server_check_database: {
+        label: 'ambari_server_check_database',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ams_collector: {
+        label: 'ams_collector',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ams_grafana: {
+        label: 'ams_grafana',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ams_hbase_master: {
+        label: 'ams_hbase_master',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ams_hbase_regionserver: {
+        label: 'ams_hbase_regionserver',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      ams_monitor: {
+        label: 'ams_monitor',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      hdfs_datanode: {
+        label: 'hdfs_datanode',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      hdfs_journalnode: {
+        label: 'hdfs_journalnode',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      hdfs_namenode: {
+        label: 'hdfs_namenode',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      hdfs_nfs3: {
+        label: 'hdfs_nfs3',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      hdfs_secondarynamenode: {
+        label: 'hdfs_secondarynamenode',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      hdfs_zkfc: {
+        label: 'hdfs_zkfc',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      infra_solr: {
+        label: 'infra_solr',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      logsearch_app: {
+        label: 'logsearch_app',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      logsearch_feeder: {
+        label: 'logsearch_feeder',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      logsearch_perf: {
+        label: 'logsearch_perf',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      },
+      zookeeper: {
+        label: 'zookeeper',
+        hosts: [],
+        defaultLevels: [
+          'FATAL',
+          'ERROR',
+          'WARN',
+          'INFO'
+        ],
+        overrideLevels: [],
+        expiryTime: null
+      }
+    }
+  }
+};

+ 0 - 2508
ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts

@@ -1,2508 +0,0 @@
-/**
- * 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 * as moment from 'moment';
-
-const currentTime = moment();
-
-export const mockData = {
-  login: {},
-  logout: {},
-  api: {
-    v1: {
-      audit: {
-        logs: {
-          logList: [
-            {
-              policy: 'policy',
-              reason: 'Authentication required',
-              result: 0,
-              text: 'Please log in',
-              tags: [
-                'ambari_agent'
-              ],
-              resource: '/ambari-agent',
-              sess: '0',
-              access: '0',
-              logType: 'AmbariAudit',
-              tags_str: 'ambari_agent',
-              resType: 'agent',
-              reqUser: 'admin',
-              reqData: 'data',
-              repoType: 1,
-              repo: 'ambari',
-              proxyUsers: [
-                'admin'
-              ],
-              evtTime: currentTime.valueOf(),
-              enforcer: 'ambari-acl',
-              reqContext: 'ambari',
-              cliType: 'GET',
-              cliIP: '192.168.0.1',
-              agent: 'agent',
-              agentHost: 'localhost',
-              action: 'SERVICE_CHECK',
-              type: 'ambari-audit',
-              _version_: 2,
-              id: 'id0',
-              file: 'ambari-agent.log',
-              seq_num: 3,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'User(admin), Operation(SERVICE_CHECK)',
-              logfile_line_number: 4,
-              message_md5: '12345678900987654321',
-              cluster: 'cl0',
-              event_count: 0,
-              event_md5: '09876543211234567890',
-              event_dur_ms: 100,
-              _ttl_: '+7DAYS',
-              _expire_at_: currentTime.clone().add(2, 'd').valueOf(),
-              _router_field_: 5
-            },
-            {
-              policy: 'policy',
-              reason: 'Server error',
-              result: 1,
-              text: 'Something went wrong',
-              tags: [
-                'ambari_agent'
-              ],
-              resource: '/ambari-agent',
-              sess: '1',
-              access: '1',
-              logType: 'AmbariAudit',
-              tags_str: 'ambari_server',
-              resType: 'server',
-              reqUser: 'user',
-              reqData: 'data',
-              repoType: 1,
-              repo: 'ambari',
-              proxyUsers: [
-                'user'
-              ],
-              evtTime: currentTime.clone().subtract(2, 'h').valueOf(),
-              enforcer: 'hdfs',
-              reqContext: 'ambari_server',
-              cliType: 'PUT',
-              cliIP: '192.168.0.1',
-              agent: 'agent',
-              agentHost: 'localhost',
-              action: 'SERVICE_CHECK',
-              type: 'ambari-audit',
-              _version_: 4,
-              id: 'id1',
-              file: 'ambari-agent.log',
-              seq_num: 5,
-              bundle_id: 'b1',
-              case_id: 'c1',
-              log_message: 'User(user), Operation(SERVICE_CHECK)',
-              logfile_line_number: 6,
-              message_md5: '10293847561029384756',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '01928374650192837465',
-              event_dur_ms: 500,
-              _ttl_: '+7DAYS',
-              _expire_at_: currentTime.clone().add(1, 'd').valueOf(),
-              _router_field_: 10
-            }
-          ],
-          bargraph: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: currentTime.toISOString(),
-                    value: '75'
-                  },
-                  {
-                    name: currentTime.clone().subtract(20, 'm').toISOString(),
-                    value: '100'
-                  },
-                  {
-                    name: currentTime.clone().subtract(40, 'm').toISOString(),
-                    value: '75'
-                  },
-                  {
-                    name: currentTime.clone().subtract(1, 'h').toISOString(),
-                    value: '50'
-                  }
-                ],
-                name: 'AMBARI'
-              },
-              {
-                dataCount: [
-                  {
-                    name: currentTime.toISOString(),
-                    value: '150'
-                  },
-                  {
-                    name: currentTime.clone().subtract(20, 'm').toISOString(),
-                    value: '50'
-                  },
-                  {
-                    name: currentTime.clone().subtract(40, 'm').toISOString(),
-                    value: '75'
-                  },
-                  {
-                    name: currentTime.clone().subtract(1, 'h').toISOString(),
-                    value: '100'
-                  }
-                ],
-                name: 'HDFS'
-              }
-            ]
-          },
-          components: {},
-          resources: {
-            6: {
-              graphData: [
-                {
-                  dataCount: [
-                    {
-                      name: 'hdfs',
-                      value: 800
-                    },
-                    {
-                      name: 'zookeeper',
-                      value: 400
-                    },
-                    {
-                      name: 'ambari_metrics',
-                      value: 200
-                    }
-                  ],
-                  name: 'admin'
-                },
-                {
-                  dataCount: [
-                    {
-                      name: 'ambari_agent',
-                      value: 400
-                    },
-                    {
-                      name: 'hdfs',
-                      value: 600
-                    },
-                    {
-                      name: 'ambari_metrics',
-                      value: 300
-                    }
-                  ],
-                  name: 'user'
-                }
-              ]
-            },
-            10: {
-              graphData: [
-                {
-                  dataCount: [
-                    {
-                      name: 'ambari',
-                      value: 800
-                    },
-                    {
-                      name: 'hdfs',
-                      value: 400
-                    },
-                    {
-                      name: 'hbase',
-                      value: 200
-                    },
-                  ],
-                  name: '/user'
-                },
-                {
-                  dataCount: [
-                    {
-                      name: 'hdfs',
-                      value: 400
-                    },
-                    {
-                      name: 'hbase',
-                      value: 600
-                    },
-                    {
-                      name: 'kafka',
-                      value: 300
-                    }
-                  ],
-                  name: '/root'
-                }
-              ]
-            }
-          },
-          schema: {
-            fields: {
-              'cluster': 'key_lower_case',
-              'ws_status': 'text_ws',
-              'reason': 'text_std_token_lower_case',
-              'agent': 'key_lower_case',
-              'Base URL': 'key_lower_case',
-              'sess': 'key_lower_case',
-              'type': 'key_lower_case',
-              'seq_num': 'tlong',
-              'path': 'key_lower_case',
-              'ugi': 'key_lower_case',
-              'host': 'key_lower_case',
-              'case_id': 'key_lower_case',
-              'action': 'key_lower_case',
-              'id': 'string',
-              'logger_name': 'key_lower_case',
-              'text': 'text_std_token_lower_case',
-              'Repo id': 'key_lower_case',
-              'Stack version': 'tdouble',
-              'logfile_line_number': 'tint',
-              'Status': 'tlong',
-              'RequestId': 'tlong',
-              'level': 'key_lower_case',
-              'resource': 'key_lower_case',
-              'resType': 'key_lower_case',
-              'ip': 'key_lower_case',
-              'Hostname': 'key_lower_case',
-              'Roles': 'key_lower_case',
-              'Stack': 'key_lower_case',
-              'req_self_id': 'key_lower_case',
-              'repoType': 'tint',
-              'VersionNote': 'key_lower_case',
-              'Cluster name': 'key_lower_case',
-              'bundle_id': 'key_lower_case',
-              'cliType': 'key_lower_case',
-              'reqContext': 'key_lower_case',
-              'ws_result_status': 'text_ws',
-              'proxyUsers': 'key_lower_case',
-              'RequestType': 'key_lower_case',
-              'Repositories': 'key_lower_case',
-              'logType': 'key_lower_case',
-              'Repo version': 'key_lower_case',
-              'TaskId': 'tlong',
-              'User': 'key_lower_case',
-              'access': 'key_lower_case',
-              'dst': 'key_lower_case',
-              'perm': 'key_lower_case',
-              'event_count': 'tlong',
-              'repo': 'key_lower_case',
-              'reqUser': 'key_lower_case',
-              'task_id': 'tlong',
-              'Operation': 'key_lower_case',
-              'Reason': 'key_lower_case',
-              'reqData': 'text_std_token_lower_case',
-              'result': 'tint',
-              'file': 'key_lower_case',
-              'log_message': 'key_lower_case',
-              'agentHost': 'key_lower_case',
-              'Component': 'key_lower_case',
-              'authType': 'key_lower_case',
-              'Display name': 'key_lower_case',
-              'policy': 'tlong',
-              'cliIP': 'key_lower_case',
-              'OS': 'key_lower_case',
-              'RemoteIp': 'key_lower_case',
-              'ResultStatus': 'tlong',
-              'evtTime': 'tdate',
-              'VersionNumber': 'key_lower_case',
-              'url': 'key_lower_case',
-              'req_caller_id': 'key_lower_case',
-              'enforcer': 'key_lower_case',
-              'Command': 'key_lower_case'
-            }
-          },
-          serviceload: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: 'n4',
-                    value: 1
-                  },
-                  {
-                    name: 'n5',
-                    value: 2
-                  }
-                ],
-                name: 'graph2'
-              },
-              {
-                dataCount: [
-                  {
-                    name: 'n6',
-                    value: 10
-                  },
-                  {
-                    name: 'n7',
-                    value: 20
-                  }
-                ],
-                name: 'graph3'
-              }
-            ]
-          }
-        }
-      },
-      public: {
-        config: {}
-      },
-      service: {
-        logs: {
-          logList: [
-            {
-              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-              host: 'h0',
-              level: 'WARN',
-              logtime: currentTime.valueOf(),
-              ip: '192.168.0.1',
-              logfile_line_number: 8,
-              type: 'ams_collector',
-              _version_: 9,
-              id: 'id2',
-              file: 'ambari-metrics-collector.log',
-              seq_num: 10,
-              bundle_id: 'b2',
-              case_id: 'c2',
-              log_message: 'Connection refused.\nPlease check Ambari Metrics.\nCheck log file for details.',
-              message_md5: '1357908642',
-              cluster: 'cl2',
-              event_count: 5,
-              event_md5: '1908755391',
-              event_dur_ms: 200,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().add(5, 'd').valueOf(),
-              _router_field_: 20
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-              host: 'h1',
-              level: 'ERROR',
-              logtime: currentTime.clone().subtract(2, 'd').valueOf(),
-              ip: '192.168.0.2',
-              type: 'ams_collector',
-              _version_: 14,
-              id: 'id3',
-              file: 'ambari-metrics-collector.log',
-              seq_num: 15,
-              bundle_id: 'b3',
-              case_id: 'c3',
-              log_message: 'Connection refused.\nPlease check Ambari Metrics.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1357908642',
-              cluster: 'cl3',
-              event_count: 2,
-              event_md5: '1029384756',
-              event_dur_ms: 700,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().add(3, 'd').valueOf(),
-              _router_field_: 5
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-              host: 'h1',
-              level: 'FATAL',
-              logtime: currentTime.clone().subtract(10, 'd').valueOf(),
-              ip: '192.168.0.3',
-              type: 'ambari_agent',
-              _version_: 14,
-              id: 'id4',
-              file: 'ambari-agent.log',
-              seq_num: 15,
-              bundle_id: 'b4',
-              case_id: 'c4',
-              log_message: 'Connection refused.\nPlease check Ambari Agent.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl4',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 100,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().subtract(5, 'd').valueOf(),
-              _router_field_: 45
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-server.log',
-              host: 'h1',
-              level: 'INFO',
-              logtime: currentTime.clone().subtract(25, 'h').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_server',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_server.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Server.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl0',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().subtract(25, 'h').add(5, 'd').valueOf(),
-              _router_field_: 55
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-server.log',
-              host: 'h1',
-              level: 'DEBUG',
-              logtime: currentTime.clone().subtract(25, 'd').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_server',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_server.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Server.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().subtract(20, 'd').valueOf(),
-              _router_field_: 55
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-client.log',
-              host: 'h1',
-              level: 'TRACE',
-              logtime: currentTime.clone().subtract(2, 'h').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_client',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_client.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Client.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().subtract(2, 'h').add(5, 'd').valueOf(),
-              _router_field_: 55
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-client.log',
-              host: 'h1',
-              level: 'UNKNOWN',
-              logtime: currentTime.clone().subtract(31, 'd').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_client',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_client.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Client.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: currentTime.clone().subtract(26, 'd').valueOf(),
-              _router_field_: 55
-            }
-          ],
-          aggregated: {
-            graphData: [
-              {
-                name: 'n0',
-                count: 100,
-                dataList: [
-                  {
-                    name: 'n1',
-                    count: 50,
-                    dataList: null
-                  },
-                  {
-                    name: 'n2',
-                    count: 200,
-                    dataList: null
-                  }
-                ]
-              },
-              {
-                name: 'n3',
-                count: 10,
-                dataList: [
-                  {
-                    name: 'n4',
-                    count: 5,
-                    dataList: null
-                  },
-                  {
-                    name: 'n5',
-                    count: 20,
-                    dataList: null
-                  }
-                ]
-              }
-            ]
-          },
-          components: {
-            count: {
-              anygraph: {
-                graphData: [
-                  {
-                    dataCount: [
-                      {
-                        name: 'n8',
-                        value: 50
-                      },
-                      {
-                        name: 'n9',
-                        value: 100
-                      }
-                    ],
-                    name: 'graph4'
-                  },
-                  {
-                    dataCount: [
-                      {
-                        name: 'n10',
-                        value: 5
-                      },
-                      {
-                        name: 'n11',
-                        value: 10
-                      }
-                    ],
-                    name: 'graph5'
-                  }
-                ]
-              }
-            },
-            levels: {
-              counts: {
-                vNodeList: [
-                  {
-                    name: 'ambari',
-                    type: 0,
-                    logLevelCount: [
-                      {
-                        name: 'ERROR',
-                        value: '10'
-                      },
-                      {
-                        name: 'WARN',
-                        value: '50'
-                      }
-                    ],
-                    childs: [
-                      {
-                        name: 'hdfs',
-                        type: 2,
-                        logLevelCount: [
-                          {
-                            name: 'ERROR',
-                            value: '10'
-                          },
-                          {
-                            name: 'WARN',
-                            value: '20'
-                          }
-                        ],
-                        isParent: false,
-                        isRoot: false
-                      },
-                      {
-                        name: 'zookeeper',
-                        type: 3,
-                        logLevelCount: [
-                          {
-                            name: 'ERROR',
-                            value: '20'
-                          },
-                          {
-                            name: 'WARN',
-                            value: '40'
-                          }
-                        ],
-                        isParent: false,
-                        isRoot: false
-                      }
-                    ],
-                    isParent: true,
-                    isRoot: false
-                  },
-                  {
-                    name: 'ambari_agent',
-                    type: 1,
-                    logLevelCount: [
-                      {
-                        name: 'ERROR',
-                        value: '100'
-                      },
-                      {
-                        name: 'WARN',
-                        value: '500'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  }
-                ]
-              }
-            },
-            groupList: [
-              {
-                type: 'ams_collector'
-              },
-              {
-                type: 'ambari_agent'
-              },
-              {
-                type: 'zookeeper_server'
-              },
-              {
-                type: 'zookeeper_client'
-              }
-            ]
-          },
-          files: {
-            hostLogFiles: {
-              clusters: [
-                'c0',
-                'c1'
-              ],
-              services: [
-                'hdfs',
-                'zookeeper'
-              ]
-            }
-          },
-          histogram: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: currentTime.toISOString(),
-                    value: '1000'
-                  },
-                  {
-                    name: currentTime.clone().subtract(1, 'h').toISOString(),
-                    value: '2000'
-                  }
-                ],
-                name: 'ERROR'
-              },
-              {
-                dataCount: [
-                  {
-                    name: currentTime.toISOString(),
-                    value: '700'
-                  },
-                  {
-                    name: currentTime.clone().subtract(1, 'h').toISOString(),
-                    value: '900'
-                  }
-                ],
-                name: 'WARN'
-              }
-            ]
-          },
-          hosts: {
-            groupList: [
-              {
-                host: 'h0'
-              },
-              {
-                host: 'h1'
-              }
-            ],
-            components: {
-              vNodeList: [
-                {
-                  name: 'ambari',
-                  type: 0,
-                  logLevelCount: [
-                    {
-                      name: 'ERROR',
-                      value: '100'
-                    },
-                    {
-                      name: 'WARN',
-                      value: '500'
-                    }
-                  ],
-                  childs: [
-                    {
-                      name: 'ambari_metrics',
-                      type: 2,
-                      logLevelCount: [
-                        {
-                          name: 'ERROR',
-                          value: '100'
-                        },
-                        {
-                          name: 'WARN',
-                          value: '200'
-                        }
-                      ],
-                      isParent: false,
-                      isRoot: false
-                    },
-                    {
-                      name: 'hbase',
-                      type: 3,
-                      logLevelCount: [
-                        {
-                          name: 'ERROR',
-                          value: '200'
-                        },
-                        {
-                          name: 'WARN',
-                          value: '400'
-                        }
-                      ],
-                      isParent: false,
-                      isRoot: false
-                    }
-                  ],
-                  isParent: true,
-                  isRoot: false
-                },
-                {
-                  name: 'ambari_server',
-                  type: 1,
-                  logLevelCount: [
-                    {
-                      name: 'ERROR',
-                      value: '1000'
-                    },
-                    {
-                      name: 'WARN',
-                      value: '5000'
-                    }
-                  ],
-                  isParent: false,
-                  isRoot: false
-                }
-              ]
-            },
-            count: {
-              getvCounts: [
-                {
-                  name: 'n20',
-                  count: 100
-                },
-                {
-                  name: 'n21',
-                  count: 200
-                }
-              ]
-            }
-          },
-          levels: {
-            counts: {
-              getvNameValues: [
-                {
-                  name: 'n22',
-                  count: 1000
-                },
-                {
-                  name: 'n23',
-                  count: 2000
-                }
-              ]
-            }
-          },
-          schema: {
-            fields: {
-              cluster: 'key_lower_case',
-              method: 'key_lower_case',
-              level: 'key_lower_case',
-              event_count: 'tlong',
-              ip: 'string',
-              rowtype: 'key_lower_case',
-              key_log_message: 'key_lower_case',
-              type: 'key_lower_case',
-              seq_num: 'tlong',
-              path: 'key_lower_case',
-              logtype: 'key_lower_case',
-              file: 'key_lower_case',
-              line_number: 'tint',
-              thread_name: 'key_lower_case',
-              bundle_id: 'key_lower_case',
-              host: 'key_lower_case',
-              case_id: 'key_lower_case',
-              log_message: 'text_std_token_lower_case',
-              id: 'string',
-              logger_name: 'key_lower_case',
-              text: 'text_std_token_lower_case',
-              logfile_line_number: 'tint',
-              logtime: 'tdate'
-            }
-          },
-          serviceconfig: '',
-          tree: {
-            vNodeList: [
-              {
-                name: 'h0',
-                type: 'H',
-                value: '1',
-                childs: [
-                  {
-                    name: 'ams_collector',
-                    type: 'C',
-                    value: '1',
-                    logLevelCount: [
-                      {
-                        name: 'WARN',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  }
-                ],
-                logLevelCount: [
-                  {
-                    name: 'WARN',
-                    value: '1'
-                  }
-                ],
-                isParent: true,
-                isRoot: true
-              },
-              {
-                name: 'h1',
-                type: 'H',
-                value: '6',
-                childs: [
-                  {
-                    name: 'ams_collector',
-                    type: 'C',
-                    value: '1',
-                    logLevelCount: [
-                      {
-                        name: 'ERROR',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  },
-                  {
-                    name: 'ambari_agent',
-                    type: 'C',
-                    value: '1',
-                    logLevelCount: [
-                      {
-                        name: 'FATAL',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  },
-                  {
-                    name: 'zookeeper_server',
-                    type: 'C',
-                    value: '2',
-                    logLevelCount: [
-                      {
-                        name: 'INFO',
-                        value: '1'
-                      },
-                      {
-                        name: 'DEBUG',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  },
-                  {
-                    name: 'zookeeper_client',
-                    type: 'C',
-                    value: '2',
-                    logLevelCount: [
-                      {
-                        name: 'TRACE',
-                        value: '1'
-                      },
-                      {
-                        name: 'UNKNOWN',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  }
-                ],
-                logLevelCount: [
-                  {
-                    name: 'ERROR',
-                    value: '1'
-                  },
-                  {
-                    name: 'FATAL',
-                    value: '1'
-                  },
-                  {
-                    name: 'INFO',
-                    value: '1'
-                  },
-                  {
-                    name: 'DEBUG',
-                    value: '1'
-                  },
-                  {
-                    name: 'TRACE',
-                    value: '1'
-                  },
-                  {
-                    name: 'UNKNOWN',
-                    value: '1'
-                  }
-                ],
-                isParent: true,
-                isRoot: true
-              }
-            ]
-          },
-          truncated: {
-            logList: [
-              {
-                path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-                host: 'h0',
-                level: 'WARN',
-                logtime: currentTime.valueOf(),
-                ip: '192.168.0.1',
-                logfile_line_number: 8,
-                type: 'ams_collector',
-                _version_: 9,
-                id: 'id2',
-                file: 'ambari-metrics-collector.log',
-                seq_num: 10,
-                bundle_id: 'b2',
-                case_id: 'c2',
-                log_message: 'Connection refused',
-                message_md5: '1357908642',
-                cluster: 'cl2',
-                event_count: 5,
-                event_md5: '1908755391',
-                event_dur_ms: 200,
-                _ttl_: '+5DAYS',
-                _expire_at_: currentTime.clone().add(1, 'd').valueOf(),
-                _router_field_: 20
-              },
-              {
-                path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-                host: 'h1',
-                level: 'ERROR',
-                logtime: currentTime.clone().subtract(1, 'd').valueOf(),
-                ip: '192.168.0.2',
-                type: 'ams_collector',
-                _version_: 14,
-                id: 'id3',
-                file: 'ambari-metrics-collector.log',
-                seq_num: 15,
-                bundle_id: 'b3',
-                case_id: 'c3',
-                log_message: 'Connection refused',
-                logfile_line_number: 16,
-                message_md5: '1357908642',
-                cluster: 'cl3',
-                event_count: 2,
-                event_md5: '1029384756',
-                event_dur_ms: 700,
-                _ttl_: '+5DAYS',
-                _expire_at_: currentTime.clone().add(2, 'd').valueOf(),
-                _router_field_: 5
-              }
-            ]
-          },
-          clusters: [
-            'cl0',
-            'cl1',
-            'cl2',
-            'cl3',
-            'cl4'
-          ]
-        }
-      },
-      status: {
-        auditlogs: {
-          znodeReady: true,
-          solrCollectionReady: true,
-          solrAliasReady: false,
-          configurationUploaded: true
-        },
-        servicelogs: {
-          znodeReady: true,
-          solrCollectionReady: true,
-          configurationUploaded: true
-        },
-        userconfig: {
-          znodeReady: true,
-          solrCollectionReady: true,
-          configurationUploaded: true
-        }
-      },
-      shipper: {
-        filters: {
-          cl0: {
-            level: {
-              filter: {
-                ambari_agent: {
-                  label: 'ambari_agent',
-                  hosts: [
-                    'h0'
-                  ],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [
-                    'FATAL'
-                  ],
-                  expiryTime: currentTime.clone().add(1, 'd').toISOString()
-                },
-                ambari_alerts: {
-                  label: 'ambari_alerts',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_audit: {
-                  label: 'ambari_audit',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_config_changes: {
-                  label: 'ambari_config_changes',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_eclipselink: {
-                  label: 'ambari_eclipselink',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server: {
-                  label: 'ambari_server',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server_check_database: {
-                  label: 'ambari_server_check_database',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_collector: {
-                  label: 'ams_collector',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_grafana: {
-                  label: 'ams_grafana',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_master: {
-                  label: 'ams_hbase_master',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_regionserver: {
-                  label: 'ams_hbase_regionserver',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_monitor: {
-                  label: 'ams_monitor',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_datanode: {
-                  label: 'hdfs_datanode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_journalnode: {
-                  label: 'hdfs_journalnode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_namenode: {
-                  label: 'hdfs_namenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_nfs3: {
-                  label: 'hdfs_nfs3',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_secondarynamenode: {
-                  label: 'hdfs_secondarynamenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_zkfc: {
-                  label: 'hdfs_zkfc',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                infra_solr: {
-                  label: 'infra_solr',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_app: {
-                  label: 'logsearch_app',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_feeder: {
-                  label: 'logsearch_feeder',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_perf: {
-                  label: 'logsearch_perf',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                zookeeper: {
-                  label: 'zookeeper',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                }
-              }
-            }
-          },
-          cl1: {
-            level: {
-              filter: {
-                ambari_agent: {
-                  label: 'ambari_agent',
-                  hosts: [
-                    'h0'
-                  ],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [
-                    'FATAL'
-                  ],
-                  expiryTime: currentTime.clone().add(1, 'd').toISOString()
-                },
-                ambari_alerts: {
-                  label: 'ambari_alerts',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_audit: {
-                  label: 'ambari_audit',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_config_changes: {
-                  label: 'ambari_config_changes',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_eclipselink: {
-                  label: 'ambari_eclipselink',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server: {
-                  label: 'ambari_server',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server_check_database: {
-                  label: 'ambari_server_check_database',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_collector: {
-                  label: 'ams_collector',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_grafana: {
-                  label: 'ams_grafana',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_master: {
-                  label: 'ams_hbase_master',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_regionserver: {
-                  label: 'ams_hbase_regionserver',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_monitor: {
-                  label: 'ams_monitor',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_datanode: {
-                  label: 'hdfs_datanode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_journalnode: {
-                  label: 'hdfs_journalnode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_namenode: {
-                  label: 'hdfs_namenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_nfs3: {
-                  label: 'hdfs_nfs3',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_secondarynamenode: {
-                  label: 'hdfs_secondarynamenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_zkfc: {
-                  label: 'hdfs_zkfc',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                infra_solr: {
-                  label: 'infra_solr',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_app: {
-                  label: 'logsearch_app',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_feeder: {
-                  label: 'logsearch_feeder',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_perf: {
-                  label: 'logsearch_perf',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                zookeeper: {
-                  label: 'zookeeper',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                }
-              }
-            }
-          },
-          cl2: {
-            level: {
-              filter: {
-                ambari_agent: {
-                  label: 'ambari_agent',
-                  hosts: [
-                    'h0'
-                  ],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [
-                    'FATAL'
-                  ],
-                  expiryTime: currentTime.clone().add(1, 'd').toISOString()
-                },
-                ambari_alerts: {
-                  label: 'ambari_alerts',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_audit: {
-                  label: 'ambari_audit',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_config_changes: {
-                  label: 'ambari_config_changes',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_eclipselink: {
-                  label: 'ambari_eclipselink',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server: {
-                  label: 'ambari_server',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server_check_database: {
-                  label: 'ambari_server_check_database',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_collector: {
-                  label: 'ams_collector',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_grafana: {
-                  label: 'ams_grafana',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_master: {
-                  label: 'ams_hbase_master',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_regionserver: {
-                  label: 'ams_hbase_regionserver',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_monitor: {
-                  label: 'ams_monitor',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_datanode: {
-                  label: 'hdfs_datanode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_journalnode: {
-                  label: 'hdfs_journalnode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_namenode: {
-                  label: 'hdfs_namenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_nfs3: {
-                  label: 'hdfs_nfs3',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_secondarynamenode: {
-                  label: 'hdfs_secondarynamenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_zkfc: {
-                  label: 'hdfs_zkfc',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                infra_solr: {
-                  label: 'infra_solr',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_app: {
-                  label: 'logsearch_app',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_feeder: {
-                  label: 'logsearch_feeder',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_perf: {
-                  label: 'logsearch_perf',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                zookeeper: {
-                  label: 'zookeeper',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                }
-              }
-            }
-          },
-          cl3: {
-            level: {
-              filter: {
-                ambari_agent: {
-                  label: 'ambari_agent',
-                  hosts: [
-                    'h0'
-                  ],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [
-                    'FATAL'
-                  ],
-                  expiryTime: currentTime.clone().add(1, 'd').toISOString()
-                },
-                ambari_alerts: {
-                  label: 'ambari_alerts',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_audit: {
-                  label: 'ambari_audit',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_config_changes: {
-                  label: 'ambari_config_changes',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_eclipselink: {
-                  label: 'ambari_eclipselink',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server: {
-                  label: 'ambari_server',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server_check_database: {
-                  label: 'ambari_server_check_database',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_collector: {
-                  label: 'ams_collector',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_grafana: {
-                  label: 'ams_grafana',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_master: {
-                  label: 'ams_hbase_master',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_regionserver: {
-                  label: 'ams_hbase_regionserver',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_monitor: {
-                  label: 'ams_monitor',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_datanode: {
-                  label: 'hdfs_datanode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_journalnode: {
-                  label: 'hdfs_journalnode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_namenode: {
-                  label: 'hdfs_namenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_nfs3: {
-                  label: 'hdfs_nfs3',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_secondarynamenode: {
-                  label: 'hdfs_secondarynamenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_zkfc: {
-                  label: 'hdfs_zkfc',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                infra_solr: {
-                  label: 'infra_solr',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_app: {
-                  label: 'logsearch_app',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_feeder: {
-                  label: 'logsearch_feeder',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_perf: {
-                  label: 'logsearch_perf',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                zookeeper: {
-                  label: 'zookeeper',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                }
-              }
-            }
-          },
-          cl4: {
-            level: {
-              filter: {
-                ambari_agent: {
-                  label: 'ambari_agent',
-                  hosts: [
-                    'h0'
-                  ],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [
-                    'FATAL'
-                  ],
-                  expiryTime: currentTime.clone().add(1, 'd').toISOString()
-                },
-                ambari_alerts: {
-                  label: 'ambari_alerts',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_audit: {
-                  label: 'ambari_audit',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_config_changes: {
-                  label: 'ambari_config_changes',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_eclipselink: {
-                  label: 'ambari_eclipselink',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server: {
-                  label: 'ambari_server',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ambari_server_check_database: {
-                  label: 'ambari_server_check_database',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_collector: {
-                  label: 'ams_collector',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_grafana: {
-                  label: 'ams_grafana',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_master: {
-                  label: 'ams_hbase_master',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_hbase_regionserver: {
-                  label: 'ams_hbase_regionserver',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                ams_monitor: {
-                  label: 'ams_monitor',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_datanode: {
-                  label: 'hdfs_datanode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_journalnode: {
-                  label: 'hdfs_journalnode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_namenode: {
-                  label: 'hdfs_namenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_nfs3: {
-                  label: 'hdfs_nfs3',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_secondarynamenode: {
-                  label: 'hdfs_secondarynamenode',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                hdfs_zkfc: {
-                  label: 'hdfs_zkfc',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                infra_solr: {
-                  label: 'infra_solr',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_app: {
-                  label: 'logsearch_app',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_feeder: {
-                  label: 'logsearch_feeder',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                logsearch_perf: {
-                  label: 'logsearch_perf',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                },
-                zookeeper: {
-                  label: 'zookeeper',
-                  hosts: [],
-                  defaultLevels: [
-                    'FATAL',
-                    'ERROR',
-                    'WARN',
-                    'INFO'
-                  ],
-                  overrideLevels: [],
-                  expiryTime: null
-                }
-              }
-            }
-          }
-        },
-        names: []
-      }
-    }
-  }
-};

+ 3 - 14
ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts

@@ -17,7 +17,6 @@
  */
 
 import {TestBed, inject} from '@angular/core/testing';
-import {TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
@@ -35,21 +34,14 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
+
 import {ComponentGeneratorService} from './component-generator.service';
 
 describe('ComponentGeneratorService', () => {
   beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       imports: [
         StoreModule.provideStore({
@@ -70,12 +62,9 @@ describe('ComponentGeneratorService', () => {
         ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         ComponentGeneratorService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         UtilsService,
         HostsService,
         AuditLogsService,

+ 2 - 1
ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.ts

@@ -27,7 +27,8 @@ import {LogLevelObject} from '@app/classes/object';
 @Injectable()
 export class ComponentGeneratorService {
 
-  constructor(private resolver: ComponentFactoryResolver, private hostsStorage: HostsService, private componentsStorage: ComponentsService, private logsContainer: LogsContainerService) {
+  constructor(private resolver: ComponentFactoryResolver, private hostsStorage: HostsService,
+              private componentsStorage: ComponentsService, private logsContainer: LogsContainerService) {
   }
 
   private get logLevels(): LogLevelObject[] {

+ 4 - 14
ambari-logsearch/ambari-logsearch-web/src/app/services/history-manager.service.spec.ts

@@ -17,7 +17,6 @@
  */
 
 import {TestBed, inject} from '@angular/core/testing';
-import {TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -34,22 +33,16 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UtilsService} from '@app/services/utils.service';
 
 import {HistoryManagerService} from './history-manager.service';
 
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
+
 describe('HistoryService', () => {
   beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
+
     TestBed.configureTestingModule({
       imports: [
         ...TranslationModules,
@@ -70,11 +63,8 @@ describe('HistoryService', () => {
         })
       ],
       providers: [
+        ...MockHttpRequestModules,
         HistoryManagerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         LogsContainerService,
         UtilsService,
         AuditLogsService,

+ 2 - 14
ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts

@@ -17,7 +17,7 @@
  */
 
 import {TestBed, inject} from '@angular/core/testing';
-import {TranslationModules} from '@app/test-config.spec';
+import {MockHttpRequestModules, TranslationModules} from '@app/test-config.spec';
 import {StoreModule} from '@ngrx/store';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -34,21 +34,12 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 
 import {LogsContainerService} from './logs-container.service';
 
 describe('LogsContainerService', () => {
   beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       imports: [
         StoreModule.provideStore({
@@ -69,6 +60,7 @@ describe('LogsContainerService', () => {
         ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         AuditLogsService,
         ServiceLogsService,
         AuditLogsFieldsService,
@@ -83,10 +75,6 @@ describe('LogsContainerService', () => {
         ServiceLogsTruncatedService,
         TabsService,
         LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         UtilsService
       ]
     });

+ 20 - 30
ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts

@@ -31,7 +31,7 @@ import * as moment from 'moment-timezone';
 import {HttpClientService} from '@app/services/http-client.service';
 import {UtilsService} from '@app/services/utils.service';
 import {AuditLogsService} from '@app/services/storage/audit-logs.service';
-import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
+import {AuditLogsFieldsService, ResponseRootProperties} from '@app/services/storage/audit-logs-fields.service';
 import {AuditLogsGraphDataService} from '@app/services/storage/audit-logs-graph-data.service';
 import {ServiceLogsService} from '@app/services/storage/service-logs.service';
 import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
@@ -51,11 +51,9 @@ import {ListItem} from '@app/classes/list-item';
 import {HomogeneousObject, LogLevelObject} from '@app/classes/object';
 import {LogsType, ScrollType, SortingType} from '@app/classes/string';
 import {Tab} from '@app/classes/models/tab';
-import {LogField} from '@app/classes/models/log-field';
+import {AuditFieldsDefinitionSet} from "@app/classes/object";
 import {AuditLog} from '@app/classes/models/audit-log';
-import {AuditLogField} from '@app/classes/models/audit-log-field';
 import {ServiceLog} from '@app/classes/models/service-log';
-import {ServiceLogField} from '@app/classes/models/service-log-field';
 import {BarGraph} from '@app/classes/models/bar-graph';
 import {NodeItem} from '@app/classes/models/node-item';
 import {CommonEntry} from '@app/classes/models/common-entry';
@@ -601,17 +599,10 @@ export class LogsContainerService {
 
   activeLogsType: LogsType;
 
-  filtersFormChange: Subject<void> = new Subject();
+  // Todo move this prop to a state of the audit log container
+  activeAuditGroup: string = ResponseRootProperties.DEFAULTS;
 
-  private columnsMapper<FieldT extends LogField>(fields: FieldT[]): ListItem[] {
-    return fields.filter((field: FieldT): boolean => field.isAvailable).map((field: FieldT): ListItem => {
-      return {
-        value: field.name,
-        label: field.displayName || field.name,
-        isChecked: field.isDisplayed
-      };
-    });
-  }
+  filtersFormChange: Subject<void> = new Subject();
 
   private logsMapper<LogT extends AuditLog & ServiceLog>(result: [LogT[], ListItem[]]): LogT[] {
     const [logs, fields] = result;
@@ -631,9 +622,9 @@ export class LogsContainerService {
 
   private serviceLogsSource: Observable<ServiceLog[]> = this.serviceLogsStorage.getAll();
 
-  auditLogsColumns: Observable<ListItem[]> = this.auditLogsFieldsStorage.getAll().map(this.columnsMapper);
+  auditLogsColumns: Observable<ListItem[]> = this.auditLogsFieldsStorage.getParameter(ResponseRootProperties.DEFAULTS).map(this.utils.logFieldToListItemMapper);
 
-  serviceLogsColumns: Observable<ListItem[]> = this.serviceLogsFieldsStorage.getAll().map(this.columnsMapper);
+  serviceLogsColumns: Observable<ListItem[]> = this.serviceLogsFieldsStorage.getAll().map(this.utils.logFieldToListItemMapper);
 
   serviceLogs: Observable<ServiceLog[]> = Observable.combineLatest(
     this.serviceLogsSource, this.serviceLogsColumns
@@ -827,21 +818,17 @@ export class LogsContainerService {
     this.httpClient.get('serviceLogsFields').subscribe((response: Response): void => {
       const jsonResponse = response.json();
       if (jsonResponse) {
-        this.serviceLogsFieldsStorage.addInstances(this.getColumnsArray(jsonResponse, ServiceLogField));
+        this.serviceLogsFieldsStorage.addInstances(jsonResponse);
       }
     });
     this.httpClient.get('auditLogsFields').subscribe((response: Response): void => {
-      const jsonResponse = response.json();
+      const jsonResponse:AuditFieldsDefinitionSet = response.json();
       if (jsonResponse) {
-        this.auditLogsFieldsStorage.addInstances(this.getColumnsArray(jsonResponse, AuditLogField));
+        this.auditLogsFieldsStorage.setParameters(jsonResponse);
       }
     });
   }
 
-  private getColumnsArray(keysObject: any, fieldClass: any): any[] {
-    return Object.keys(keysObject).map((key: string): {fieldClass} => new fieldClass(key));
-  }
-
   getStartTimeMoment = (selection: TimeUnitListItem, end: moment.Moment): moment.Moment | undefined => {
     let time;
     const value = selection && selection.value;
@@ -1000,13 +987,13 @@ export class LogsContainerService {
     const requestComponentsData:Observable<Response> = this.httpClient.get('components');
     const requestComponentsName:Observable<Response> = this.httpClient.get('serviceComponentsName');
     const requests = Observable.combineLatest(requestComponentsName, requestComponentsData);
-    requests.subscribe((responses:Response[]) => {
-      const componentsNames = responses[0].json();
-      const componentsData = responses[1].json();
+    requests.subscribe(([componentsNamesResponse, componentsDataResponse]:Response[]) => {
+      const componentsNames = componentsNamesResponse.json();
+      const componentsData = componentsDataResponse.json();
       const components = componentsData && componentsData.vNodeList.map((item): NodeItem => {
         const component = componentsNames.metadata.find(component => component.name === item.name);
         return Object.assign(item, {
-          label: component.label || item.name,
+          label: component && (component.label || item.name),
           group: component && component.group && {
             name: component.group,
             label: componentsNames.groups[component.group]
@@ -1064,9 +1051,12 @@ export class LogsContainerService {
   }
 
   updateSelectedColumns(columnNames: string[], logsType: string): void {
-    this.logsTypeMap[logsType].fieldsModel.mapCollection(item => Object.assign({}, item, {
-      isDisplayed: columnNames.indexOf(item.name) > -1
-    }));
+    const functionName: string = logsType === 'auditLogs' ? 'mapFieldSetGroup' : 'mapCollection';
+    const modifierFn: Function = (item) => Object.assign({}, item, {
+      visible: columnNames.indexOf(item.name) > -1
+    });
+    const params = [modifierFn, logsType === 'auditLogs' ? this.activeAuditGroup : undefined];
+    this.logsTypeMap[logsType].fieldsModel[functionName](...params);
   }
 
   openServiceLog(log: ServiceLog): void {

+ 23 - 16
ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts

@@ -20,8 +20,9 @@ import {URLSearchParams, Response, ResponseOptions} from '@angular/http';
 import {InMemoryDbService, InMemoryBackendService, createErrorResponse} from 'angular-in-memory-web-api';
 import {Observable} from 'rxjs/Observable';
 import {Subscriber} from 'rxjs/Subscriber';
+import 'rxjs/add/operator/delay';
 import * as moment from 'moment';
-import {mockData} from '@app/mock-data';
+import {mockDataByUrl} from '@app/mock-data-by-url';
 
 export class mockBackendService extends InMemoryBackendService {
   getLocation(url: string): any {
@@ -123,24 +124,30 @@ export class mockApiDataService implements InMemoryDbService {
     };
   }
 
+  private findDataByUrlPatter(path: string): {[key: string]: any} | undefined | Function {
+    const paths: string[] = Object.keys(mockDataByUrl);
+    const matchedPath:string = paths.find((key:string):boolean => {
+      const test:RegExp = new RegExp(key);
+      return test.test(path);
+    });
+    return mockDataByUrl[matchedPath];
+  }
+
   get(interceptorArgs: any): Observable<Response> {
-    const query = interceptorArgs.requestInfo.query,
-      path = interceptorArgs.requestInfo.base + interceptorArgs.requestInfo.collectionName,
-      pathArray = path.split('/').filter(part => part !== '');
+    const query = interceptorArgs.requestInfo.query;
+    const path = interceptorArgs.requestInfo.base + interceptorArgs.requestInfo.collectionName;
     if (query && query.paramsMap.has('static') && interceptorArgs.passThruBackend) {
       return interceptorArgs.passThruBackend.createConnection(interceptorArgs.requestInfo.req).response;
     } else {
-      let is404 = false;
-      const allData = pathArray.reduce((currentObject, currentKey, index, array) => {
-        if (!currentObject && index < array.length - 1) {
-          return {};
-        } else if (currentObject.hasOwnProperty(currentKey)) {
-          return currentObject[currentKey];
-        } else {
-          is404 = true;
-          return {};
-        }
-      }, interceptorArgs.db);
+      let allData = mockDataByUrl[path];
+      if (!allData) {
+        allData = this.findDataByUrlPatter(path);
+      }
+      if (typeof allData === 'function') {
+        allData = allData(query);
+      }
+      let is404 = !allData;
+
       if (is404) {
         return new Observable<Response>((subscriber: Subscriber<Response>) => subscriber.error(
           new Response(createErrorResponse(
@@ -216,6 +223,6 @@ export class mockApiDataService implements InMemoryDbService {
   }
 
   createDb() {
-    return mockData;
+    return {};
   }
 }

+ 46 - 3
ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs-fields.service.ts

@@ -18,15 +18,58 @@
 
 import {Injectable} from '@angular/core';
 import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/classes/models/store';
+import {AppStore, ObjectModelService, getObjectReducer} from '@app/classes/models/store';
+import {LogField} from "@app/classes/object";
+import {Observable} from "rxjs/Observable";
 
 export const modelName = 'auditLogsFields';
 
+export const enum ResponseRootProperties {
+  DEFAULTS = 'defaults',
+  OVERRIDES = 'overrides'
+};
+
 @Injectable()
-export class AuditLogsFieldsService extends CollectionModelService {
+export class AuditLogsFieldsService extends ObjectModelService {
   constructor(store: Store<AppStore>) {
     super(modelName, store);
   }
+
+  /**
+   * The goal is to return with the proper fieldset for a given group/service and to return with the default fieldset
+   * when the group has no overrides.
+   * @param {string} group The name of the group/service
+   * @returns {Observable<LogField[]>}
+   */
+  getFieldSetForGroup(group: string): Observable<LogField[]> {
+    return Observable.combineLatest(this.getParameter(ResponseRootProperties.DEFAULTS), this.getParameter(ResponseRootProperties.OVERRIDES))
+      .map(([defaults, overrides]): LogField[] => {
+        return overrides[group] || defaults;
+      });
+  }
+
+  /**
+   * The goal is to update the given fieldset group with the given modifier function. It will map over the selected
+   * group. Right now we let to change the defaults fieldset.
+   * @param {Function} modifier Called by the map method.
+   * @param {string} group The service/group name owner of the fieldset
+   */
+  mapFieldSetGroup(modifier: Function, group: string) {
+    Observable.combineLatest(
+      this.getParameter(ResponseRootProperties.DEFAULTS),
+      this.getParameter(ResponseRootProperties.OVERRIDES)
+    ).first().subscribe(([defaults, overrides]) => {
+      const fieldset = (overrides[group] || defaults).map(modifier);
+      const payload = group === ResponseRootProperties.DEFAULTS ? fieldset : Object.assign({}, overrides, {
+        [group]: fieldset
+      });
+      this.setParameter(
+        group === ResponseRootProperties.DEFAULTS ? ResponseRootProperties.DEFAULTS : ResponseRootProperties.OVERRIDES,
+        payload
+      );
+    });
+  }
+
 }
 
-export const auditLogsFields = getCollectionReducer(modelName);
+export const auditLogsFields = getObjectReducer(modelName);

+ 4 - 14
ambari-logsearch/ambari-logsearch-web/src/app/services/user-settings.service.spec.ts

@@ -17,6 +17,7 @@
  */
 
 import {TestBed, inject} from '@angular/core/testing';
+import {MockHttpRequestModules, TranslationModules} from "@app/test-config.spec";
 import {StoreModule} from '@ngrx/store';
 import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
 import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
@@ -33,7 +34,6 @@ import {ComponentsService, components} from '@app/services/storage/components.se
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
 import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {TabsService, tabs} from '@app/services/storage/tabs.service';
-import {HttpClientService} from '@app/services/http-client.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {UtilsService} from '@app/services/utils.service';
 
@@ -41,14 +41,6 @@ import {UserSettingsService} from './user-settings.service';
 
 describe('UserSettingsService', () => {
   beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
     TestBed.configureTestingModule({
       imports: [
         StoreModule.provideStore({
@@ -65,14 +57,12 @@ describe('UserSettingsService', () => {
           hosts,
           serviceLogsTruncated,
           tabs
-        })
+        }),
+        ...TranslationModules
       ],
       providers: [
+        ...MockHttpRequestModules,
         UserSettingsService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
         LogsContainerService,
         UtilsService,
         AuditLogsService,

+ 11 - 1
ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts

@@ -19,7 +19,7 @@
 import {Injectable} from '@angular/core';
 import * as moment from 'moment-timezone';
 import {ListItem} from '@app/classes/list-item';
-import {HomogeneousObject} from '@app/classes/object';
+import {HomogeneousObject, LogField} from '@app/classes/object';
 import {NodeItem} from '@app/classes/models/node-item';
 
 @Injectable()
@@ -133,6 +133,16 @@ export class UtilsService {
     };
   }
 
+  logFieldToListItemMapper<FieldT extends LogField>(fields: FieldT[]): ListItem[] {
+    return fields ? fields.map((field: FieldT): ListItem => {
+      return {
+        value: field.name,
+        label: field.label || field.name,
+        isChecked: field.visible
+      };
+    }) : [];
+  }
+
   /**
    * Method that updates source array with only the values which aren't already present there
    * @param {Array} sourceArray

+ 25 - 1
ambari-logsearch/ambari-logsearch-web/src/app/test-config.spec.ts

@@ -16,9 +16,13 @@
  * limitations under the License.
  */
 
-import {HttpModule, Http} from '@angular/http';
+import {HttpModule, Http, BrowserXhr, XSRFStrategy, ResponseOptions, XHRBackend} from '@angular/http';
 import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
 import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {Injector} from "@angular/core";
+import {InMemoryBackendService} from "angular-in-memory-web-api";
+import {mockApiDataService} from "@app/services/mock-api-data.service";
+import {HttpClientService} from "@app/services/http-client.service";
 
 function HttpLoaderFactory(http: Http) {
   return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
@@ -34,3 +38,23 @@ export const TranslationModules = [
     }
   })
 ];
+
+export const MockHttpRequestModules = [
+  HttpClientService,
+  {
+    provide: XHRBackend,
+    useFactory: getTestXHRBackend,
+    deps: [Injector, BrowserXhr, XSRFStrategy, ResponseOptions]
+  }
+];
+
+export function getTestXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSRFStrategy, options: ResponseOptions) {
+  return new InMemoryBackendService(
+    injector,
+    new mockApiDataService(),
+    {
+      passThruUnknownUrl: true,
+      rootPath: ''
+    }
+  )
+}

+ 24 - 0
ambari-logsearch/ambari-logsearch-web/yarn.lock

@@ -528,6 +528,10 @@ angular2-moment@^1.4.0:
   dependencies:
     moment "^2.16.0"
 
+angular2-take-until-destroy@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/angular2-take-until-destroy/-/angular2-take-until-destroy-2.0.1.tgz#6b502a55f7859f0fca1a7d1357c472162ffad969"
+
 ansi-align@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
@@ -3321,6 +3325,10 @@ is-number@^2.0.2, is-number@^2.1.0:
   dependencies:
     kind-of "^3.0.2"
 
+is-number@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+
 is-obj@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
@@ -3732,6 +3740,10 @@ kind-of@^3.0.2, kind-of@^3.2.2:
   dependencies:
     is-buffer "^1.1.5"
 
+kind-of@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+
 klaw@^1.0.0:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@@ -3954,6 +3966,10 @@ math-expression-evaluator@^1.2.14:
   version "1.2.17"
   resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
 
+math-random@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
+
 md5.js@^1.3.4:
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
@@ -5094,6 +5110,14 @@ randomatic@^1.1.3:
     is-number "^2.0.2"
     kind-of "^3.0.2"
 
+randomatic@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923"
+  dependencies:
+    is-number "^4.0.0"
+    kind-of "^6.0.0"
+    math-random "^1.0.1"
+
 randombytes@^2.0.0, randombytes@^2.0.1:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"