From f5108dcceb1068672a849b08c47c8b15f207dfa2 Mon Sep 17 00:00:00 2001 From: Gurinder Singh Date: Thu, 19 Oct 2023 15:06:41 -0400 Subject: [PATCH 1/2] window event to confirm initialization --- public/app/fn_app.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/app/fn_app.ts b/public/app/fn_app.ts index 910e3eb822eb5..dc8b0d902e9bc 100644 --- a/public/app/fn_app.ts +++ b/public/app/fn_app.ts @@ -227,8 +227,10 @@ export class GrafanaApp { } catch (error) { console.error('Failed to start Grafana', error); window.__grafana_load_failed(); + window.dispatchEvent(new CustomEvent('grafana-startup:failed')); } finally { stopMeasure('frontend_app_init'); + window.dispatchEvent(new CustomEvent('grafana-startup:success')); } } } From 28854b5b11eb254452e2f8251f527d4148f04a65 Mon Sep 17 00:00:00 2001 From: Gurinder Singh Date: Thu, 19 Oct 2023 19:45:04 -0400 Subject: [PATCH 2/2] grafana start up status events --- public/app/fn_app.ts | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/public/app/fn_app.ts b/public/app/fn_app.ts index dc8b0d902e9bc..79301e66c9916 100644 --- a/public/app/fn_app.ts +++ b/public/app/fn_app.ts @@ -106,11 +106,37 @@ if (process.env.NODE_ENV === 'development') { initDevFeatures(); } +export declare type FNGrafanaStartupState = { + isLoading: boolean; + isError: boolean; + error?: unknown; + isIdeal: boolean; +}; + +export const DefaultGrafanaStartupState: FNGrafanaStartupState = { + isLoading: false, + isError: false, + isIdeal: true, +}; + +const dispatchFnEvent = (info: FNGrafanaStartupState = DefaultGrafanaStartupState, ek = 'grafana-startup') => { + window.dispatchEvent( + new CustomEvent(ek, { + detail: info, + }) + ); +}; + export class GrafanaApp { context!: GrafanaContextType; async init() { try { + dispatchFnEvent({ + isIdeal: false, + isLoading: true, + isError: false, + }); // Let iframe container know grafana has started loading parent.postMessage('GrafanaAppInit', '*'); @@ -224,13 +250,23 @@ export class GrafanaApp { keybindings: keybindingsService, config, }; + + dispatchFnEvent({ + isLoading: false, + isError: false, + isIdeal: false, + }); } catch (error) { + dispatchFnEvent({ + isLoading: false, + isError: true, + error, + isIdeal: false, + }); console.error('Failed to start Grafana', error); window.__grafana_load_failed(); - window.dispatchEvent(new CustomEvent('grafana-startup:failed')); } finally { stopMeasure('frontend_app_init'); - window.dispatchEvent(new CustomEvent('grafana-startup:success')); } } }