Updated sentry sdk (#461)

Integrated react router for better performance reporting
Added Sentry Profiler for editor, appviewer and widgets

Co-authored-by: Nikhil Nandagopal <nikhil@appsmith.com>
This commit is contained in:
Nikhil Nandagopal 2020-08-28 22:53:07 +05:30 committed by GitHub
parent d26db12e44
commit 0b22fc67b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 192 additions and 94 deletions

View File

@ -16,8 +16,8 @@
"@craco/craco": "^5.6.1", "@craco/craco": "^5.6.1",
"@manaflair/redux-batch": "^1.0.0", "@manaflair/redux-batch": "^1.0.0",
"@optimizely/optimizely-sdk": "^4.0.0", "@optimizely/optimizely-sdk": "^4.0.0",
"@sentry/react": "^5.22.0", "@sentry/react": "^5.22.2",
"@sentry/tracing": "^5.22.0", "@sentry/tracing": "^5.22.2",
"@sentry/webpack-plugin": "^1.12.1", "@sentry/webpack-plugin": "^1.12.1",
"@types/chance": "^1.0.7", "@types/chance": "^1.0.7",
"@types/lodash": "^4.14.120", "@types/lodash": "^4.14.120",

View File

@ -1,5 +1,8 @@
import { AppsmithUIConfigs, FeatureFlagConfig } from "./types"; import { AppsmithUIConfigs, FeatureFlagConfig } from "./types";
import { Integrations } from "@sentry/tracing"; import { Integrations } from "@sentry/tracing";
import * as Sentry from "@sentry/react";
import { createBrowserHistory } from "history";
const history = createBrowserHistory();
type INJECTED_CONFIGS = { type INJECTED_CONFIGS = {
sentry: { sentry: {
@ -168,7 +171,12 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
dsn: sentryDSN.value, dsn: sentryDSN.value,
release: sentryRelease.value, release: sentryRelease.value,
environment: sentryENV.value, environment: sentryENV.value,
integrations: [new Integrations.BrowserTracing()], integrations: [
new Integrations.BrowserTracing({
// Can also use reactRouterV4Instrumentation
routingInstrumentation: Sentry.reactRouterV5Instrumentation(history),
}),
],
tracesSampleRate: 1.0, tracesSampleRate: 1.0,
}, },
smartLook: { smartLook: {

View File

@ -23,6 +23,7 @@ import {
} from "actions/metaActions"; } from "actions/metaActions";
import AppRoute from "pages/common/AppRoute"; import AppRoute from "pages/common/AppRoute";
import { editorInitializer } from "utils/EditorUtils"; import { editorInitializer } from "utils/EditorUtils";
import * as Sentry from "@sentry/react";
const AppViewerBody = styled.section` const AppViewerBody = styled.section`
display: flex; display: flex;
@ -134,5 +135,5 @@ const mapDispatchToProps = (dispatch: any) => ({
}); });
export default withRouter( export default withRouter(
connect(mapStateToProps, mapDispatchToProps)(AppViewer), connect(mapStateToProps, mapDispatchToProps)(Sentry.withProfiler(AppViewer)),
); );

View File

@ -40,6 +40,7 @@ import { getAppsmithConfigs } from "configs";
import { getCurrentUser } from "selectors/usersSelectors"; import { getCurrentUser } from "selectors/usersSelectors";
import { User } from "constants/userConstants"; import { User } from "constants/userConstants";
import ConfirmRunModal from "pages/Editor/ConfirmRunModal"; import ConfirmRunModal from "pages/Editor/ConfirmRunModal";
import * as Sentry from "@sentry/react";
const { cloudHosting, intercomAppID } = getAppsmithConfigs(); const { cloudHosting, intercomAppID } = getAppsmithConfigs();
@ -216,4 +217,6 @@ const mapDispatchToProps = (dispatch: any) => {
}; };
}; };
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Editor)); export default withRouter(
connect(mapStateToProps, mapDispatchToProps)(Sentry.withProfiler(Editor)),
);

View File

@ -1,6 +1,9 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { Route } from "react-router-dom"; import { Route } from "react-router-dom";
import AnalyticsUtil from "utils/AnalyticsUtil"; import AnalyticsUtil from "utils/AnalyticsUtil";
import * as Sentry from "@sentry/react";
const SentryRoute = Sentry.withSentryRouting(Route);
const AppRoute = ({ const AppRoute = ({
component: Component, component: Component,
@ -22,7 +25,7 @@ const AppRoute = ({
} }
}, [rest.name, rest.logDisable, rest.location.pathname]); }, [rest.name, rest.logDisable, rest.location.pathname]);
return ( return (
<Route <SentryRoute
{...rest} {...rest}
render={props => { render={props => {
return <Component {...props}></Component>; return <Component {...props}></Component>;

View File

@ -1,42 +1,81 @@
import BaseWidget, { WidgetProps } from "widgets/BaseWidget"; import BaseWidget, { WidgetProps } from "widgets/BaseWidget";
import { WidgetTypes } from "constants/WidgetConstants"; import { WidgetTypes } from "constants/WidgetConstants";
import ContainerWidget, { ContainerWidgetProps } from "widgets/ContainerWidget"; import ContainerWidget, {
import TextWidget, { TextWidgetProps } from "widgets/TextWidget"; ContainerWidgetProps,
import InputWidget, { InputWidgetProps } from "widgets/InputWidget"; ProfiledContainerWidget,
import CheckboxWidget, { CheckboxWidgetProps } from "widgets/CheckboxWidget"; } from "widgets/ContainerWidget";
import TextWidget, {
TextWidgetProps,
ProfiledTextWidget,
} from "widgets/TextWidget";
import InputWidget, {
InputWidgetProps,
ProfiledInputWidget,
} from "widgets/InputWidget";
import CheckboxWidget, {
CheckboxWidgetProps,
ProfiledCheckboxWidget,
} from "widgets/CheckboxWidget";
import RadioGroupWidget, { import RadioGroupWidget, {
RadioGroupWidgetProps, RadioGroupWidgetProps,
ProfiledRadioGroupWidget,
} from "widgets/RadioGroupWidget"; } from "widgets/RadioGroupWidget";
import WidgetFactory from "./WidgetFactory"; import WidgetFactory from "./WidgetFactory";
import React from "react"; import React from "react";
import ButtonWidget, { ButtonWidgetProps } from "widgets/ButtonWidget"; import ButtonWidget, {
import DropdownWidget, { DropdownWidgetProps } from "widgets/DropdownWidget"; ButtonWidgetProps,
import ImageWidget, { ImageWidgetProps } from "widgets/ImageWidget"; ProfiledButtonWidget,
import TableWidget, { TableWidgetProps } from "widgets/TableWidget"; } from "widgets/ButtonWidget";
import DropdownWidget, {
DropdownWidgetProps,
ProfiledDropDownWidget,
} from "widgets/DropdownWidget";
import ImageWidget, {
ImageWidgetProps,
ProfiledImageWidget,
} from "widgets/ImageWidget";
import TableWidget, {
TableWidgetProps,
ProfiledTableWidget,
} from "widgets/TableWidget";
import TabsWidget, { import TabsWidget, {
TabsWidgetProps, TabsWidgetProps,
TabContainerWidgetProps, TabContainerWidgetProps,
ProfiledTabsWidget,
} from "widgets/TabsWidget"; } from "widgets/TabsWidget";
import ModalWidget, { ModalWidgetProps } from "widgets/ModalWidget"; import { ModalWidgetProps, ProfiledModalWidget } from "widgets/ModalWidget";
import RichTextEditorWidget, { import RichTextEditorWidget, {
RichTextEditorWidgetProps, RichTextEditorWidgetProps,
ProfiledRichTextEditorWidget,
} from "widgets/RichTextEditorWidget"; } from "widgets/RichTextEditorWidget";
import ChartWidget, { ChartWidgetProps } from "widgets/ChartWidget"; import ChartWidget, {
import MapWidget, { MapWidgetProps } from "widgets/MapWidget"; ChartWidgetProps,
ProfiledChartWidget,
} from "widgets/ChartWidget";
import MapWidget, {
MapWidgetProps,
ProfiledMapWidget,
} from "widgets/MapWidget";
import FilePickerWidget, { import FilePickerWidget, {
FilePickerWidgetProps, FilePickerWidgetProps,
ProfiledFilePickerWidget,
} from "widgets/FilepickerWidget"; } from "widgets/FilepickerWidget";
import DatePickerWidget, { import DatePickerWidget, {
DatePickerWidgetProps, DatePickerWidgetProps,
ProfiledDatePickerWidget,
} from "widgets/DatePickerWidget"; } from "widgets/DatePickerWidget";
import FormWidget from "widgets/FormWidget"; import FormWidget, { ProfiledFormWidget } from "widgets/FormWidget";
import FormButtonWidget, { import FormButtonWidget, {
FormButtonWidgetProps, FormButtonWidgetProps,
ProfiledFormButtonWidget,
} from "widgets/FormButtonWidget"; } from "widgets/FormButtonWidget";
import IconWidget, { IconWidgetProps } from "widgets/IconWidget"; import IconWidget, {
IconWidgetProps,
ProfiledIconWidget,
} from "widgets/IconWidget";
import CanvasWidget from "widgets/CanvasWidget"; import CanvasWidget, { ProfiledCanvasWidget } from "widgets/CanvasWidget";
export default class WidgetBuilderRegistry { export default class WidgetBuilderRegistry {
static registerWidgetBuilders() { static registerWidgetBuilders() {
WidgetFactory.registerWidgetBuilder( WidgetFactory.registerWidgetBuilder(
@ -45,7 +84,7 @@ export default class WidgetBuilderRegistry {
buildWidget( buildWidget(
widgetData: ContainerWidgetProps<WidgetProps>, widgetData: ContainerWidgetProps<WidgetProps>,
): JSX.Element { ): JSX.Element {
return <ContainerWidget {...widgetData} />; return <ProfiledContainerWidget {...widgetData} />;
}, },
}, },
ContainerWidget.getPropertyValidationMap(), ContainerWidget.getPropertyValidationMap(),
@ -59,7 +98,7 @@ export default class WidgetBuilderRegistry {
"TEXT_WIDGET", "TEXT_WIDGET",
{ {
buildWidget(widgetData: TextWidgetProps): JSX.Element { buildWidget(widgetData: TextWidgetProps): JSX.Element {
return <TextWidget {...widgetData} />; return <ProfiledTextWidget {...widgetData} />;
}, },
}, },
TextWidget.getPropertyValidationMap(), TextWidget.getPropertyValidationMap(),
@ -73,7 +112,7 @@ export default class WidgetBuilderRegistry {
"BUTTON_WIDGET", "BUTTON_WIDGET",
{ {
buildWidget(widgetData: ButtonWidgetProps): JSX.Element { buildWidget(widgetData: ButtonWidgetProps): JSX.Element {
return <ButtonWidget {...widgetData} />; return <ProfiledButtonWidget {...widgetData} />;
}, },
}, },
ButtonWidget.getPropertyValidationMap(), ButtonWidget.getPropertyValidationMap(),
@ -87,7 +126,7 @@ export default class WidgetBuilderRegistry {
"INPUT_WIDGET", "INPUT_WIDGET",
{ {
buildWidget(widgetData: InputWidgetProps): JSX.Element { buildWidget(widgetData: InputWidgetProps): JSX.Element {
return <InputWidget {...widgetData} />; return <ProfiledInputWidget {...widgetData} />;
}, },
}, },
InputWidget.getPropertyValidationMap(), InputWidget.getPropertyValidationMap(),
@ -101,7 +140,7 @@ export default class WidgetBuilderRegistry {
"CHECKBOX_WIDGET", "CHECKBOX_WIDGET",
{ {
buildWidget(widgetData: CheckboxWidgetProps): JSX.Element { buildWidget(widgetData: CheckboxWidgetProps): JSX.Element {
return <CheckboxWidget {...widgetData} />; return <ProfiledCheckboxWidget {...widgetData} />;
}, },
}, },
CheckboxWidget.getPropertyValidationMap(), CheckboxWidget.getPropertyValidationMap(),
@ -115,7 +154,7 @@ export default class WidgetBuilderRegistry {
"DROP_DOWN_WIDGET", "DROP_DOWN_WIDGET",
{ {
buildWidget(widgetData: DropdownWidgetProps): JSX.Element { buildWidget(widgetData: DropdownWidgetProps): JSX.Element {
return <DropdownWidget {...widgetData} />; return <ProfiledDropDownWidget {...widgetData} />;
}, },
}, },
DropdownWidget.getPropertyValidationMap(), DropdownWidget.getPropertyValidationMap(),
@ -129,7 +168,7 @@ export default class WidgetBuilderRegistry {
"RADIO_GROUP_WIDGET", "RADIO_GROUP_WIDGET",
{ {
buildWidget(widgetData: RadioGroupWidgetProps): JSX.Element { buildWidget(widgetData: RadioGroupWidgetProps): JSX.Element {
return <RadioGroupWidget {...widgetData} />; return <ProfiledRadioGroupWidget {...widgetData} />;
}, },
}, },
RadioGroupWidget.getPropertyValidationMap(), RadioGroupWidget.getPropertyValidationMap(),
@ -143,7 +182,7 @@ export default class WidgetBuilderRegistry {
"IMAGE_WIDGET", "IMAGE_WIDGET",
{ {
buildWidget(widgetData: ImageWidgetProps): JSX.Element { buildWidget(widgetData: ImageWidgetProps): JSX.Element {
return <ImageWidget {...widgetData} />; return <ProfiledImageWidget {...widgetData} />;
}, },
}, },
ImageWidget.getPropertyValidationMap(), ImageWidget.getPropertyValidationMap(),
@ -156,7 +195,7 @@ export default class WidgetBuilderRegistry {
"TABLE_WIDGET", "TABLE_WIDGET",
{ {
buildWidget(widgetData: TableWidgetProps): JSX.Element { buildWidget(widgetData: TableWidgetProps): JSX.Element {
return <TableWidget {...widgetData} />; return <ProfiledTableWidget {...widgetData} />;
}, },
}, },
TableWidget.getPropertyValidationMap(), TableWidget.getPropertyValidationMap(),
@ -169,7 +208,7 @@ export default class WidgetBuilderRegistry {
"FILE_PICKER_WIDGET", "FILE_PICKER_WIDGET",
{ {
buildWidget(widgetData: FilePickerWidgetProps): JSX.Element { buildWidget(widgetData: FilePickerWidgetProps): JSX.Element {
return <FilePickerWidget {...widgetData} />; return <ProfiledFilePickerWidget {...widgetData} />;
}, },
}, },
FilePickerWidget.getPropertyValidationMap(), FilePickerWidget.getPropertyValidationMap(),
@ -182,7 +221,7 @@ export default class WidgetBuilderRegistry {
"DATE_PICKER_WIDGET", "DATE_PICKER_WIDGET",
{ {
buildWidget(widgetData: DatePickerWidgetProps): JSX.Element { buildWidget(widgetData: DatePickerWidgetProps): JSX.Element {
return <DatePickerWidget {...widgetData} />; return <ProfiledDatePickerWidget {...widgetData} />;
}, },
}, },
DatePickerWidget.getPropertyValidationMap(), DatePickerWidget.getPropertyValidationMap(),
@ -197,7 +236,7 @@ export default class WidgetBuilderRegistry {
buildWidget( buildWidget(
widgetProps: TabsWidgetProps<TabContainerWidgetProps>, widgetProps: TabsWidgetProps<TabContainerWidgetProps>,
): JSX.Element { ): JSX.Element {
return <TabsWidget {...widgetProps} />; return <ProfiledTabsWidget {...widgetProps} />;
}, },
}, },
TabsWidget.getPropertyValidationMap(), TabsWidget.getPropertyValidationMap(),
@ -210,7 +249,7 @@ export default class WidgetBuilderRegistry {
WidgetTypes.MODAL_WIDGET, WidgetTypes.MODAL_WIDGET,
{ {
buildWidget(widgetProps: ModalWidgetProps): JSX.Element { buildWidget(widgetProps: ModalWidgetProps): JSX.Element {
return <ModalWidget {...widgetProps} />; return <ProfiledModalWidget {...widgetProps} />;
}, },
}, },
BaseWidget.getPropertyValidationMap(), BaseWidget.getPropertyValidationMap(),
@ -223,7 +262,7 @@ export default class WidgetBuilderRegistry {
"RICH_TEXT_EDITOR_WIDGET", "RICH_TEXT_EDITOR_WIDGET",
{ {
buildWidget(widgetData: RichTextEditorWidgetProps): JSX.Element { buildWidget(widgetData: RichTextEditorWidgetProps): JSX.Element {
return <RichTextEditorWidget {...widgetData} />; return <ProfiledRichTextEditorWidget {...widgetData} />;
}, },
}, },
RichTextEditorWidget.getPropertyValidationMap(), RichTextEditorWidget.getPropertyValidationMap(),
@ -236,7 +275,7 @@ export default class WidgetBuilderRegistry {
"CHART_WIDGET", "CHART_WIDGET",
{ {
buildWidget(widgetData: ChartWidgetProps): JSX.Element { buildWidget(widgetData: ChartWidgetProps): JSX.Element {
return <ChartWidget {...widgetData} />; return <ProfiledChartWidget {...widgetData} />;
}, },
}, },
ChartWidget.getPropertyValidationMap(), ChartWidget.getPropertyValidationMap(),
@ -251,7 +290,7 @@ export default class WidgetBuilderRegistry {
buildWidget( buildWidget(
widgetProps: ContainerWidgetProps<WidgetProps>, widgetProps: ContainerWidgetProps<WidgetProps>,
): JSX.Element { ): JSX.Element {
return <FormWidget {...widgetProps} />; return <ProfiledFormWidget {...widgetProps} />;
}, },
}, },
FormWidget.getPropertyValidationMap(), FormWidget.getPropertyValidationMap(),
@ -265,7 +304,7 @@ export default class WidgetBuilderRegistry {
"FORM_BUTTON_WIDGET", "FORM_BUTTON_WIDGET",
{ {
buildWidget(widgetProps: FormButtonWidgetProps): JSX.Element { buildWidget(widgetProps: FormButtonWidgetProps): JSX.Element {
return <FormButtonWidget {...widgetProps} />; return <ProfiledFormButtonWidget {...widgetProps} />;
}, },
}, },
FormButtonWidget.getPropertyValidationMap(), FormButtonWidget.getPropertyValidationMap(),
@ -279,7 +318,7 @@ export default class WidgetBuilderRegistry {
"MAP_WIDGET", "MAP_WIDGET",
{ {
buildWidget(widgetProps: MapWidgetProps): JSX.Element { buildWidget(widgetProps: MapWidgetProps): JSX.Element {
return <MapWidget {...widgetProps} />; return <ProfiledMapWidget {...widgetProps} />;
}, },
}, },
MapWidget.getPropertyValidationMap(), MapWidget.getPropertyValidationMap(),
@ -295,7 +334,7 @@ export default class WidgetBuilderRegistry {
buildWidget( buildWidget(
widgetData: ContainerWidgetProps<WidgetProps>, widgetData: ContainerWidgetProps<WidgetProps>,
): JSX.Element { ): JSX.Element {
return <CanvasWidget {...widgetData} />; return <ProfiledCanvasWidget {...widgetData} />;
}, },
}, },
CanvasWidget.getPropertyValidationMap(), CanvasWidget.getPropertyValidationMap(),
@ -309,7 +348,7 @@ export default class WidgetBuilderRegistry {
WidgetTypes.ICON_WIDGET, WidgetTypes.ICON_WIDGET,
{ {
buildWidget(widgetProps: IconWidgetProps): JSX.Element { buildWidget(widgetProps: IconWidgetProps): JSX.Element {
return <IconWidget {...widgetProps} />; return <ProfiledIconWidget {...widgetProps} />;
}, },
}, },
IconWidget.getPropertyValidationMap(), IconWidget.getPropertyValidationMap(),

View File

@ -11,6 +11,7 @@ import {
} from "utils/ValidationFactory"; } from "utils/ValidationFactory";
import { VALIDATION_TYPES } from "constants/WidgetValidation"; import { VALIDATION_TYPES } from "constants/WidgetValidation";
import { TriggerPropertiesMap } from "utils/WidgetFactory"; import { TriggerPropertiesMap } from "utils/WidgetFactory";
import * as Sentry from "@sentry/react";
class ButtonWidget extends BaseWidget<ButtonWidgetProps, ButtonWidgetState> { class ButtonWidget extends BaseWidget<ButtonWidgetProps, ButtonWidgetState> {
onButtonClickBound: (event: React.MouseEvent<HTMLElement>) => void; onButtonClickBound: (event: React.MouseEvent<HTMLElement>) => void;
@ -100,3 +101,4 @@ interface ButtonWidgetState extends WidgetState {
} }
export default ButtonWidget; export default ButtonWidget;
export const ProfiledButtonWidget = Sentry.withProfiler(ButtonWidget);

View File

@ -5,6 +5,7 @@ import { WidgetTypes, GridDefaults } from "constants/WidgetConstants";
import DropTargetComponent from "components/editorComponents/DropTargetComponent"; import DropTargetComponent from "components/editorComponents/DropTargetComponent";
import { getCanvasSnapRows } from "utils/WidgetPropsUtils"; import { getCanvasSnapRows } from "utils/WidgetPropsUtils";
import { getCanvasClassName } from "utils/generators"; import { getCanvasClassName } from "utils/generators";
import * as Sentry from "@sentry/react";
class CanvasWidget extends ContainerWidget { class CanvasWidget extends ContainerWidget {
getWidgetType = () => { getWidgetType = () => {
@ -61,3 +62,4 @@ class CanvasWidget extends ContainerWidget {
} }
export default CanvasWidget; export default CanvasWidget;
export const ProfiledCanvasWidget = Sentry.withProfiler(CanvasWidget);

View File

@ -4,6 +4,7 @@ import { WidgetType } from "constants/WidgetConstants";
import { WidgetPropertyValidationType } from "utils/ValidationFactory"; import { WidgetPropertyValidationType } from "utils/ValidationFactory";
import { VALIDATION_TYPES } from "constants/WidgetValidation"; import { VALIDATION_TYPES } from "constants/WidgetValidation";
import Skeleton from "components/utils/Skeleton"; import Skeleton from "components/utils/Skeleton";
import * as Sentry from "@sentry/react";
const ChartComponent = lazy(() => const ChartComponent = lazy(() =>
import( import(
@ -74,3 +75,4 @@ export interface ChartWidgetProps extends WidgetProps {
} }
export default ChartWidget; export default ChartWidget;
export const ProfiledChartWidget = Sentry.withProfiler(ChartWidget);

View File

@ -12,6 +12,7 @@ import {
TriggerPropertiesMap, TriggerPropertiesMap,
DerivedPropertiesMap, DerivedPropertiesMap,
} from "utils/WidgetFactory"; } from "utils/WidgetFactory";
import * as Sentry from "@sentry/react";
class CheckboxWidget extends BaseWidget<CheckboxWidgetProps, WidgetState> { class CheckboxWidget extends BaseWidget<CheckboxWidgetProps, WidgetState> {
static getPropertyValidationMap(): WidgetPropertyValidationType { static getPropertyValidationMap(): WidgetPropertyValidationType {
@ -87,3 +88,4 @@ export interface CheckboxWidgetProps extends WidgetProps {
} }
export default CheckboxWidget; export default CheckboxWidget;
export const ProfiledCheckboxWidget = Sentry.withProfiler(CheckboxWidget);

View File

@ -13,6 +13,7 @@ import {
} from "constants/WidgetConstants"; } from "constants/WidgetConstants";
import BaseWidget, { WidgetProps, WidgetState } from "./BaseWidget"; import BaseWidget, { WidgetProps, WidgetState } from "./BaseWidget";
import * as Sentry from "@sentry/react";
class ContainerWidget extends BaseWidget< class ContainerWidget extends BaseWidget<
ContainerWidgetProps<WidgetProps>, ContainerWidgetProps<WidgetProps>,
@ -98,3 +99,4 @@ export interface ContainerWidgetProps<T extends WidgetProps>
} }
export default ContainerWidget; export default ContainerWidget;
export const ProfiledContainerWidget = Sentry.withProfiler(ContainerWidget);

View File

@ -12,6 +12,7 @@ import {
DerivedPropertiesMap, DerivedPropertiesMap,
TriggerPropertiesMap, TriggerPropertiesMap,
} from "utils/WidgetFactory"; } from "utils/WidgetFactory";
import * as Sentry from "@sentry/react";
class DatePickerWidget extends BaseWidget<DatePickerWidgetProps, WidgetState> { class DatePickerWidget extends BaseWidget<DatePickerWidgetProps, WidgetState> {
static getPropertyValidationMap(): WidgetPropertyValidationType { static getPropertyValidationMap(): WidgetPropertyValidationType {
@ -105,3 +106,4 @@ export interface DatePickerWidgetProps extends WidgetProps {
} }
export default DatePickerWidget; export default DatePickerWidget;
export const ProfiledDatePickerWidget = Sentry.withProfiler(DatePickerWidget);

View File

@ -13,6 +13,7 @@ import { TriggerPropertiesMap } from "utils/WidgetFactory";
import { VALIDATORS } from "utils/Validators"; import { VALIDATORS } from "utils/Validators";
import { DataTree } from "entities/DataTree/dataTreeFactory"; import { DataTree } from "entities/DataTree/dataTreeFactory";
import { Intent as BlueprintIntent } from "@blueprintjs/core"; import { Intent as BlueprintIntent } from "@blueprintjs/core";
import * as Sentry from "@sentry/react";
class DropdownWidget extends BaseWidget<DropdownWidgetProps, WidgetState> { class DropdownWidget extends BaseWidget<DropdownWidgetProps, WidgetState> {
static getPropertyValidationMap(): WidgetPropertyValidationType { static getPropertyValidationMap(): WidgetPropertyValidationType {
@ -207,3 +208,4 @@ export interface DropdownWidgetProps extends WidgetProps {
} }
export default DropdownWidget; export default DropdownWidget;
export const ProfiledDropDownWidget = Sentry.withProfiler(DropdownWidget);

View File

@ -20,6 +20,7 @@ import {
import Dashboard from "@uppy/dashboard"; import Dashboard from "@uppy/dashboard";
import shallowequal from "shallowequal"; import shallowequal from "shallowequal";
import _ from "lodash"; import _ from "lodash";
import * as Sentry from "@sentry/react";
class FilePickerWidget extends BaseWidget< class FilePickerWidget extends BaseWidget<
FilePickerWidgetProps, FilePickerWidgetProps,
@ -231,3 +232,4 @@ export interface FilePickerWidgetProps extends WidgetProps {
} }
export default FilePickerWidget; export default FilePickerWidget;
export const ProfiledFilePickerWidget = Sentry.withProfiler(FilePickerWidget);

View File

@ -11,6 +11,7 @@ import {
} from "utils/ValidationFactory"; } from "utils/ValidationFactory";
import { VALIDATION_TYPES } from "constants/WidgetValidation"; import { VALIDATION_TYPES } from "constants/WidgetValidation";
import { TriggerPropertiesMap } from "utils/WidgetFactory"; import { TriggerPropertiesMap } from "utils/WidgetFactory";
import * as Sentry from "@sentry/react";
class FormButtonWidget extends BaseWidget< class FormButtonWidget extends BaseWidget<
FormButtonWidgetProps, FormButtonWidgetProps,
@ -119,3 +120,4 @@ export interface FormButtonWidgetState extends WidgetState {
} }
export default FormButtonWidget; export default FormButtonWidget;
export const ProfiledFormButtonWidget = Sentry.withProfiler(FormButtonWidget);

View File

@ -5,6 +5,7 @@ import { WidgetType } from "constants/WidgetConstants";
import ContainerWidget, { ContainerWidgetProps } from "widgets/ContainerWidget"; import ContainerWidget, { ContainerWidgetProps } from "widgets/ContainerWidget";
import { ContainerComponentProps } from "components/designSystems/appsmith/ContainerComponent"; import { ContainerComponentProps } from "components/designSystems/appsmith/ContainerComponent";
import shallowEqual from "shallowequal"; import shallowEqual from "shallowequal";
import * as Sentry from "@sentry/react";
class FormWidget extends ContainerWidget { class FormWidget extends ContainerWidget {
checkInvalidChildren = (children: WidgetProps[]): boolean => { checkInvalidChildren = (children: WidgetProps[]): boolean => {
@ -72,3 +73,4 @@ export interface FormWidgetProps extends ContainerComponentProps {
} }
export default FormWidget; export default FormWidget;
export const ProfiledFormWidget = Sentry.withProfiler(FormWidget);

View File

@ -7,6 +7,7 @@ import IconComponent, {
IconType, IconType,
} from "components/designSystems/appsmith/IconComponent"; } from "components/designSystems/appsmith/IconComponent";
import { EventType, ExecutionResult } from "constants/ActionConstants"; import { EventType, ExecutionResult } from "constants/ActionConstants";
import * as Sentry from "@sentry/react";
const IconWrapper = styled.div` const IconWrapper = styled.div`
display: flex; display: flex;
@ -69,3 +70,4 @@ export interface IconWidgetProps extends WidgetProps {
} }
export default IconWidget; export default IconWidget;
export const ProfiledIconWidget = Sentry.withProfiler(IconWidget);

View File

@ -7,6 +7,7 @@ import {
BASE_WIDGET_VALIDATION, BASE_WIDGET_VALIDATION,
} from "utils/ValidationFactory"; } from "utils/ValidationFactory";
import { VALIDATION_TYPES } from "constants/WidgetValidation"; import { VALIDATION_TYPES } from "constants/WidgetValidation";
import * as Sentry from "@sentry/react";
class ImageWidget extends BaseWidget<ImageWidgetProps, WidgetState> { class ImageWidget extends BaseWidget<ImageWidgetProps, WidgetState> {
static getPropertyValidationMap(): WidgetPropertyValidationType { static getPropertyValidationMap(): WidgetPropertyValidationType {
@ -42,3 +43,4 @@ export interface ImageWidgetProps extends WidgetProps {
} }
export default ImageWidget; export default ImageWidget;
export const ProfiledImageWidget = Sentry.withProfiler(ImageWidget);

View File

@ -16,6 +16,7 @@ import {
TriggerPropertiesMap, TriggerPropertiesMap,
} from "utils/WidgetFactory"; } from "utils/WidgetFactory";
import _ from "lodash"; import _ from "lodash";
import * as Sentry from "@sentry/react";
class InputWidget extends BaseWidget<InputWidgetProps, InputWidgetState> { class InputWidget extends BaseWidget<InputWidgetProps, InputWidgetState> {
debouncedHandleTextChanged = _.debounce( debouncedHandleTextChanged = _.debounce(
@ -221,3 +222,4 @@ interface InputWidgetState extends WidgetState {
} }
export default InputWidget; export default InputWidget;
export const ProfiledInputWidget = Sentry.withProfiler(InputWidget);

View File

@ -8,6 +8,7 @@ import { EventType } from "constants/ActionConstants";
import { TriggerPropertiesMap } from "utils/WidgetFactory"; import { TriggerPropertiesMap } from "utils/WidgetFactory";
import { getAppsmithConfigs } from "configs"; import { getAppsmithConfigs } from "configs";
import styled from "styled-components"; import styled from "styled-components";
import * as Sentry from "@sentry/react";
const { google } = getAppsmithConfigs(); const { google } = getAppsmithConfigs();
@ -198,3 +199,4 @@ export interface MapWidgetProps extends WidgetProps {
} }
export default MapWidget; export default MapWidget;
export const ProfiledMapWidget = Sentry.withProfiler(MapWidget);

View File

@ -11,6 +11,7 @@ import {
GridDefaults, GridDefaults,
} from "constants/WidgetConstants"; } from "constants/WidgetConstants";
import { generateClassName } from "utils/generators"; import { generateClassName } from "utils/generators";
import * as Sentry from "@sentry/react";
const MODAL_SIZE: { [id: string]: { width: number; height: number } } = { const MODAL_SIZE: { [id: string]: { width: number; height: number } } = {
MODAL_SMALL: { MODAL_SMALL: {
@ -126,5 +127,8 @@ const mapDispatchToProps = (dispatch: any) => ({
}); });
}, },
}); });
export default ModalWidget;
export default connect(null, mapDispatchToProps)(ModalWidget); export const ProfiledModalWidget = connect(
null,
mapDispatchToProps,
)(Sentry.withProfiler(ModalWidget));

View File

@ -9,6 +9,7 @@ import {
} from "utils/ValidationFactory"; } from "utils/ValidationFactory";
import { VALIDATION_TYPES } from "constants/WidgetValidation"; import { VALIDATION_TYPES } from "constants/WidgetValidation";
import { TriggerPropertiesMap } from "utils/WidgetFactory"; import { TriggerPropertiesMap } from "utils/WidgetFactory";
import * as Sentry from "@sentry/react";
class RadioGroupWidget extends BaseWidget<RadioGroupWidgetProps, WidgetState> { class RadioGroupWidget extends BaseWidget<RadioGroupWidgetProps, WidgetState> {
static getPropertyValidationMap(): WidgetPropertyValidationType { static getPropertyValidationMap(): WidgetPropertyValidationType {
@ -96,3 +97,4 @@ export interface RadioGroupWidgetProps extends WidgetProps {
} }
export default RadioGroupWidget; export default RadioGroupWidget;
export const ProfiledRadioGroupWidget = Sentry.withProfiler(RadioGroupWidget);

View File

@ -9,6 +9,7 @@ import {
DerivedPropertiesMap, DerivedPropertiesMap,
} from "utils/WidgetFactory"; } from "utils/WidgetFactory";
import Skeleton from "components/utils/Skeleton"; import Skeleton from "components/utils/Skeleton";
import * as Sentry from "@sentry/react";
const RichtextEditorComponent = lazy(() => const RichtextEditorComponent = lazy(() =>
import( import(
@ -103,3 +104,6 @@ export interface RichTextEditorWidgetProps extends WidgetProps {
} }
export default RichTextEditorWidget; export default RichTextEditorWidget;
export const ProfiledRichTextEditorWidget = Sentry.withProfiler(
RichTextEditorWidget,
);

View File

@ -21,6 +21,7 @@ import { ColumnAction } from "components/propertyControls/ColumnActionSelectorCo
import { TriggerPropertiesMap } from "utils/WidgetFactory"; import { TriggerPropertiesMap } from "utils/WidgetFactory";
import Skeleton from "components/utils/Skeleton"; import Skeleton from "components/utils/Skeleton";
import moment from "moment"; import moment from "moment";
import * as Sentry from "@sentry/react";
const ReactTableComponent = lazy(() => const ReactTableComponent = lazy(() =>
import("components/designSystems/appsmith/ReactTableComponent"), import("components/designSystems/appsmith/ReactTableComponent"),
); );
@ -612,3 +613,4 @@ export interface TableWidgetProps extends WidgetProps {
} }
export default TableWidget; export default TableWidget;
export const ProfiledTableWidget = Sentry.withProfiler(TableWidget);

View File

@ -9,6 +9,7 @@ import { VALIDATION_TYPES } from "constants/WidgetValidation";
import _ from "lodash"; import _ from "lodash";
import { EventType } from "constants/ActionConstants"; import { EventType } from "constants/ActionConstants";
import { WidgetOperations } from "widgets/BaseWidget"; import { WidgetOperations } from "widgets/BaseWidget";
import * as Sentry from "@sentry/react";
class TabsWidget extends BaseWidget< class TabsWidget extends BaseWidget<
TabsWidgetProps<TabContainerWidgetProps>, TabsWidgetProps<TabContainerWidgetProps>,
@ -217,3 +218,4 @@ export interface TabsWidgetProps<T extends TabContainerWidgetProps>
} }
export default TabsWidget; export default TabsWidget;
export const ProfiledTabsWidget = Sentry.withProfiler(TabsWidget);

View File

@ -8,6 +8,7 @@ import {
BASE_WIDGET_VALIDATION, BASE_WIDGET_VALIDATION,
} from "utils/ValidationFactory"; } from "utils/ValidationFactory";
import { DerivedPropertiesMap } from "utils/WidgetFactory"; import { DerivedPropertiesMap } from "utils/WidgetFactory";
import * as Sentry from "@sentry/react";
const LINE_HEIGHTS: { [key in TextStyle]: number } = { const LINE_HEIGHTS: { [key in TextStyle]: number } = {
// The following values are arrived at by multiplying line-height with font-size // The following values are arrived at by multiplying line-height with font-size
@ -72,3 +73,4 @@ export interface TextWidgetProps extends WidgetProps {
} }
export default TextWidget; export default TextWidget;
export const ProfiledTextWidget = Sentry.withProfiler(TextWidget);

View File

@ -2719,14 +2719,14 @@
dependencies: dependencies:
any-observable "^0.3.0" any-observable "^0.3.0"
"@sentry/browser@5.22.0": "@sentry/browser@5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.22.0.tgz#d019fddbd885a1b735436b573067e79c81909043" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.22.2.tgz#c37c61c8612a169059ddcd8c08cd09441da7776c"
integrity sha512-+wsMegqvhdC4H/qlKvGFvYff9VIztENBiTHsSXqOHTFuVeQgyESbeHsJae2Fm4kuYDUtpAmUoIZe7cwwbPJNew== integrity sha512-kkNRFMcNErtWvz9WI0bG5Va2W+mRWhk5CxaJKWUMdMcGR2rIrl3D+kcMdpYDi9tNYPHUdUzTCb3vJQfO8o6TbA==
dependencies: dependencies:
"@sentry/core" "5.22.0" "@sentry/core" "5.22.2"
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
"@sentry/utils" "5.22.0" "@sentry/utils" "5.22.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/cli@^1.55.0": "@sentry/cli@^1.55.0":
@ -2740,69 +2740,69 @@
progress "^2.0.3" progress "^2.0.3"
proxy-from-env "^1.1.0" proxy-from-env "^1.1.0"
"@sentry/core@5.22.0": "@sentry/core@5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.22.0.tgz#2fa51c9f547e8b6d7ec820419c7880635f8648a5" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.22.2.tgz#3b57300d92c13163c26174311ad82482a08b9266"
integrity sha512-VV9qbjHDlfmpwEi59xS3GN2Fz0tsxKCB4rTqqUpvsM5BCOxV162Q0f3MCwP1nBRSk5DnOvKuTiNAWg7b3kpX+g== integrity sha512-Tj3FlHiqK8uveKh56QP3PhNNrH13LTWqN1TwRwE2B2FLiqwIHGmJsCQNfyslQdBAkNeGRnnQrQxqH53KeuJGGA==
dependencies: dependencies:
"@sentry/hub" "5.22.0" "@sentry/hub" "5.22.2"
"@sentry/minimal" "5.22.0" "@sentry/minimal" "5.22.2"
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
"@sentry/utils" "5.22.0" "@sentry/utils" "5.22.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/hub@5.22.0": "@sentry/hub@5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.22.0.tgz#b2bf2e99c9bd752605c63b606ab11431909ebe87" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.22.2.tgz#812c8250970e44c63ee2bf1f779777d32dd88f54"
integrity sha512-OuKaEGsreQxHCKXcyQipygYxBD17PaBH0vqzDWl3d+/ydZbhpl0e5kjeHviJiZ6JWZ2cIZFvAzfvNVQoymF8BQ== integrity sha512-6McBsonfpOY5hzlowzDfdLZklFQ1wWTGtiA0eByKxS/H1GePJc+UUSsu6D3bZJG0bIjFoq5vxLQFSZq6C7BPlQ==
dependencies: dependencies:
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
"@sentry/utils" "5.22.0" "@sentry/utils" "5.22.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/minimal@5.22.0": "@sentry/minimal@5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.22.0.tgz#7e24625a84af37ef2d2317f6f691dab27ff2ca02" resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.22.2.tgz#bb050a49158c48596094184cff2806ce8cb63c9d"
integrity sha512-iq7wPxVdPCOS2gDw3PENO66wOfMv6mq+Nup7EmTteKtO7CUVqVFIXjXZYBHMG49sZWMCT+ZsPI/a9xCDaJytBQ== integrity sha512-jfth6bY19FXE/kQc6hLBCKg5CjfX1MG+weyEXnPFstCb5JFMvSt6YPRI3OsY1hG3rQLxTX0mVSbe2YrBJE5kXA==
dependencies: dependencies:
"@sentry/hub" "5.22.0" "@sentry/hub" "5.22.2"
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/react@^5.22.0": "@sentry/react@^5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.22.0.tgz#d1b312035f21302ce6877d62b83d12c793275043" resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.22.2.tgz#8a0f9ee475659faf780080569ca7c7c5cb92b218"
integrity sha512-Z7RCb9fCiR4bSe0PLyA8w/v7tvhpoA9G5x5LAncJuxR5ihnwVa2RYt5e/fl5vIazh2EuB6pveBPvpm4ntpmYeQ== integrity sha512-DgpLWZV5htumjXaE13E/KMODwKyr56bNtk1gaTOPbm368b6zdcM/bwutdNQSTuNlhkJ4bhnhpVs7OzErJkcDLw==
dependencies: dependencies:
"@sentry/browser" "5.22.0" "@sentry/browser" "5.22.2"
"@sentry/minimal" "5.22.0" "@sentry/minimal" "5.22.2"
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
"@sentry/utils" "5.22.0" "@sentry/utils" "5.22.2"
hoist-non-react-statics "^3.3.2" hoist-non-react-statics "^3.3.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/tracing@^5.22.0": "@sentry/tracing@^5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.22.0.tgz#d9cb85d22340b30afe2a8554c6d66742236cde56" resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.22.2.tgz#6a326bf43b3491c3e462330f8e7d6cd52a975a2d"
integrity sha512-dtDX9LDC/yAckXK+cifPt7vu/JWUiGFkalh5m/WgkhV2eveZ1o+bbv9YM0em8t4Kz3lOmJM/R9iO6YaeJKsqlQ== integrity sha512-M4F4CN85luWoHBuBiQMk2/dtpn5L2CriBTcLsKQNkA/fk6lv8CbE1WZ/SkCMWzK4hxo5I2vSyzLlb2OwcMHmdQ==
dependencies: dependencies:
"@sentry/hub" "5.22.0" "@sentry/hub" "5.22.2"
"@sentry/minimal" "5.22.0" "@sentry/minimal" "5.22.2"
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
"@sentry/utils" "5.22.0" "@sentry/utils" "5.22.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/types@5.22.0": "@sentry/types@5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.22.0.tgz#7017dc5f36aa05b7042c3ef703a740b397db8230" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.22.2.tgz#32d7f82537afe7712971fd6222c7744f0d8a27fe"
integrity sha512-PAeOQ8yxTkeTdJSYbPw6Tb7Wtx7/MWggqH6qj2G41u1yCvOoPURhlmd3pSayad+lWs2qm2kjVdkJKbPVJ4kojQ== integrity sha512-Ko9pri0D0TNaSHocLVLQQZlnTtMXrBhP5AZYjB193aYqc1x52dFchQlhiKLEgyFCKjTEIlD/J9ZD7QkQoeYT+A==
"@sentry/utils@5.22.0": "@sentry/utils@5.22.2":
version "5.22.0" version "5.22.2"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.22.0.tgz#5b13fda94698fb1094535bc2b9b38a351894ba7e" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.22.2.tgz#7296cd9036e8d34638743a27fe8c6fe0e70db902"
integrity sha512-MvHB+PAVI4PAffZOiRhgODmj1CgmViO2257abGtBY2hM1wGqc6tmLw1mn6rF+fh+Id2UDfa4miIJL2VY1E2aaw== integrity sha512-HGpPohNgwRhR+7bf2OlziX84JVdwQAauesqcL4Y78e+U09+E06cQAEQkRIQJfn2Ai2NvVmMVhdj51v+AqmaAWQ==
dependencies: dependencies:
"@sentry/types" "5.22.0" "@sentry/types" "5.22.2"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/webpack-plugin@^1.12.1": "@sentry/webpack-plugin@^1.12.1":