getGuidesContent.tsx 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. import {GuidesContent} from 'app/components/assistant/types';
  2. import ExternalLink from 'app/components/links/externalLink';
  3. import Link from 'app/components/links/link';
  4. import {t, tct} from 'app/locale';
  5. import ConfigStore from 'app/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_title', 'exception'],
  14. steps: [
  15. {
  16. title: t("Let's Get This Over With"),
  17. target: 'issue_title',
  18. description: t(
  19. `No one likes a product tour. But stick with us, and you'll find it a
  20. whole lot easier to use Sentry's Issue details page.`
  21. ),
  22. },
  23. {
  24. title: t('Resolve Your Issues'),
  25. target: 'resolve',
  26. description: t(
  27. 'So you fixed your problem? Congrats. Hit resolve to make it all go away.'
  28. ),
  29. },
  30. {
  31. title: t('Deal With It Later, Or Never'),
  32. target: 'ignore_delete_discard',
  33. description: t(
  34. `Just can't deal with this Issue right now? Ignore it. Saving it for later?
  35. Star it. Want it gone and out of your life forever?
  36. Delete that sh*t.`
  37. ),
  38. },
  39. {
  40. title: t('Identify Your Issues'),
  41. target: 'issue_number',
  42. description: tct(
  43. `You've got a lot of Issues. That's fine. Use the Issue number in your commit message,
  44. and we'll automatically resolve the Issue when your code is deployed. [link:Learn more]`,
  45. {link: <ExternalLink href="https://docs.sentry.io/product/releases/" />}
  46. ),
  47. },
  48. {
  49. title: t('Annoy the Right People'),
  50. target: 'owners',
  51. description: tct(
  52. `Notification overload makes it tempting to hurl your phone into the ocean.
  53. Define who is responsible for what, so alerts reach the right people and your
  54. devices stay on dry land. [link:Learn more]`,
  55. {
  56. link: (
  57. <ExternalLink href="https://docs.sentry.io/product/error-monitoring/issue-owners/" />
  58. ),
  59. }
  60. ),
  61. },
  62. {
  63. title: t('Find Information You Can Use'),
  64. target: 'tags',
  65. description: t(
  66. `So many bugs, so little time. When you've got bugs as far as the mouse can scroll,
  67. search and filter Events with tags or visualize Issues with a heat map.`
  68. ),
  69. },
  70. {
  71. title: t('Narrow Down Suspects'),
  72. target: 'exception',
  73. description: t(
  74. `We've got stack trace. See the exact sequence of function calls leading to the error
  75. in question, no detective skills necessary.`
  76. ),
  77. },
  78. {
  79. title: t('Retrace Your Steps'),
  80. target: 'breadcrumbs',
  81. description: t(
  82. `Not sure how you got here? Sentry automatically captures breadcrumbs for events in web
  83. frameworks to lead you straight to your error.`
  84. ),
  85. },
  86. ],
  87. },
  88. {
  89. guide: 'issue_stream',
  90. requiredTargets: ['issue_stream'],
  91. steps: [
  92. {
  93. title: t('Issues'),
  94. target: 'issue_stream',
  95. description: tct(
  96. `Sentry automatically groups similar events together into an issue. Similarity is
  97. determined by stack trace and other factors. [link:Learn more].`,
  98. {
  99. link: (
  100. <ExternalLink href="https://docs.sentry.io/platform-redirect/?next=/data-management/event-grouping/" />
  101. ),
  102. }
  103. ),
  104. },
  105. ],
  106. },
  107. {
  108. guide: 'inbox_guide',
  109. requiredTargets: ['inbox_guide_tab'],
  110. dateThreshold: new Date(2021, 1, 26),
  111. steps: [
  112. {
  113. target: 'inbox_guide_tab',
  114. description: t(`We’ve made some changes to help you focus on what’s new.`),
  115. dismissText: t(`Later`),
  116. nextText: t(`Take a Look`),
  117. hasNextGuide: true,
  118. },
  119. ],
  120. },
  121. {
  122. guide: 'for_review_guide',
  123. requiredTargets: ['for_review_guide_tab', 'inbox_guide_reason', 'is_inbox_tab'],
  124. steps: [
  125. {
  126. target: 'for_review_guide_tab',
  127. description: t(
  128. `This is a list of Unresolved issues that are new or reopened in the last 7 days.`
  129. ),
  130. cantDismiss: true,
  131. },
  132. {
  133. target: 'inbox_guide_reason',
  134. description: t(`These labels explain why an issue needs review.`),
  135. nextText: t(`When does this end?`),
  136. cantDismiss: true,
  137. },
  138. {
  139. target: 'inbox_guide_review',
  140. description: t(
  141. `Marking an issue reviewed, resolving it, or ignoring it removes it from this list and removes the label.`
  142. ),
  143. nextText: t(`Make It Stop Already`),
  144. },
  145. ],
  146. },
  147. {
  148. guide: 'assigned_or_suggested_guide',
  149. dateThreshold: new Date(2021, 4, 1),
  150. requiredTargets: ['assigned_or_suggested_query'],
  151. steps: [
  152. {
  153. target: 'assigned_or_suggested_query',
  154. description: tct(
  155. "Tip: use [assignedOrSuggested] to include search results based on your [ownership:ownership rules] and [committed:code you've committed].",
  156. {
  157. assignedOrSuggested: <code>assigned_or_suggested</code>,
  158. ownership: (
  159. <ExternalLink href="https://docs.sentry.io/product/error-monitoring/issue-owners/" />
  160. ),
  161. committed: (
  162. <ExternalLink href="https://docs.sentry.io/product/sentry-basics/guides/integrate-frontend/configure-scms/" />
  163. ),
  164. }
  165. ),
  166. },
  167. ],
  168. },
  169. {
  170. guide: 'alerts_write_owner',
  171. requiredTargets: ['alerts_write_owner'],
  172. steps: [
  173. {
  174. target: 'alerts_write_owner',
  175. description: tct(
  176. `Today only admins in your organization can create alert rules but we recommend [link:allowing members to create alerts], too.`,
  177. {
  178. link: <Link to={orgSlug ? `/settings/${orgSlug}` : `/settings`} />,
  179. }
  180. ),
  181. nextText: t(`Allow`),
  182. hasNextGuide: true,
  183. },
  184. ],
  185. },
  186. {
  187. guide: 'stack_trace_preview',
  188. requiredTargets: ['issue_stream_title'],
  189. dateThreshold: new Date(2021, 2, 15),
  190. steps: [
  191. {
  192. title: t('Stack Trace Preview'),
  193. target: 'issue_stream_title',
  194. description: t(
  195. `Hover over the issue title to see the stack trace of the latest event.`
  196. ),
  197. },
  198. ],
  199. },
  200. {
  201. guide: 'trace_view',
  202. requiredTargets: ['trace_view_guide_row', 'trace_view_guide_row_details'],
  203. steps: [
  204. {
  205. title: t('Event Breakdown'),
  206. target: 'trace_view_guide_breakdown',
  207. description: t(
  208. `The event breakdown shows you the breakdown of event types within a trace.`
  209. ),
  210. },
  211. {
  212. title: t('Transactions'),
  213. target: 'trace_view_guide_row',
  214. description: t(
  215. `Get an overview of every transaction. You can quickly see all the transactions in a trace alongside the project, transaction duration, and any related errors.`
  216. ),
  217. },
  218. {
  219. title: t('Transactions Details'),
  220. target: 'trace_view_guide_row_details',
  221. description: t(`Click on any transaction to see more details.`),
  222. },
  223. ],
  224. },
  225. {
  226. guide: 'span_op_breakdowns_and_tag_explorer',
  227. requiredTargets: ['span_op_breakdowns_filter', 'span_op_relative_breakdowns'],
  228. steps: [
  229. {
  230. title: t('Filter by Span Operation'),
  231. target: 'span_op_breakdowns_filter',
  232. description: t(
  233. 'You can now filter these transaction events based on http, db, browser or resource operation.'
  234. ),
  235. },
  236. {
  237. title: t('Span Operation Breakdown'),
  238. target: 'span_op_relative_breakdowns',
  239. description: tct(
  240. 'By default, you can now see how each transaction is broken down by operation. Click the spans to filter. [link:Learn more]',
  241. {
  242. link: (
  243. <ExternalLink href="https://docs.sentry.io/product/performance/event-detail/#operations-breakdown" />
  244. ),
  245. }
  246. ),
  247. },
  248. {
  249. title: t('Suspect Tags'),
  250. target: 'tag_explorer',
  251. description: tct(
  252. "See which tags often correspond to slower transactions. You'll want to investigate these more. [link:Learn more]",
  253. {
  254. link: (
  255. <ExternalLink href="https://docs.sentry.io/product/performance/transaction-summary/#suspect-tags" />
  256. ),
  257. }
  258. ),
  259. },
  260. ],
  261. },
  262. {
  263. guide: 'team_key_transactions',
  264. requiredTargets: ['team_key_transaction_header'],
  265. steps: [
  266. {
  267. title: t('Key Transactions'),
  268. target: 'team_key_transaction_header',
  269. description: t(
  270. 'Software development is a team sport. Key Transactions allow you to mark important transactions and share them with your team.'
  271. ),
  272. nextText: t('Great'),
  273. },
  274. {
  275. title: t('Migrating Key Transactions'),
  276. target: 'team_key_transaction_existing',
  277. description: t(
  278. 'To migrate your previous key transactions, you will have to mark them as a key transaction again for your team. Sorry about that.'
  279. ),
  280. nextText: t('Fine'),
  281. },
  282. ],
  283. },
  284. {
  285. guide: 'project_transaction_threshold',
  286. requiredTargets: ['project_transaction_threshold'],
  287. steps: [
  288. {
  289. title: t('Project Thresholds'),
  290. target: 'project_transaction_threshold',
  291. description: t(
  292. '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.'
  293. ),
  294. },
  295. ],
  296. },
  297. {
  298. guide: 'project_transaction_threshold_override',
  299. requiredTargets: ['project_transaction_threshold_override'],
  300. steps: [
  301. {
  302. title: t('Response Time Thresholds'),
  303. target: 'project_transaction_threshold_override',
  304. description: t(
  305. '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.'
  306. ),
  307. },
  308. ],
  309. },
  310. {
  311. guide: 'percentage_based_alerts',
  312. requiredTargets: ['percentage_based_alerts'],
  313. steps: [
  314. {
  315. title: t('Percentage Based Alerts'),
  316. target: 'percentage_based_alerts',
  317. description: tct(
  318. 'View the event count as a percentage of sessions and alert on this number to adapt to changes in traffic patterns. [link:View the docs] to learn more.',
  319. {
  320. link: (
  321. <ExternalLink href="https://docs.sentry.io/product/alerts/create-alerts/issue-alert-config/#when-conditions-triggers" />
  322. ),
  323. }
  324. ),
  325. nextText: t('Got it'),
  326. },
  327. ],
  328. },
  329. {
  330. guide: 'semver',
  331. requiredTargets: ['releases_search'],
  332. dateThreshold: new Date(2021, 6, 1),
  333. steps: [
  334. {
  335. title: t('Filter by Semver'),
  336. target: 'releases_search',
  337. description: tct(
  338. 'You can now filter releases by semver. For example: release.version:>14.0 [br] [link:View the docs]',
  339. {
  340. br: <br />,
  341. link: (
  342. <ExternalLink href="https://docs.sentry.io/product/releases/usage/sorting-filtering/#filtering-releases" />
  343. ),
  344. }
  345. ),
  346. nextText: t('Leave me alone'),
  347. },
  348. ],
  349. },
  350. {
  351. guide: 'release_stages',
  352. requiredTargets: ['release_stages'],
  353. dateThreshold: new Date(2021, 6, 1),
  354. steps: [
  355. {
  356. title: t('Adoption Filter'),
  357. target: 'release_stages',
  358. description: tct(
  359. 'Select an environment and search for `release.stage:adopted` to filter out releases with low adoption. [br] [link:Learn more]',
  360. {
  361. br: <br />,
  362. link: (
  363. <ExternalLink href="https://docs.sentry.io/product/releases/usage/sorting-filtering/#filtering-releases" />
  364. ),
  365. }
  366. ),
  367. nextText: t('Got it'),
  368. },
  369. ],
  370. },
  371. ];
  372. }
  373. function getDemoModeGuides(): GuidesContent {
  374. return [
  375. {
  376. guide: 'sidebar',
  377. requiredTargets: ['projects', 'issues'],
  378. priority: 1, // lower number means higher priority
  379. markOthersAsSeen: true,
  380. steps: [
  381. {
  382. title: t('Projects'),
  383. target: 'projects',
  384. description: t(
  385. `Create a project for any type of application you want to monitor.`
  386. ),
  387. },
  388. {
  389. title: t('Issues'),
  390. target: 'issues',
  391. description: t(
  392. `Here's a list of what's broken with your application. And everything you need to know to fix it.`
  393. ),
  394. },
  395. {
  396. title: t('Performance'),
  397. target: 'performance',
  398. description: t(
  399. `See slow faster. Trace slow-loading pages back to their API calls as well as surface all related errors.`
  400. ),
  401. },
  402. {
  403. title: t('Releases'),
  404. target: 'releases',
  405. description: t(
  406. `Track the health of every release, see differences between releases from crash analytics to adoption rates.`
  407. ),
  408. },
  409. {
  410. title: t('Discover'),
  411. target: 'discover',
  412. description: t(
  413. `Query and unlock insights into the health of your entire system and get answers to critical business questions all in one place.`
  414. ),
  415. nextText: t(`Got it`),
  416. },
  417. ],
  418. },
  419. {
  420. guide: 'issue_stream_v2',
  421. requiredTargets: ['issue_stream_title'],
  422. steps: [
  423. {
  424. title: t('Issue'),
  425. target: 'issue_stream_title',
  426. description: t(
  427. `Click here to get a full error report down to the line of code that caused the error.`
  428. ),
  429. },
  430. ],
  431. },
  432. {
  433. guide: 'issue_v2',
  434. requiredTargets: ['issue_details', 'exception'],
  435. steps: [
  436. {
  437. title: t('Details'),
  438. target: 'issue_details',
  439. description: t(`See the who, what, and where of every error right at the top`),
  440. },
  441. {
  442. title: t('Exception'),
  443. target: 'exception',
  444. description: t(
  445. `Source code right in the stack trace, so you don’t need to find it yourself.`
  446. ),
  447. },
  448. {
  449. title: t('Tags'),
  450. target: 'tags',
  451. description: t(
  452. `Tags help you quickly access related events and view the tag distribution for a set of events.`
  453. ),
  454. },
  455. {
  456. title: t('Breadcrumbs'),
  457. target: 'breadcrumbs',
  458. description: t(
  459. `Check out the play by play of what your user experienced till they encountered the exception.`
  460. ),
  461. },
  462. {
  463. title: t('Discover'),
  464. target: 'open_in_discover',
  465. description: t(
  466. `Uncover trends with Discover — analyze errors by URL, geography, device, browser, etc.`
  467. ),
  468. },
  469. ],
  470. },
  471. {
  472. guide: 'releases',
  473. requiredTargets: ['release_version'],
  474. steps: [
  475. {
  476. title: t('Release'),
  477. target: 'release_version',
  478. description: t(
  479. `Click here to easily identify new issues, regressions, and track the health every release.`
  480. ),
  481. },
  482. ],
  483. },
  484. {
  485. guide: 'release_details',
  486. requiredTargets: ['release_chart'],
  487. steps: [
  488. {
  489. title: t('Chart'),
  490. target: 'release_chart',
  491. description: t(`Click and drag to zoom in on a specific section of the chart.`),
  492. },
  493. {
  494. title: t('Discover'),
  495. target: 'release_issues_open_in_discover',
  496. description: t(`Analyze these errors by URL, geography, device, browser, etc.`),
  497. },
  498. {
  499. title: t('Discover'),
  500. target: 'release_transactions_open_in_discover',
  501. description: t(
  502. `Analyze these performance issues by URL, geography, device, browser, etc.`
  503. ),
  504. },
  505. ],
  506. },
  507. {
  508. guide: 'discover_landing',
  509. requiredTargets: ['discover_landing_header'],
  510. steps: [
  511. {
  512. title: t('Discover'),
  513. target: 'discover_landing_header',
  514. description: t(
  515. `Click into any of the queries below to identify trends in event data.`
  516. ),
  517. },
  518. ],
  519. },
  520. {
  521. guide: 'discover_event_view',
  522. requiredTargets: ['create_alert_from_discover'],
  523. steps: [
  524. {
  525. title: t('Create Alert'),
  526. target: 'create_alert_from_discover',
  527. description: t(
  528. `Create an alert based on this query to get notified when an event exceeds user-defined thresholds.`
  529. ),
  530. },
  531. {
  532. title: t('Columns'),
  533. target: 'columns_header_button',
  534. description: t(
  535. `There's a whole lot more to... _discover_. View all the query conditions.`
  536. ),
  537. },
  538. ],
  539. },
  540. {
  541. guide: 'transaction_details',
  542. requiredTargets: ['span_tree'],
  543. steps: [
  544. {
  545. title: t('Span Tree'),
  546. target: 'span_tree',
  547. description: t(
  548. `Expand the spans to see span details from start date, end date to the operation.`
  549. ),
  550. },
  551. {
  552. title: t('Breadcrumbs'),
  553. target: 'breadcrumbs',
  554. description: t(
  555. `Check out the play by play of what your user experienced till they encountered the performance issue.`
  556. ),
  557. },
  558. ],
  559. },
  560. ];
  561. }