From 0ce837dd3d0036c838a6b12b5315a1a00527416e Mon Sep 17 00:00:00 2001 From: Eran Sakal Date: Thu, 31 May 2018 11:56:45 +0300 Subject: [PATCH] remove kaltura-ng/kaltura-logger dependency from kaltura-ng/kaltura-common --- kaltura-common/package-lock.json | 7 +- kaltura-common/package.json | 1 - kaltura-common/src/index.ts | 1 + kaltura-common/src/kaltura-common.module.ts | 4 +- kaltura-common/src/kaltura-logger.ts | 89 +++++++++++++++++++ kaltura-common/src/rxjs/add/operators.ts | 5 -- .../src/rxjs/operator/monitor/monitor.ts | 75 ---------------- .../src/server-polls/server-polls.service.ts | 40 ++++----- kaltura-logger/src/kaltura-logger.module.ts | 29 ++---- kaltura-logger/src/kaltura-logger.service.ts | 21 +---- kaltura-ui/src/widgets/widget-base.ts | 34 +++---- .../src/widgets/widgets-manager-base.ts | 27 +++--- mc-shared/package-lock.json | 4 +- 13 files changed, 157 insertions(+), 180 deletions(-) create mode 100644 kaltura-common/src/kaltura-logger.ts delete mode 100644 kaltura-common/src/rxjs/operator/monitor/monitor.ts diff --git a/kaltura-common/package-lock.json b/kaltura-common/package-lock.json index d9fae739..18ab98da 100644 --- a/kaltura-common/package-lock.json +++ b/kaltura-common/package-lock.json @@ -1,6 +1,6 @@ { "name": "@kaltura-ng/kaltura-common", - "version": "5.2.0", + "version": "6.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -44,11 +44,6 @@ "tslib": "1.7.1" } }, - "@kaltura-ng/kaltura-logger": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@kaltura-ng/kaltura-logger/-/kaltura-logger-2.2.0.tgz", - "integrity": "sha1-in6x4VR49x3Uhs9zae1/I/4uxLg=" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", diff --git a/kaltura-common/package.json b/kaltura-common/package.json index a7c00800..3fc1a33a 100644 --- a/kaltura-common/package.json +++ b/kaltura-common/package.json @@ -53,7 +53,6 @@ "@angular/core": "^5.2.0", "@angular/http": "^5.2.0", "@angular/router": "^5.2.0", - "@kaltura-ng/kaltura-logger": "^2.2.0", "rxjs": "^5.5.6" }, "devDependencies": { diff --git a/kaltura-common/src/index.ts b/kaltura-common/src/index.ts index b44ec7a7..4a8139dc 100644 --- a/kaltura-common/src/index.ts +++ b/kaltura-common/src/index.ts @@ -5,3 +5,4 @@ export * from './upload-management'; export * from './xml-parser'; export * from './operation-tag'; export * from './server-polls' +export { KalturaLoggerInjectionToken } from './kaltura-logger'; diff --git a/kaltura-common/src/kaltura-common.module.ts b/kaltura-common/src/kaltura-common.module.ts index 30904205..4580fe83 100644 --- a/kaltura-common/src/kaltura-common.module.ts +++ b/kaltura-common/src/kaltura-common.module.ts @@ -2,6 +2,7 @@ import { NgModule, ModuleWithProviders } from '@angular/core'; import { CommonModule } from '@angular/common'; import { KalturaUtils } from './utils/kaltura-utils'; import { APP_STORAGE_TOKEN, AppStorage } from './app-storage.service'; +import { EmptyLogger, KalturaLoggerInjectionToken } from './kaltura-logger'; @NgModule({ @@ -28,7 +29,8 @@ export class KalturaCommonModule { ngModule: KalturaCommonModule, providers: [ { provide: APP_STORAGE_TOKEN, useClass: AppStorage }, - KalturaUtils + KalturaUtils, + { provide: KalturaLoggerInjectionToken, useClass: EmptyLogger} ] }; } diff --git a/kaltura-common/src/kaltura-logger.ts b/kaltura-common/src/kaltura-logger.ts new file mode 100644 index 00000000..ff50cdb5 --- /dev/null +++ b/kaltura-common/src/kaltura-logger.ts @@ -0,0 +1,89 @@ +import { InjectionToken } from '@angular/core'; + +export type Context = { [key: string]: any }; +export type DefferedContext = () => Context; + +export const KalturaLoggerInjectionToken = new InjectionToken('kaltura-logger'); + +export interface KalturaLogger { + trace(message: string, context?: Context): void; + + trace(message: string, context?: DefferedContext): void; + + trace(message: string, context?: Context | DefferedContext): void; + + debug(message: string, context?: Context): void; + + debug(message: string, context?: DefferedContext): void; + + debug(message: string, context?: Context | DefferedContext): void; + + info(message: string, context?: Context): void; + + info(message: string, context?: DefferedContext): void; + + info(message: string, context?: Context | DefferedContext): void; + + warn(message: string, context?: Context): void; + + warn(message: string, context?: DefferedContext): void; + + warn(message: string, context?: Context | DefferedContext): void; + + error(message: string, context?: Context): void; + + error(message: string, error?: Error): void; + + error(message: string, context?: Error | Context): void; + + fatal(message: string, context?: Context): void; + + fatal(message: string, error?: Error): void; + + fatal(message: string, context?: Error | Context): void; + + subLogger(name: string): KalturaLogger; +} + +export class EmptyLogger implements KalturaLogger { + trace(message: string, context?: Context): void; + trace(message: string, context?: DefferedContext): void; + trace(message: string, context?: Context | DefferedContext): void; + trace(message: string, context?): void { + } + + debug(message: string, context?: Context): void; + debug(message: string, context?: DefferedContext): void; + debug(message: string, context?: Context | DefferedContext): void; + debug(message: string, context?): void { + } + + info(message: string, context?: Context): void; + info(message: string, context?: DefferedContext): void; + info(message: string, context?: Context | DefferedContext): void; + info(message: string, context?): void { + } + + warn(message: string, context?: Context): void; + warn(message: string, context?: DefferedContext): void; + warn(message: string, context?: Context | DefferedContext): void; + warn(message: string, context?): void { + } + + error(message: string, context?: Context): void; + error(message: string, error?: Error): void; + error(message: string, context?: Error | Context): void; + error(message: string, context?): void { + } + + fatal(message: string, context?: Context): void; + fatal(message: string, error?: Error): void; + fatal(message: string, context?: Error | Context): void; + fatal(message: string, context?): void { + } + + subLogger(name: string): KalturaLogger { + return new EmptyLogger(); + } +} + diff --git a/kaltura-common/src/rxjs/add/operators.ts b/kaltura-common/src/rxjs/add/operators.ts index de1e32d1..3ce8ae2b 100644 --- a/kaltura-common/src/rxjs/add/operators.ts +++ b/kaltura-common/src/rxjs/add/operators.ts @@ -1,16 +1,11 @@ import { Observable } from 'rxjs/Observable'; import { _cancelOnDestroy as cancelOnDestroy } from '../operator/cancel-on-destroy/cancel-on-destroy'; -import { _monitor as monitor } from '../operator/monitor/monitor'; import { _tag as tag } from '../operator/tag/tag'; Observable.prototype.cancelOnDestroy = cancelOnDestroy; -Observable.prototype.monitor = monitor; Observable.prototype.tag = tag; declare module 'rxjs/Observable' { - interface Observable { - monitor: typeof monitor; - } interface Observable { cancelOnDestroy: typeof cancelOnDestroy; } diff --git a/kaltura-common/src/rxjs/operator/monitor/monitor.ts b/kaltura-common/src/rxjs/operator/monitor/monitor.ts deleted file mode 100644 index a5499672..00000000 --- a/kaltura-common/src/rxjs/operator/monitor/monitor.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Observable } from 'rxjs/Observable'; -import { TeardownLogic } from 'rxjs/Subscription'; -import { Subscriber } from 'rxjs/Subscriber'; -import { Operator } from 'rxjs/Operator'; -import { FriendlyHashId } from '../../../friendly-hash-id'; -import { KalturaLogger, KalturaDefaultLogger } from '@kaltura-ng/kaltura-logger'; - -export function _monitor(this: Observable, action : string, context? : any): Observable { - return this.lift(new monitorOperator(action,context)); -} - -class monitorOperator implements Operator { - constructor(private action : string, private context? : any) { - - } - - call(subscriber: Subscriber, source: any): TeardownLogic { - - return source.subscribe(new MonitorSubscriber(subscriber, this.action, this.context)); - } -} - -class MonitorSubscriber extends Subscriber { - - private actionId : string; - private enabled: boolean; - private logger = KalturaDefaultLogger.get(); - - constructor(destination: Subscriber, - private action : string, private context? : any) { - super(destination); - - this.enabled = !!action && !!this.logger; - - if (this.enabled) { - this.actionId = FriendlyHashId.generate(); - //this.logger.debug(`(#${this.actionId}) ${this.action}: subscribe()`, context); - this.logger.debug(`(#${this.actionId}) ${this.action}: subscribe()`); - } - } - - protected _next(value: T) { - if (this.enabled) - { - this.logger.info(`(#${this.actionId}) ${this.action}: .next()`); - //this.logger.info(`(#${this.actionId}) ${this.action}: .next()`,value); - } - super._next(value); - } - - protected _error(err: any) { - if (this.enabled) - { - this.logger.info(`(#${this.actionId}) ${this.action}: error()`,err); - } - super._error(err); - } - - protected _complete() { - if (this.enabled) - { - this.logger.debug(`(#${this.actionId}) ${this.action}: .complete()`); - } - super._complete(); - } - - unsubscribe() - { - if (this.enabled && !this.closed) { - this.logger.debug(`(#${this.actionId}) ${this.action}: unsubscribe()`); - } - - super.unsubscribe(); - } -} \ No newline at end of file diff --git a/kaltura-common/src/server-polls/server-polls.service.ts b/kaltura-common/src/server-polls/server-polls.service.ts index a1440959..13be98b3 100644 --- a/kaltura-common/src/server-polls/server-polls.service.ts +++ b/kaltura-common/src/server-polls/server-polls.service.ts @@ -3,7 +3,7 @@ import { Subscriber } from 'rxjs/Subscriber'; import { FriendlyHashId } from '../friendly-hash-id'; import { ISubscription } from 'rxjs/Subscription'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; -import { KalturaLogger } from '@kaltura-ng/kaltura-logger'; +import { EmptyLogger, KalturaLogger } from '../kaltura-logger'; import { Optional } from '@angular/core'; export type PollInterval = 10 | 30 | 60 | 300; @@ -31,25 +31,23 @@ export abstract class ServerPolls { private _logger: KalturaLogger; public state$ = this._state.asObservable(); private _queueInterval: number = null; - + protected abstract _executeRequests(requests: TRequest[]): Observable<{ error: TError, result: any }[]>; - + protected abstract _createGlobalError(error?: Error): TError; - + protected abstract _getOnDestroy$(): Observable; - + protected abstract _canExecute(): boolean; - - constructor(@Optional() kalturaLogger: KalturaLogger) { - - if (kalturaLogger) - { - this._logger = kalturaLogger.subLogger('ServerPolls'); - }else - { - this._logger = new KalturaLogger('ServerPolls',null, null); - } - this._initialize(); + + constructor(kalturaLogger: KalturaLogger) { + + if (kalturaLogger) { + this._logger = kalturaLogger; + } else { + this._logger = new EmptyLogger(); + } + this._initialize(); } private _warnAboutMissingDestory(): void { @@ -78,11 +76,11 @@ export abstract class ServerPolls { } }); } - + private _cancelQueueInterval(): void { clearTimeout(this._queueTimeout); } - + private _getPollQueueList(): PollItem[] { return Object.keys(this._pollQueue).map(key => this._pollQueue[key]); } @@ -273,7 +271,7 @@ export abstract class ServerPolls { public isBusy(): boolean { return this._state.getValue().busy; } - + public register(intervalInSeconds: PollInterval, requestFactory: RequestFactory): Observable<{ error: TError, result: TResponse }> { return Observable.create(observer => { const newPollId = this._tokenGenerator.generateUnique(Object.keys(this._pollQueue)); @@ -303,7 +301,7 @@ export abstract class ServerPolls { this._setupQueueTimer(); } ); - + return () => { this._logger.info(`stop polling for ${newPollId}`); if (initialRequest) { @@ -313,4 +311,4 @@ export abstract class ServerPolls { } }); } -} \ No newline at end of file +} diff --git a/kaltura-logger/src/kaltura-logger.module.ts b/kaltura-logger/src/kaltura-logger.module.ts index 88c20656..09260570 100644 --- a/kaltura-logger/src/kaltura-logger.module.ts +++ b/kaltura-logger/src/kaltura-logger.module.ts @@ -1,6 +1,6 @@ import { NgModule, ModuleWithProviders, Optional, SkipSelf } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { KalturaLogger, KalturaDefaultLogger } from './kaltura-logger.service'; +import { KalturaLogger, KalturaLoggerName } from './kaltura-logger.service'; import { JL } from 'jsnlog'; import { KalturaLoggerRecordService } from './kaltura-logger-record.service'; @@ -25,31 +25,14 @@ if (window && window.onerror) { ] }) export class KalturaLoggerModule { - - // TODO check why this doesn't work with AOT - // static forRoot(name: string): ModuleWithProviders { - // return { - // ngModule: KalturaLoggerModule, - // providers: [ - // { - // provide: KalturaLogger, - // useFactory(parentLogger) - // { - // const logger = new KalturaLogger(name, parentLogger); - // - // KalturaDefaultLogger.set(logger.subLogger('general')); - // - // return logger; - // }, - // deps: [[new Optional(), new SkipSelf(), KalturaLogger]] - // } - // ] - // }; - // } - static forRoot(): ModuleWithProviders { + static forRoot(name: string): ModuleWithProviders { return { ngModule: KalturaLoggerModule, providers: [ + KalturaLogger, + { + provide: KalturaLoggerName, useValue: name + }, KalturaLoggerRecordService ] } diff --git a/kaltura-logger/src/kaltura-logger.service.ts b/kaltura-logger/src/kaltura-logger.service.ts index fc4a9ec9..cd8f54d2 100644 --- a/kaltura-logger/src/kaltura-logger.service.ts +++ b/kaltura-logger/src/kaltura-logger.service.ts @@ -11,19 +11,6 @@ export type LogLevels = 'All' | 'Trace' | 'Debug' | 'Info' | 'Warn' | 'Error' | let randomLoggerNameNumber = 1; -export class KalturaDefaultLogger { - private static _defaultLogger: KalturaLogger = null; - - static get(): KalturaLogger - { - return KalturaDefaultLogger._defaultLogger; - } - - static set(instance: KalturaLogger): void - { - KalturaDefaultLogger._defaultLogger = instance; - } -} @Injectable() export class KalturaLogger implements OnDestroy{ @@ -59,25 +46,25 @@ export class KalturaLogger implements OnDestroy{ this._logger = JL(this._name); this._logger.trace('logger created!'); } - + private _addLogToBuffer(logItem: any): void { if (this._loggerRecordInterceptor) { this._loggerRecordInterceptor.addLogItemToBuffer(logItem); } } - + public startRecordingLogs(): void { if (this._loggerRecordInterceptor) { this._loggerRecordInterceptor.startRecord(); } } - + public getRecordedLogs(): any[] | void { if (this._loggerRecordInterceptor) { return this._loggerRecordInterceptor.getRecordedLogs(); } } - + public isValidLogLevel(level: LogLevels): boolean { const validLogLevels = ['All', 'Trace', 'Debug', 'Info', 'Warn', 'Error', 'Fatal', 'Off']; return validLogLevels.indexOf(level) !== -1; diff --git a/kaltura-ui/src/widgets/widget-base.ts b/kaltura-ui/src/widgets/widget-base.ts index dbe664d5..5815b999 100644 --- a/kaltura-ui/src/widgets/widget-base.ts +++ b/kaltura-ui/src/widgets/widget-base.ts @@ -9,10 +9,8 @@ import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/do'; import { WidgetsManagerBase } from './widgets-manager-base'; import { ISubscription } from 'rxjs/Subscription'; -import { OnDestroy } from '@angular/core'; import { WidgetState, WidgetStateData } from './widget-state'; - - +import { KalturaLogger, EmptyLogger } from '@kaltura-ng/kaltura-common/kaltura-logger'; // DEVELOPER NOTE: Don't implement ngOnDestroy - the inheritor will probably override this without calling super() export abstract class WidgetBase, TData, TRequest> @@ -28,13 +26,16 @@ export abstract class WidgetBase = new ReplaySubject(1); public data$ = this._dataSource.asObservable(); + protected _logger: KalturaLogger; - constructor(private _key : string) + constructor(private _key : string, logger?: KalturaLogger) { if (!_key) { throw new Error(`Form widget key is required when constructing widget of type '${typeof this}`); } + + this._logger = logger ? logger.subLogger(`widgets.${_key}`) : new EmptyLogger(); } private _widgetState : WidgetState = {key: this.key, isValid: true, isDirty: false, isAttached: false, isBusy : false, isActive : false, wasActivated : false}; @@ -148,7 +149,7 @@ export abstract class WidgetBase Observable.of({failed: true, error})) .subscribe( response => { if (response && response.failed) { - console.log(`[widget] widget '${this.key}': async widget activation failed. revert state to ${JSON.stringify(previousStatus)})`); + this._logger.info(`[widget] widget '${this.key}': async widget activation failed. revert state to ${JSON.stringify(previousStatus)})`); this._updateState({ isActive : false, wasActivated : previousStatus.wasActivated}); }else { - console.log(`[widget] widget '${this.key}': async widget activation completed`); + this._logger.info(`[widget] widget '${this.key}': async widget activation completed`); } }, () => { @@ -229,9 +229,9 @@ export abstract class WidgetBase implements WidgetsMana private _widgetsState: BehaviorSubject = new BehaviorSubject({}); private _isNewData = false; public widgetsState$ = this._widgetsState.asObservable(); + protected _logger: KalturaLogger; + + constructor(logger?: KalturaLogger) { + this._logger = logger ? logger.subLogger(`widgetsManager`) : new EmptyLogger(); + } public get widgetsState(): FormWidgetsState { return this._widgetsState.getValue(); @@ -39,9 +45,9 @@ export abstract class WidgetsManagerBase implements WidgetsMana const currentWidgetsState = this._widgetsState.getValue(); if (!newWidgetState || !newWidgetState.key) { - console.warn('[widgets manager] cannot update widget state, missing widget key'); + this._logger.warn('[widgets manager] cannot update widget state, missing widget key'); } else { - console.log(`[widgets manager] widget '${newWidgetState.key}': update widget state`, newWidgetState); + this._logger.info(`[widgets manager] widget '${newWidgetState.key}': update widget state`, newWidgetState); currentWidgetsState[newWidgetState.key] = newWidgetState; this._widgetsState.next(currentWidgetsState); @@ -60,7 +66,7 @@ export abstract class WidgetsManagerBase implements WidgetsMana { throw new Error(`a widget with key '${widget.key}' is already registered (did you registered the same widget twice?)`); }else { - console.log(`[widgets manager] widget '${widget.key}': registered to a form widgets manager`); + this._logger.info(`[widgets manager] widget '${widget.key}': registered to a form widgets manager`); widget._setForm(this); this._widgets.push(widget); } @@ -70,7 +76,7 @@ export abstract class WidgetsManagerBase implements WidgetsMana } public notifyDataLoading(dataId: any): void { - console.log(`[widgets manager] notify data loading. data identifier '${dataId}'`); + this._logger.info(`[widgets manager] notify data loading. data identifier '${dataId}'`); this._widgets.filter(widget => widget.isActive).forEach(widget => { widget._reset(); @@ -83,10 +89,10 @@ export abstract class WidgetsManagerBase implements WidgetsMana public notifyDataLoaded(data: TData, settings: { isNewData: boolean }) : { errors?: Error[] } { - console.log(`[widgets manager] notify data loaded.`); + this._logger.info(`[widgets manager] notify data loaded.`); const errors : Error[] = []; this._isNewData = settings.isNewData; - console.log(`[widgets manager] treat data as '${this._isNewData ? 'new' : 'existing'} data'.`); + this._logger.info(`[widgets manager] treat data as '${this._isNewData ? 'new' : 'existing'} data'.`); this._widgets.forEach(widget => { try { @@ -106,10 +112,10 @@ export abstract class WidgetsManagerBase implements WidgetsMana const widgets = this._isNewData ? this._widgets : this._widgets.filter(widget => widget.isActive); widgets.forEach(widget => { try { - console.log(`[widgets manager] widget '${widget.key}': build save request content`); + this._logger.info(`[widgets manager] widget '${widget.key}': build save request content`); widget._handleDataSaving(newData, request, originalData); } catch (err) { - console.error(`[widgets manager] widget '${widget.key}': failed to prepare data for save. Save operation aborted.`, err); // keep error + this._logger.error(`[widgets manager] widget '${widget.key}': failed to prepare data for save. Save operation aborted.`, err); // keep error errors.push(err); } }); @@ -119,7 +125,7 @@ export abstract class WidgetsManagerBase implements WidgetsMana public notifyDataSaving(newData: TData, request: TRequest, originalData: TData): Observable<{ ready: boolean, reason?: OnDataSavingReasons, errors?: Error[] }> { - console.log(`[widgets manager] notify data saving.`); + this._logger.info(`[widgets manager] notify data saving.`); const isAttachedWidgetBusy = !!this._widgets.find(widget => widget.isAttached && widget.isBusy); @@ -166,7 +172,6 @@ export abstract class WidgetsManagerBase implements WidgetsMana const widgetsResults = widgets.map(widget => { return widget._validate() .cancelOnDestroy(this) - .monitor(`[widgets manager] widget '${widget.key}': is valid?`) .catch((err, caught) => Observable.of({isValid: false})); }); @@ -185,7 +190,7 @@ export abstract class WidgetsManagerBase implements WidgetsMana widget.destory(); }); - console.warn('[widgets manager] form widgets manager ngOnDestroy'); + this._logger.warn('[widgets manager] form widgets manager ngOnDestroy'); this._widgetsState.complete(); } s diff --git a/mc-shared/package-lock.json b/mc-shared/package-lock.json index 62800147..bebcab1e 100644 --- a/mc-shared/package-lock.json +++ b/mc-shared/package-lock.json @@ -1,8 +1,6 @@ { - "name": "@kaltura-ng/mc-shared", - "version": "3.2.1", - "lockfileVersion": 1, "requires": true, + "lockfileVersion": 1, "dependencies": { "@angular/common": { "version": "5.2.0",