infobip-rtc
Version:
Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation
108 lines • 3.58 kB
JavaScript
import { Log } from "../Log";
import { LoggerOptions } from "../LoggerOptions";
import { LogLevel, LogLevelLabels } from "../LogLevel";
import log from "loglevel";
import { DefaultHttpClient } from "../../util/HttpClient";
export class DefaultLogger {
constructor(token, options = new LoggerOptions(), apiUrl = "api.infobip.com", logLevel = LogLevel.ERROR, headersProvider) {
this.token = token;
this.options = options;
this.apiUrl = apiUrl;
this.logLevel = logLevel;
this.headersProvider = headersProvider;
this.logs = [];
this.interval = this.createInterval(options.period);
if (!this.headersProvider) {
this.headersProvider = () => null;
}
this.httpClient = new DefaultHttpClient(`https://${apiUrl}`, {
'Authorization': `Bearer ${this.token}`,
'Content-Type': 'application/json'
});
}
static ifNotForbidden(apiResponse) {
return apiResponse.statusCode !== DefaultLogger.FORBIDDEN_STATUS_CODE;
}
log(log) {
this.logs.push(log);
}
debug(message, callId) {
this.logMessage(LogLevel.DEBUG, message, callId);
}
info(message, callId) {
this.logMessage(LogLevel.INFO, message, callId);
}
warn(message, callId) {
this.logMessage(LogLevel.WARNING, message, callId);
}
error(message, callId) {
this.logMessage(LogLevel.ERROR, message, callId);
}
stop() {
clearInterval(this.interval);
this.sendLogs();
}
setOptions(options) {
if (options.period) {
clearInterval(this.interval);
this.createInterval(options.period);
}
}
setApiUrl(apiUrl) {
if (apiUrl && apiUrl !== this.apiUrl) {
this.apiUrl = apiUrl;
this.httpClient = new DefaultHttpClient(`https://${apiUrl}`, {
'Authorization': `Bearer ${this.token}`,
'Content-Type': 'application/json'
});
}
}
setLogLevel(logLevel) {
if (LogLevel[logLevel]) {
this.logLevel = LogLevel[logLevel];
}
}
logMessage(logLevel, message, callId = null) {
switch (logLevel) {
case LogLevel.DEBUG:
log.debug(message);
break;
case LogLevel.INFO:
log.info(message);
break;
case LogLevel.WARNING:
log.warn(message);
break;
case LogLevel.ERROR:
log.error(message);
break;
}
if (logLevel >= this.logLevel) {
this.log(new Log(LogLevelLabels.get(logLevel), callId, { message: message }));
}
}
sendLogs() {
if (this.logs.length === 0) {
return;
}
let tempLogs = this.logs;
this.logs = [];
this.httpClient.post('/webrtc/1/log', { logEvents: tempLogs }, this.headersProvider())
.then(apiResponse => {
if (!apiResponse.ok && DefaultLogger.ifNotForbidden(apiResponse)) {
this.logs = this.logs.concat(tempLogs);
}
})
.catch(error => {
log.error(`Failed to submit logs: ${error.message}`);
});
}
createInterval(period) {
return setInterval(() => {
this.sendLogs();
}, period || DefaultLogger.DEFAULT_PERIOD);
}
}
DefaultLogger.DEFAULT_PERIOD = 5000;
DefaultLogger.FORBIDDEN_STATUS_CODE = 403;
//# sourceMappingURL=DefaultLogger.js.map