Skip to content

Commit 632b249

Browse files
committed
Merge remote-tracking branch 'origin/main' into v0.3.0-prerelease
2 parents c363490 + 3d07bcd commit 632b249

File tree

6 files changed

+492
-336
lines changed

6 files changed

+492
-336
lines changed

CHANGELOG.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- New optional prop for `MetricsLogger` called `logger` to set a different logger.
13+
14+
Usage:
15+
16+
```tsx
17+
const metricsLogger = useMemo(
18+
() =>
19+
({ metricName, value, tags }) => {
20+
console.debug('Custom log for prom-react!', metricName, value, tags);
21+
},
22+
[],
23+
);
24+
25+
return <MetricsLogger logger={metricsLogger} />;
26+
```
27+
1028
## [0.2.1] - 2022-06-09
1129

12-
- Fixed `peerDependencies` for `react` and `react` DOM to allow versions up from `16.9`.
30+
### Fixed
31+
32+
- `peerDependencies` for `react` and `react` DOM to allow versions up from `16.9`.
1333

1434
## [0.2.0] - 2022-04-21
1535

@@ -19,11 +39,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1939

2040
### Changed
2141

22-
- Update some inner dependencies
42+
- Update some inner dependencies.
2343

2444
## [0.1.0] - 2021-11-05
2545

2646
### Added
2747

28-
- Initial version of the library. It includes both `MetricsProvider` and
29-
`useMetrics`. See [README](./README.md) for more details
48+
- Initial version of the library. It includes both `MetricsProvider` and `useMetrics`. See [README](./README.md) for more details.

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@ to your package dependencies. You can have a look at its
198198
React component that will log into console all metric observations. It won't render anything in the screen.
199199
You should not add this in production.
200200

201+
Props:
202+
203+
- `logger?: ObserveCallback`: If set, it will replace the original logger. Ensure the reference of this value doesn't change between renders by memoizing the logger function or defining it outside the component to avoid performance issues.
204+
201205
#### MetricsDebugOverlay
202206

203207
React component to show metrics debug info. Must be placed under `MetricsProvider`. It shows a not-so-fancy
@@ -268,6 +272,25 @@ This will produce log entries like this:
268272

269273
`[prom_react] prom_react_navigation_duration_seconds 1.2456 {app_name: 'my_app', path: '/app', navigation_type: 'full_page' }`
270274

275+
You can customize the output for `MetricsLogger` by replacing the original loader:
276+
277+
```tsx
278+
const metricsLogger = ({ metricName, value, tags }) => {
279+
console.debug('Custom log for prom-react!', metricName, value, tags);
280+
};
281+
const AppRoot = () => (
282+
<MetricsProvider
283+
appName="my-app-name"
284+
owner="my-team"
285+
getNormalizedPath={normalizePath}
286+
metricsAggregatorUrl="https://some-metrics-aggregator.com/push-metrics"
287+
>
288+
<MetricsLogger logger={metricsLogger} />
289+
<MyApp />
290+
</MetricsProvider>
291+
);
292+
```
293+
271294
Moreover, you can also add a widget that will show last navigation event being triggered. This is particularly useful to check
272295
if all your pages are properly instrumented (you should navigate across your app and the widget should show the right path after
273296
every section change).

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"@testing-library/jest-dom": "5.16.5",
4242
"@testing-library/react": "13.3.0",
4343
"@testing-library/user-event": "14.4.3",
44-
"@types/jest": "28.1.7",
44+
"@types/jest": "29.0.0",
4545
"@types/react": "18.0.17",
4646
"@types/react-beforeunload": "2.1.1",
4747
"@types/react-dom": "18.0.6",
@@ -50,7 +50,7 @@
5050
"eslint": "8.22.0",
5151
"eslint-import-resolver-typescript": "3.5.0",
5252
"isomorphic-unfetch": "3.1.0",
53-
"jest": "28.1.3",
53+
"jest": "29.0.2",
5454
"jest-environment-jsdom": "28.1.3",
5555
"msw": "0.45.0",
5656
"prettier": "2.7.1",

src/MetricsLogger.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1-
import { FC, useEffect } from 'react';
1+
import { useEffect } from 'react';
22

33
import { ObserveCallback, useMetrics } from './MetricsContext';
44

5-
const handleObserve: ObserveCallback = ({ metricName, value, tags }) => {
5+
const defaultLogger: ObserveCallback = ({ metricName, value, tags }) => {
66
// eslint-disable-next-line no-console
77
console.log('[prom_react]', metricName, value, tags);
88
};
99

10-
const MetricsLogger: FC = () => {
10+
interface MetricsLoggerProps {
11+
/**
12+
* If set, it will replace the original logger. Ensure the reference of this value doesn't change between renders by memoizing the logger function or defining it outside the component to avoid performance issues.
13+
*/
14+
logger?: ObserveCallback;
15+
}
16+
17+
const MetricsLogger = ({ logger = defaultLogger }: MetricsLoggerProps) => {
1118
const { addObserveListener, removeObserveListener } = useMetrics();
1219

1320
useEffect(() => {
14-
addObserveListener(handleObserve);
21+
addObserveListener(logger);
1522
return () => {
16-
removeObserveListener(handleObserve);
23+
removeObserveListener(logger);
1724
};
18-
}, [addObserveListener, removeObserveListener]);
25+
}, [addObserveListener, logger, removeObserveListener]);
1926

2027
return null;
2128
};

src/MetricsProvider.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export interface MetricsProviderProps {
8989
}
9090

9191
const defaultBuckets = [0.01, 0.1, 1, 2, 3, 4, 5, 7, 10, 15];
92+
const defaultCustomMetrics: MetricDefinition[] = [];
9293

9394
const MetricsProvider = ({
9495
appName,
@@ -97,7 +98,7 @@ const MetricsProvider = ({
9798
getNormalizedPath,
9899
owner = '',
99100
histogramBuckets = defaultBuckets,
100-
customMetrics = [],
101+
customMetrics = defaultCustomMetrics,
101102
fetchOptions,
102103
}: PropsWithChildren<MetricsProviderProps>) => {
103104
const [isReady, setIsReady] = useState(false);

0 commit comments

Comments
 (0)