onboarding.tsx 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import styled from '@emotion/styled';
  2. import {CodeSnippet} from 'sentry/components/codeSnippet';
  3. import ExternalLink from 'sentry/components/links/externalLink';
  4. import Link from 'sentry/components/links/link';
  5. import List from 'sentry/components/list';
  6. import ListItem from 'sentry/components/list/listItem';
  7. import {Panel, PanelBody, PanelHeader} from 'sentry/components/panels';
  8. import {t, tct} from 'sentry/locale';
  9. import space from 'sentry/styles/space';
  10. import useOrganization from 'sentry/utils/useOrganization';
  11. import {Monitor} from './types';
  12. type Props = {
  13. monitor: Monitor;
  14. };
  15. const MonitorOnboarding = ({monitor}: Props) => {
  16. const checkInUrl = `https://sentry.io/api/0/monitors/${monitor.id}/checkins/`;
  17. const checkInDetailsUrl = `${checkInUrl}{checkInId}/`;
  18. const organization = useOrganization();
  19. return (
  20. <Panel>
  21. <PanelHeader>{t('How to instrument monitors')}</PanelHeader>
  22. <PanelBody withPadding>
  23. <List symbol="bullet">
  24. <StyledListItem>
  25. <OnboardingText>
  26. {tct(
  27. 'To report the start of a job execution using [linkDocs:DSN authentication], use the following request (your DSN can be found [linkProjectDSN:here])',
  28. {
  29. linkDocs: (
  30. <ExternalLink href="https://docs.sentry.io/api/auth/#dsn-authentication" />
  31. ),
  32. linkProjectDSN: (
  33. <Link
  34. to={`/settings/${organization.slug}/projects/${monitor.project.slug}/keys/`}
  35. />
  36. ),
  37. }
  38. )}
  39. </OnboardingText>
  40. <CodeSnippet language="text" hideActionBar>
  41. {`curl -X POST \\\n'${checkInUrl}' \\\n--header 'Authorization: DSN {DSN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"status": "in_progress"}'`}
  42. </CodeSnippet>
  43. </StyledListItem>
  44. <StyledListItem>
  45. <OnboardingText>
  46. {t(
  47. 'The above request will then return a check-in id which you can use to modify the check-in upon job completion'
  48. )}
  49. </OnboardingText>
  50. <OnboardingText>
  51. {t('For reflecting successful execution with optional duration in ms')}
  52. </OnboardingText>
  53. <CodeSnippet language="json" hideActionBar>
  54. {`curl -X PUT \\\n'${checkInDetailsUrl}' \\\n--header 'Authorization: DSN {DSN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"status": "ok", "duration": 3000}'`}
  55. </CodeSnippet>
  56. <OnboardingText>
  57. {t('For reflecting failed execution with optional duration in ms')}
  58. </OnboardingText>
  59. <CodeSnippet language="json" hideActionBar>
  60. {`curl -X PUT \\\n'${checkInDetailsUrl}' \\\n--header 'Authorization: DSN {DSN}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"status": "error", "duration": 3000}'`}
  61. </CodeSnippet>
  62. </StyledListItem>
  63. </List>
  64. </PanelBody>
  65. </Panel>
  66. );
  67. };
  68. const OnboardingText = styled('p')`
  69. font-size: ${p => p.theme.fontSizeLarge};
  70. `;
  71. const StyledListItem = styled(ListItem)`
  72. margin-bottom: ${space(2)};
  73. `;
  74. export default MonitorOnboarding;