Skip to content

Commit

Permalink
Add sentry tracing (#5086)
Browse files Browse the repository at this point in the history
* Setup tracing

* Setup tracing

* Setup tracing

* Setup tracing

* Setup tracing
  • Loading branch information
andrzejewsky authored Jul 31, 2024
1 parent 8746d05 commit d8a03d3
Show file tree
Hide file tree
Showing 35 changed files with 523 additions and 937 deletions.
5 changes: 5 additions & 0 deletions .changeset/five-oranges-crash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"saleor-dashboard": patch
---

Now developer can see the traces within Sentry
1,315 changes: 420 additions & 895 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
"@saleor/macaw-ui": "npm:@saleor/[email protected]",
"@saleor/macaw-ui-next": "npm:@saleor/[email protected]",
"@saleor/sdk": "0.6.0",
"@sentry/react": "^7.83.0",
"@sentry/vite-plugin": "^2.15.0",
"@sentry/react": "^8.21.0",
"@sentry/vite-plugin": "^2.21.1",
"@types/faker": "^5.1.6",
"@uiw/react-color-hue": "0.0.34",
"@uiw/react-color-material": "^0.1.0",
Expand Down Expand Up @@ -123,7 +123,7 @@
"@graphql-codegen/typescript-react-apollo": "^3.2.5",
"@playwright/test": "^1.40.0",
"@saleor/app-sdk": "0.47.2",
"@sentry/cli": "^2.22.3",
"@sentry/cli": "^2.33.0",
"@swc/jest": "^0.2.26",
"@types/apollo-upload-client": "^17.0.2",
"@types/chroma-js": "^2.4.0",
Expand Down
3 changes: 2 additions & 1 deletion src/apps/apps-routing.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { AppDetailsUrlQueryParams, AppInstallUrlQueryParams } from "@dashboard/apps/urls";
import SectionRoute from "@dashboard/auth/components/SectionRoute";
import { Route } from "@dashboard/components/Router";
import { PermissionEnum } from "@dashboard/graphql";
import { sectionNames } from "@dashboard/intl";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";
import {
AppInstallView,
AppListView,
Expand Down
3 changes: 2 additions & 1 deletion src/attributes/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/auth/components/SectionRoute.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Route } from "@dashboard/components/Router";
import { PermissionEnum } from "@dashboard/graphql";
import React from "react";
import { Route, RouteProps } from "react-router-dom";
import { RouteProps } from "react-router-dom";

import NotFound from "../../NotFound";
import { useUser } from "..";
Expand Down
3 changes: 2 additions & 1 deletion src/auth/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Route } from "@dashboard/components/Router";
import { parse as parseQs } from "qs";
import React, { useContext } from "react";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import Layout from "./components/Layout";
import { UserContext as Context } from "./types";
Expand Down
3 changes: 2 additions & 1 deletion src/categories/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/channels/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/collections/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
18 changes: 18 additions & 0 deletions src/components/Router/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { getAppMountUri } from "@dashboard/config";
import * as Sentry from "@sentry/react";
import { createBrowserHistory } from "history";
import React from "react";
import { RouterProps as BaseRouterProps } from "react-router";
import { Route as BaseRoute, Router as BaseRouter } from "react-router-dom";

type RouterProps = Omit<BaseRouterProps, "history"> & { children: React.ReactNode };

export const history = createBrowserHistory({
basename: getAppMountUri(),
});

export const Route = Sentry.withSentryRouting(BaseRoute);

export const Router = (props: RouterProps) => {
return <BaseRouter history={history}>{props.children}</BaseRouter>;
};
3 changes: 2 additions & 1 deletion src/custom-apps/index.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// @ts-strict-ignore
import { Route } from "@dashboard/components/Router";
import { WindowTitle } from "@dashboard/components/WindowTitle";
import { sectionNames } from "@dashboard/intl";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import {
CustomAppDetailsUrlQueryParams,
Expand Down
3 changes: 2 additions & 1 deletion src/customers/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/discounts/index.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { ConditionalDiscountFilterProvider } from "@dashboard/components/ConditionalFilter";
import { Route } from "@dashboard/components/Router";
import { useFlag } from "@dashboard/featureFlags";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import { DiscountListUrlQueryParams, DiscountListUrlSortField } from "./discountsUrls";
Expand Down
3 changes: 2 additions & 1 deletion src/giftCards/index.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Route } from "@dashboard/components/Router";
import { WindowTitle } from "@dashboard/components/WindowTitle";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import GiftCardSettings from "./GiftCardSettings";
import GiftCardListComponent from "./GiftCardsList";
Expand Down
11 changes: 6 additions & 5 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import "./index.css";

import { ApolloProvider } from "@apollo/client";
import DemoBanner from "@dashboard/components/DemoBanner";
import { history, Route, Router } from "@dashboard/components/Router";
import { PermissionEnum } from "@dashboard/graphql";
import useAppState from "@dashboard/hooks/useAppState";
import { ThemeProvider } from "@dashboard/theme";
Expand All @@ -13,7 +14,7 @@ import { render } from "react-dom";
import { ErrorBoundary } from "react-error-boundary";
import TagManager from "react-gtm-module";
import { useIntl } from "react-intl";
import { BrowserRouter, Route, Switch } from "react-router-dom";
import { Switch } from "react-router-dom";

import { AppsSectionRoot } from "./apps";
import { ExternalAppProvider } from "./apps/components/ExternalAppContext";
Expand Down Expand Up @@ -42,7 +43,7 @@ import { ProductAnalytics } from "./components/ProductAnalytics";
import { SavebarRefProvider } from "./components/Savebar/SavebarRefContext";
import { ShopProvider } from "./components/Shop";
import { WindowTitle } from "./components/WindowTitle";
import { DEMO_MODE, getAppMountUri, GTM_ID } from "./config";
import { DEMO_MODE, GTM_ID } from "./config";
import ConfigurationSection from "./configuration";
import { getConfigMenuItemsPermissions } from "./configuration/utils";
import AppStateProvider from "./containers/AppState";
Expand Down Expand Up @@ -82,7 +83,7 @@ if (GTM_ID) {
TagManager.initialize({ gtmId: GTM_ID });
}

errorTracker.init();
errorTracker.init(history);

/*
Handle legacy theming toggle. Since we use new and old macaw,
Expand All @@ -105,7 +106,7 @@ handleLegacyTheming();
const App: React.FC = () => (
<SaleorProvider client={saleorClient}>
<ApolloProvider client={apolloClient}>
<BrowserRouter basename={getAppMountUri()}>
<Router>
<LegacyThemeProvider overrides={themeOverrides} palettes={paletteOverrides}>
<ThemeProvider>
<DateProvider>
Expand Down Expand Up @@ -137,7 +138,7 @@ const App: React.FC = () => (
</DateProvider>
</ThemeProvider>
</LegacyThemeProvider>
</BrowserRouter>
</Router>
</ApolloProvider>
</SaleorProvider>
);
Expand Down
3 changes: 2 additions & 1 deletion src/navigation/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { Route } from "@dashboard/components/Router";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { menuListPath, MenuListUrlQueryParams, MenuListUrlSortField, menuPath } from "./urls";
import MenuDetailsComponent from "./views/MenuDetails";
Expand Down
3 changes: 2 additions & 1 deletion src/orders/index.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { ConditionalOrderFilterProvider } from "@dashboard/components/ConditionalFilter";
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/pageTypes/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/permissionGroups/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/productTypes/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Route } from "@dashboard/components/Router";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
3 changes: 2 additions & 1 deletion src/products/index.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { ConditionalProductFilterProvider } from "@dashboard/components/ConditionalFilter/context";
import { Route } from "@dashboard/components/Router";
import { useFlag } from "@dashboard/featureFlags";
import { sectionNames } from "@dashboard/intl";
import { asSortParams } from "@dashboard/utils/sort";
import { getArrayQueryParam } from "@dashboard/utils/urls";
import { parse as parseQs } from "qs";
import React from "react";
import { useIntl } from "react-intl";
import { Route, RouteComponentProps, Switch } from "react-router-dom";
import { RouteComponentProps, Switch } from "react-router-dom";

import { WindowTitle } from "../components/WindowTitle";
import {
Expand Down
5 changes: 4 additions & 1 deletion src/services/errorTracking/adapters/Sentry.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as Sentry from "@sentry/react";
import { History } from "history";

import { TrackerMethods } from "../types";

Expand All @@ -9,7 +10,7 @@ interface Config {
}

export const SentryAdapter = (config: Config): TrackerMethods => {
const init: TrackerMethods["init"] = () => {
const init: TrackerMethods["init"] = (history: History) => {
if (config?.dsn) {
Sentry.init({
dsn: config.dsn,
Expand All @@ -22,6 +23,8 @@ export const SentryAdapter = (config: Config): TrackerMethods => {
"ResizeObserver loop limit exceeded",
"Cannot read properties of undefined (reading 'holder')",
],
integrations: [Sentry.reactRouterV5BrowserTracingIntegration({ history })],
tracesSampleRate: 0.4,
});

return true;
Expand Down
12 changes: 8 additions & 4 deletions src/services/errorTracking/trackerFactory.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { History } from "history";

import { ErrorTrackerFactory } from "./trackerFactory";
import { TrackerMethods, TrackerPermission } from "./types";

Expand All @@ -22,10 +24,12 @@ const TestAdapter = (): TrackerMethods => {
};
};

const history = jest.fn() as unknown as History;

describe("Error Tracking", () => {
it("Initiates the tracker", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());
const enabled = errorTracking.init();
const enabled = errorTracking.init(history);

expect(enabled).toBe(true);
expect(initMockFn).toHaveBeenCalled();
Expand All @@ -41,7 +45,7 @@ describe("Error Tracking", () => {
it("Sends a captured exception", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());

errorTracking.init();
errorTracking.init(history);

const sampleError = new Error("test");
const id = errorTracking.captureException(sampleError);
Expand All @@ -52,7 +56,7 @@ describe("Error Tracking", () => {
it("Does not save user data without permission", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());

errorTracking.init();
errorTracking.init(history);

const userData = {
email: "[email protected]",
Expand All @@ -66,7 +70,7 @@ describe("Error Tracking", () => {
it("Does save user data with proper permission", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter(), [TrackerPermission.USER_DATA]);

errorTracking.init();
errorTracking.init(history);

const userData = {
email: "[email protected]",
Expand Down
Loading

0 comments on commit d8a03d3

Please sign in to comment.