This is an automated email from the ASF dual-hosted git repository.

ababiichuk pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 73a8c8a  AMBARI-23840 Log Search UI: Correct the links from Ambari to 
Log Search
73a8c8a is described below

commit 73a8c8ae99d44bf48109ab31bf1d252b10daad02
Author: Istvan Tobias <tobias.ist...@gmail.com>
AuthorDate: Mon May 21 12:29:00 2018 +0200

    AMBARI-23840 Log Search UI: Correct the links from Ambari to Log Search
---
 .../filter-button/filter-button.component.ts       |   4 +-
 .../logs-container/logs-container.component.ts     |  20 +-
 .../filter-dropdown/filter-dropdown.component.ts   |   2 +-
 .../src/app/services/auth.service.ts               |   6 +-
 .../src/app/services/logs-container.service.ts     | 293 +++------------------
 .../app/services/logs-filtering-utils.service.ts   | 225 ++++++++++------
 .../views/common/host_progress_popup_body_view.js  |   2 +-
 ambari-web/app/views/main/host/logs_view.js        |   2 +-
 ambari-web/test/views/main/host/logs_view_test.js  |   4 +-
 9 files changed, 209 insertions(+), 349 deletions(-)

diff --git 
a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
 
b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
index c5e0c2c..5d47604 100644
--- 
a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
+++ 
b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
@@ -80,7 +80,9 @@ export class FilterButtonComponent extends 
MenuButtonComponent implements Contro
     const checkedItems = this.subItems.filter((option: ListItem): boolean => 
option.isChecked);
     this.selection = checkedItems;
     this.selectItem.emit(checkedItems.map((option: ListItem): any => 
option.value));
-    this.dropdownList.doItemsCheck();
+    if (this.dropdownList) {
+      this.dropdownList.doItemsCheck();
+    }
   }
 
   writeValue(items: ListItem[]) {
diff --git 
a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
 
b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
index 8ab1d49..1211eff 100644
--- 
a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
+++ 
b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
@@ -102,9 +102,11 @@ export class LogsContainerComponent implements OnInit, 
OnDestroy {
 
   ngOnInit() {
     this.logsContainerService.loadColumnsNames();
+    // set te logsType when the activeLogsType state has changed
     this.subscriptions.push(
       this.appState.getParameter('activeLogsType').subscribe((value: LogsType) 
=> this.logsType = value)
     );
+    // set the hhistogramm data
     this.subscriptions.push(
       this.serviceLogsHistogramStorage.getAll().subscribe((data: BarGraph[]): 
void => {
         this.serviceLogsHistogramData = 
this.logsContainerService.getGraphData(data, 
this.logsContainerService.logLevels.map((
@@ -114,11 +116,13 @@ export class LogsContainerComponent implements OnInit, 
OnDestroy {
         }));
       })
     );
+    // audit graph data set
     this.subscriptions.push(
       this.auditLogsGraphStorage.getAll().subscribe((data: BarGraph[]): void 
=> {
         this.auditLogsGraphData = this.logsContainerService.getGraphData(data);
       })
     );
+    // service log context flag subscription
     this.subscriptions.push(
       this.appState.getParameter('isServiceLogContextView').subscribe((value: 
boolean): void => {
         this.isServiceLogContextView = value;
@@ -130,27 +134,28 @@ export class LogsContainerComponent implements OnInit, 
OnDestroy {
       this.filtersForm.valueChanges
         .filter(() => 
!this.logsContainerService.filtersFormSyncInProgress.getValue()).subscribe(this.onFiltersFormChange)
     );
-
+    // change the active tab when the active tab id changed in the URL
     this.subscriptions.push(
       this.activatedRoute.params.map((params: {[key: string]: any}) => params 
&& params.activeTab)
         .subscribe(this.onActiveTabParamChange)
     );
-
+    // sync to filters form when the query params changed (only when there is 
no other way sync)
     this.subscriptions.push(
       this.activatedRoute.queryParams.filter(() => 
!this.queryParamsSyncInProgress.getValue()).subscribe(this.onQueryParamsChange)
     );
+    // get the current query params and sync them if any
     this.activatedRoute.queryParams.first().subscribe((params) => {
       if (!Object.keys(params).length) {
         this.syncFiltersToQueryParams(this.filtersForm.value);
       }
     });
-
+    // when the active tab id changed in the store we sync the tab filters to 
the query params
     this.subscriptions.push(
       
this.logsStateService.getParameter('activeTabId').skip(1).subscribe(this.onActiveTabSwitched)
     );
-
+    // set the position of the filter panel depending on the scroll height: so 
it is fixed when it would be out from the screen
     this.subscriptions.push(
-      Observable.fromEvent(window, 'scroll').throttleTime(10).subscribe(() => {
+      Observable.fromEvent(window, 'scroll').subscribe(() => {
         this.setFixedPositionValue();
       })
     );
@@ -273,7 +278,10 @@ export class LogsContainerComponent implements OnInit, 
OnDestroy {
       const filtersFromQueryParams = 
this.logsFilteringUtilsService.getFilterFromQueryParams(
         queryParams, this.logsContainerService.activeLogsType
       );
-      
this.logsContainerService.syncFiltersToFiltersForms(filtersFromQueryParams);
+      this.logsContainerService.syncFiltersToFiltersForms({
+        ...this.logsFilteringUtilsService.defaultFilterSelections,
+        ...filtersFromQueryParams
+      });
     }
   }
 
diff --git 
a/ambari-logsearch/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.ts
 
b/ambari-logsearch/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.ts
index 4381e39..6140e7d 100644
--- 
a/ambari-logsearch/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.ts
+++ 
b/ambari-logsearch/ambari-logsearch-web/src/app/modules/shared/components/filter-dropdown/filter-dropdown.component.ts
@@ -54,7 +54,7 @@ export class FilterDropdownComponent extends 
DropdownButtonComponent implements
   }
 
   writeValue(items: ListItem[]) {
-    this.selection = items;
+    this.selection = items || [];
   }
 
   registerOnChange(callback: any): void {
diff --git 
a/ambari-logsearch/ambari-logsearch-web/src/app/services/auth.service.ts 
b/ambari-logsearch/ambari-logsearch-web/src/app/services/auth.service.ts
index 1a26fe4..87cdb41 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/app/services/auth.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/auth.service.ts
@@ -58,7 +58,11 @@ export class AuthService {
     if (isAuthorized) {
       const redirectTo = this.redirectUrl || 
(this.router.routerState.snapshot.url === '/login' ? '/' : null);
       if (redirectTo) {
-        this.router.navigate(Array.isArray(redirectTo) ? redirectTo : 
[redirectTo]);
+        if (Array.isArray(redirectTo)) {
+          this.router.navigate(redirectTo);
+        } else {
+          this.router.navigateByUrl(redirectTo);
+        }
       }
       this.redirectUrl = '';
     } else if (!isAuthorized) {
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 4d74d6e..0772846 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
@@ -60,7 +60,7 @@ import {CommonEntry} from '@app/classes/models/common-entry';
 import {ClusterSelectionService} from 
'@app/services/storage/cluster-selection.service';
 import {ActivatedRoute, Router} from '@angular/router';
 import {RoutingUtilsService} from '@app/services/routing-utils.service';
-import {LogsFilteringUtilsService} from 
'@app/services/logs-filtering-utils.service';
+import {LogsFilteringUtilsService, timeRangeFilterOptions} from 
'@app/services/logs-filtering-utils.service';
 import {BehaviorSubject} from 'rxjs/BehaviorSubject';
 import {LogsStateService} from '@app/services/storage/logs-state.service';
 import {LogLevelComponent} from 
'@app/components/log-level/log-level.component';
@@ -115,236 +115,19 @@ export class LogsContainerService {
     clusters: {
       label: 'filter.clusters',
       options: [],
-      defaultSelection: [],
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.clusters,
       fieldName: 'cluster'
     },
     timeRange: { // @ToDo remove duplication, this options are in the 
LogsFilteringUtilsService too
       label: 'logs.duration',
-      options: [
-        [
-          {
-            label: 'filter.timeRange.7d',
-            value: {
-              type: 'LAST',
-              unit: 'd',
-              interval: 7
-            }
-          },
-          {
-            label: 'filter.timeRange.30d',
-            value: {
-              type: 'LAST',
-              unit: 'd',
-              interval: 30
-            }
-          },
-          {
-            label: 'filter.timeRange.60d',
-            value: {
-              type: 'LAST',
-              unit: 'd',
-              interval: 60
-            }
-          },
-          {
-            label: 'filter.timeRange.90d',
-            value: {
-              type: 'LAST',
-              unit: 'd',
-              interval: 90
-            }
-          },
-          {
-            label: 'filter.timeRange.6m',
-            value: {
-              type: 'LAST',
-              unit: 'M',
-              interval: 6
-            }
-          },
-          {
-            label: 'filter.timeRange.1y',
-            value: {
-              type: 'LAST',
-              unit: 'y',
-              interval: 1
-            }
-          },
-          {
-            label: 'filter.timeRange.2y',
-            value: {
-              type: 'LAST',
-              unit: 'y',
-              interval: 2
-            }
-          },
-          {
-            label: 'filter.timeRange.5y',
-            value: {
-              type: 'LAST',
-              unit: 'y',
-              interval: 5
-            }
-          }
-        ],
-        [
-          {
-            label: 'filter.timeRange.yesterday',
-            value: {
-              type: 'PAST',
-              unit: 'd'
-            }
-          },
-          // TODO implement time range calculation
-          /*
-           {
-           label: 'filter.timeRange.beforeYesterday',
-           value: {
-           type: 'PAST',
-           unit: 'd'
-           }
-           },
-           {
-           label: 'filter.timeRange.thisDayLastWeek',
-           value: {
-           type: 'PAST',
-           unit: 'd'
-           }
-           },
-           */
-          {
-            label: 'filter.timeRange.previousWeek',
-            value: {
-              type: 'PAST',
-              unit: 'w'
-            }
-          },
-          {
-            label: 'filter.timeRange.previousMonth',
-            value: {
-              type: 'PAST',
-              unit: 'M'
-            }
-          },
-          {
-            label: 'filter.timeRange.previousYear',
-            value: {
-              type: 'PAST',
-              unit: 'y'
-            }
-          }
-        ],
-        [
-          {
-            label: 'filter.timeRange.today',
-            value: {
-              type: 'CURRENT',
-              unit: 'd'
-            }
-          },
-          {
-            label: 'filter.timeRange.thisWeek',
-            value: {
-              type: 'CURRENT',
-              unit: 'w'
-            }
-          },
-          {
-            label: 'filter.timeRange.thisMonth',
-            value: {
-              type: 'CURRENT',
-              unit: 'M'
-            }
-          },
-          {
-            label: 'filter.timeRange.thisYear',
-            value: {
-              type: 'CURRENT',
-              unit: 'y'
-            }
-          }
-        ],
-        [
-          {
-            label: 'filter.timeRange.5min',
-            value: {
-              type: 'LAST',
-              unit: 'm',
-              interval: 5
-            }
-          },
-          {
-            label: 'filter.timeRange.15min',
-            value: {
-              type: 'LAST',
-              unit: 'm',
-              interval: 15
-            }
-          },
-          {
-            label: 'filter.timeRange.30min',
-            value: {
-              type: 'LAST',
-              unit: 'm',
-              interval: 30
-            }
-          },
-          {
-            label: 'filter.timeRange.1hr',
-            value: {
-              type: 'LAST',
-              unit: 'h',
-              interval: 1
-            }
-          },
-          {
-            label: 'filter.timeRange.3hr',
-            value: {
-              type: 'LAST',
-              unit: 'h',
-              interval: 3
-            }
-          },
-          {
-            label: 'filter.timeRange.6hr',
-            value: {
-              type: 'LAST',
-              unit: 'h',
-              interval: 6
-            }
-          },
-          {
-            label: 'filter.timeRange.12hr',
-            value: {
-              type: 'LAST',
-              unit: 'h',
-              interval: 12
-            }
-          },
-          {
-            label: 'filter.timeRange.24hr',
-            value: {
-              type: 'LAST',
-              unit: 'h',
-              interval: 24
-            }
-          },
-        ]
-      ],
-      defaultSelection: {
-        value: {
-          type: 'LAST',
-          unit: 'h',
-          interval: 1
-        },
-        label: 'filter.timeRange.1hr'
-      }
+      options: this.logsFilteringUtilsService.getTimeRandeOptionsByGroup(),
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.timeRange
     },
     components: {
       label: 'filter.components',
       iconClass: 'fa fa-cubes',
       options: [],
-      defaultSelection: [],
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.components,
       fieldName: 'type'
     },
     levels: {
@@ -359,14 +142,14 @@ export class LogsContainerService {
           iconClass: `fa ${LogLevelComponent.classMap[cssClass]}`
         };
       }),
-      defaultSelection: [],
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.levels,
       fieldName: 'level'
     },
     hosts: {
       label: 'filter.hosts',
       iconClass: 'fa fa-server',
       options: [],
-      defaultSelection: [],
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.hosts,
       fieldName: 'host'
     },
     auditLogsSorting: {
@@ -387,15 +170,7 @@ export class LogsContainerService {
           }
         }
       ],
-      defaultSelection: [
-        {
-          label: 'sorting.time.desc',
-          value: {
-            key: 'evtTime',
-            type: 'desc'
-          }
-        }
-      ]
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.auditLogsSorting
     },
     serviceLogsSorting: {
       label: 'sorting.title',
@@ -415,15 +190,7 @@ export class LogsContainerService {
           }
         }
       ],
-      defaultSelection: [
-        {
-          label: 'sorting.time.desc',
-          value: {
-            key: 'logtime',
-            type: 'desc'
-          }
-        }
-      ]
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.serviceLogsSorting
     },
     pageSize: {
       label: 'pagination.title',
@@ -433,28 +200,23 @@ export class LogsContainerService {
           value: option
         };
       }),
-      defaultSelection: [
-        {
-          label: '10',
-          value: '10'
-        }
-      ]
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.pageSize
     },
     page: {
-      defaultSelection: 0
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.page
     },
     query: {
-      defaultSelection: []
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.query
     },
     users: {
       label: 'filter.users',
       iconClass: 'fa fa-server',
       options: [],
-      defaultSelection: [],
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.users,
       fieldName: 'reqUser'
     },
     isUndoOrRedo: {
-      defaultSelection: false
+      defaultSelection: 
this.logsFilteringUtilsService.defaultFilterSelections.isUndoOrRedo
     }
   };
 
@@ -628,7 +390,7 @@ export class LogsContainerService {
       const item = {
         [key]: formControl
       };
-      formControl.setValue(this.filters[key].defaultSelection);
+      
formControl.setValue(this.logsFilteringUtilsService.defaultFilterSelections[key]);
       return Object.assign(currentObject, item);
     }, {});
     this.filtersForm = new FormGroup(formItems);
@@ -689,8 +451,12 @@ export class LogsContainerService {
       .first()
       .subscribe(() => {
         this.filtersFormSyncInProgress.next(true);
-        this.filtersForm.reset(filters, {emitEvent: false});
+        this.filtersForm.reset(
+          {...this.logsFilteringUtilsService.defaultFilterSelections, 
...filters},
+          {emitEvent: false}
+        );
         this.filtersFormSyncInProgress.next(false);
+        this.onFiltersFormValueChange();
       });
   }
 
@@ -755,6 +521,7 @@ export class LogsContainerService {
    * Handle the filters form value changes in order to sync the current tab's 
filters and also to load the logs.
    */
   private onFiltersFormValueChange = (): void => {
+    const filters = this.filtersForm.getRawValue();
     this.syncFiltersToActiveTabFilters(this.filtersForm.getRawValue());
     this.loadLogs();
   }
@@ -925,13 +692,17 @@ export class LogsContainerService {
       paramNames.forEach((paramName: string): void => {
         let value;
         const valueGetter = this.valueGetters[paramName] || 
this.logsFilteringUtilsService.defaultValueGetterFromListItem;
-        if (paramName === 'from') {
-          value = valueGetter(inputValue, params['to']);
+        if (inputValue === null || inputValue === undefined) {
+
         } else {
-          value = valueGetter(inputValue);
-        }
-        if (value != null && value !== '') {
-          params[paramName] = value;
+          if (paramName === 'from') {
+            value = valueGetter(inputValue, params['to']);
+          } else {
+            value = valueGetter(inputValue);
+          }
+          if (value != null && value !== '') {
+            params[paramName] = value;
+          }
         }
       });
     }, this);
@@ -1094,7 +865,7 @@ export class LogsContainerService {
     const keys = Object.keys(this.filters).filter((key: string): boolean => 
itemsList.indexOf(key) > -1);
     return keys.reduce((currentObject: object, key: string): object => {
       return Object.assign(currentObject, {
-        [key]: this.filters[key].defaultSelection
+        [key]: this.logsFilteringUtilsService.defaultFilterSelections[key]
       });
     }, {});
   }
diff --git 
a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-filtering-utils.service.ts
 
b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-filtering-utils.service.ts
index 3b98b45..6566f4e 100644
--- 
a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-filtering-utils.service.ts
+++ 
b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-filtering-utils.service.ts
@@ -24,13 +24,14 @@ import {LogsType, SortingType} from '@app/classes/string';
 import {UtilsService} from '@app/services/utils.service';
 
 // @ToDo remove duplication, this options are in the LogContainerService
-const timeRangeFilterOptions = [{
+export const timeRangeFilterOptions = [{
     label: 'filter.timeRange.7d',
     value: {
       type: 'LAST',
       unit: 'd',
       interval: 7
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.30d',
@@ -38,7 +39,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'd',
       interval: 30
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.60d',
@@ -46,7 +48,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'd',
       interval: 60
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.90d',
@@ -54,7 +57,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'd',
       interval: 90
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.6m',
@@ -62,7 +66,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'M',
       interval: 6
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.1y',
@@ -70,7 +75,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'y',
       interval: 1
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.2y',
@@ -78,7 +84,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'y',
       interval: 2
-    }
+    },
+    group: 0
   },
   {
     label: 'filter.timeRange.5y',
@@ -86,69 +93,81 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'y',
       interval: 5
-    }
-  }, {
+    },
+    group: 0
+  },
+  {
     label: 'filter.timeRange.yesterday',
     value: {
       type: 'PAST',
       unit: 'd'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.previousWeek',
     value: {
       type: 'PAST',
       unit: 'w'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.previousMonth',
     value: {
       type: 'PAST',
       unit: 'M'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.previousYear',
     value: {
       type: 'PAST',
       unit: 'y'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.today',
     value: {
       type: 'CURRENT',
       unit: 'd'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.thisWeek',
     value: {
       type: 'CURRENT',
       unit: 'w'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.thisMonth',
     value: {
       type: 'CURRENT',
       unit: 'M'
-    }
+    },
+    group: 1
   },
   {
     label: 'filter.timeRange.thisYear',
     value: {
       type: 'CURRENT',
       unit: 'y'
-    }
-  }, {
+    },
+    group: 1
+  },
+  {
     label: 'filter.timeRange.5min',
     value: {
       type: 'LAST',
       unit: 'm',
       interval: 5
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.15min',
@@ -156,7 +175,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'm',
       interval: 15
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.30min',
@@ -164,7 +184,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'm',
       interval: 30
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.1hr',
@@ -172,7 +193,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'h',
       interval: 1
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.3hr',
@@ -180,7 +202,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'h',
       interval: 3
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.6hr',
@@ -188,7 +211,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'h',
       interval: 6
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.12hr',
@@ -196,7 +220,8 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'h',
       interval: 12
-    }
+    },
+    group: 2
   },
   {
     label: 'filter.timeRange.24hr',
@@ -204,16 +229,64 @@ const timeRangeFilterOptions = [{
       type: 'LAST',
       unit: 'h',
       interval: 24
-    }
+    },
+    group: 2
   }];
 
 @Injectable()
 export class LogsFilteringUtilsService {
 
+  readonly defaultFilterSelections = {
+    clusters: [],
+    timeRange: {
+      value: {
+        type: 'LAST',
+        unit: 'h',
+        interval: 1
+      },
+      label: 'filter.timeRange.1hr'
+    },
+    components: [],
+    levels: [],
+    hosts: [],
+    auditLogsSorting: {
+      label: 'sorting.time.desc',
+      value: {
+        key: 'evtTime',
+        type: 'desc'
+      }
+    },
+    serviceLogsSorting: {
+      label: 'sorting.time.desc',
+      value: {
+        key: 'logtime',
+        type: 'desc'
+      }
+    },
+    pageSize: [{
+      label: '10',
+      value: '10'
+    }],
+    page: 0,
+    query: [],
+    users: [],
+    isUndoOrRedo: false
+  };
+
   constructor(
     private utilsService: UtilsService
   ) { }
 
+  getTimeRandeOptionsByGroup() {
+    return timeRangeFilterOptions.reduce((groups: any, item: any) => {
+      const groupItem = {...item};
+      delete groupItem.group;
+      groups[item.group] = groups[item.group] || [];
+      groups[item.group].push(groupItem);
+      return groups;
+    }, []);
+  }
+
   getStartTimeMomentFromTimeUnitListItem(selection: TimeUnitListItem, end: 
moment.Moment, timeZone: string): moment.Moment | undefined {
     let time;
     const value = selection && selection.value;
@@ -298,11 +371,11 @@ export class LogsFilteringUtilsService {
   }
 
   getSortTypeFromSortingListItem(selection: SortingListItem[] = []): 
SortingType {
-    return selection[0] && selection[0].value ? selection[0].value.type : 
'desc';
+    return selection && selection[0] && selection[0].value ? 
selection[0].value.type : 'desc';
   }
 
   getSortKeyFromSortingListItem(selection: SortingListItem[] = []): string {
-    return selection[0] && selection[0].value ? selection[0].value.key : '';
+    return selection && selection[0] && selection[0].value ? 
selection[0].value.key : '';
   }
 
   getPage(value: number | undefined): string | undefined {
@@ -326,52 +399,54 @@ export class LogsFilteringUtilsService {
       const newParams = {
         ...currentParams
       };
-      switch (key) {
-        case 'auditLogsSorting':
-        case 'serviceLogsSorting':
-          if (`${activeLogsType}Sorting` === key) {
-            const item = Array.isArray(filters[key]) ? filters[key][0] : 
filters[key];
-            const itemValue = item && item.value;
-            Object.assign(newParams, {
-              sortingKey: itemValue.key,
-              sortingType: itemValue.type,
-            });
-          }
-          break;
-        case 'query' :
-          Object.assign(newParams, {
-            [key]: JSON.stringify(filters[key])
-          });
-          break;
-        case 'timeRange' :
-          const timeRangeValue: TimeUnit | CustomTimeRange = 
filters[key].value;
-          const timeRangeParams: {[key: string]: string} = {
-            timeRangeType: timeRangeValue.type
-          };
-          if (timeRangeValue.type === 'CUSTOM') {
-            Object.assign(timeRangeParams, {
-              timeRangeStart: timeRangeValue.start.toISOString(),
-              timeRangeEnd: timeRangeValue.end.toISOString()
-            });
-          } else {
-            Object.assign(timeRangeParams, {
-              timeRangeInterval: timeRangeValue.interval,
-              timeRangeUnit: timeRangeValue.unit
-            });
-          }
-          Object.assign(newParams, timeRangeParams);
-          break;
-        default:
-          const customMethodName: string = 'get' + 
(key.charAt(0).toUpperCase()) + key.slice(1);
-          const valueGetter: Function = (
-            this[customMethodName] || this.defaultValueGetterFromListItem
-          );
-          const paramValue = valueGetter(filters[key]);
+      if (filters[key] !== null && filters[key] !== undefined) {
+        switch (key) {
+          case 'auditLogsSorting':
+          case 'serviceLogsSorting':
+            if (`${activeLogsType}Sorting` === key) {
+              const item = Array.isArray(filters[key]) ? filters[key][0] : 
filters[key];
+              const itemValue = item && item.value;
+              Object.assign(newParams, {
+                sortingKey: itemValue.key,
+                sortingType: itemValue.type,
+              });
+            }
+            break;
+          case 'query' :
             Object.assign(newParams, {
-              ...newParams,
-              [key]: paramValue
+              [key]: JSON.stringify(filters[key])
             });
-          break;
+            break;
+          case 'timeRange' :
+            const timeRangeValue: TimeUnit | CustomTimeRange = 
filters[key].value;
+            const timeRangeParams: {[key: string]: string} = {
+              timeRangeType: timeRangeValue.type
+            };
+            if (timeRangeValue.type === 'CUSTOM') {
+              Object.assign(timeRangeParams, {
+                timeRangeStart: timeRangeValue.start.toISOString(),
+                timeRangeEnd: timeRangeValue.end.toISOString()
+              });
+            } else {
+              Object.assign(timeRangeParams, {
+                timeRangeInterval: timeRangeValue.interval,
+                timeRangeUnit: timeRangeValue.unit
+              });
+            }
+            Object.assign(newParams, timeRangeParams);
+            break;
+          default:
+            const customMethodName: string = 'get' + 
(key.charAt(0).toUpperCase()) + key.slice(1);
+            const valueGetter: Function = (
+              this[customMethodName] || this.defaultValueGetterFromListItem
+            );
+            const paramValue = valueGetter(filters[key]);
+              Object.assign(newParams, {
+                ...newParams,
+                [key]: paramValue
+              });
+            break;
+        }
       }
       return newParams;
     }, {});
@@ -443,13 +518,13 @@ export class LogsFilteringUtilsService {
         case 'sortingKey' :
           const sortingKey = `${activeLogsType}Sorting`;
           newFilter = {
-            [sortingKey]: [{
+            [sortingKey]: {
               label: `sorting.time.${queryParams.sortingType}`,
               value: {
                 key: queryParams.sortingKey,
                 type: queryParams.sortingType
               }
-            }]
+            }
           };
           break;
         case 'query' :
diff --git a/ambari-web/app/views/common/host_progress_popup_body_view.js 
b/ambari-web/app/views/common/host_progress_popup_body_view.js
index d08cfeb..9422700 100644
--- a/ambari-web/app/views/common/host_progress_popup_body_view.js
+++ b/ambari-web/app/views/common/host_progress_popup_body_view.js
@@ -1141,7 +1141,7 @@ App.HostProgressPopupBodyView = App.TableView.extend({
     var relationType,
         componentName,
         hostName,
-        linkTailTpl = '?host_name={0}&file_name={1}&component_name={2}';
+        linkTailTpl = 
'/#logs/serviceLogs?hosts={0}&components={2}&query=%5B%7B"id":0,"name":"path","label":"Path","value":"{1}","isExclude":false%7D%5D';
 
     if (this.get('openedTask.id')) {
       relationType = this._determineRoleRelation(this.get('openedTask'));
diff --git a/ambari-web/app/views/main/host/logs_view.js 
b/ambari-web/app/views/main/host/logs_view.js
index 4e634e7..78e6d44 100644
--- a/ambari-web/app/views/main/host/logs_view.js
+++ b/ambari-web/app/views/main/host/logs_view.js
@@ -45,7 +45,7 @@ App.MainHostLogsView = App.TableView.extend({
 
   content: function() {
     var self = this,
-        linkTailTpl = '?host_name={0}&file_name={1}&component_name={2}';
+        linkTailTpl = 
'/#logs/serviceLogs?hosts={0}&components={2}&query=%5B%7B"id":0,"name":"path","label":"Path","value":"{1}","isExclude":false%7D%5D';
 
     return this.get('hostLogs').map(function(i) {
       return Em.Object.create({
diff --git a/ambari-web/test/views/main/host/logs_view_test.js 
b/ambari-web/test/views/main/host/logs_view_test.js
index 38159df..3f10f97 100644
--- a/ambari-web/test/views/main/host/logs_view_test.js
+++ b/ambari-web/test/views/main/host/logs_view_test.js
@@ -90,12 +90,12 @@ describe('App.MainHostLogsView', function() {
           {
             fileName: 'file1',
             filePath: 'f1',
-            linkTail: '?host_name=host1&file_name=f1&component_name=l1'
+            linkTail: 
'/#logs/serviceLogs?hosts=host1&components=l1&query=%5B%7B\"id\":0,\"name\":\"path\",\"label\":\"Path\",\"value\":\"f1\",\"isExclude\":false%7D%5D'
           },
           {
             fileName: 'file1',
             filePath: 'f2',
-            linkTail: '?host_name=host1&file_name=f2&component_name=l1'
+            linkTail: 
'/#logs/serviceLogs?hosts=host1&components=l1&query=%5B%7B\"id\":0,\"name\":\"path\",\"label\":\"Path\",\"value\":\"f2\",\"isExclude\":false%7D%5D'
           }
         ],
         fileNamesFilterValue: 'f1,f2'

-- 
To stop receiving notification emails like this one, please contact
ababiic...@apache.org.

Reply via email to