Skip to content

Commit 5f28577

Browse files
committed
electron: overhaul of database and storage [INT-355]
1 parent 23c058a commit 5f28577

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

packages/electron/src/main/modules/BacktraceMainElectronModule.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1-
import { FileAttachmentsManager, FileBreadcrumbsStorage, NodeFileSystem } from '@backtrace/node';
2-
import type { BacktraceDatabase } from '@backtrace/sdk-core';
1+
import {
2+
AttachmentBacktraceDatabaseRecordFactory,
3+
BacktraceConfiguration,
4+
BacktraceStorageModule,
5+
BacktraceStreamStorage,
6+
FileAttachmentsManager,
7+
FileBreadcrumbsStorage,
8+
} from '@backtrace/node';
9+
import type { BacktraceDatabase, BacktraceStorage, BacktraceSyncStorage } from '@backtrace/sdk-core';
310
import {
411
BacktraceData,
512
BacktraceModule,
@@ -18,10 +25,10 @@ import { MainIpcTransportHandler } from '../ipc/MainIpcTransportHandler.js';
1825
import { WindowIpcTransport } from '../ipc/WindowIpcTransport.js';
1926
import { IpcAttachment } from './IpcAttachment.js';
2027

21-
export class BacktraceMainElectronModule implements BacktraceModule {
22-
private _bindData?: BacktraceModuleBindData;
28+
export class BacktraceMainElectronModule implements BacktraceModule<BacktraceConfiguration> {
29+
private _bindData?: BacktraceModuleBindData<BacktraceConfiguration>;
2330

24-
public bind(bindData: BacktraceModuleBindData): void {
31+
public bind(bindData: BacktraceModuleBindData<BacktraceConfiguration>): void {
2532
const { requestHandler, reportSubmission, client, attributeManager } = bindData;
2633

2734
const getSyncData = (): SyncData => ({
@@ -102,7 +109,7 @@ export class BacktraceMainElectronModule implements BacktraceModule {
102109
return;
103110
}
104111

105-
const { options, attributeManager, sessionFiles, fileSystem, database } = this._bindData;
112+
const { options, attributeManager, sessionFiles, storage, database } = this._bindData;
106113

107114
if (options.database?.captureNativeCrashes) {
108115
if (options.database.path) {
@@ -125,9 +132,9 @@ export class BacktraceMainElectronModule implements BacktraceModule {
125132
}
126133
});
127134

128-
if (sessionFiles && database && fileSystem) {
135+
if (sessionFiles && database && storage) {
129136
const lockId = sessionFiles.lockPreviousSessions();
130-
this.sendPreviousCrashAttachments(database, sessionFiles, fileSystem as NodeFileSystem).finally(
137+
this.sendPreviousCrashAttachments(database, sessionFiles, storage as BacktraceStorageModule).finally(
131138
() => lockId && sessionFiles.unlockPreviousSessions(lockId),
132139
);
133140
}
@@ -145,7 +152,7 @@ export class BacktraceMainElectronModule implements BacktraceModule {
145152
private async sendPreviousCrashAttachments(
146153
database: BacktraceDatabase,
147154
session: SessionFiles,
148-
fileSystem: NodeFileSystem,
155+
storage: BacktraceStorage & BacktraceSyncStorage & BacktraceStreamStorage,
149156
) {
150157
// Sort crashes and sessions by timestamp descending
151158
const crashes = crashReporter.getUploadedReports().sort((a, b) => b.date.getTime() - a.date.getTime());
@@ -169,22 +176,24 @@ export class BacktraceMainElectronModule implements BacktraceModule {
169176

170177
const crashLock = session.getFileName(`electron-crash-lock-${rxid}`);
171178
// If crash lock exists, do not attempt to add attachments twice
172-
if (await fileSystem.exists(crashLock)) {
179+
if (await storage.has(crashLock)) {
173180
continue;
174181
}
175182

176-
const fileAttachmentsManager = FileAttachmentsManager.createFromSession(session, fileSystem);
183+
const fileAttachmentsManager = FileAttachmentsManager.createFromSession(session, storage);
177184
const sessionAttachments = [
178-
...FileBreadcrumbsStorage.getSessionAttachments(session, fileSystem),
185+
...FileBreadcrumbsStorage.getSessionAttachments(session, storage),
179186
...(await fileAttachmentsManager.get()),
180187
];
181188

189+
const recordFactory = AttachmentBacktraceDatabaseRecordFactory.default();
182190
for (const attachment of sessionAttachments) {
183-
database.addAttachment(rxid, attachment, session.sessionId);
191+
const record = recordFactory.create(rxid, session.sessionId, attachment);
192+
database.addRecord(record);
184193
}
185194

186195
// Write an empty crash lock, so we know that this crash is already taken care of
187-
await fileSystem.writeFile(crashLock, '');
196+
await storage.set(crashLock, '');
188197
} catch {
189198
// Do nothing, skip the report
190199
}

0 commit comments

Comments
 (0)