ObservabilityMenu.utils.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import { IS_PLATFORM } from '@/lib/constants'
  2. interface ObservabilityMenuItem {
  3. name: string
  4. key: string
  5. url: string
  6. }
  7. export interface ObservabilityMenuSection {
  8. title: string
  9. key: string
  10. items: ObservabilityMenuItem[]
  11. }
  12. interface GenerateObservabilityMenuOptions {
  13. ref: string | undefined
  14. preservedQueryParams: string
  15. showOverview: boolean
  16. isSupamonitorEnabled: boolean
  17. storageSupported: boolean
  18. isPlatform?: boolean
  19. }
  20. export function generateObservabilityMenuItems(
  21. options: GenerateObservabilityMenuOptions
  22. ): ObservabilityMenuSection[] {
  23. const {
  24. ref,
  25. preservedQueryParams,
  26. showOverview,
  27. isSupamonitorEnabled,
  28. storageSupported,
  29. isPlatform = IS_PLATFORM,
  30. } = options
  31. const generalItems: ObservabilityMenuItem[] = [
  32. ...(showOverview
  33. ? [
  34. {
  35. name: 'Overview',
  36. key: 'observability',
  37. url: `/project/${ref}/observability${preservedQueryParams}`,
  38. },
  39. ]
  40. : []),
  41. ...(isSupamonitorEnabled
  42. ? [
  43. {
  44. name: 'Query Insights',
  45. key: 'query-insights',
  46. url: `/project/${ref}/observability/query-insights${preservedQueryParams}`,
  47. },
  48. ]
  49. : [
  50. {
  51. name: 'Query Performance',
  52. key: 'query-performance',
  53. url: `/project/${ref}/observability/query-performance${preservedQueryParams}`,
  54. },
  55. ]),
  56. ...(isPlatform
  57. ? [
  58. {
  59. name: 'API Gateway',
  60. key: 'api-overview',
  61. url: `/project/${ref}/observability/api-overview${preservedQueryParams}`,
  62. },
  63. ]
  64. : []),
  65. ]
  66. const productItems: ObservabilityMenuItem[] = [
  67. {
  68. name: 'Database',
  69. key: 'database',
  70. url: `/project/${ref}/observability/database${preservedQueryParams}`,
  71. },
  72. {
  73. name: 'Data API',
  74. key: 'postgrest',
  75. url: `/project/${ref}/observability/postgrest${preservedQueryParams}`,
  76. },
  77. {
  78. name: 'Auth',
  79. key: 'auth',
  80. url: `/project/${ref}/observability/auth${preservedQueryParams}`,
  81. },
  82. {
  83. name: 'Edge Functions',
  84. key: 'edge-functions',
  85. url: `/project/${ref}/observability/edge-functions${preservedQueryParams}`,
  86. },
  87. ...(storageSupported
  88. ? [
  89. {
  90. name: 'Storage',
  91. key: 'storage',
  92. url: `/project/${ref}/observability/storage${preservedQueryParams}`,
  93. },
  94. ]
  95. : []),
  96. {
  97. name: 'Realtime',
  98. key: 'realtime',
  99. url: `/project/${ref}/observability/realtime${preservedQueryParams}`,
  100. },
  101. ]
  102. const sections: ObservabilityMenuSection[] = [
  103. {
  104. title: 'GENERAL',
  105. key: 'general-section',
  106. items: generalItems,
  107. },
  108. ]
  109. if (isPlatform) {
  110. sections.push({
  111. title: 'PRODUCT',
  112. key: 'product-section',
  113. items: productItems,
  114. })
  115. }
  116. return sections
  117. }