import { Logger } from "./logger.js";
import { ServerConnection } from "../server/server_connection.js";
import { Reporter } from "./reporter.js";
/** Default logger that connects to server over websocket */
class ServerLogger extends Logger {
/**
* @param {SyslogLevel} fromLevel
* @param {ServerConnection} serverConnection
* @param {Reporter} reporter
*/
constructor(fromLevel, serverConnection, reporter) {
super(fromLevel, reporter);
/** @type {ServerConnection} */
this.server = serverConnection;
/** @type {Reporter} */
this.reporter = reporter;
// when a connection to the server is made / restored
// upload the cached logs and clear the cache on completion
this.server.on('connection-changed', function () {
this._uploadCache()
})
}
/**
* Temporarily stores Log Objects while the server connection is down
* @protected
* @type {Array<LogObject>}
*/
_logCache = [];
async _uploadCache() {
if (this.server.connected === true && this._logCache.length > 0) {
const response = await this.server.request({
method: 'post',
endpoint: 'log',
data: this._logCache
});
if (response.data === true) {
this.reporter.report({ msg: 'cleared cache' })
}
}
}
/**
* @param {LogObject} log
*/
log = function (log) {
if (this.server.connected) {
this.server.request({
method: 'post',
endpoint: 'log',
data: log
});
}
else {
this._logCache.push(log);
}
}
}
export { ServerLogger };
// /**
// * @protected
// * @type {Array<LogObjectString>}
// */
// this.uploadCache = []
// /**
// * @protected
// * @type {(WebSocket|null)}
// */
// this.server = reportURL ? new WebSocket( reportURL.href ) : null
// if ( ! reportURL ) {
// this._logToServer = ( msg, level ) => false
// }
// // if ( reportURL )
// // {
// // this.logToServer = (
// // this.server.addEventListener( 'open', () => {
// // let cachedLogStr = ''
// // while ( cachedLogStr = this.uploadCache.shift() )
// // {
// // // await?
// // this.server.send( cachedLogStr )
// // }
// // })
// // }
// // else
// // {
// // this._logToServer = ( msg, level ) => false
// // }
// /**
// * @protected
// * @param {string} msg
// * @param {LogLevel} level
// */
// _logToServer( msg, level = 1 ) {
// const logObj = { msg, level }
// const logStr = JSON.stringify( logObj )
// if ( this.server.readyState === 1 )
// {
// this.server.send( logStr )
// }
// else
// {
// this.uploadCache.push( logStr )
// }
// return true
// }