getGuidesContent.tsx 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. import {GuidesContent} from 'sentry/components/assistant/types';
  2. import ExternalLink from 'sentry/components/links/externalLink';
  3. import Link from 'sentry/components/links/link';
  4. import {t, tct} from 'sentry/locale';
  5. import ConfigStore from 'sentry/stores/configStore';
  6. export default function getGuidesContent(orgSlug: string | null): GuidesContent {
  7. if (ConfigStore.get('demoMode')) {
  8. return getDemoModeGuides();
  9. }
  10. return [
  11. {
  12. guide: 'issue',
  13. requiredTargets: ['issue_number', 'exception'],
  14. steps: [
  15. {
  16. title: t('Identify Your Issues'),
  17. target: 'issue_number',
  18. description: tct(
  19. `You have Issues. That's fine. Use the Issue number in your commit message,
  20. and we'll automatically resolve the Issue when your code is deployed. [link:Learn more]`,
  21. {link: <ExternalLink href="https://docs.sentry.io/product/releases/" />}
  22. ),
  23. },
  24. {
  25. title: t('Annoy the Right People'),
  26. target: 'owners',
  27. description: tct(
  28. `Notification overload makes it tempting to hurl your phone into the ocean.
  29. Define who is responsible for what, so alerts reach the right people and your
  30. devices stay on dry land. [link:Learn more]`,
  31. {
  32. link: (
  33. <ExternalLink href="https://docs.sentry.io/product/error-monitoring/issue-owners/" />
  34. ),
  35. }
  36. ),
  37. },
  38. {
  39. title: t('Narrow Down Suspects'),
  40. target: 'exception',
  41. description: t(
  42. `We've got stack trace. See the exact sequence of function calls leading to the error
  43. in question, no detective skills necessary.`
  44. ),
  45. },
  46. {
  47. title: t('Retrace Your Steps'),
  48. target: 'breadcrumbs',
  49. description: t(
  50. `Not sure how you got here? Sentry automatically captures breadcrumbs for events in web
  51. frameworks to lead you straight to your error.`
  52. ),
  53. },
  54. ],
  55. },
  56. {
  57. guide: 'issue_stream',
  58. requiredTargets: ['issue_stream'],
  59. steps: [
  60. {
  61. title: t('Issues'),
  62. target: 'issue_stream',
  63. description: tct(
  64. `Sentry automatically groups similar events together into an issue. Similarity is
  65. determined by stack trace and other factors. [link:Learn more].`,
  66. {
  67. link: (
  68. <ExternalLink href="https://docs.sentry.io/platform-redirect/?next=/data-management/event-grouping/" />
  69. ),
  70. }
  71. ),
  72. },
  73. ],
  74. },
  75. {
  76. guide: 'alerts_write_owner',
  77. requiredTargets: ['alerts_write_owner'],
  78. steps: [
  79. {
  80. target: 'alerts_write_owner',
  81. description: tct(
  82. `Today only admins in your organization can create alert rules but we recommend [link:allowing members to create alerts], too.`,
  83. {
  84. link: <Link to={orgSlug ? `/settings/${orgSlug}` : `/settings`} />,
  85. }
  86. ),
  87. nextText: t('Allow'),
  88. hasNextGuide: true,
  89. },
  90. ],
  91. },
  92. {
  93. guide: 'trace_view',
  94. requiredTargets: ['trace_view_guide_row', 'trace_view_guide_row_details'],
  95. steps: [
  96. {
  97. title: t('Event Breakdown'),
  98. target: 'trace_view_guide_breakdown',
  99. description: t(
  100. `The event breakdown shows you the breakdown of event types within a trace.`
  101. ),
  102. },
  103. {
  104. title: t('Transactions'),
  105. target: 'trace_view_guide_row',
  106. description: t(
  107. `You can quickly see all the transactions in a trace alongside the project, transaction duration, and any related errors.`
  108. ),
  109. },
  110. {
  111. title: t('Transactions Details'),
  112. target: 'trace_view_guide_row_details',
  113. description: t('Click on any transaction to see more details.'),
  114. },
  115. ],
  116. },
  117. {
  118. guide: 'span_op_breakdowns_and_tag_explorer',
  119. requiredTargets: ['span_op_breakdowns_filter'],
  120. steps: [
  121. {
  122. title: t('Filter by Span Operation'),
  123. target: 'span_op_breakdowns_filter',
  124. description: t(
  125. 'You can now filter these transaction events based on http, db, browser or resource operation.'
  126. ),
  127. },
  128. {
  129. title: t('Suspect Tags'),
  130. target: 'tag_explorer',
  131. description: tct(
  132. "See which tags often correspond to slower transactions. You'll want to investigate these more. [link:Learn more]",
  133. {
  134. link: (
  135. <ExternalLink href="https://docs.sentry.io/product/performance/transaction-summary/#suspect-tags" />
  136. ),
  137. }
  138. ),
  139. },
  140. ],
  141. },
  142. {
  143. guide: 'project_transaction_threshold',
  144. requiredTargets: ['project_transaction_threshold'],
  145. steps: [
  146. {
  147. title: t('Project Thresholds'),
  148. target: 'project_transaction_threshold',
  149. description: t(
  150. 'Gauge performance using different metrics for each project. Set response time thresholds, per project, for the Apdex and User Misery Scores in each project’s Performance settings.'
  151. ),
  152. },
  153. ],
  154. },
  155. {
  156. guide: 'project_transaction_threshold_override',
  157. requiredTargets: ['project_transaction_threshold_override'],
  158. steps: [
  159. {
  160. title: t('Response Time Thresholds'),
  161. target: 'project_transaction_threshold_override',
  162. description: t(
  163. 'Use this menu to adjust each transaction’s satisfactory response time threshold, which can vary across transactions. These thresholds are used to calculate Apdex and User Misery, metrics that indicate how satisfied and miserable users are, respectively.'
  164. ),
  165. },
  166. ],
  167. },
  168. {
  169. guide: 'semver',
  170. requiredTargets: ['releases_search'],
  171. dateThreshold: new Date('2021-05-01'),
  172. steps: [
  173. {
  174. title: t('Filter by Semver'),
  175. target: 'releases_search',
  176. description: tct(
  177. 'You can now filter releases by semver. For example: release.version:>14.0 [br] [link:View the docs]',
  178. {
  179. br: <br />,
  180. link: (
  181. <ExternalLink href="https://docs.sentry.io/product/releases/usage/sorting-filtering/#filtering-releases" />
  182. ),
  183. }
  184. ),
  185. nextText: t('Leave me alone'),
  186. },
  187. ],
  188. },
  189. {
  190. guide: 'new_page_filters',
  191. requiredTargets: ['new_page_filter_button'],
  192. expectedTargets: ['new_page_filter_pin'],
  193. dateThreshold: new Date('2022-04-05'),
  194. steps: [
  195. {
  196. title: t('Selection filters here now'),
  197. target: 'new_page_filter_button',
  198. description: t(
  199. "Selection filters were at the top of the page. Now they're here. Because this is what's getting filtered. Obvi."
  200. ),
  201. nextText: t('Sounds good'),
  202. },
  203. {
  204. title: t('Pin your filters'),
  205. target: 'new_page_filter_pin',
  206. description: t(
  207. "Want to keep the same filters between searches and sessions? Click this button. Don't want to? Don't click this button."
  208. ),
  209. nextText: t('Got it'),
  210. },
  211. ],
  212. },
  213. {
  214. guide: 'releases_widget',
  215. requiredTargets: ['releases_widget'],
  216. dateThreshold: new Date('2022-06-22'),
  217. steps: [
  218. {
  219. title: t('Releases are here'),
  220. target: 'releases_widget',
  221. description: t(
  222. 'Want to know how your latest release is doing? Monitor release health and crash rates in Dashboards.'
  223. ),
  224. nextText: t('Sounds good'),
  225. },
  226. ],
  227. },
  228. {
  229. guide: 'activate_sampling_rule',
  230. requiredTargets: ['sampling_rule_toggle'],
  231. dateThreshold: new Date('2022-07-05'),
  232. steps: [
  233. {
  234. title: t('Activate your first rule'),
  235. target: 'sampling_rule_toggle',
  236. description: t(
  237. 'Activating a rule will take immediate effect, as well as any changes given to an active rule.'
  238. ),
  239. nextText: t('Activate Rule'),
  240. dismissText: t('Later'),
  241. hasNextGuide: true,
  242. },
  243. ],
  244. },
  245. {
  246. guide: 'create_conditional_rule',
  247. requiredTargets: ['add_conditional_rule'],
  248. dateThreshold: new Date('2022-07-05'),
  249. steps: [
  250. {
  251. title: t('Create a new sample rule'),
  252. target: 'add_conditional_rule',
  253. description: t(
  254. 'Sample transactions under specific conditions, keeping what you need and dropping what you don’t.'
  255. ),
  256. dismissText: t('Enough already'),
  257. },
  258. ],
  259. },
  260. {
  261. guide: 'explain_archive_button_issue_details',
  262. requiredTargets: ['issue_details_archive_button'],
  263. steps: [
  264. {
  265. title: t('Introducing Archive'),
  266. target: 'issue_details_archive_button',
  267. description: t(
  268. "Archive this issue to move it out of the stream - but don't worry, we'll bring it back if it escalates."
  269. ),
  270. dismissText: t('Go Away'),
  271. },
  272. ],
  273. },
  274. {
  275. guide: 'explain_archive_tab_issue_stream',
  276. requiredTargets: ['issue_stream_archive_tab'],
  277. steps: [
  278. {
  279. title: t('Nothing to see here'),
  280. target: 'issue_stream_archive_tab',
  281. description: t(
  282. "Archived issues will live here. We'll mark them as Escalating if we detect a large number of events."
  283. ),
  284. dismissText: t('Goodbye Forever'),
  285. },
  286. ],
  287. },
  288. ];
  289. }
  290. function getDemoModeGuides(): GuidesContent {
  291. return [
  292. {
  293. guide: 'sidebar_v2',
  294. requiredTargets: ['projects'],
  295. priority: 1,
  296. markOthersAsSeen: true,
  297. steps: [
  298. {
  299. title: t('Projects'),
  300. target: 'projects',
  301. description: t(
  302. `Create a project for any type of application you want to monitor.`
  303. ),
  304. },
  305. {
  306. title: t('Issues'),
  307. target: 'issues',
  308. description: t(
  309. `Here's a list of what's broken and slow. Sentry automatically groups similar events together into an issue.`
  310. ),
  311. },
  312. {
  313. title: t('Performance'),
  314. target: 'performance',
  315. description: t(
  316. `Keep a pulse on crash rates, throughput, and latency issues across projects.`
  317. ),
  318. },
  319. {
  320. title: t('Releases'),
  321. target: 'releases',
  322. description: t(
  323. `Track the health of every release, see differences between releases from crash analytics to adoption rates.`
  324. ),
  325. },
  326. {
  327. title: t('Discover'),
  328. target: 'discover',
  329. description: t(
  330. `Query and unlock insights into the health of your entire system and get answers to critical business questions all in one place.`
  331. ),
  332. nextText: t('Got it'),
  333. },
  334. ],
  335. },
  336. {
  337. guide: 'issue_stream_v3',
  338. requiredTargets: ['issue_stream'],
  339. steps: [
  340. {
  341. title: t('Issues'),
  342. target: 'issue_stream',
  343. description: t(
  344. `Sentry automatically groups similar events together into an issue. Similarity is
  345. determined by stack trace and other factors. Click on an issue to learn more.`
  346. ),
  347. },
  348. ],
  349. },
  350. {
  351. guide: 'issues_v3',
  352. requiredTargets: ['tags'],
  353. steps: [
  354. {
  355. title: t('Metadata and metrics'),
  356. target: 'tags',
  357. description: t(
  358. `See tags like specific users affected by the event, device, OS, and browser type.
  359. On the right side of the page you can view the number of affected users and exception frequency overtime.`
  360. ),
  361. },
  362. {
  363. title: t('Find your broken code'),
  364. target: 'stack_trace',
  365. description: t(
  366. `View the stack trace to see the exact sequence of function calls leading to the error in question.`
  367. ),
  368. },
  369. {
  370. title: t('Retrace your steps'),
  371. target: 'breadcrumbs',
  372. description: t(
  373. `Sentry automatically captures breadcrumbs for events so you can see the sequence of events leading up to the error.`
  374. ),
  375. nextText: t('Got it'),
  376. },
  377. ],
  378. },
  379. {
  380. guide: 'releases_v2',
  381. requiredTargets: ['release_projects'],
  382. priority: 1,
  383. steps: [
  384. {
  385. title: t('Compare releases'),
  386. target: 'release_projects',
  387. description: t(
  388. `Click here and select the "react-native" project to see how the release is trending compaed to previous releases.`
  389. ),
  390. },
  391. ],
  392. },
  393. {
  394. guide: 'react-native-release',
  395. requiredTargets: ['release_version'],
  396. steps: [
  397. {
  398. title: t('Release-specfic trends'),
  399. target: 'release_version',
  400. description: t(
  401. `Select the latest release to review new and regressed issues, and business critical metrics like crash rate, and user adoption.`
  402. ),
  403. },
  404. ],
  405. },
  406. {
  407. guide: 'release-details_v2',
  408. requiredTargets: ['release_states'],
  409. steps: [
  410. {
  411. title: t('New and regressed issues'),
  412. target: 'release_states',
  413. description: t(
  414. `Along with reviewing how your release is trending over time compared to previous releases, you can view new and regressed issues here.`
  415. ),
  416. },
  417. ],
  418. },
  419. {
  420. guide: 'performance',
  421. requiredTargets: ['performance_table'],
  422. steps: [
  423. {
  424. title: t('See slow transactions'),
  425. target: 'performance_table',
  426. description: t(
  427. `Trace slow-loading pages back to their API calls, as well as, related errors and users impacted across projects. Select a transaction to see more details.`
  428. ),
  429. },
  430. ],
  431. },
  432. {
  433. guide: 'transaction_summary',
  434. requiredTargets: ['user_misery', 'transactions_table'],
  435. steps: [
  436. {
  437. title: t('Identify the root cause'),
  438. target: 'user_misery',
  439. description: t(
  440. 'Dive into the details behind a slow transaction. See User Misery, Apdex, and more metrics, along with related events and suspect spans.'
  441. ),
  442. },
  443. {
  444. title: t('Breakdown event spans'),
  445. target: 'transactions_table',
  446. description: t(
  447. 'Select an Event ID from a list of slow transactions to uncover slow spans.'
  448. ),
  449. nextText: t('Got it'),
  450. },
  451. ],
  452. },
  453. {
  454. guide: 'transaction_details_v2',
  455. requiredTargets: ['span_tree'],
  456. steps: [
  457. {
  458. title: t('See slow fast'),
  459. target: 'span_tree',
  460. description: t(
  461. `Expand the spans to see span details from start date, end date to the operation. Below you can view breadcrumbs for a play-by-play of what your users
  462. did before encountering the performance issue.`
  463. ),
  464. },
  465. ],
  466. },
  467. ];
  468. }