Skip to content

Commit bfd4951

Browse files
committed
Faro i dine-pleiepenger
1 parent 1081d5f commit bfd4951

File tree

12 files changed

+459
-7
lines changed

12 files changed

+459
-7
lines changed

apps/dine-pleiepenger/nais.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default {
2+
telemetryCollectorURL: 'http://localhost:12347/collect',
3+
app: {
4+
name: 'dine-pleiepenger',
5+
version: 'dev',
6+
},
7+
};

apps/dine-pleiepenger/nais/dev-gcp.json

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"NEXT_PUBLIC_APPSTATUS_DATASET": "staging",
2525
"NEXT_PUBLIC_APPSTATUS_PROJECT_ID": "ryujtq87",
2626
"NPM_CONFIG_CACHE": "/tmp",
27+
"NEXT_PUBLIC_TELEMETRY_URL": "https://telemetry.dev-gcp.nav.cloud.nais.io/collect",
2728

2829
"NEXT_PUBLIC_DINE_UTBETALINGER": "https://tjenester.nav.no/utbetalingsoversikt/",
2930
"NEXT_PUBLIC_ENDRINGSDIALOG_URL": "https://endringsmelding-pleiepenger.intern.dev.nav.no/",

apps/dine-pleiepenger/nais/envs/.env.dev

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ NEXT_PUBLIC_API_URL_BRUKERDIALOG=http://k9-brukerdialog-api
1010
NEXT_PUBLIC_FEATURE_APPSTATUS=off
1111
NEXT_PUBLIC_APPSTATUS_DATASET=staging
1212
NEXT_PUBLIC_APPSTATUS_PROJECT_ID=ryujtq87
13+
NEXT_PUBLIC_TELEMETRY_URL=https://telemetry.dev-gcp.nav.cloud.nais.io/collect
14+
1315

1416
# Innholdslenker
1517
NEXT_PUBLIC_DINE_UTBETALINGER=https://tjenester.nav.no/utbetalingsoversikt/

apps/dine-pleiepenger/nais/envs/.env.prod

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ NEXT_PUBLIC_API_URL_BRUKERDIALOG=http://k9-brukerdialog-api
1010
NEXT_PUBLIC_FEATURE_APPSTATUS=off
1111
NEXT_PUBLIC_APPSTATUS_DATASET=production
1212
NEXT_PUBLIC_APPSTATUS_PROJECT_ID=ryujtq87
13+
NEXT_PUBLIC_TELEMETRY_URL=https://telemetry.prod-gcp.nav.cloud.nais.io/collect
1314

1415
# Innholdslenker
1516
NEXT_PUBLIC_DINE_UTBETALINGER=https://tjenester.nav.no/utbetalingsoversikt/

apps/dine-pleiepenger/nais/prod-gcp.json

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"NEXT_PUBLIC_FEATURE_APPSTATUS": "off",
2525
"NEXT_PUBLIC_APPSTATUS_DATASET": "production",
2626
"NEXT_PUBLIC_APPSTATUS_PROJECT_ID": "ryujtq87",
27+
"NEXT_PUBLIC_TELEMETRY_URL": "https://telemetry.prod-gcp.nav.cloud.nais.io/collect",
2728

2829
"NEXT_PUBLIC_DINE_UTBETALINGER": "https://tjenester.nav.no/utbetalingsoversikt/",
2930
"NEXT_PUBLIC_ENDRINGSDIALOG_URL": "https://www.nav.no/familie/sykdom-i-familien/soknad/endringsmelding-pleiepenger",

apps/dine-pleiepenger/next.config.js

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const appDirectives = {
1313
'https://*.nav.no',
1414
'https://*.uxsignals.com',
1515
'http://localhost:1234',
16+
'http://localhost:12347',
1617
'http://*.api.sanity.io',
1718
],
1819
};

apps/dine-pleiepenger/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
"storybook": "storybook dev -p 6006"
1515
},
1616
"dependencies": {
17+
"@grafana/faro-web-sdk": "1.5.1",
18+
"@grafana/faro-web-tracing": "1.5.1",
1719
"@navikt/appstatus-react-ds": "workspace: *",
1820
"@navikt/nav-dekoratoren-moduler": "2.1.6",
1921
"@navikt/next-logger": "1.23.0",
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Faro, getWebInstrumentations, initializeFaro, LogLevel } from '@grafana/faro-web-sdk';
2+
import { TracingInstrumentation } from '@grafana/faro-web-tracing';
3+
import { browserEnv } from '../utils/env';
4+
import nais from '../../nais.js';
5+
let faro: Faro | null = null;
6+
7+
export function initInstrumentation(): void {
8+
if (typeof window === 'undefined' || faro !== null) return;
9+
10+
getFaro();
11+
}
12+
13+
export function getFaro(): Faro {
14+
if (faro != null) return faro;
15+
faro = initializeFaro({
16+
url: browserEnv.NEXT_PUBLIC_TELEMETRY_URL,
17+
app: nais.app,
18+
instrumentations: [
19+
...getWebInstrumentations({
20+
captureConsole: false,
21+
}),
22+
new TracingInstrumentation(),
23+
],
24+
});
25+
return faro;
26+
}
27+
28+
export function pinoLevelToFaroLevel(pinoLevel: string): LogLevel {
29+
switch (pinoLevel) {
30+
case 'trace':
31+
return LogLevel.TRACE;
32+
case 'debug':
33+
return LogLevel.DEBUG;
34+
case 'info':
35+
return LogLevel.INFO;
36+
case 'warn':
37+
return LogLevel.WARN;
38+
case 'error':
39+
return LogLevel.ERROR;
40+
default:
41+
throw new Error(`Unknown level: ${pinoLevel}`);
42+
}
43+
}

apps/dine-pleiepenger/src/pages/_app.page.tsx

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Status, StatusMessage } from '@navikt/appstatus-react-ds';
22
import { ReactElement } from 'react';
33
import { IntlProvider } from 'react-intl';
4+
import { configureLogger } from '@navikt/next-logger';
45
import { InnsynPsbApp } from '@navikt/sif-app-register';
56
import { AmplitudeProvider } from '@navikt/sif-common-amplitude';
67
import { storageParser } from '@navikt/sif-common-core-ds/src/utils/persistence/storageParser';
@@ -13,20 +14,31 @@ import ErrorBoundary from '../components/error-boundary/ErrorBoundary';
1314
import HentInnsynsdataFeilet from '../components/hent-innsynsdata-feilet/HentInnsynsdataFeilet';
1415
import EmptyPage from '../components/page-layout/empty-page/EmptyPage';
1516
import { InnsynsdataContextProvider } from '../context/InnsynsdataContextProvider';
17+
import { getFaro, initInstrumentation, pinoLevelToFaroLevel } from '../faro/faro';
18+
import { messages } from '../i18n';
1619
import { Innsynsdata } from '../types/InnsynData';
1720
import appSentryLogger from '../utils/appSentryLogger';
1821
import { browserEnv } from '../utils/env';
1922
import UnavailablePage from './unavailable.page';
2023
import 'react-loading-skeleton/dist/skeleton.css';
2124
import '../components/process/process.css';
2225
import '../style/global.css';
23-
import { messages } from '../i18n';
2426

25-
export const APPLICATION_KEY = 'sif-innsyn';
27+
export const AMPLITUDE_APPLICATION_KEY = 'sif-innsyn';
2628

2729
const innsynsdataFetcher = async (url: string): Promise<Innsynsdata> =>
2830
axios.get(url, { transformResponse: storageParser }).then((res) => res.data);
2931

32+
initInstrumentation();
33+
34+
configureLogger({
35+
basePath: process.env.NEXT_PUBLIC_BASE_PATH,
36+
onLog: (log) =>
37+
getFaro().api.pushLog(log.messages, {
38+
level: pinoLevelToFaroLevel(log.level.label),
39+
}),
40+
});
41+
3042
function MyApp({ Component, pageProps }: AppProps): ReactElement {
3143
const { data, error, isLoading } = useSWR<Innsynsdata, AxiosError>(
3244
`${browserEnv.NEXT_PUBLIC_BASE_PATH}/api/innsynsdata`,

apps/dine-pleiepenger/src/pages/api/appStatus.api.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { withAuthenticatedApi } from '../../auth/withAuthentication';
44
import { getXRequestId } from '../../utils/apiUtils';
55
import { SanityConfig, fetchStatus } from '@navikt/appstatus-react-ds';
66
import { browserEnv } from '../../utils/env';
7-
import { APPLICATION_KEY } from '../_app.page';
7+
import { AMPLITUDE_APPLICATION_KEY } from '../_app.page';
88
import { ApplicationState } from '@navikt/appstatus-react-ds/src/hooks/useGetApplicationStatus';
99

1010
const sanityConfig: SanityConfig = {
@@ -13,7 +13,7 @@ const sanityConfig: SanityConfig = {
1313
};
1414

1515
export const fetchAppStatus = async (): Promise<ApplicationState | undefined> => {
16-
return await fetchStatus(APPLICATION_KEY, sanityConfig);
16+
return await fetchStatus(AMPLITUDE_APPLICATION_KEY, sanityConfig);
1717
};
1818

1919
async function handler(req: NextApiRequest, res: NextApiResponse) {

apps/dine-pleiepenger/src/utils/env.ts

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ export const publicEnvSchema = z.object({
99
NEXT_PUBLIC_API_URL_INNSYN: z.union([z.string(), z.undefined()]),
1010
NEXT_PUBLIC_API_URL_BRUKERDIALOG: z.union([z.string(), z.undefined()]),
1111

12+
/** Faro telemetry */
13+
NEXT_PUBLIC_TELEMETRY_URL: z.string(),
14+
1215
/** Appstatus */
1316
NEXT_PUBLIC_FEATURE_APPSTATUS: z.string(),
1417
NEXT_PUBLIC_APPSTATUS_PROJECT_ID: z.string(),
@@ -59,6 +62,7 @@ export const serverEnvSchema = z.object({
5962
* They MUST be provided during the build step.
6063
*/
6164
export const browserEnv = publicEnvSchema.parse({
65+
NEXT_PUBLIC_TELEMETRY_URL: process.env.NEXT_PUBLIC_TELEMETRY_URL,
6266
NEXT_PUBLIC_BASE_PATH: process.env.NEXT_PUBLIC_BASE_PATH,
6367
NEXT_PUBLIC_LOGIN_URL: process.env.NEXT_PUBLIC_LOGIN_URL,
6468
NEXT_PUBLIC_RUNTIME_ENVIRONMENT: process.env.NEXT_PUBLIC_RUNTIME_ENVIRONMENT,

0 commit comments

Comments
 (0)