Skip to content

Commit

Permalink
feat: set log level from config and API (#56)
Browse files Browse the repository at this point in the history
enable setting log from:

config {logLevel: "DEBUG"}
global flag window.DEBUG_KALTURA_PLAYER
query stirng param: debugKalturaPlayer
pass config to kaltura-player and included packages: playkit, providers and UI
We will need to refactor the actual API for set and get log level as today it actualy reflects only the playkit log level
  • Loading branch information
OrenMe authored and Dan Ziv committed Nov 14, 2017
1 parent 6e77484 commit 1c31f5d
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 33 deletions.
9 changes: 6 additions & 3 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@
import 'babel-polyfill' // Important! must be first import to support older browsers compatibility
import PolyfillManager from './polyfills/polyfill-manager'
import './polyfills/all'
import LoggerFactory from './utils/logger'
import getLogger, {getLogLevel, setLogLevel, LogLevel} from './utils/logger'

declare var __VERSION__: string;
declare var __NAME__: string;
declare var __PACKAGE_URL__: string;

LoggerFactory.getLogger().log(`%c ${__NAME__} ${__VERSION__}`, "color: #98ff98; font-size: large");
LoggerFactory.getLogger().log(`%c For more details see ${__PACKAGE_URL__}`, "color: #98ff98;");
const currentLogLevel = getLogLevel();
setLogLevel(LogLevel.INFO);
getLogger().log(`%c ${__NAME__} ${__VERSION__}`, "color: #ff98f9; font-size: large");
getLogger().log(`%c For more details see ${__PACKAGE_URL__}`, "color: #ff98f9;");
setLogLevel(currentLogLevel);

PolyfillManager.installAll();

Expand Down
10 changes: 5 additions & 5 deletions src/kaltura-player.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import {Utils} from 'playkit-js'
import PlaykitUI from 'playkit-js-ui'
import OvpProvider from 'playkit-js-providers/dist/ovpProvider'
import LoggerFactory from './utils/logger'
import getLogger from './utils/logger'
import {addKalturaParams} from './utils/kaltura-params'
import {addKalturaPoster} from './utils/setup-helpers'
import {evaluatePluginsConfig} from './plugins/plugins-config'
Expand All @@ -14,11 +14,11 @@ export default class KalturaPlayer {
_uiManager: PlaykitUI;
_logger: any;

constructor(player: Player, targetId: string, config: Object) {
constructor(player: Player, targetId: string, playerConfig: Object, providerConfig: Object) {
this._player = player;
this._logger = LoggerFactory.getLogger('KalturaPlayer' + Utils.Generator.uniqueId(5));
this._uiManager = new PlaykitUI(this._player, {targetId: targetId});
this._provider = new OvpProvider(__VERSION__, config.partnerId, config.ks, config.env);
this._logger = getLogger('KalturaPlayer' + Utils.Generator.uniqueId(5));
this._uiManager = new PlaykitUI(this._player, {targetId: targetId, logLevel: playerConfig.logLevel});
this._provider = new OvpProvider(__VERSION__, providerConfig.partnerId, providerConfig.ks, providerConfig.env, playerConfig.logLevel);
this._uiManager.buildDefaultUI();
return {
loadMedia: this.loadMedia.bind(this)
Expand Down
4 changes: 2 additions & 2 deletions src/polyfills/performance-now.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// @flow
import PolyfillManager from './polyfill-manager'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'

export default class PerformanceNowPolyfill {
static id: string = 'performance.now';
static _logger: any = LoggerFactory.getLogger('PerformanceNowPolyfill');
static _logger: any = getLogger('PerformanceNowPolyfill');

static install(): void {
if (global.performance && global.performance.now) {
Expand Down
4 changes: 2 additions & 2 deletions src/polyfills/polyfill-manager.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// @flow
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'

export default class PolyfillManager {
static _polyfills: Array<Function> = [];
static _logger: any = LoggerFactory.getLogger('PolyfillManager');
static _logger: any = getLogger('PolyfillManager');

static register(polyfill: Function): void {
PolyfillManager._logger.debug('Register <' + polyfill.id + '> polyfill');
Expand Down
8 changes: 5 additions & 3 deletions src/setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ import {
setDefaultPlayerConfig,
setStorageConfig,
applyStorageSupport,
setStorageTextStyle
setStorageTextStyle,
setLogLevel
} from "./utils/setup-helpers"

/**
* @param {string} targetId - target id
* @param {Object} options - options
* @returns {Player} - Player
*/
function setup(targetId: string, options: Object): KalturaPlayer {
function setup(targetId: string, options: Object = {}): KalturaPlayer {
setLogLevel(options);
validateTargetId(targetId);
validateProvidersConfig(options);
let userPlayerConfig = extractPlayerConfig(options);
Expand All @@ -29,7 +31,7 @@ function setup(targetId: string, options: Object): KalturaPlayer {
evaluatePluginsConfig(userPlayerConfig);
setStorageConfig(userPlayerConfig);
let player = loadPlayer(userPlayerConfig);
let kalturaPlayerApi = new KalturaPlayer(player, containerId, userProvidersConfig);
let kalturaPlayerApi = new KalturaPlayer(player, containerId, userPlayerConfig, userProvidersConfig);
let kalturaPlayer = Object.assign(player, kalturaPlayerApi);
setStorageTextStyle(kalturaPlayer);
applyStorageSupport(kalturaPlayer);
Expand Down
4 changes: 2 additions & 2 deletions src/storage/storage-manager.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// @flow
import StorageWrapper from './storage-wrapper'
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'
import {Utils} from 'playkit-js'

export default class StorageManager {
Expand All @@ -12,7 +12,7 @@ export default class StorageManager {
TEXT_STYLE: 'textStyle'
};

static _logger: any = LoggerFactory.getLogger('StorageManager');
static _logger: any = getLogger('StorageManager');

static isLocalStorageAvailable(): boolean {
return StorageWrapper.isLocalStorageAvailable();
Expand Down
4 changes: 2 additions & 2 deletions src/storage/storage-wrapper.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// @flow
import LoggerFactory from '../utils/logger'
import getLogger from '../utils/logger'

const STORAGE_PREFIX = __NAME__ + '_';

export default class StorageWrapper {
static _logger: any = LoggerFactory.getLogger('StorageWrapper');
static _logger: any = getLogger('StorageWrapper');

/**
* @static
Expand Down
46 changes: 33 additions & 13 deletions src/utils/logger.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
//@flow
import * as JsLogger from 'js-logger';

const LOG_LEVEL: { [level: string]: Object } = {
export type LogLevelType = { [level: string]: {value: number; name: string} };

const LogLevel: LogLevelType = {
"DEBUG": JsLogger.DEBUG,
"INFO": JsLogger.INFO,
"TIME": JsLogger.TIME,
Expand All @@ -10,20 +12,38 @@ const LOG_LEVEL: { [level: string]: Object } = {
"OFF": JsLogger.OFF
};

class Logger {
constructor(options?: Object) {
JsLogger.useDefaults(options || {});
}
JsLogger.useDefaults({defaultLevel: JsLogger.ERROR});

getLogger(name?: string) {
if (!name) {
return JsLogger;
}
return JsLogger.get(name);
/**
* get a logger
* @param {?string} name - the logger name
* @returns {Object} - the logger class
*/
function getLogger(name?: string): Object {
if (!name) {
return JsLogger;
}
return JsLogger.get(name);
}

const LoggerFactory = new Logger({defaultLevel: JsLogger.DEBUG});
/**
* get the log level
* @param {?string} name - the logger name
* @returns {LogLevelType} - the log level
*/
function getLogLevel(name?: string): LogLevelType{
return getLogger(name).getLevel();
}

/**
* sets the logger level
* @param {LogLevelType} level - the log level
* @param {?string} name - the logger name
* @returns {void}
*/
function setLogLevel(level: LogLevelType, name?: string): void{
getLogger(name).setLevel(level);
}

export default LoggerFactory;
export {LOG_LEVEL};
export default getLogger;
export {LogLevel, getLogLevel, setLogLevel};
56 changes: 55 additions & 1 deletion src/utils/setup-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@
import {Env, Utils, TextStyle} from 'playkit-js'
import {ValidationErrorType} from './validation-error'
import StorageManager from '../storage/storage-manager'
import {setLogLevel as _setLogLevel, LogLevel} from './logger'
import type LogLevelType from './logger'

const CONTAINER_CLASS_NAME: string = 'kaltura-player-container';

const KALTURA_PLAYER_DEBUG_QS: string = "debugKalturaPlayer";

/**
* Validate the initial user input for the providers.
* @param {Object} config - The fully user provider configuration.
Expand Down Expand Up @@ -103,6 +107,9 @@ function setDefaultPlayerConfig(playerConfig: Object): void {
checkNativeHlsSupport(playerConfig);
checkNativeTextTracksSupport(playerConfig);
setDefaultAnalyticsPlugin(playerConfig);
if (isDebugMode()) {
playerConfig.logLevel = LogLevel.DEBUG.name;
}
}

/**
Expand Down Expand Up @@ -211,6 +218,52 @@ function isIos(): boolean {
return (Env.os.name === "iOS");
}

/**
* check the player debug mode according to config or URL query string params
* @returns {boolean} - if to set debug mode or not
*/
function isDebugMode(): boolean {
let isDebugMode = false;
if (window.DEBUG_KALTURA_PLAYER === true) {
isDebugMode = true;
} else if (window.URLSearchParams) {
const urlParams = new URLSearchParams(window.location.search);
isDebugMode = urlParams.has(KALTURA_PLAYER_DEBUG_QS);
} else {
isDebugMode = !!getUrlParameter(KALTURA_PLAYER_DEBUG_QS);
}
return isDebugMode;
}

/**
* set the logger
* @param {Object} options - the player options
* @returns {void}
*/
function setLogLevel(options: Object): void {
let logLevel: LogLevelType = LogLevel.ERROR;
if (isDebugMode()) {
logLevel = LogLevel.DEBUG;
} else {
if (options.logLevel && LogLevel[options.logLevel]) {
logLevel = LogLevel[options.logLevel];
}
}
_setLogLevel(logLevel);
}

/**
* gets the url query striung parmater
* @param {string} name - name of query string param
* @returns {string} - value of the query string param
*/
function getUrlParameter(name: string) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}

export {
setStorageConfig,
applyStorageSupport,
Expand All @@ -225,5 +278,6 @@ export {
checkNativeHlsSupport,
checkNativeTextTracksSupport,
isSafari,
isIos
isIos,
setLogLevel
};

0 comments on commit 1c31f5d

Please sign in to comment.