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,18 +126,30 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let myBarrier: any;
|
||||||
|
|
||||||
|
if (barrier) {
|
||||||
|
let p = barrier.promise;
|
||||||
|
myBarrier = barrier = openPromise();
|
||||||
|
await p;
|
||||||
|
} else {
|
||||||
|
myBarrier = barrier = openPromise();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
if (!db) {
|
if (!db) {
|
||||||
db = await openLoggingDb();
|
db = await openLoggingDb();
|
||||||
}
|
}
|
||||||
|
|
||||||
let count = await new QueryRoot(db).count(logsStore);
|
let count = await new QueryRoot(db).count(logsStore);
|
||||||
|
|
||||||
console.log("count is", count);
|
|
||||||
|
|
||||||
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));
|
||||||
}
|
}
|
||||||
@ -151,6 +163,9 @@ export async function record(level: Level, msg: string, source?: string, line?:
|
|||||||
col,
|
col,
|
||||||
};
|
};
|
||||||
await new QueryRoot(db).put(logsStore, entry);
|
await new QueryRoot(db).put(logsStore, entry);
|
||||||
|
} finally {
|
||||||
|
await Promise.resolve().then(() => myBarrier.resolve());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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