PluginExtensions: Persisting log messages accross the browser session (#95836)

* making sure to keep the messages across a session.

* moved values into consts.
This commit is contained in:
Marcus Andersson
2025-01-13 09:23:14 +01:00
committed by GitHub
parent 5282b7ca8c
commit 8f79a59e1f
@@ -16,16 +16,22 @@ export type ExtensionsLogItem = {
};
const channelName = 'ui-extension-logs';
const logsNumberLimit = 1000;
const logsRetentionTime = 1000 * 60 * 10;
export class ExtensionsLog {
private baseLabels: Labels | undefined;
private subject: ReplaySubject<ExtensionsLogItem> | undefined;
private subject: ReplaySubject<ExtensionsLogItem>;
private channel: BroadcastChannel;
constructor(baseLabels?: Labels, subject?: ReplaySubject<ExtensionsLogItem>, channel?: BroadcastChannel) {
this.baseLabels = baseLabels;
this.channel = channel ?? new BroadcastChannel(channelName);
this.subject = subject;
this.subject = subject ?? new ReplaySubject<ExtensionsLogItem>(logsNumberLimit, logsRetentionTime);
if (!channel) {
this.channel.onmessage = (msg: MessageEvent<ExtensionsLogItem>) => this.subject.next(msg.data);
}
}
info(message: string, labels?: Labels): void {
@@ -68,17 +74,13 @@ export class ExtensionsLog {
extensionPointId: isString(extensionPointId) ? extensionPointId : undefined,
};
// We only receive messages from different contexts so adding the ones
// pushed by this log to the local subject.
this.subject.next(item);
this.channel.postMessage(item);
}
asObservable(): Observable<ExtensionsLogItem> {
if (!this.subject) {
// Lazily create the subject on first subscription to prevent
// to create buffers when no subscribers exists
this.subject = new ReplaySubject<ExtensionsLogItem>(1000, 1000 * 60 * 10);
this.channel.onmessage = (msg: MessageEvent<ExtensionsLogItem>) => this.subject?.next(msg.data);
}
return this.subject.asObservable();
}