aboutsummaryrefslogtreecommitdiff
path: root/src/logging.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/logging.ts')
-rw-r--r--src/logging.ts49
1 files changed, 32 insertions, 17 deletions
diff --git a/src/logging.ts b/src/logging.ts
index 3f8757a07..16aa851bc 100644
--- a/src/logging.ts
+++ b/src/logging.ts
@@ -20,7 +20,7 @@
* @author Florian Dold
*/
-import {Store, QueryRoot} from "./query";
+import {Store, QueryRoot, openPromise} from "./query";
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();
}
+let barrier: any;
+
export async function record(level: Level, msg: string, source?: string, line?: number, col?: number): Promise<void> {
if (typeof indexedDB === "undefined") {
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) {
- await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200));
- }
+ if (count > 1000) {
+ 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);
+ 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());
+ }
}
const loggingDbVersion = 1;