Skip to content

Commit 3dc4c88

Browse files
committed
feat(crons/uptime): Move to insights top-level nav
1 parent 71a1b84 commit 3dc4c88

File tree

17 files changed

+89
-202
lines changed

17 files changed

+89
-202
lines changed

static/app/components/sidebar/index.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import {
3535
IconSiren,
3636
IconStats,
3737
IconTelescope,
38-
IconTimer,
3938
} from 'sentry/icons';
4039
import {t} from 'sentry/locale';
4140
import ConfigStore from 'sentry/stores/configStore';
@@ -269,16 +268,6 @@ function Sidebar() {
269268
/>
270269
);
271270

272-
const monitors = hasOrganization && (
273-
<SidebarItem
274-
{...sidebarItemProps}
275-
icon={<IconTimer />}
276-
label={t('Crons')}
277-
to={`/organizations/${organization.slug}/crons/`}
278-
id="crons"
279-
/>
280-
);
281-
282271
const replays = hasOrganization && (
283272
<Feature
284273
hookName="feature-disabled:replay-sidebar-item"
@@ -404,6 +393,22 @@ function Sidebar() {
404393
icon={<SubitemDot collapsed />}
405394
/>
406395
</AgentInsightsFeature>
396+
<SidebarItem
397+
{...sidebarItemProps}
398+
label={t('Crons')}
399+
to={`/organizations/${organization.slug}/${DOMAIN_VIEW_BASE_URL}/crons/`}
400+
id="performance-crons"
401+
icon={<SubitemDot collapsed />}
402+
/>
403+
<Feature features={['uptime']} organization={organization}>
404+
<SidebarItem
405+
{...sidebarItemProps}
406+
label={t('Uptime')}
407+
to={`/organizations/${organization.slug}/${DOMAIN_VIEW_BASE_URL}/uptime/`}
408+
id="performance-uptime"
409+
icon={<SubitemDot collapsed />}
410+
/>
411+
</Feature>
407412
</SidebarAccordion>
408413
</Feature>
409414
);
@@ -458,7 +463,6 @@ function Sidebar() {
458463

459464
<SidebarSection>
460465
{feedback}
461-
{monitors}
462466
{alerts}
463467
{dashboards}
464468
{releases}

static/app/routes.tsx

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,15 +1434,6 @@ function buildRoutes() {
14341434
</Fragment>
14351435
);
14361436

1437-
// XXX(epurkhiser): This is legacy until we remove crons from the sidebar
1438-
const cronsRoutes = (
1439-
<Route
1440-
path="/crons/"
1441-
component={make(() => import('sentry/views/monitors'))}
1442-
withOrgPath
1443-
/>
1444-
);
1445-
14461437
const replayChildRoutes = (
14471438
<Fragment>
14481439
<IndexRoute component={make(() => import('sentry/views/replays/list'))} />
@@ -1728,11 +1719,6 @@ function buildRoutes() {
17281719
)}
17291720
/>
17301721
</Route>
1731-
<Route path={`${MODULE_BASE_URLS[ModuleName.UPTIME]}/`}>
1732-
<IndexRoute
1733-
component={make(() => import('sentry/views/insights/uptime/views/overview'))}
1734-
/>
1735-
</Route>
17361722
<Route path={`${MODULE_BASE_URLS[ModuleName.AI]}/`}>
17371723
<IndexRoute
17381724
component={make(
@@ -1748,11 +1734,6 @@ function buildRoutes() {
17481734
)}
17491735
/>
17501736
</Route>
1751-
<Route path={`${MODULE_BASE_URLS[ModuleName.CRONS]}/`}>
1752-
<IndexRoute
1753-
component={make(() => import('sentry/views/insights/crons/views/overview'))}
1754-
/>
1755-
</Route>
17561737
<Route path={`${MODULE_BASE_URLS[ModuleName.SESSIONS]}/`}>
17571738
<IndexRoute
17581739
component={make(() => import('sentry/views/insights/sessions/views/overview'))}
@@ -1811,6 +1792,16 @@ function buildRoutes() {
18111792
<Route path="projects/" component={make(() => import('sentry/views/projects/'))}>
18121793
{projectsChildRoutes}
18131794
</Route>
1795+
<Route path="uptime/">
1796+
<IndexRoute
1797+
component={make(() => import('sentry/views/insights/uptime/views/overview'))}
1798+
/>
1799+
</Route>
1800+
<Route path="crons/">
1801+
<IndexRoute
1802+
component={make(() => import('sentry/views/insights/crons/views/overview'))}
1803+
/>
1804+
</Route>
18141805
</Route>
18151806
);
18161807

@@ -2454,7 +2445,6 @@ function buildRoutes() {
24542445
{issueRoutes}
24552446
{alertRoutes}
24562447
{codecovRoutes}
2457-
{cronsRoutes}
24582448
{replayRoutes}
24592449
{releasesRoutes}
24602450
{statsRoutes}

static/app/views/insights/common/components/modulesOnboarding.tsx

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -497,22 +497,6 @@ const EMPTY_STATE_CONTENT: Record<TitleableModuleNames, EmptyStateContent> = {
497497
],
498498
supportedSdks: ['android', 'flutter', 'apple-ios', 'react-native'],
499499
},
500-
// XXX(epurkhiser): Crons does not use the insights onboarding component.
501-
crons: {
502-
description: null,
503-
heading: null,
504-
imageSrc: null,
505-
valuePropDescription: null,
506-
valuePropPoints: [],
507-
},
508-
// XXX(epurkhiser): Uptime does not use the insights onboarding component.
509-
uptime: {
510-
description: null,
511-
heading: null,
512-
imageSrc: null,
513-
valuePropDescription: null,
514-
valuePropPoints: [],
515-
},
516500
sessions: {
517501
heading: t(`Get insights about your application's session health`),
518502
description: tct(

static/app/views/insights/common/queries/useHasFirstSpan.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ const excludedModuleNames = [
88
ModuleName.OTHER,
99
ModuleName.MOBILE_UI,
1010
ModuleName.MOBILE_VITALS,
11-
ModuleName.CRONS,
12-
ModuleName.UPTIME,
1311
ModuleName.SESSIONS,
1412
ModuleName.AGENTS,
1513
] as const;

static/app/views/insights/common/utils/useModuleURL.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {BASE_URL as AGENTS_BASE_URL} from 'sentry/views/insights/agentMonitoring
44
import {BASE_URL as RESOURCES_BASE_URL} from 'sentry/views/insights/browser/resources/settings';
55
import {BASE_URL as VITALS_BASE_URL} from 'sentry/views/insights/browser/webVitals/settings';
66
import {BASE_URL as CACHE_BASE_URL} from 'sentry/views/insights/cache/settings';
7-
import {BASE_URL as CRONS_BASE_URL} from 'sentry/views/insights/crons/settings';
87
import {BASE_URL as DB_BASE_URL} from 'sentry/views/insights/database/settings';
98
import {BASE_URL as HTTP_BASE_URL} from 'sentry/views/insights/http/settings';
109
import {BASE_URL as AI_BASE_URL} from 'sentry/views/insights/llmMonitoring/settings';
@@ -22,7 +21,6 @@ import {getModuleView} from 'sentry/views/insights/pages/utils';
2221
import {BASE_URL as QUEUE_BASE_URL} from 'sentry/views/insights/queues/settings';
2322
import {BASE_URL as SESSIONS_BASE_URL} from 'sentry/views/insights/sessions/settings';
2423
import {ModuleName} from 'sentry/views/insights/types';
25-
import {BASE_URL as UPTIME_BASE_URL} from 'sentry/views/insights/uptime/settings';
2624

2725
export const MODULE_BASE_URLS: Record<ModuleName, string> = {
2826
[ModuleName.DB]: DB_BASE_URL,
@@ -38,8 +36,6 @@ export const MODULE_BASE_URLS: Record<ModuleName, string> = {
3836
[ModuleName.MOBILE_UI]: MOBILE_UI_BASE_URL,
3937
[ModuleName.MOBILE_VITALS]: MOBILE_SCREENS_BASE_URL,
4038
[ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_BASE_URL,
41-
[ModuleName.CRONS]: CRONS_BASE_URL,
42-
[ModuleName.UPTIME]: UPTIME_BASE_URL,
4339
[ModuleName.SESSIONS]: SESSIONS_BASE_URL,
4440
[ModuleName.OTHER]: '',
4541
};

static/app/views/insights/common/views/spans/selectors/actionSelector.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,6 @@ const LABEL_FOR_MODULE_NAME: Record<ModuleName, ReactNode> = {
125125
screen_load: t('Action'),
126126
app_start: t('Action'),
127127
resource: t('Resource'),
128-
crons: t('Action'),
129-
uptime: t('Action'),
130128
other: t('Action'),
131129
'mobile-ui': t('Action'),
132130
'mobile-vitals': t('Action'),
Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
import {t} from 'sentry/locale';
22

3-
export const MODULE_TITLE = t('Cron Monitors');
4-
export const DATA_TYPE = t('Cron Check-In');
5-
export const DATA_TYPE_PLURAL = t('Cron Check-Ins');
6-
export const BASE_URL = 'crons';
7-
83
export const MODULE_DESCRIPTION = t(
94
'Scheduled monitors that check in on recurring jobs and tell you if they’re running on schedule, failing, or succeeding.'
105
);
116
export const MODULE_DOC_LINK = 'https://docs.sentry.io/product/crons/';
12-
13-
export const MODULE_FEATURES = [];
14-
export const MODULE_VISIBLE_FEATURES = [];

static/app/views/insights/crons/views/overview.tsx

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {deleteProjectProcessingErrorByType} from 'sentry/actionCreators/monitors
77
import GuideAnchor from 'sentry/components/assistant/guideAnchor';
88
import {Button} from 'sentry/components/core/button';
99
import {ButtonBar} from 'sentry/components/core/button/buttonBar';
10+
import FeedbackWidgetButton from 'sentry/components/feedback/widget/feedbackWidgetButton';
1011
import HookOrDefault from 'sentry/components/hookOrDefault';
1112
import * as Layout from 'sentry/components/layouts/thirds';
1213
import LoadingIndicator from 'sentry/components/loadingIndicator';
@@ -29,7 +30,6 @@ import useApi from 'sentry/utils/useApi';
2930
import {useLocation} from 'sentry/utils/useLocation';
3031
import {useNavigate} from 'sentry/utils/useNavigate';
3132
import useOrganization from 'sentry/utils/useOrganization';
32-
import {ModulePageProviders} from 'sentry/views/insights/common/components/modulePageProviders';
3333
import {
3434
CronsLandingPanel,
3535
isValidGuide,
@@ -40,19 +40,13 @@ import {OverviewTimeline} from 'sentry/views/insights/crons/components/overviewT
4040
import {OwnerFilter} from 'sentry/views/insights/crons/components/ownerFilter';
4141
import {MonitorProcessingErrors} from 'sentry/views/insights/crons/components/processingErrors/monitorProcessingErrors';
4242
import {makeMonitorListErrorsQueryKey} from 'sentry/views/insights/crons/components/processingErrors/utils';
43-
import {
44-
MODULE_DESCRIPTION,
45-
MODULE_DOC_LINK,
46-
MODULE_TITLE,
47-
} from 'sentry/views/insights/crons/settings';
43+
import {MODULE_DESCRIPTION, MODULE_DOC_LINK} from 'sentry/views/insights/crons/settings';
4844
import type {
4945
CheckinProcessingError,
5046
Monitor,
5147
ProcessingErrorType,
5248
} from 'sentry/views/insights/crons/types';
5349
import {makeMonitorListQueryKey} from 'sentry/views/insights/crons/utils';
54-
import {BackendHeader} from 'sentry/views/insights/pages/backend/backendPageHeader';
55-
import {ModuleName} from 'sentry/views/insights/types';
5650

5751
const CronsListPageHeader = HookOrDefault({
5852
hookName: 'component:crons-list-page-header',
@@ -108,19 +102,21 @@ function CronsOverview() {
108102
return (
109103
<Fragment>
110104
<CronsListPageHeader organization={organization} />
111-
<BackendHeader
112-
headerTitle={
113-
<Fragment>
114-
<GuideAnchor target="crons_backend_insights">{MODULE_TITLE}</GuideAnchor>
105+
<Layout.Header unified>
106+
<Layout.HeaderContent>
107+
<Layout.Title>
108+
<GuideAnchor target="crons_backend_insights">
109+
{t('Cron Monitors')}
110+
</GuideAnchor>
115111
<PageHeadingQuestionTooltip
116112
docsUrl={MODULE_DOC_LINK}
117113
title={MODULE_DESCRIPTION}
118114
/>
119-
</Fragment>
120-
}
121-
module={ModuleName.CRONS}
122-
headerActions={
115+
</Layout.Title>
116+
</Layout.HeaderContent>
117+
<Layout.HeaderActions>
123118
<ButtonBar gap={1}>
119+
<FeedbackWidgetButton />
124120
<Button
125121
icon={<IconList />}
126122
size="sm"
@@ -140,8 +136,8 @@ function CronsOverview() {
140136
</NewMonitorButton>
141137
)}
142138
</ButtonBar>
143-
}
144-
/>
139+
</Layout.HeaderActions>
140+
</Layout.Header>
145141
<Layout.Body>
146142
<Layout.Main fullWidth>
147143
<Filters>
@@ -194,15 +190,7 @@ function CronsOverview() {
194190
);
195191
}
196192

197-
function PageWithProviders() {
198-
return (
199-
<ModulePageProviders moduleName="crons" pageTitle={t('Overview')}>
200-
<CronsOverview />
201-
</ModulePageProviders>
202-
);
203-
}
204-
205-
export default PageWithProviders;
193+
export default CronsOverview;
206194

207195
const Filters = styled('div')`
208196
display: flex;

static/app/views/insights/pages/backend/settings.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ export const MODULES = [
1313
ModuleName.HTTP,
1414
ModuleName.CACHE,
1515
ModuleName.QUEUE,
16-
ModuleName.CRONS,
17-
ModuleName.UPTIME,
1816
];
1917

2018
export const OVERVIEW_PAGE_ALLOWED_OPS = ['http.server'];

static/app/views/insights/pages/frontend/settings.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ export const MODULES = [
3434
ModuleName.HTTP,
3535
ModuleName.RESOURCE,
3636
ModuleName.SESSIONS,
37-
ModuleName.UPTIME,
3837
];
3938

4039
// Mirrors `FRONTEND` in src/sentry/utils/platform_categories.py, except shared platforms are removed

static/app/views/insights/settings.ts

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@ import {
2727
MODULE_FEATURES as CACHE_MODULE_FEATURES,
2828
MODULE_TITLE as CACHE_MODULE_TITLE,
2929
} from 'sentry/views/insights/cache/settings';
30-
import {
31-
DATA_TYPE as CRONS_DATA_TYPE,
32-
DATA_TYPE_PLURAL as CRONS_DATA_TYPE_PLURAL,
33-
MODULE_DOC_LINK as CRONS_MODULE_DOC_LINK,
34-
MODULE_FEATURES as CRONS_MODULE_FEATURES,
35-
MODULE_TITLE as CRONS_MODULE_TITLE,
36-
MODULE_VISIBLE_FEATURES as CRONS_MODULE_VISIBLE_FEATURES,
37-
} from 'sentry/views/insights/crons/settings';
3830
import {
3931
DATA_TYPE as DB_DATA_TYPE,
4032
DATA_TYPE_PLURAL as DB_DATA_TYPE_PLURAL,
@@ -107,14 +99,6 @@ import {
10799
MODULE_TITLE as SESSIONS_MODULE_TITLE,
108100
MODULE_VISIBLE_FEATURES as SESSIONS_MODULE_VISIBLE_FEATURES,
109101
} from 'sentry/views/insights/sessions/settings';
110-
import {
111-
DATA_TYPE as UPTIME_DATA_TYPE,
112-
DATA_TYPE_PLURAL as UPTIME_DATA_TYPE_PLURAL,
113-
MODULE_DOC_LINK as UPTIME_MODULE_DOC_LINK,
114-
MODULE_FEATURES as UPTIME_MODULE_FEATURES,
115-
MODULE_TITLE as UPTIME_MODULE_TITLE,
116-
MODULE_VISIBLE_FEATURES as UPTIME_MODULE_VISIBLE_FEATURES,
117-
} from 'sentry/views/insights/uptime/settings';
118102

119103
import {ModuleName} from './types';
120104

@@ -139,8 +123,6 @@ export const MODULE_TITLES: Record<ModuleName, string> = {
139123
[ModuleName.MOBILE_UI]: MOBILE_UI_MODULE_TITLE,
140124
[ModuleName.MOBILE_VITALS]: MOBILE_SCREENS_MODULE_TITLE,
141125
[ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_TITLE,
142-
[ModuleName.UPTIME]: UPTIME_MODULE_TITLE,
143-
[ModuleName.CRONS]: CRONS_MODULE_TITLE,
144126
[ModuleName.SESSIONS]: SESSIONS_MODULE_TITLE,
145127
[ModuleName.OTHER]: '',
146128
};
@@ -159,8 +141,6 @@ export const MODULE_DATA_TYPES: Record<ModuleName, string> = {
159141
[ModuleName.MOBILE_UI]: t('Mobile UI'),
160142
[ModuleName.MOBILE_VITALS]: MOBILE_SCREENS_DATA_TYPE,
161143
[ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_DATA_TYPE,
162-
[ModuleName.UPTIME]: UPTIME_DATA_TYPE,
163-
[ModuleName.CRONS]: CRONS_DATA_TYPE,
164144
[ModuleName.SESSIONS]: SESSIONS_DATA_TYPE,
165145
[ModuleName.OTHER]: '',
166146
};
@@ -179,8 +159,6 @@ export const MODULE_DATA_TYPES_PLURAL: Record<ModuleName, string> = {
179159
[ModuleName.MOBILE_UI]: t('Mobile UI'),
180160
[ModuleName.MOBILE_VITALS]: MOBILE_SCREENS_DATA_TYPE_PLURAL,
181161
[ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_DATA_TYPE_PLURAL,
182-
[ModuleName.UPTIME]: UPTIME_DATA_TYPE_PLURAL,
183-
[ModuleName.CRONS]: CRONS_DATA_TYPE_PLURAL,
184162
[ModuleName.SESSIONS]: SESSIONS_DATA_TYPE_PLURAL,
185163
[ModuleName.OTHER]: '',
186164
};
@@ -202,8 +180,6 @@ export const MODULE_PRODUCT_DOC_LINKS = {
202180
[ModuleName.MOBILE_UI]: MODULE_UI_DOC_LINK,
203181
[ModuleName.MOBILE_VITALS]: MODULE_SCREENS_DOC_LINK,
204182
[ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_DOC_LINK,
205-
[ModuleName.UPTIME]: UPTIME_MODULE_DOC_LINK,
206-
[ModuleName.CRONS]: CRONS_MODULE_DOC_LINK,
207183
[ModuleName.SESSIONS]: {
208184
[MOBILE_LANDING_SUB_PATH]: MOBILE_SESSIONS_MODULE_DOC_LINK,
209185
[FRONTEND_LANDING_SUB_PATH]: FRONTEND_SESSIONS_MODULE_DOC_LINK,
@@ -228,8 +204,6 @@ export const MODULE_FEATURE_MAP: Record<ModuleName, string[]> = {
228204
[ModuleName.MOBILE_UI]: MOBILE_UI_MODULE_FEATURES,
229205
[ModuleName.MOBILE_VITALS]: [MOBILE_SCREENS_MODULE_FEATURE],
230206
[ModuleName.SCREEN_RENDERING]: SCREEN_RENDERING_MODULE_FEATURES,
231-
[ModuleName.UPTIME]: UPTIME_MODULE_FEATURES,
232-
[ModuleName.CRONS]: CRONS_MODULE_FEATURES,
233207
[ModuleName.SESSIONS]: [],
234208
[ModuleName.OTHER]: [],
235209
};
@@ -251,9 +225,6 @@ export const MODULE_FEATURE_VISIBLE_MAP: Record<ModuleName, string[]> = {
251225
[ModuleName.MOBILE_UI]: ['insights-entry-points'],
252226
[ModuleName.MOBILE_VITALS]: ['insights-entry-points'],
253227
[ModuleName.SCREEN_RENDERING]: ['insights-entry-points'],
254-
// XXX(epurkhiser): Uptime and Crons are NOT gated by the entry-points flag
255-
[ModuleName.UPTIME]: [...UPTIME_MODULE_VISIBLE_FEATURES],
256-
[ModuleName.CRONS]: [...CRONS_MODULE_VISIBLE_FEATURES],
257228
[ModuleName.SESSIONS]: ['insights-entry-points', ...SESSIONS_MODULE_VISIBLE_FEATURES],
258229
[ModuleName.OTHER]: ['insights-entry-points'],
259230
};

0 commit comments

Comments
 (0)