swaf/src/models/Log.ts

70 lines
2.2 KiB
TypeScript

import Model from "../db/Model";
import {LogLevel, LogLevelKeys} from "../Logger";
import Validator from "../db/Validator";
export default class Log extends Model {
private level?: number;
public message?: string;
private log_id?: Buffer;
private error_name?: string;
private error_message?: string;
private error_stack?: string;
private created_at?: Date;
protected defineProperties(): void {
this.defineProperty<number>('level', new Validator<number>().defined());
this.defineProperty<string>('message', new Validator<string>().defined().between(0, 65535));
this.defineProperty<Buffer>('log_id', new Validator<Buffer>().acceptUndefined().length(16));
this.defineProperty<string>('error_name', new Validator<string>().acceptUndefined().between(0, 128));
this.defineProperty<string>('error_message', new Validator<string>().acceptUndefined().between(0, 512));
this.defineProperty<string>('error_stack', new Validator<string>().acceptUndefined().between(0, 65535));
this.defineProperty<Date>('created_at', new Validator<Date>());
}
public getLevel(): LogLevelKeys {
if (typeof this.level !== 'number') return 'ERROR';
return <LogLevelKeys>LogLevel[this.level];
}
public setLevel(level: LogLevelKeys) {
this.level = LogLevel[level];
}
public getLogID(): string | null {
if (!this.log_id) return null;
const chars = this.log_id!.toString('hex');
let out = '';
let i = 0;
for (const l of [8, 4, 4, 4, 12]) {
if (i > 0) out += '-';
out += chars.substr(i, l);
i += l;
}
return out;
}
public setLogID(buffer: Buffer) {
this.log_id = buffer;
}
public getErrorName(): string {
return this.error_name || '';
}
public getErrorMessage(): string {
return this.error_message || '';
}
public getErrorStack(): string {
return this.error_stack || '';
}
public setError(error?: Error) {
if (!error) return;
this.error_name = error.name;
this.error_message = error.message;
this.error_stack = error.stack;
}
}