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"
}