Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sentry tracing #5086

Merged
merged 7 commits into from
Jul 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading