You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/10/02 20:39:39 UTC

[28/50] [abbrv] ambari git commit: AMBARI-22093 Log Search UI: implement service logs actions functionality. (ababiichuk)

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
index b6ec8d7..f043f42 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
@@ -25,8 +25,10 @@ import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/aud
 import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
 import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 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';
 import {ComponentsService, components} from '@app/services/storage/components.service';
+import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {LogsContainerService} from '@app/services/logs-container.service';
 import {HttpClientService} from '@app/services/http-client.service';
 import {FilteringService} from '@app/services/filtering.service';
@@ -53,8 +55,10 @@ describe('ComponentGeneratorService', () => {
           serviceLogsFields,
           serviceLogsHistogramData,
           appSettings,
+          appState,
           clusters,
-          components
+          components,
+          serviceLogsTruncated
         })
       ],
       providers: [
@@ -72,8 +76,10 @@ describe('ComponentGeneratorService', () => {
         ServiceLogsFieldsService,
         ServiceLogsHistogramDataService,
         AppSettingsService,
+        AppStateService,
         ClustersService,
-        ComponentsService
+        ComponentsService,
+        ServiceLogsTruncatedService
       ]
     });
   });

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
index 8fed570..44a5f6a 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
@@ -23,6 +23,7 @@ import {Http, XHRBackend, Request, RequestOptions, RequestOptionsArgs, Response,
 import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params.class';
 import {ServiceLogsQueryParams} from '@app/classes/queries/service-logs-query-params.class';
 import {ServiceLogsHistogramQueryParams} from '@app/classes/queries/service-logs-histogram-query-params.class';
+import {ServiceLogsTruncatedQueryParams} from '@app/classes/queries/service-logs-truncated-query-params.class';
 import {AppStateService} from '@app/services/storage/app-state.service';
 
 @Injectable()
@@ -56,6 +57,10 @@ export class HttpClientService extends Http {
     serviceLogsFields: {
       url: 'service/logs/schema/fields'
     },
+    serviceLogsTruncated: {
+      url: 'service/logs/truncated',
+      params: opts => new ServiceLogsTruncatedQueryParams(opts)
+    },
     components: {
       url: 'service/logs/components'
     },
@@ -88,7 +93,7 @@ export class HttpClientService extends Http {
     const preset = this.endPoints[url],
       rawParams = preset && preset.params ? preset.params(params) : params;
     if (rawParams) {
-      const paramsString = Object.keys(rawParams).map(key => `${key}=${rawParams[key]}`).join('&'),
+      const paramsString = Object.keys(rawParams).map((key: string): string => `${key}=${rawParams[key]}`).join('&'),
         urlParams = new URLSearchParams(paramsString, {
           encodeKey: key => key,
           encodeValue: value => encodeURIComponent(value)

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
index 8ebbd72..a762fef 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
@@ -24,9 +24,11 @@ import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/aud
 import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
 import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
 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';
 import {ComponentsService, components} from '@app/services/storage/components.service';
 import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {ServiceLogsTruncatedService, serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {HttpClientService} from '@app/services/http-client.service';
 import {FilteringService} from '@app/services/filtering.service';
 
@@ -51,9 +53,11 @@ describe('LogsContainerService', () => {
           serviceLogsFields,
           serviceLogsHistogramData,
           appSettings,
+          appState,
           clusters,
           components,
-          hosts
+          hosts,
+          serviceLogsTruncated
         })
       ],
       providers: [
@@ -63,9 +67,11 @@ describe('LogsContainerService', () => {
         ServiceLogsFieldsService,
         ServiceLogsHistogramDataService,
         AppSettingsService,
+        AppStateService,
         ClustersService,
         ComponentsService,
         HostsService,
+        ServiceLogsTruncatedService,
         LogsContainerService,
         {
           provide: HttpClientService,

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
index bef28cf..14e9ad4 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
@@ -24,11 +24,24 @@ import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.se
 import {ServiceLogsService} from '@app/services/storage/service-logs.service';
 import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
 import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
+import {ServiceLogsTruncatedService} from '@app/services/storage/service-logs-truncated.service';
+import {AppStateService} from '@app/services/storage/app-state.service';
+import {ActiveServiceLogEntry} from '@app/classes/active-service-log-entry.class';
 
 @Injectable()
 export class LogsContainerService {
 
-  constructor(private httpClient: HttpClientService, private auditLogsStorage: AuditLogsService, private auditLogsFieldsStorage: AuditLogsFieldsService, private serviceLogsStorage: ServiceLogsService, private serviceLogsFieldsStorage: ServiceLogsFieldsService, private serviceLogsHistogramStorage: ServiceLogsHistogramDataService, private filtering: FilteringService) {
+  constructor(private httpClient: HttpClientService, private auditLogsStorage: AuditLogsService, private auditLogsFieldsStorage: AuditLogsFieldsService, private serviceLogsStorage: ServiceLogsService, private serviceLogsFieldsStorage: ServiceLogsFieldsService, private serviceLogsHistogramStorage: ServiceLogsHistogramDataService, private serviceLogsTruncatedStorage: ServiceLogsTruncatedService, private appState: AppStateService, private filtering: FilteringService) {
+    appState.getParameter('activeLog').subscribe((value: ActiveServiceLogEntry | null) => this.activeLog = value);
+    appState.getParameter('isServiceLogsFileView').subscribe((value: boolean): void => {
+      const activeLog = this.activeLog,
+        filtersForm = this.filtering.filtersForm;
+      if (value && activeLog) {
+        filtersForm.controls.hosts.setValue(activeLog.host_name);
+        filtersForm.controls.components.setValue(activeLog.component_name);
+      }
+      this.isServiceLogsFileView = value;
+    });
   }
 
   readonly colors = {
@@ -77,26 +90,65 @@ export class LogsContainerService {
 
   totalCount: number = 0;
 
+  isServiceLogsFileView: boolean = false;
+
+  activeLog: ActiveServiceLogEntry | null = null;
+
   loadLogs(logsType: string): void {
     this.httpClient.get(logsType, this.getParams('listFilters')).subscribe(response => {
-      const jsonResponse = response.json();
-      this.logsTypeMap[logsType].logsModel.clear();
+      const jsonResponse = response.json(),
+        model = this.logsTypeMap[logsType].logsModel;
+      model.clear();
       if (jsonResponse) {
         const logs = jsonResponse.logList,
           count = jsonResponse.totalCount || 0;
         if (logs) {
-          this.serviceLogsStorage.addInstances(logs);
+          model.addInstances(logs);
         }
         this.totalCount = count;
       }
     });
-    this.httpClient.get('serviceLogsHistogram', this.getParams('histogramFilters')).subscribe(response => {
+    if (logsType === 'serviceLogs') {
+      // TODO rewrite to implement conditional data loading for service logs histogram or audit logs graph
+      this.httpClient.get('serviceLogsHistogram', this.getParams('histogramFilters')).subscribe(response => {
+        const jsonResponse = response.json();
+        this.serviceLogsHistogramStorage.clear();
+        if (jsonResponse) {
+          const histogramData = jsonResponse.graphData;
+          if (histogramData) {
+            this.serviceLogsHistogramStorage.addInstances(histogramData);
+          }
+        }
+      });
+    }
+  }
+
+  loadLogContext(id: string, hostName: string, componentName: string, scrollType: 'before' | 'after' | '' = ''): void {
+    const params = {
+      id: id,
+      host_name: hostName,
+      component_name: componentName,
+      scrollType: scrollType
+    };
+    this.httpClient.get('serviceLogsTruncated', params).subscribe(response => {
       const jsonResponse = response.json();
-      this.serviceLogsHistogramStorage.clear();
+      if (!scrollType) {
+        this.serviceLogsTruncatedStorage.clear();
+      }
       if (jsonResponse) {
-        const histogramData = jsonResponse.graphData;
-        if (histogramData) {
-          this.serviceLogsHistogramStorage.addInstances(histogramData);
+        const logs = jsonResponse.logList;
+        if (logs) {
+          if (scrollType === 'before') {
+            this.serviceLogsTruncatedStorage.addInstancesToStart(logs);
+          } else {
+            this.serviceLogsTruncatedStorage.addInstances(logs);
+          }
+          if (!scrollType) {
+            this.appState.setParameters({
+              isServiceLogContextView: true,
+              activeLog: params
+            });
+          }
         }
       }
     });

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
index 08f237d..ca8a632 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
@@ -27,6 +27,7 @@ import {graphs} from '@app/services/storage/graphs.service';
 import {hosts} from '@app/services/storage/hosts.service';
 import {serviceLogs} from '@app/services/storage/service-logs.service';
 import {serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
+import {serviceLogsTruncated} from '@app/services/storage/service-logs-truncated.service';
 import {serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
 import {auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
 import {userConfigs} from '@app/services/storage/user-configs.service';
@@ -37,6 +38,7 @@ export const reducers = {
   auditLogs,
   serviceLogs,
   serviceLogsHistogramData,
+  serviceLogsTruncated,
   graphs,
   hosts,
   userConfigs,

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-truncated.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-truncated.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-truncated.service.ts
new file mode 100644
index 0000000..f8fe0f7
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-truncated.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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 {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'serviceLogsTruncated';
+
+@Injectable()
+export class ServiceLogsTruncatedService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const serviceLogsTruncated = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/8852edd2/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
index 0d40bc7..1dee559 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
+++ b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
@@ -4,6 +4,7 @@
   "modal.submit": "OK",
   "modal.cancel": "Cancel",
   "modal.apply": "Apply",
+  "modal.close": "Close",
 
   "authorization.name": "Username",
   "authorization.password": "Password",
@@ -141,5 +142,9 @@
   "logs.versionNote": "Version Note",
   "logs.versionNumber": "Version Number",
   "logs.addToQuery": "Add to Query",
-  "logs.excludeFromQuery": "Exclude from Query"
+  "logs.excludeFromQuery": "Exclude from Query",
+  "logs.copy": "Copy",
+  "logs.open": "Open Log",
+  "logs.context": "Context",
+  "logs.loadMore": "Load more"
 }