You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ab...@apache.org on 2017/07/05 11:06:08 UTC
[14/15] ambari git commit: AMBARI-21403 Log Search UI: production
build issues. (ababiichuk)
AMBARI-21403 Log Search UI: production build issues. (ababiichuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9a45ef6c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9a45ef6c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9a45ef6c
Branch: refs/heads/branch-feature-logsearch-ui
Commit: 9a45ef6ceb51f5c1ddcc106a54ddb9ae256f2622
Parents: 0b6679a
Author: ababiichuk <ab...@hortonworks.com>
Authored: Wed Jul 5 13:59:09 2017 +0300
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Wed Jul 5 13:59:09 2017 +0300
----------------------------------------------------------------------
.../src/app/app.module.ts | 19 ++++---
.../accordion-panel.component.ts | 9 +---
.../src/app/components/app.component.spec.ts | 24 ++++++---
.../src/app/components/app.component.ts | 16 +++---
.../dropdown-list/dropdown-list.component.ts | 9 +---
.../filter-button/filter-button.component.ts | 15 +++---
.../filter-dropdown.component.spec.ts | 4 +-
.../filter-dropdown.component.ts | 7 +--
.../filter-text-field.component.spec.ts | 4 +-
.../filter-text-field.component.ts | 7 +--
.../filters-panel/filters-panel.component.html | 2 +-
.../filters-panel/filters-panel.component.ts | 14 ++----
.../login-form/login-form.component.html | 2 +-
.../login-form/login-form.component.spec.ts | 23 +++++----
.../login-form/login-form.component.ts | 35 +++++++------
.../logs-list/logs-list.component.html | 2 +-
.../components/logs-list/logs-list.component.ts | 7 ++-
.../main-container.component.html | 5 +-
.../main-container.component.spec.ts | 14 +++++-
.../main-container/main-container.component.ts | 18 +++----
.../menu-button/menu-button.component.spec.ts | 9 +++-
.../menu-button/menu-button.component.ts | 6 +--
.../src/app/models/app-state.model.ts | 29 +++++++++++
.../src/app/models/store.model.ts | 12 +++--
.../services/component-actions.service.spec.ts | 12 ++++-
.../app/services/component-actions.service.ts | 7 ++-
.../src/app/services/filtering.service.ts | 2 +-
.../app/services/http-client.service.spec.ts | 14 +++++-
.../src/app/services/http-client.service.ts | 53 ++++++++++++++------
.../src/app/services/mock-api-data.service.ts | 9 ++--
.../services/storage/app-settings.service.ts | 4 +-
.../app/services/storage/app-state.service.ts | 33 ++++++++++++
.../app/services/storage/audit-logs.service.ts | 4 +-
.../app/services/storage/bar-graphs.service.ts | 4 +-
.../src/app/services/storage/filters.service.ts | 4 +-
.../src/app/services/storage/graphs.service.ts | 4 +-
.../src/app/services/storage/nodes.service.ts | 4 +-
.../services/storage/service-logs.service.ts | 4 +-
.../services/storage/user-configs.service.ts | 4 +-
39 files changed, 301 insertions(+), 153 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
index 1e0ebb0..65139db 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
@@ -34,6 +34,7 @@ import {ComponentActionsService} from '@app/services/component-actions.service';
import {FilteringService} from '@app/services/filtering.service';
import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
import {BarGraphsService, barGraphs} from '@app/services/storage/bar-graphs.service';
@@ -104,14 +105,15 @@ export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSR
}
}),
StoreModule.provideStore({
- appSettings,
- auditLogs,
- serviceLogs,
- barGraphs,
- graphs,
- nodes,
- userConfigs,
- filters
+ appSettings: appSettings,
+ appState: appState,
+ auditLogs: auditLogs,
+ serviceLogs: serviceLogs,
+ barGraphs: barGraphs,
+ graphs: graphs,
+ nodes: nodes,
+ userConfigs: userConfigs,
+ filters: filters
}),
MomentModule,
MomentTimezoneModule
@@ -121,6 +123,7 @@ export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSR
ComponentActionsService,
FilteringService,
AppSettingsService,
+ AppStateService,
AuditLogsService,
ServiceLogsService,
BarGraphsService,
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
index 85031b6..131edcd 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
@@ -15,19 +15,14 @@
* limitations under the License.
*/
-import {Component, OnInit, Input, ContentChild, TemplateRef} from '@angular/core';
+import {Component, Input, ContentChild, TemplateRef} from '@angular/core';
@Component({
selector: 'accordion-panel',
templateUrl: './accordion-panel.component.html',
styleUrls: ['./accordion-panel.component.less']
})
-export class AccordionPanelComponent implements OnInit {
-
- constructor() { }
-
- ngOnInit() {
- }
+export class AccordionPanelComponent {
@Input()
toggleId: string;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
index 3442132..b1b691c 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
@@ -21,6 +21,8 @@ import {TestBed, async} from '@angular/core/testing';
import {Http} from '@angular/http';
import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
import {HttpClientService} from '@app/services/http-client.service';
import {AppComponent} from './app.component';
@@ -32,16 +34,26 @@ export function HttpLoaderFactory(http: Http) {
describe('AppComponent', () => {
beforeEach(async(() => {
const httpClient = {
- get: () => {}
+ get: () => {
+ return {
+ subscribe: () => {}
+ }
+ }
};
TestBed.configureTestingModule({
declarations: [AppComponent],
- imports: [TranslateModule.forRoot({
- provide: TranslateLoader,
- useFactory: HttpLoaderFactory,
- deps: [Http]
- })],
+ imports: [
+ StoreModule.provideStore({
+ appState
+ }),
+ TranslateModule.forRoot({
+ provide: TranslateLoader,
+ useFactory: HttpLoaderFactory,
+ deps: [Http]
+ })
+ ],
providers: [
+ AppStateService,
{
provide: HttpClientService,
useValue: httpClient
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
index c5a17c2..1622f7c 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
@@ -18,6 +18,7 @@
import {Component} from '@angular/core';
import {TranslateService} from '@ngx-translate/core';
+import {AppStateService} from '@app/services/storage/app-state.service';
import {HttpClientService} from '@app/services/http-client.service';
@Component({
@@ -28,16 +29,17 @@ import {HttpClientService} from '@app/services/http-client.service';
export class AppComponent {
- constructor(private httpClient: HttpClientService, private translate: TranslateService) {
+ constructor(private httpClient: HttpClientService, private translate: TranslateService, private appState: AppStateService) {
+ this.appState.getParameter('isAuthorized').subscribe(value => this.isAuthorized = value);
+ this.appState.setParameter('isInitialLoading', true);
+ this.httpClient.get('status').subscribe(() => this.appState.setParameters({
+ isAuthorized: true,
+ isInitialLoading: false
+ }), () => this.appState.setParameter('isInitialLoading', false));
translate.setDefaultLang('en');
translate.use('en');
}
- ngOnInit() {
- this.httpClient.get('status');
- }
+ isAuthorized: boolean = false;
- get isAuthorized() {
- return this.httpClient.isAuthorized;
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
index 808fcf8..6426f6a 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
@@ -16,19 +16,14 @@
* limitations under the License.
*/
-import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';
+import {Component, Input, Output, EventEmitter} from '@angular/core';
@Component({
selector: 'ul.dropdown-menu',
templateUrl: './dropdown-list.component.html',
styleUrls: ['./dropdown-list.component.less']
})
-export class DropdownListComponent implements OnInit {
-
- constructor() { }
-
- ngOnInit() {
- }
+export class DropdownListComponent {
@Input()
items: any[];
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
index 3da53ca..b529686 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
@@ -20,9 +20,12 @@ import {Component, Input, forwardRef} from '@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormGroup} from '@angular/forms';
import {ComponentActionsService} from '@app/services/component-actions.service';
import {FilteringService} from '@app/services/filtering.service';
-import {MenuButtonComponent, menuButtonComponentOptions} from '@app/components/menu-button/menu-button.component';
+import {MenuButtonComponent} from '@app/components/menu-button/menu-button.component';
-@Component(Object.assign({
+@Component({
+ selector: 'filter-button',
+ templateUrl: '../menu-button/menu-button.component.html',
+ styleUrls: ['../menu-button/menu-button.component.less'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
@@ -30,9 +33,7 @@ import {MenuButtonComponent, menuButtonComponentOptions} from '@app/components/m
multi: true
}
]
-}, menuButtonComponentOptions, {
- selector: 'filter-button',
-}))
+})
export class FilterButtonComponent extends MenuButtonComponent implements ControlValueAccessor {
constructor(protected actions: ComponentActionsService, private filtering: FilteringService) {
@@ -41,7 +42,7 @@ export class FilterButtonComponent extends MenuButtonComponent implements Contro
ngAfterViewInit() {
const callback = this.customOnChange ?
- (value => this.customOnChange(value)) : (() => this.filtering.filteringSubject.next(null));
+ (value => this.actions[this.customOnChange](value)) : (() => this.filtering.filteringSubject.next(null));
this.form.controls[this.filterName].valueChanges.subscribe(callback);
}
@@ -49,7 +50,7 @@ export class FilterButtonComponent extends MenuButtonComponent implements Contro
filterName: string;
@Input()
- customOnChange: (value: any) => void;
+ customOnChange: string;
@Input()
form: FormGroup;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
index 9f4522b..f6d1294 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
@@ -24,6 +24,7 @@ import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {StoreModule} from '@ngrx/store';
import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
import {FilteringService} from '@app/services/filtering.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
import {FilterDropdownComponent} from './filter-dropdown.component';
@@ -69,7 +70,8 @@ describe('FilterDropdownComponent', () => {
{
provide: FilteringService,
useValue: filtering
- }
+ },
+ ComponentActionsService
],
schemas: [NO_ERRORS_SCHEMA]
})
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
index 84210dc..1cf7d41 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
@@ -18,6 +18,7 @@
import {Component, AfterViewInit, Input, forwardRef} from '@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormGroup} from '@angular/forms';
import {FilteringService} from '@app/services/filtering.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
@Component({
selector: 'filter-dropdown',
@@ -33,12 +34,12 @@ import {FilteringService} from '@app/services/filtering.service';
})
export class FilterDropdownComponent implements AfterViewInit, ControlValueAccessor {
- constructor(private filtering: FilteringService) {
+ constructor(private filtering: FilteringService, private actions: ComponentActionsService) {
}
ngAfterViewInit() {
const callback = this.customOnChange ?
- (value => this.customOnChange(value)) : (() => this.filtering.filteringSubject.next(null));
+ (value => this.actions[this.customOnChange](value)) : (() => this.filtering.filteringSubject.next(null));
this.form.controls[this.filterName].valueChanges.subscribe(callback);
}
@@ -46,7 +47,7 @@ export class FilterDropdownComponent implements AfterViewInit, ControlValueAcces
options: any[];
@Input()
- customOnChange: (value: any) => void;
+ customOnChange: string;
@Input()
form: FormGroup;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
index 740593f..9123969 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
@@ -24,6 +24,7 @@ import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {StoreModule} from '@ngrx/store';
import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
import {FilteringService} from '@app/services/filtering.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
import {FilterTextFieldComponent} from './filter-text-field.component';
@@ -59,7 +60,8 @@ describe('FilterTextFieldComponent', () => {
{
provide: FilteringService,
useValue: filtering
- }
+ },
+ ComponentActionsService
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
index 857b511..b05000b 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
@@ -19,6 +19,7 @@ import {Component, AfterViewInit, Input, forwardRef} from '@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormGroup} from '@angular/forms';
import 'rxjs/add/operator/debounceTime';
import {FilteringService} from '@app/services/filtering.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
@Component({
selector: 'filter-text-field',
@@ -34,12 +35,12 @@ import {FilteringService} from '@app/services/filtering.service';
})
export class FilterTextFieldComponent implements AfterViewInit, ControlValueAccessor {
- constructor(private filtering: FilteringService) {
+ constructor(private filtering: FilteringService, private actions: ComponentActionsService) {
}
ngAfterViewInit() {
const callback = this.customOnChange ?
- (value => this.customOnChange(value)) : (() => this.filtering.filteringSubject.next(null));
+ (value => this.actions[this.customOnChange](value)) : (() => this.filtering.filteringSubject.next(null));
this.form.controls[this.filterName].valueChanges.debounceTime(this.debounceInterval).subscribe(callback);
}
@@ -47,7 +48,7 @@ export class FilterTextFieldComponent implements AfterViewInit, ControlValueAcce
filterName: string;
@Input()
- customOnChange: (value: any) => void;
+ customOnChange: string;
@Input()
form: FormGroup;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
index 256b547..450ce5a 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
@@ -25,7 +25,7 @@
formControlName="timeRange" [form]="filtersForm"></filter-dropdown>
<filter-dropdown [(ngModel)]="filters.timeZone.selectedValue" [filterName]="'timeZone'"
formControlName="timeZone" [form]="filtersForm"
- [customOnChange]="setTimeZone"></filter-dropdown>
+ [customOnChange]="'setTimeZone'"></filter-dropdown>
<!--button class="btn btn-success" type="button">
<span class="fa fa-search"></span>
</button-->
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
index b2ae9b0..652b864 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
@@ -16,22 +16,18 @@
* limitations under the License.
*/
-import {Component, OnInit} from '@angular/core';
+import {Component} from '@angular/core';
import {FormControl, FormGroup} from '@angular/forms';
import {FilteringService} from '@app/services/filtering.service';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
@Component({
selector: 'filters-panel',
templateUrl: './filters-panel.component.html',
styleUrls: ['./filters-panel.component.less']
})
-export class FiltersPanelComponent implements OnInit {
+export class FiltersPanelComponent {
- constructor(private filtering: FilteringService, private appSettings: AppSettingsService) {
- }
-
- ngOnInit() {
+ constructor(private filtering: FilteringService) {
}
get filters() {
@@ -46,8 +42,4 @@ export class FiltersPanelComponent implements OnInit {
filtersForm = new FormGroup(this.filtersFormItems);
- setTimeZone(timeZone: string): void {
- this.appSettings.setParameter('timeZone', timeZone);
- }
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
index 37a96e9..a34cfb8 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
@@ -26,7 +26,7 @@
<label for="password">{{'authorization.password' | translate}}</label>
<input class="form-control" type="password" id="password" name="password" required [(ngModel)]="password">
</div>
- <button class="btn btn-success" [disabled]="!loginForm.form.valid || isRequestInProgress">
+ <button class="btn btn-success" [disabled]="!loginForm.form.valid || isLoginInProgress">
{{'authorization.signIn' | translate}}
</button>
</form>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
index 0498ee4..fd54fe6 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
@@ -21,6 +21,8 @@ import {FormsModule} from '@angular/forms';
import {HttpModule, Http} from '@angular/http';
import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
import {HttpClientService} from '@app/services/http-client.service';
import {LoginFormComponent} from './login-form.component';
@@ -38,15 +40,10 @@ describe('LoginFormComponent', () => {
};
const httpClient = {
isAuthorized: true,
- post: () => {
+ postFormData: () => {
return {
- finally: (callback: () => void) => {
- callback();
- return {
- subscribe: (success: () => void, error: () => void) => {
- authMock.isError ? error() : success();
- }
- }
+ subscribe: (success: () => void, error: () => void) => {
+ authMock.isError ? error() : success();
}
}
}
@@ -62,9 +59,13 @@ describe('LoginFormComponent', () => {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [Http]
+ }),
+ StoreModule.provideStore({
+ appState
})
],
providers: [
+ AppStateService,
{
provide: HttpClientService,
useValue: httpClient
@@ -111,9 +112,9 @@ describe('LoginFormComponent', () => {
expect(component.isLoginAlertDisplayed).toEqual(test.isLoginAlertDisplayed);
});
- it('isRequestInProgress', () => {
- expect(component.isRequestInProgress).toEqual(false);
- })
+ it('isLoginInProgress', () => {
+ expect(component.isLoginInProgress).toEqual(false);
+ });
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
index 2a93775..62c71f1 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
@@ -16,21 +16,20 @@
* limitations under the License.
*/
-import {Component, OnInit} from '@angular/core';
+import {Component} from '@angular/core';
import 'rxjs/add/operator/finally';
import {HttpClientService} from '@app/services/http-client.service';
+import {AppStateService} from '@app/services/storage/app-state.service';
@Component({
selector: 'login-form',
templateUrl: './login-form.component.html',
styleUrls: ['./login-form.component.less']
})
-export class LoginFormComponent implements OnInit {
+export class LoginFormComponent {
- constructor(private httpClient: HttpClientService) {
- }
-
- ngOnInit() {
+ constructor(private httpClient: HttpClientService, private appState: AppStateService) {
+ this.appState.getParameter('isLoginInProgress').subscribe(value => this.isLoginInProgress = value);
}
username: string;
@@ -39,22 +38,22 @@ export class LoginFormComponent implements OnInit {
isLoginAlertDisplayed: boolean;
- isRequestInProgress: boolean;
+ isLoginInProgress: boolean;
+
+ private setIsAuthorized(value: boolean): void {
+ this.appState.setParameters({
+ isAuthorized: value,
+ isLoginInProgress: false
+ });
+ this.isLoginAlertDisplayed = !value;
+ }
login() {
- this.isRequestInProgress = true;
- this.httpClient.post('login', {
+ this.appState.setParameter('isLoginInProgress', true);
+ this.httpClient.postFormData('login', {
username: this.username,
password: this.password
- }).finally(() => {
- this.isRequestInProgress = false;
- }).subscribe(() => {
- this.isLoginAlertDisplayed = false;
- this.httpClient.isAuthorized = true;
- }, () => {
- this.isLoginAlertDisplayed = true;
- this.httpClient.isAuthorized = false;
- });
+ }).subscribe(() => this.setIsAuthorized(true), () => this.setIsAuthorized(false));
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
index df72502..09b2e1e 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
@@ -21,7 +21,7 @@
<div [ngClass]="'col-md-1 log-status ' + log.className">{{log.level}}</div>
<div class="col-md-3">
<div class="log-type">{{log.type}}</div>
- <time class="log-time">{{log.time | amTz: filtering.timeZone | amDateFormat: timeFormat}}</time>
+ <time class="log-time">{{log.time | amTz: timeZone | amDateFormat: timeFormat}}</time>
</div>
<div class="col-md-6 log-content-wrapper">
<div class="collapse log-actions" [attr.id]="'details-' + i">
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
index efa05e4..5cfe4cc 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
@@ -19,7 +19,6 @@ import {Component, OnInit, Input} from '@angular/core';
import 'rxjs/add/operator/map';
import {HttpClientService} from '@app/services/http-client.service';
import {ServiceLogsService} from '@app/services/storage/service-logs.service';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
import {FilteringService} from '@app/services/filtering.service';
@Component({
@@ -29,7 +28,7 @@ import {FilteringService} from '@app/services/filtering.service';
})
export class LogsListComponent implements OnInit {
- constructor(private httpClient: HttpClientService, private serviceLogsStorage: ServiceLogsService, private appSettings: AppSettingsService, private filtering: FilteringService) {
+ constructor(private httpClient: HttpClientService, private serviceLogsStorage: ServiceLogsService, private filtering: FilteringService) {
this.filtering.filteringSubject.subscribe(this.loadLogs.bind(this));
}
@@ -62,6 +61,10 @@ export class LogsListComponent implements OnInit {
});
});
+ get timeZone(): string {
+ return this.filtering.timeZone;
+ }
+
private loadLogs(): void {
this.httpClient.get(this.logsArrayId, this.getParams()).subscribe(response => {
this.serviceLogsStorage.clear();
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
index 61d1b93..97ed1ce 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
@@ -15,6 +15,9 @@
limitations under the License.
-->
-<login-form *ngIf="!isAuthorized"></login-form>
+<div *ngIf="isInitialLoading" class="text-center">
+ <span class="fa fa-spinner fa-spin"></span>
+</div>
+<login-form *ngIf="!isInitialLoading && !isAuthorized"></login-form>
<filters-panel *ngIf="isAuthorized" class="row"></filters-panel>
<logs-list *ngIf="isAuthorized" [logsArrayId]="'serviceLogs'"></logs-list>
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
index 536f1ef..fa8954c 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
@@ -19,6 +19,8 @@
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {HttpModule} from '@angular/http';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
import {HttpClientService} from '@app/services/http-client.service';
import {MainContainerComponent} from './main-container.component';
@@ -30,9 +32,17 @@ describe('MainContainerComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MainContainerComponent],
- imports: [HttpModule],
+ imports: [
+ HttpModule,
+ StoreModule.provideStore({
+ appState
+ })
+ ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
- providers: [HttpClientService]
+ providers: [
+ AppStateService,
+ HttpClientService
+ ]
})
.compileComponents();
}));
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
index bac39ec..b279cf5 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
@@ -16,22 +16,22 @@
* limitations under the License.
*/
-import {Component, OnInit} from '@angular/core';
-import {HttpClientService} from '@app/services/http-client.service';
+import {Component} from '@angular/core';
+import {AppStateService} from '@app/services/storage/app-state.service';
@Component({
selector: 'main-container',
templateUrl: './main-container.component.html'
})
-export class MainContainerComponent implements OnInit {
+export class MainContainerComponent {
- constructor(private httpClient: HttpClientService) {}
-
- ngOnInit() {
+ constructor(private appState: AppStateService) {
+ this.appState.getParameter('isAuthorized').subscribe(value => this.isAuthorized = value);
+ this.appState.getParameter('isInitialLoading').subscribe(value => this.isInitialLoading = value);
}
- get isAuthorized() {
- return this.httpClient.isAuthorized;
- }
+ isAuthorized: boolean = false;
+
+ isInitialLoading: boolean = false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
index d53677d..6c9e021 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
@@ -21,6 +21,8 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {Http} from '@angular/http';
import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
import {ComponentActionsService} from '@app/services/component-actions.service';
import {FilteringService} from '@app/services/filtering.service';
@@ -38,12 +40,17 @@ describe('MenuButtonComponent', () => {
TestBed.configureTestingModule({
declarations: [MenuButtonComponent],
imports: [
+ StoreModule.provideStore({
+ appSettings
+ }),
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [Http]
- })],
+ })
+ ],
providers: [
+ AppSettingsService,
ComponentActionsService,
FilteringService
],
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
index 08b555c..0c1f840 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
@@ -20,13 +20,11 @@ import {Component, AfterViewInit, Input, ViewChild, ElementRef} from '@angular/c
import {ComponentActionsService} from '@app/services/component-actions.service';
import * as $ from 'jquery';
-export const menuButtonComponentOptions = {
+@Component({
selector: 'menu-button',
templateUrl: './menu-button.component.html',
styleUrls: ['./menu-button.component.less']
-}
-
-@Component(menuButtonComponentOptions)
+})
export class MenuButtonComponent implements AfterViewInit {
constructor(protected actions: ComponentActionsService) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts
new file mode 100644
index 0000000..bedcfef
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts
@@ -0,0 +1,29 @@
+/**
+ * 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 interface AppState {
+ isAuthorized: boolean;
+ isInitialLoading: boolean;
+ isLoginInProgress: boolean;
+}
+
+export const initialState: AppState = {
+ isAuthorized: false,
+ isInitialLoading: false,
+ isLoginInProgress: false
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
index c169c1b..d5f8881 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
@@ -16,9 +16,10 @@
* limitations under the License.
*/
-import {AppSettings} from '@app/models/app-settings.model';
import {Observable} from 'rxjs/Observable';
import {Store, Action} from '@ngrx/store';
+import {AppSettings} from '@app/models/app-settings.model';
+import {AppState} from '@app/models/app-state.model';
import {AuditLog} from '@app/models/audit-log.model';
import {ServiceLog} from '@app/models/service-log.model';
import {BarGraph} from '@app/models/bar-graph.model';
@@ -36,6 +37,7 @@ export const storeActions = {
export interface AppStore {
appSettings: AppSettings;
+ appState: AppState;
auditLogs: AuditLog[];
serviceLogs: ServiceLog[];
barGraphs: BarGraph[];
@@ -92,6 +94,10 @@ export class CollectionModelService extends ModelService {
export class ObjectModelService extends ModelService {
+ getParameter(key: string): Observable<any> {
+ return this.store.select(this.modelName, key);
+ }
+
setParameter(key: string, value: any): void {
let payload = {};
payload[key] = value;
@@ -107,7 +113,7 @@ export class ObjectModelService extends ModelService {
}
-export function collectionReducer(state: any, action: Action): any {
+export function collectionReducer(state: any[] = [], action: Action): any {
switch (action.type) {
case storeActions.ADD:
return [...state, ...action.payload];
@@ -122,7 +128,7 @@ export function collectionReducer(state: any, action: Action): any {
}
}
-export function objectReducer(state: any, action: Action): any {
+export function objectReducer(state: any = {}, action: Action): any {
switch (action.type) {
case storeActions.SET:
return Object.assign({}, state, action.payload);
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
index 303fdab..ff0ee37 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
@@ -17,13 +17,23 @@
*/
import {TestBed, inject} from '@angular/core/testing';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
import {ComponentActionsService} from './component-actions.service';
describe('ComponentActionsService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
- providers: [ComponentActionsService]
+ imports: [
+ StoreModule.provideStore({
+ appSettings
+ })
+ ],
+ providers: [
+ AppSettingsService,
+ ComponentActionsService
+ ]
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
index 4cde0a0..512b4f3 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
@@ -17,11 +17,12 @@
*/
import {Injectable} from '@angular/core';
+import {AppSettingsService} from '@app/services/storage/app-settings.service';
@Injectable()
export class ComponentActionsService {
- constructor() {
+ constructor(private appSettings: AppSettingsService) {
}
//TODO implement actions
@@ -38,4 +39,8 @@ export class ComponentActionsService {
openHistory() {
}
+ setTimeZone(timeZone: string): void {
+ this.appSettings.setParameter('timeZone', timeZone);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
index 9f6b7dc..ce451d3 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
@@ -25,7 +25,7 @@ import {AppSettingsService} from '@app/services/storage/app-settings.service';
export class FilteringService {
constructor(private appSettings: AppSettingsService) {
- this.appSettings.getAll().subscribe(settings => this.timeZone = settings.timeZone);
+ this.appSettings.getParameter('timeZone').subscribe(value => this.timeZone = value);
}
timeZone: string;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
index 083ea23..0dfb0f3 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
@@ -18,13 +18,23 @@
import {TestBed, inject} from '@angular/core/testing';
import {HttpModule, Request} from '@angular/http';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
import {HttpClientService} from './http-client.service';
describe('HttpClientService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
- imports: [HttpModule],
- providers: [HttpClientService]
+ imports: [
+ HttpModule,
+ StoreModule.provideStore({
+ appState
+ })
+ ],
+ providers: [
+ HttpClientService,
+ AppStateService
+ ]
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
index cef6696..4ab85e5 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
@@ -18,16 +18,17 @@
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs/Observable';
-import {Http, XHRBackend, Request, RequestOptions, RequestOptionsArgs, Response} from '@angular/http';
+import {Http, XHRBackend, Request, RequestOptions, RequestOptionsArgs, Response, Headers, URLSearchParams} from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params.class';
import {ServiceLogsQueryParams} from '@app/classes/queries/service-logs-query-params.class';
+import {AppStateService} from '@app/services/storage/app-state.service';
@Injectable()
export class HttpClientService extends Http {
- constructor(backend: XHRBackend, defaultOptions: RequestOptions) {
+ constructor(backend: XHRBackend, defaultOptions: RequestOptions, private appState: AppStateService) {
super(backend, defaultOptions);
}
@@ -49,14 +50,12 @@ export class HttpClientService extends Http {
private readonly unauthorizedStatuses = [401, 403, 419];
- isAuthorized: boolean;
-
- generateUrlString(url: string): string {
+ private generateUrlString(url: string): string {
const preset = this.endPoints[url];
return preset ? `${this.apiPrefix}${preset.url}` : url;
}
- generateUrl(request: string | Request): string | Request {
+ private generateUrl(request: string | Request): string | Request {
if (typeof request === 'string') {
return this.generateUrlString(request);
}
@@ -66,23 +65,35 @@ export class HttpClientService extends Http {
}
}
- generateOptions(url: string, params: {[key: string]: string}): RequestOptionsArgs {
- const preset = this.endPoints[url];
- return {
- params: preset && preset.params ? preset.params(params) : params
- };
+ private generateOptions(url: string, params: {[key: string]: string}): RequestOptionsArgs {
+ 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('&'),
+ urlParams = new URLSearchParams(paramsString, {
+ encodeKey: key => key,
+ encodeValue: value => encodeURIComponent(value)
+ });
+ return {
+ params: urlParams
+ };
+ } else {
+ return {
+ params: rawParams
+ };
+ }
}
- handleError(request: Observable<Response>): void {
+ private handleError(request: Observable<Response>): void {
request.subscribe(null, (error: any) => {
if (this.unauthorizedStatuses.indexOf(error.status) > -1) {
- this.isAuthorized = false;
+ this.appState.setParameter('isAuthorized', false);
}
});
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
- let req = super.request(this.generateUrl(url), options);
+ let req = super.request(this.generateUrl(url), options).share();
this.handleError(req);
return req;
}
@@ -91,4 +102,18 @@ export class HttpClientService extends Http {
return super.get(this.generateUrlString(url), this.generateOptions(url, params));
}
+ postFormData(url: string, params: {[key: string]: string}, options?: RequestOptionsArgs): Observable<Response> {
+ const encodedParams = this.generateOptions(url, params).params;
+ let body;
+ if (encodedParams && encodedParams instanceof URLSearchParams) {
+ body = encodedParams.rawParams;
+ }
+ let requestOptions = Object.assign({}, options);
+ if (!requestOptions.headers) {
+ requestOptions.headers = new Headers();
+ }
+ requestOptions.headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
+ return super.post(url, body, requestOptions);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
index 757f68d..40645f0 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
@@ -62,7 +62,10 @@ export class mockApiDataService implements InMemoryDbService {
parseUrl(url: string): any {
const urlLocation = mockBackendService.prototype.getLocation(url),
- query = urlLocation.search && new URLSearchParams(urlLocation.search.substr(1)),
+ query = urlLocation.search && new URLSearchParams(urlLocation.search.substr(1), {
+ encodeKey: key => key,
+ encodeValue: value => value
+ }),
splitUrl = urlLocation.pathname.substr(1).split('/'),
urlPartsCount = splitUrl.length,
collectionName = splitUrl[urlPartsCount - 1],
@@ -104,8 +107,8 @@ export class mockApiDataService implements InMemoryDbService {
const collection = allData[filterMapItem.pathToCollection],
filteredCollection = collection.filter(item => {
let result = true;
- query.paramsMap.forEach((value, key) => {
- const paramValue = value[0], // TODO implement multiple conditions
+ query.paramsMap.forEach((value, key) => {
+ const paramValue = decodeURIComponent(value[0]), // TODO implement multiple conditions
paramFilter = filterMapItem.filters[key];
if (paramFilter &&
((paramFilter.filterFunction && !paramFilter.filterFunction(item[paramFilter.key], paramValue)) ||
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
index 1c87a3c..faed254 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
@@ -17,7 +17,7 @@
*/
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {AppSettings, defaultSettings} from '@app/models/app-settings.model';
import {AppStore, ObjectModelService, objectReducer} from '@app/models/store.model';
@@ -28,6 +28,6 @@ export class AppSettingsService extends ObjectModelService {
}
}
-export const appSettings: ActionReducer<AppSettings> = (state: AppSettings = defaultSettings, action: Action) => {
+export function appSettings(state: AppSettings = defaultSettings, action: Action): any {
return objectReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts
new file mode 100644
index 0000000..49dfa77
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts
@@ -0,0 +1,33 @@
+/**
+ * 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 {Action, Store} from '@ngrx/store';
+import {AppState, initialState} from '@app/models/app-state.model';
+import {AppStore, ObjectModelService, objectReducer} from '@app/models/store.model';
+
+@Injectable()
+export class AppStateService extends ObjectModelService {
+ constructor(store: Store<AppStore>) {
+ super('appState', store);
+ }
+}
+
+export function appState(state: AppState = initialState, action: Action): any {
+ return objectReducer(state, action);
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
index 7c322ed..a50c68d 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
@@ -17,7 +17,7 @@
*/
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {AuditLog} from '@app/models/audit-log.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -28,6 +28,6 @@ export class AuditLogsService extends CollectionModelService {
}
}
-export const auditLogs: ActionReducer<AuditLog[]> = (state: AuditLog[] = [], action: Action) => {
+export function auditLogs(state: AuditLog[] = [], action: Action): any {
return collectionReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/bar-graphs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/bar-graphs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/bar-graphs.service.ts
index 0109409..b3b955a 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/bar-graphs.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/bar-graphs.service.ts
@@ -17,7 +17,7 @@
*/
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {BarGraph} from '@app/models/bar-graph.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -28,6 +28,6 @@ export class BarGraphsService extends CollectionModelService {
}
}
-export const barGraphs: ActionReducer<BarGraph[]> = (state: BarGraph[] = [], action: Action) => {
+export function barGraphs(state: BarGraph[] = [], action: Action): any {
return collectionReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
index b8748e9..a06852c 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
@@ -18,7 +18,7 @@
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {Filter} from '@app/models/filter.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -29,6 +29,6 @@ export class FiltersService extends CollectionModelService {
}
}
-export const filters: ActionReducer<Filter[]> = (state: Filter[] = [], action: Action) => {
+export function filters(state: Filter[] = [], action: Action): any {
return collectionReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
index eda04ee..0abd910 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
@@ -18,7 +18,7 @@
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {Graph} from '@app/models/graph.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -29,6 +29,6 @@ export class GraphsService extends CollectionModelService {
}
}
-export const graphs: ActionReducer<Graph[]> = (state: Graph[] = [], action: Action) => {
+export function graphs(state: Graph[] = [], action: Action): any {
return collectionReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/nodes.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/nodes.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/nodes.service.ts
index 7b2e6e9..4e47609 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/nodes.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/nodes.service.ts
@@ -18,7 +18,7 @@
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {Node} from '@app/models/node.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -29,6 +29,6 @@ export class NodesService extends CollectionModelService {
}
}
-export const nodes: ActionReducer<Node[]> = (state: Node[] = [], action: Action) => {
+export function nodes(state: Node[] = [], action: Action): any {
return collectionReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
index ba277c4..ab77138 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
@@ -18,7 +18,7 @@
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {ServiceLog} from '@app/models/service-log.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -29,6 +29,6 @@ export class ServiceLogsService extends CollectionModelService {
}
}
-export const serviceLogs: ActionReducer<ServiceLog[]> = (state: ServiceLog[] = [], action: Action) => {
+export function serviceLogs(state: ServiceLog[] = [], action: Action): any {
return collectionReducer(state, action);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9a45ef6c/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
index b26485d..36cfd5f 100644
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
+++ b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
@@ -18,7 +18,7 @@
import {Injectable} from '@angular/core';
-import {Action, ActionReducer, Store} from '@ngrx/store';
+import {Action, Store} from '@ngrx/store';
import {UserConfig} from '@app/models/user-config.model';
import {AppStore, CollectionModelService, collectionReducer} from '@app/models/store.model';
@@ -29,6 +29,6 @@ export class UserConfigsService extends CollectionModelService {
}
}
-export const userConfigs: ActionReducer<UserConfig[]> = (state: UserConfig[] = [], action: Action) => {
+export function userConfigs(state: UserConfig[] = [], action: Action): any {
return collectionReducer(state, action);
}