Skip to content

Commit 859f157

Browse files
authored
Fixes #53 Ensure storage api calls error are caught and logged (#126)
1 parent 10c5efb commit 859f157

File tree

3 files changed

+22
-14
lines changed

3 files changed

+22
-14
lines changed

.vscode/settings.json

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
"esbuild",
2424
"eslintignore",
2525
"jsdelivr",
26-
"lage",
2726
"localstorage",
2827
"maxcdn",
2928
"ncaught",

packages/core/src/configuration/SettingsManager.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ export class SettingsManager {
2828
}
2929

3030
this._isUpdatingSettings = true;
31-
const { log } = config.services;
32-
try {
31+
const { log, storage, submissionClient } = config.services;
3332

33+
try {
3434
const unableToUpdateMessage = "Unable to update settings";
3535
if (!config.isValid) {
3636
log.error(`${unableToUpdateMessage}: ApiKey is not set`);
@@ -39,7 +39,7 @@ export class SettingsManager {
3939

4040
const version = config.settingsVersion;
4141
log.trace(`Checking for updated settings from: v${version}`);
42-
const response = await config.services.submissionClient.getSettings(version);
42+
const response = await submissionClient.getSettings(version);
4343

4444
if (response.status === 304) {
4545
log.trace("Settings are up-to-date");
@@ -53,7 +53,7 @@ export class SettingsManager {
5353

5454
config.applyServerSettings(response.data);
5555

56-
await config.services.storage.setItem(SettingsManager.SettingsKey, JSON.stringify(response.data));
56+
await storage.setItem(SettingsManager.SettingsKey, JSON.stringify(response.data));
5757
log.trace(`Updated settings: v${response.data.version}`);
5858
} catch (ex) {
5959
log.error(`Error updating settings: ${ex instanceof Error ? ex.message : ex + ''}`);
@@ -63,10 +63,12 @@ export class SettingsManager {
6363
}
6464

6565
private static async getSavedServerSettings(config: Configuration): Promise<ServerSettings> {
66+
const { log, storage } = config.services;
6667
try {
67-
const settings = await config.services.storage.getItem(SettingsManager.SettingsKey);
68+
const settings = await storage.getItem(SettingsManager.SettingsKey);
6869
return settings && JSON.parse(settings) as ServerSettings || new ServerSettings({}, 0);
69-
} catch {
70+
} catch (ex) {
71+
log.error(`Error getting saved settings: ${ex instanceof Error ? ex.message : ex + ''}`);
7072
return new ServerSettings({}, 0);
7173
}
7274
}

packages/core/src/queue/DefaultEventQueue.ts

+14-7
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,9 @@ export class DefaultEventQueue implements IEventQueue {
257257

258258
private async loadEvents(): Promise<void> {
259259
if (this.config.usePersistedQueueStorage) {
260+
const { log, storage } = this.config.services;
261+
260262
try {
261-
const storage = this.config.services.storage;
262263
const files: string[] = await storage.keys();
263264

264265
for (const file of files) {
@@ -269,7 +270,7 @@ export class DefaultEventQueue implements IEventQueue {
269270
}
270271
}
271272
} catch (ex) {
272-
this.config.services.log.error(`Error loading queue items from storage: ${ex instanceof Error ? ex.message : ex + ''}`)
273+
log.error(`Error loading queue items from storage: ${ex instanceof Error ? ex.message : ex + ''}`)
273274
}
274275
}
275276
}
@@ -278,21 +279,25 @@ export class DefaultEventQueue implements IEventQueue {
278279
this._lastFileTimestamp = Math.max(Date.now(), this._lastFileTimestamp + 1);
279280
const file = `${this.QUEUE_PREFIX}${this._lastFileTimestamp}.json`;
280281

281-
const { storage, log } = this.config.services;
282+
const { log, storage } = this.config.services;
282283
const useStorage: boolean = this.config.usePersistedQueueStorage;
283284
if (this._queue.push({ file, event }) > this.maxItems) {
284285
log.trace("Removing oldest queue entry: maxItems exceeded");
285286
const item = this._queue.shift();
286287
if (useStorage && item) {
287-
await storage.removeItem(item.file);
288+
try {
289+
await storage.removeItem(item.file);
290+
} catch (ex) {
291+
log.error(`Error removing oldest queue entry from storage: ${ex instanceof Error ? ex.message : ex + ''}`)
292+
}
288293
}
289294
}
290295

291296
if (useStorage) {
292297
try {
293298
await storage.setItem(file, JSON.stringify(event));
294299
} catch (ex) {
295-
log.error(`Error saving queue item to storage: ${ex instanceof Error ? ex.message : ex + ''}`)
300+
log.error(`Error saving queue entry to storage: ${ex instanceof Error ? ex.message : ex + ''}`)
296301
}
297302
}
298303

@@ -302,11 +307,13 @@ export class DefaultEventQueue implements IEventQueue {
302307
private async removeEvents(items: EventQueueItem[]): Promise<void> {
303308
const files = items.map(i => i.file);
304309
if (this.config.usePersistedQueueStorage) {
310+
const { log, storage } = this.config.services;
311+
305312
for (const file of files) {
306313
try {
307-
await this.config.services.storage.removeItem(file);
314+
await storage.removeItem(file);
308315
} catch (ex) {
309-
this.config.services.log.error(`Error removing queue item from storage: ${ex instanceof Error ? ex.message : ex + ''}`)
316+
log.error(`Error removing queue item from storage: ${ex instanceof Error ? ex.message : ex + ''}`)
310317
}
311318
}
312319
}

0 commit comments

Comments
 (0)