Baselime enables observability for the next generation of cloud applications.
This library enables you to monitor real-user behaviour of your React and Next.js applications.
npm i --save @baselime/react-rumAdd the BaselimeRum Component at the root of your React application application.
Get the
publicApiKeyfrom the Baselime console. Make sure to use a public API key.
function Page({ child }) {
return (
<BaselimeRum apiKey={publicApiKey}>
{child}
</BaselimeRum>)
}The following data is automatically captured for every page view of your application:
timezonelanguageosuserAgenturldevicecountrycity
Additionally, you can enable capturing web vitals from your React applications. Use the enableWebVitals prop.
- Time To First Byte (TTFB)
- Largest Contentful Paint (LCP)
- First Input Delay (FID)
- Cumulative Layout Shift (CLS)
Load this at the top of your application to avoid resending the web vital data.
import { BaselimeRum } from '@baselime/react-rum';
function Page({ child }) {
return (
<BaselimeRum apiKey={publicApiKey} enableWebVitals>
{child}
</BaselimeRum>)
}BaselimeRum automatically captures and sends any Unhandled Errors in your application to Baselime.
import { BaselimeRum } from '@baselime/react-rum';
function Page({ child }) {
return (
<BaselimeRum apiKey={publicApiKey} enableWebVitals fallback={<div>Something went wrong</div>}>
{child}
</BaselimeRum>)
}To provide a better UX for end users, use React Error Boundaries.
The BaselimeErrorBoundary catches errors in any of its child components, reports the error to Baselime. It works in conjunction with the <BaselimeRum /> Component so that all errors are correlated by Page Load, and User Session.
import { BaselimeErrorBoundary } from '@baselime/react-rum';
function UserProfile({ child }) {
return (<BaselimeErrorBoundary fallback={<div>Could not display your user profile</div>}>
<UserProfileImage />
<UserName />
<UserBiography />
</BaselimeErrorBoundary>
)
}This is based on the excellent react-error-boundary project.
Error Boundaries do not catch errors inside event handlers. To catch Exceptions
import { useBaselimeRum } from '@baselime/react-rum';
function MyButtonComponent() {
const { captureException } = useBaselimeRum();
function handleClick(e) {
try {
// Do something that could throw
} catch (error) {
// sends errors to Baselime so they can be fixed
captureException(error)
}
}
return <button onClick={handleClick}>Click Me</button>
}Capture custom events for analytics and monitoring. Like logs but with all the power of Baselime.
sendEvent(message: string, payload)
import { useBaselimeRum } from '@baselime/react-rum';
function CheckoutComponent() {
const { sendEvent } = useBaselimeRum();
function handleClick() {
const checkoutSession = await createImaginaryCheckoutSession()
sendEvent("Checkout Started", {
...checkoutSession
})
}
return <button onClick={handleClick}>Checkout</button>
}To set the User from another component then call
import { useBaselimeRum } from '@baselime/react-rum';
function UserCard({ child }) {
const { setUser } = useBaselimeRum();
function login(user) {
setUser(user.id);
}
return (
<Button onClick={login}>Login</Button>
}Once the data is captured, you can query, search and analyse your data in the Baselime console. You can create dashboards and alerts based on the Real User Monitoring metrics.
| Parameter | Description |
|---|---|
apiKey |
Your Baselime API key for authentication and authorization. |
enableWebVitals |
(Optional) A boolean flag indicating whether to enable tracking of web vitals. |
enableLocal |
(Optional) A boolean flag indicating whether to enable local tracking. |
dataset |
(Optional) The dataset to store the data to. Defaults to web. |
service |
The name of the application being monitored. Defaults to the hostname. |
fallback |
A fallback UI component in case the application crashes |
© Baselime Limited, 2023
Distributed under MIT License (The MIT License).
See LICENSE for more information.