Browse Source

ref(crons): Switch API calls to project based endpoints (#67026)

Part of GH-66615
Evan Purkhiser 11 months ago
parent
commit
bbf4c44672

+ 17 - 15
static/app/actionCreators/monitors.tsx

@@ -10,13 +10,14 @@ import {logException} from 'sentry/utils/logging';
 import type RequestError from 'sentry/utils/requestError/requestError';
 import type {Monitor} from 'sentry/views/monitors/types';
 
-export async function deleteMonitor(api: Client, orgId: string, monitorSlug: string) {
+export async function deleteMonitor(api: Client, orgId: string, monitor: Monitor) {
   addLoadingMessage(t('Deleting Monitor...'));
 
   try {
-    await api.requestPromise(`/organizations/${orgId}/monitors/${monitorSlug}/`, {
-      method: 'DELETE',
-    });
+    await api.requestPromise(
+      `/projects/${orgId}/${monitor.project.slug}/monitors/${monitor.slug}/`,
+      {method: 'DELETE'}
+    );
     clearIndicators();
   } catch {
     addErrorMessage(t('Unable to remove monitor.'));
@@ -26,18 +27,19 @@ export async function deleteMonitor(api: Client, orgId: string, monitorSlug: str
 export async function deleteMonitorEnvironment(
   api: Client,
   orgId: string,
-  monitorSlug: string,
+  monitor: Monitor,
   environment: string
 ): Promise<boolean> {
   addLoadingMessage(t('Deleting Environment...'));
 
   try {
-    await api.requestPromise(`/organizations/${orgId}/monitors/${monitorSlug}/`, {
-      method: 'DELETE',
-      query: {
-        environment,
-      },
-    });
+    await api.requestPromise(
+      `/projects/${orgId}/${monitor.project.slug}/monitors/${monitor.slug}/`,
+      {
+        method: 'DELETE',
+        query: {environment},
+      }
+    );
     clearIndicators();
     return true;
   } catch {
@@ -49,14 +51,14 @@ export async function deleteMonitorEnvironment(
 export async function updateMonitor(
   api: Client,
   orgId: string,
-  monitorSlug: string,
+  monitor: Monitor,
   data: Partial<Monitor>
 ): Promise<Monitor | null> {
   addLoadingMessage();
 
   try {
     const resp = await api.requestPromise(
-      `/organizations/${orgId}/monitors/${monitorSlug}/`,
+      `/projects/${orgId}/${monitor.project.slug}/monitors/${monitor.slug}/`,
       {method: 'PUT', data}
     );
     clearIndicators();
@@ -80,7 +82,7 @@ export async function updateMonitor(
 export async function setEnvironmentIsMuted(
   api: Client,
   orgId: string,
-  monitorSlug: string,
+  monitor: Monitor,
   environment: string,
   isMuted: boolean
 ) {
@@ -88,7 +90,7 @@ export async function setEnvironmentIsMuted(
 
   try {
     const resp = await api.requestPromise(
-      `/organizations/${orgId}/monitors/${monitorSlug}/environments/${environment}`,
+      `/projects/${orgId}/${monitor.project.id}/monitors/${monitor.slug}/environments/${environment}`,
       {method: 'PUT', data: {isMuted}}
     );
     clearIndicators();

+ 8 - 10
static/app/views/monitors/components/cronDetailsTimeline.tsx

@@ -78,17 +78,15 @@ export function CronDetailsTimeline({monitor, organization}: Props) {
     }
   );
 
-  const monitorDetailsQueryKey = makeMonitorDetailsQueryKey(organization, monitor.slug, {
-    ...location.query,
-  });
+  const monitorDetailsQueryKey = makeMonitorDetailsQueryKey(
+    organization,
+    monitor.project.id,
+    monitor.slug,
+    {...location.query}
+  );
 
   const handleDeleteEnvironment = async (env: string) => {
-    const success = await deleteMonitorEnvironment(
-      api,
-      organization.slug,
-      monitor.slug,
-      env
-    );
+    const success = await deleteMonitorEnvironment(api, organization.slug, monitor, env);
     if (!success) {
       return;
     }
@@ -108,7 +106,7 @@ export function CronDetailsTimeline({monitor, organization}: Props) {
     const resp = await setEnvironmentIsMuted(
       api,
       organization.slug,
-      monitor.slug,
+      monitor,
       env,
       isMuted
     );

+ 1 - 1
static/app/views/monitors/components/monitorCheckIns.tsx

@@ -39,7 +39,7 @@ function MonitorCheckIns({monitor, monitorEnvs, orgSlug}: Props) {
   const location = useLocation();
   const organization = useOrganization();
   const queryKey = [
-    `/organizations/${orgSlug}/monitors/${monitor.slug}/checkins/`,
+    `/projects/${orgSlug}/${monitor.project.slug}/monitors/${monitor.slug}/checkins/`,
     {
       query: {
         per_page: '10',

+ 1 - 1
static/app/views/monitors/components/monitorForm.spec.tsx

@@ -169,7 +169,7 @@ describe('MonitorForm', function () {
   it('prefills with an existing monitor', async function () {
     const monitor = MonitorFixture({project});
 
-    const apiEndpont = `/organizations/${organization.slug}/monitors/${monitor.slug}/`;
+    const apiEndpont = `/projects/${organization.slug}/${monitor.project.slug}/monitors/${monitor.slug}/`;
 
     if (monitor.config.schedule_type !== ScheduleType.CRONTAB) {
       throw new Error('Fixture is not crontab');

+ 2 - 2
static/app/views/monitors/components/monitorHeaderActions.tsx

@@ -33,7 +33,7 @@ function MonitorHeaderActions({monitor, orgSlug, onUpdate}: Props) {
   };
 
   const handleDelete = async () => {
-    await deleteMonitor(api, orgSlug, monitor.slug);
+    await deleteMonitor(api, orgSlug, monitor);
     browserHistory.push(
       normalizeUrl({
         pathname: `/organizations/${orgSlug}/crons/`,
@@ -43,7 +43,7 @@ function MonitorHeaderActions({monitor, orgSlug, onUpdate}: Props) {
   };
 
   const handleUpdate = async (data: Partial<Monitor>) => {
-    const resp = await updateMonitor(api, orgSlug, monitor.slug, data);
+    const resp = await updateMonitor(api, orgSlug, monitor, data);
 
     if (resp !== null) {
       onUpdate?.(resp);

+ 1 - 1
static/app/views/monitors/components/monitorStats.tsx

@@ -45,7 +45,7 @@ function MonitorStats({monitor, monitorEnvs, orgSlug}: Props) {
   }
 
   const queryKey = [
-    `/organizations/${orgSlug}/monitors/${monitor.slug}/stats/`,
+    `/projects/${orgSlug}/${monitor.project.slug}/monitors/${monitor.slug}/stats/`,
     {
       query: {
         since: since.toString(),

+ 3 - 8
static/app/views/monitors/components/overviewTimeline/index.tsx

@@ -68,12 +68,7 @@ export function OverviewTimeline({monitorList}: Props) {
   );
 
   const handleDeleteEnvironment = async (monitor: Monitor, env: string) => {
-    const success = await deleteMonitorEnvironment(
-      api,
-      organization.slug,
-      monitor.slug,
-      env
-    );
+    const success = await deleteMonitorEnvironment(api, organization.slug, monitor, env);
     if (!success) {
       return;
     }
@@ -108,7 +103,7 @@ export function OverviewTimeline({monitorList}: Props) {
     const resp = await setEnvironmentIsMuted(
       api,
       organization.slug,
-      monitor.slug,
+      monitor,
       env,
       isMuted
     );
@@ -128,7 +123,7 @@ export function OverviewTimeline({monitorList}: Props) {
 
   const handleToggleStatus = async (monitor: Monitor) => {
     const status = monitor.status === 'active' ? 'disabled' : 'active';
-    const resp = await updateMonitor(api, organization.slug, monitor.slug, {status});
+    const resp = await updateMonitor(api, organization.slug, monitor, {status});
 
     if (resp === null) {
       return;

+ 8 - 5
static/app/views/monitors/details.tsx

@@ -30,7 +30,7 @@ import type {Monitor} from './types';
 
 const DEFAULT_POLL_INTERVAL_MS = 5000;
 
-type Props = RouteComponentProps<{monitorSlug: string}, {}>;
+type Props = RouteComponentProps<{monitorSlug: string; projectId: string}, {}>;
 
 function hasLastCheckIn(monitor: Monitor) {
   return monitor.environments.some(e => e.lastCheckIn);
@@ -42,9 +42,12 @@ function MonitorDetails({params, location}: Props) {
   const organization = useOrganization();
   const queryClient = useQueryClient();
 
-  const queryKey = makeMonitorDetailsQueryKey(organization, params.monitorSlug, {
-    ...location.query,
-  });
+  const queryKey = makeMonitorDetailsQueryKey(
+    organization,
+    params.projectId,
+    params.monitorSlug,
+    {...location.query}
+  );
 
   const {data: monitor} = useApiQuery<Monitor>(queryKey, {
     staleTime: 0,
@@ -74,7 +77,7 @@ function MonitorDetails({params, location}: Props) {
     if (monitor === undefined) {
       return;
     }
-    const resp = await updateMonitor(api, organization.slug, monitor.slug, data);
+    const resp = await updateMonitor(api, organization.slug, monitor, data);
 
     if (resp !== null) {
       onUpdate(resp);

+ 3 - 3
static/app/views/monitors/edit.tsx

@@ -20,12 +20,12 @@ import MonitorForm from './components/monitorForm';
 import type {Monitor} from './types';
 
 export default function EditMonitor() {
-  const {monitorSlug} = useParams();
+  const {monitorSlug, projectId} = useParams<{monitorSlug: string; projectId: string}>();
   const {selection} = usePageFilters();
   const organization = useOrganization();
   const queryClient = useQueryClient();
 
-  const queryKey = makeMonitorDetailsQueryKey(organization, monitorSlug, {
+  const queryKey = makeMonitorDetailsQueryKey(organization, projectId, monitorSlug, {
     expand: ['alertRule'],
   });
 
@@ -108,7 +108,7 @@ export default function EditMonitor() {
             <MonitorForm
               monitor={monitor}
               apiMethod="PUT"
-              apiEndpoint={`/organizations/${organization.slug}/monitors/${monitor.slug}/`}
+              apiEndpoint={`/projects/${organization.slug}/${projectId}/monitors/${monitor.slug}/`}
               onSubmitSuccess={onSubmitSuccess}
             />
           </Layout.Main>

+ 2 - 1
static/app/views/monitors/utils.tsx

@@ -32,11 +32,12 @@ export function makeMonitorListQueryKey(
 
 export function makeMonitorDetailsQueryKey(
   organization: Organization,
+  projectId: string,
   monitorSlug: string,
   query?: Record<string, any>
 ) {
   return [
-    `/organizations/${organization.slug}/monitors/${monitorSlug}/`,
+    `/projects/${organization.slug}/${projectId}/monitors/${monitorSlug}/`,
     {query},
   ] as const;
 }