sequence logging

This commit is contained in:
Florian Dold 2016-11-18 04:37:10 +01:00
parent 356ebd2137
commit eb9677c374
2 changed files with 33 additions and 18 deletions

View File

@ -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;

View File

@ -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) => {