sequence logging
This commit is contained in:
parent
356ebd2137
commit
eb9677c374
@ -20,7 +20,7 @@
|
|||||||
* @author Florian Dold
|
* @author Florian Dold
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Store, QueryRoot} from "./query";
|
import {Store, QueryRoot, openPromise} from "./query";
|
||||||
|
|
||||||
export type Level = "error" | "debug" | "info" | "warn";
|
export type Level = "error" | "debug" | "info" | "warn";
|
||||||
|
|
||||||
@ -126,31 +126,46 @@ export async function getLogs(): Promise<LogEntry[]> {
|
|||||||
return await new QueryRoot(db).iter(logsStore).toArray();
|
return await new QueryRoot(db).iter(logsStore).toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let barrier: any;
|
||||||
|
|
||||||
export async function record(level: Level, msg: string, source?: string, line?: number, col?: number): Promise<void> {
|
export async function record(level: Level, msg: string, source?: string, line?: number, col?: number): Promise<void> {
|
||||||
if (typeof indexedDB === "undefined") {
|
if (typeof indexedDB === "undefined") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!db) {
|
|
||||||
db = await openLoggingDb();
|
let myBarrier: any;
|
||||||
|
|
||||||
|
if (barrier) {
|
||||||
|
let p = barrier.promise;
|
||||||
|
myBarrier = barrier = openPromise();
|
||||||
|
await p;
|
||||||
|
} else {
|
||||||
|
myBarrier = barrier = openPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
let count = await new QueryRoot(db).count(logsStore);
|
try {
|
||||||
|
if (!db) {
|
||||||
|
db = await openLoggingDb();
|
||||||
|
}
|
||||||
|
|
||||||
console.log("count is", count);
|
let count = await new QueryRoot(db).count(logsStore);
|
||||||
|
|
||||||
if (count > 1000) {
|
if (count > 1000) {
|
||||||
await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200));
|
await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200));
|
||||||
|
}
|
||||||
|
|
||||||
|
let entry: LogEntry = {
|
||||||
|
timestamp: new Date().getTime(),
|
||||||
|
level,
|
||||||
|
msg,
|
||||||
|
source,
|
||||||
|
line,
|
||||||
|
col,
|
||||||
|
};
|
||||||
|
await new QueryRoot(db).put(logsStore, entry);
|
||||||
|
} finally {
|
||||||
|
await Promise.resolve().then(() => myBarrier.resolve());
|
||||||
}
|
}
|
||||||
|
|
||||||
let entry: LogEntry = {
|
|
||||||
timestamp: new Date().getTime(),
|
|
||||||
level,
|
|
||||||
msg,
|
|
||||||
source,
|
|
||||||
line,
|
|
||||||
col,
|
|
||||||
};
|
|
||||||
await new QueryRoot(db).put(logsStore, entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const loggingDbVersion = 1;
|
const loggingDbVersion = 1;
|
||||||
|
@ -86,7 +86,7 @@ export let AbortTransaction = Symbol("abort_transaction");
|
|||||||
* Get an unresolved promise together with its extracted resolve / reject
|
* Get an unresolved promise together with its extracted resolve / reject
|
||||||
* function.
|
* function.
|
||||||
*/
|
*/
|
||||||
function openPromise<T>() {
|
export function openPromise<T>() {
|
||||||
let resolve: ((value?: T | PromiseLike<T>) => void) | null = null;
|
let resolve: ((value?: T | PromiseLike<T>) => void) | null = null;
|
||||||
let reject: ((reason?: any) => void) | null = null;
|
let reject: ((reason?: any) => void) | null = null;
|
||||||
const promise = new Promise<T>((res, rej) => {
|
const promise = new Promise<T>((res, rej) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user