74 lines
2.6 KiB
TypeScript

import { Component, Vue, Watch } from 'vue-property-decorator';
import NavBar from '@/views/NavBar.vue';
import { logService, LogLevel, ApiLogAppender, ConsoleLogAppender } from '@/services/logging';
import { authStore } from '@/store';
import { User } from '@/models';
const logger = logService.getLogger('/app');
@Component({
components: {
NavBar
}
})
export default class App extends Vue {
private apiLogAppender!: ApiLogAppender;
private consoleLogAppender!: ConsoleLogAppender;
constructor() {
super();
this.configureLoggers();
}
private get authToken(): string | null {
return authStore.authToken;
}
@Watch('authToken')
private onAuthTokenChange(val: string | undefined , oldVal: string | undefined) {
// If the user wasn't logged in initially, or their session expires, we
// want to catch the new token for our API log appender.
if (val) { this.apiLogAppender.authToken = val; }
}
private configureLoggers(): void {
let commonLevel = LogLevel.WARN;
if (LogLevel.hasOwnProperty(process.env.VUE_APP_LOG_LEVEL)) {
commonLevel = (LogLevel[process.env.VUE_APP_LOG_LEVEL] as unknown) as LogLevel;
}
// Because modules like the router will start logging messages before this
// component is initialized, the console appender is initialized and added
// in main.ts
this.consoleLogAppender = logService.ROOT_LOGGER.appenders[0];
// We create the API log appender (need credentials anyways)
this.apiLogAppender = new ApiLogAppender(
process.env.VUE_APP_PM_API_BASE + '/log/batch',
this.authToken || '', // user may already be logged in and have a token
LogLevel.WARN);
logService.ROOT_LOGGER.appenders.push(this.apiLogAppender);
if (LogLevel.hasOwnProperty(process.env.VUE_APP_API_LOG_LEVEL)) {
this.apiLogAppender.threshold = (LogLevel[process.env.VUE_APP_API_LOG_LEVEL] as unknown) as LogLevel;
} else {
this.apiLogAppender.threshold = commonLevel;
}
if (LogLevel.hasOwnProperty(process.env.VUE_APP_CONSOLE_LOG_LEVEL)) {
this.consoleLogAppender.threshold = (LogLevel[process.env.VUE_APP_CONSOLE_LOG_LEVEL] as unknown) as LogLevel;
} else {
this.consoleLogAppender.threshold = commonLevel;
}
const batchSize = parseInt(process.env.VUE_APP_API_LOG_BATCH_SIZE, 10);
if (!isNaN(batchSize)) { this.apiLogAppender.batchSize = Math.max(batchSize, 1); }
const minTimeInSec = parseInt(process.env.VUE_APP_API_LOG_MIN_TIME_PASSED_IN_SEC, 10);
if (!isNaN(minTimeInSec)) { this.apiLogAppender.minimumTimePassedInSec = Math.max(minTimeInSec, 1); }
}
}