@perses-dev/alert-manager-plugin 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +41 -0
  3. package/__mf/css/async/7790.85c2cbf6.css +1 -0
  4. package/__mf/font/inter-cyrillic-300-normal.432f2b21.woff +0 -0
  5. package/__mf/font/inter-cyrillic-300-normal.9da91009.woff2 +0 -0
  6. package/__mf/font/inter-cyrillic-400-normal.372704ff.woff2 +0 -0
  7. package/__mf/font/inter-cyrillic-400-normal.a6b6ef6f.woff +0 -0
  8. package/__mf/font/inter-cyrillic-500-normal.7c15bba8.woff2 +0 -0
  9. package/__mf/font/inter-cyrillic-500-normal.b9f8c929.woff +0 -0
  10. package/__mf/font/inter-cyrillic-600-normal.2f42892a.woff2 +0 -0
  11. package/__mf/font/inter-cyrillic-600-normal.c3987adc.woff +0 -0
  12. package/__mf/font/inter-cyrillic-700-normal.93eba3c3.woff +0 -0
  13. package/__mf/font/inter-cyrillic-700-normal.e9e5b2dc.woff2 +0 -0
  14. package/__mf/font/inter-cyrillic-900-normal.f285bd7a.woff2 +0 -0
  15. package/__mf/font/inter-cyrillic-900-normal.ffbd8a3a.woff +0 -0
  16. package/__mf/font/inter-cyrillic-ext-300-normal.95bb9038.woff2 +0 -0
  17. package/__mf/font/inter-cyrillic-ext-300-normal.cfc143a9.woff +0 -0
  18. package/__mf/font/inter-cyrillic-ext-400-normal.2a31c04b.woff +0 -0
  19. package/__mf/font/inter-cyrillic-ext-400-normal.f572b170.woff2 +0 -0
  20. package/__mf/font/inter-cyrillic-ext-500-normal.5a6bb1da.woff +0 -0
  21. package/__mf/font/inter-cyrillic-ext-500-normal.fe0d9b14.woff2 +0 -0
  22. package/__mf/font/inter-cyrillic-ext-600-normal.ecbdecad.woff +0 -0
  23. package/__mf/font/inter-cyrillic-ext-600-normal.f7b3c15b.woff2 +0 -0
  24. package/__mf/font/inter-cyrillic-ext-700-normal.4b4022a6.woff +0 -0
  25. package/__mf/font/inter-cyrillic-ext-700-normal.74b516d2.woff2 +0 -0
  26. package/__mf/font/inter-cyrillic-ext-900-normal.9970ddb5.woff +0 -0
  27. package/__mf/font/inter-cyrillic-ext-900-normal.a0d59adc.woff2 +0 -0
  28. package/__mf/font/inter-greek-300-normal.0d7be683.woff2 +0 -0
  29. package/__mf/font/inter-greek-300-normal.8f0b988e.woff +0 -0
  30. package/__mf/font/inter-greek-400-normal.cc58c11b.woff +0 -0
  31. package/__mf/font/inter-greek-400-normal.d7020e3c.woff2 +0 -0
  32. package/__mf/font/inter-greek-500-normal.d9a33207.woff +0 -0
  33. package/__mf/font/inter-greek-500-normal.f41f43db.woff2 +0 -0
  34. package/__mf/font/inter-greek-600-normal.4ec0c1c1.woff +0 -0
  35. package/__mf/font/inter-greek-600-normal.cc532937.woff2 +0 -0
  36. package/__mf/font/inter-greek-700-normal.5ec6c758.woff +0 -0
  37. package/__mf/font/inter-greek-700-normal.97f0eeeb.woff2 +0 -0
  38. package/__mf/font/inter-greek-900-normal.46b66369.woff2 +0 -0
  39. package/__mf/font/inter-greek-900-normal.9ae3a3c5.woff +0 -0
  40. package/__mf/font/inter-greek-ext-300-normal.10247a66.woff2 +0 -0
  41. package/__mf/font/inter-greek-ext-300-normal.4668e5cb.woff +0 -0
  42. package/__mf/font/inter-greek-ext-400-normal.4ce1df5d.woff2 +0 -0
  43. package/__mf/font/inter-greek-ext-400-normal.88ede1ea.woff +0 -0
  44. package/__mf/font/inter-greek-ext-500-normal.7a4aa726.woff +0 -0
  45. package/__mf/font/inter-greek-ext-500-normal.cbd51e2d.woff2 +0 -0
  46. package/__mf/font/inter-greek-ext-600-normal.089a95ee.woff +0 -0
  47. package/__mf/font/inter-greek-ext-600-normal.1f33d317.woff2 +0 -0
  48. package/__mf/font/inter-greek-ext-700-normal.31f1075d.woff +0 -0
  49. package/__mf/font/inter-greek-ext-700-normal.827cd618.woff2 +0 -0
  50. package/__mf/font/inter-greek-ext-900-normal.531bcee7.woff +0 -0
  51. package/__mf/font/inter-greek-ext-900-normal.8a9b36b9.woff2 +0 -0
  52. package/__mf/font/inter-latin-300-normal.15fb600d.woff2 +0 -0
  53. package/__mf/font/inter-latin-300-normal.6f95f590.woff +0 -0
  54. package/__mf/font/inter-latin-400-normal.2c7a775c.woff +0 -0
  55. package/__mf/font/inter-latin-400-normal.ef6d3f52.woff2 +0 -0
  56. package/__mf/font/inter-latin-500-normal.b7b43ace.woff2 +0 -0
  57. package/__mf/font/inter-latin-500-normal.cb4c8ceb.woff +0 -0
  58. package/__mf/font/inter-latin-600-normal.8fb1a964.woff2 +0 -0
  59. package/__mf/font/inter-latin-600-normal.ce0f5f43.woff +0 -0
  60. package/__mf/font/inter-latin-700-normal.953b7aa5.woff2 +0 -0
  61. package/__mf/font/inter-latin-700-normal.9c21d4dc.woff +0 -0
  62. package/__mf/font/inter-latin-900-normal.2a8028ec.woff2 +0 -0
  63. package/__mf/font/inter-latin-900-normal.fa252135.woff +0 -0
  64. package/__mf/font/inter-latin-ext-300-normal.167cc8c9.woff2 +0 -0
  65. package/__mf/font/inter-latin-ext-300-normal.f695be66.woff +0 -0
  66. package/__mf/font/inter-latin-ext-400-normal.32a25442.woff2 +0 -0
  67. package/__mf/font/inter-latin-ext-400-normal.4edcaace.woff +0 -0
  68. package/__mf/font/inter-latin-ext-500-normal.a19a84a6.woff +0 -0
  69. package/__mf/font/inter-latin-ext-500-normal.d9b491de.woff2 +0 -0
  70. package/__mf/font/inter-latin-ext-600-normal.38b075d8.woff2 +0 -0
  71. package/__mf/font/inter-latin-ext-600-normal.49faa47a.woff +0 -0
  72. package/__mf/font/inter-latin-ext-700-normal.93534b50.woff +0 -0
  73. package/__mf/font/inter-latin-ext-700-normal.b63daa1a.woff2 +0 -0
  74. package/__mf/font/inter-latin-ext-900-normal.0efdb307.woff +0 -0
  75. package/__mf/font/inter-latin-ext-900-normal.9c0fc2c7.woff2 +0 -0
  76. package/__mf/font/inter-vietnamese-300-normal.aad496d8.woff +0 -0
  77. package/__mf/font/inter-vietnamese-300-normal.ad9ef503.woff2 +0 -0
  78. package/__mf/font/inter-vietnamese-400-normal.a9dd2faf.woff +0 -0
  79. package/__mf/font/inter-vietnamese-400-normal.de4fc44f.woff2 +0 -0
  80. package/__mf/font/inter-vietnamese-500-normal.7c0a695f.woff2 +0 -0
  81. package/__mf/font/inter-vietnamese-500-normal.a3a73b95.woff +0 -0
  82. package/__mf/font/inter-vietnamese-600-normal.9d518599.woff2 +0 -0
  83. package/__mf/font/inter-vietnamese-600-normal.c5ce3fcb.woff +0 -0
  84. package/__mf/font/inter-vietnamese-700-normal.bc68b199.woff +0 -0
  85. package/__mf/font/inter-vietnamese-700-normal.faf12809.woff2 +0 -0
  86. package/__mf/font/inter-vietnamese-900-normal.2b782045.woff +0 -0
  87. package/__mf/font/inter-vietnamese-900-normal.e639b65a.woff2 +0 -0
  88. package/__mf/js/AlertManager.f762e62c.js +7 -0
  89. package/__mf/js/async/1616.24f00c9d.js +1 -0
  90. package/__mf/js/async/1728.83bb9a7c.js +1 -0
  91. package/__mf/js/async/1871.23ff54b3.js +1 -0
  92. package/__mf/js/async/1969.a83b1b48.js +1 -0
  93. package/__mf/js/async/2218.7829c9d9.js +2 -0
  94. package/__mf/js/async/2218.7829c9d9.js.LICENSE.txt +9 -0
  95. package/__mf/js/async/2377.f8875a4e.js +1 -0
  96. package/__mf/js/async/2657.fe8dd44f.js +1 -0
  97. package/__mf/js/async/2954.3ac1f636.js +2 -0
  98. package/__mf/js/async/392.7e11dd69.js +2 -0
  99. package/__mf/js/async/392.7e11dd69.js.LICENSE.txt +8 -0
  100. package/__mf/js/async/3963.fb6246d2.js +1 -0
  101. package/__mf/js/async/4121.ec666be2.js +2 -0
  102. package/__mf/js/async/4121.ec666be2.js.LICENSE.txt +9 -0
  103. package/__mf/js/async/4133.e94df4f8.js +28 -0
  104. package/__mf/js/async/4213.a0c4f2eb.js +1 -0
  105. package/__mf/js/async/4397.d399eecb.js +2 -0
  106. package/__mf/js/async/4397.d399eecb.js.LICENSE.txt +37 -0
  107. package/__mf/js/async/4466.a8145edd.js +74 -0
  108. package/__mf/js/async/4732.e866a740.js +1 -0
  109. package/__mf/js/async/4788.49ffeac3.js +1 -0
  110. package/__mf/js/async/5038.269393e3.js +2 -0
  111. package/__mf/js/async/5038.269393e3.js.LICENSE.txt +9 -0
  112. package/__mf/js/async/573.214f2003.js +2 -0
  113. package/__mf/js/async/573.214f2003.js.LICENSE.txt +9 -0
  114. package/__mf/js/async/6274.8c77cb1a.js +2 -0
  115. package/__mf/js/async/6274.8c77cb1a.js.LICENSE.txt +8 -0
  116. package/__mf/js/async/6390.3f6f279d.js +2 -0
  117. package/__mf/js/async/6390.3f6f279d.js.LICENSE.txt +9 -0
  118. package/__mf/js/async/6401.1a59dbad.js +1 -0
  119. package/__mf/js/async/6593.acc8b704.js +4 -0
  120. package/__mf/js/async/6593.acc8b704.js.LICENSE.txt +24 -0
  121. package/__mf/js/async/6594.b02adfd9.js +2 -0
  122. package/__mf/js/async/6594.b02adfd9.js.LICENSE.txt +9 -0
  123. package/__mf/js/async/663.5445c7e0.js +1 -0
  124. package/__mf/js/async/6854.1d628838.js +1 -0
  125. package/__mf/js/async/7177.27c86137.js +1 -0
  126. package/__mf/js/async/7192.ede9860b.js +1 -0
  127. package/__mf/js/async/733.22ab2a8a.js +1 -0
  128. package/__mf/js/async/7422.33d76364.js +2 -0
  129. package/__mf/js/async/7422.33d76364.js.LICENSE.txt +9 -0
  130. package/__mf/js/async/7790.a75199e6.js +7 -0
  131. package/__mf/js/async/7790.a75199e6.js.LICENSE.txt +64 -0
  132. package/__mf/js/async/7862.556c038f.js +2 -0
  133. package/__mf/js/async/7862.556c038f.js.LICENSE.txt +9 -0
  134. package/__mf/js/async/7984.49fa1156.js +22 -0
  135. package/__mf/js/async/7984.49fa1156.js.LICENSE.txt +19 -0
  136. package/__mf/js/async/804.23da0d30.js +37 -0
  137. package/__mf/js/async/8470.2df0db71.js +2 -0
  138. package/__mf/js/async/8470.2df0db71.js.LICENSE.txt +19 -0
  139. package/__mf/js/async/8697.c13c6603.js +1 -0
  140. package/__mf/js/async/8907.9e3edf43.js +1 -0
  141. package/__mf/js/async/9040.94717f28.js +10 -0
  142. package/__mf/js/async/9040.94717f28.js.LICENSE.txt +17 -0
  143. package/__mf/js/async/9184.27a439a4.js +1 -0
  144. package/__mf/js/async/9235.00f9412f.js +1 -0
  145. package/__mf/js/async/941.d3bc6208.js +2 -0
  146. package/__mf/js/async/941.d3bc6208.js.LICENSE.txt +9 -0
  147. package/__mf/js/async/9634.3a366799.js +1 -0
  148. package/__mf/js/async/9836.cc839227.js +1 -0
  149. package/__mf/js/async/__federation_expose_AlertManagerAlertsExplorer.d4fb76c0.js +2 -0
  150. package/__mf/js/async/__federation_expose_AlertManagerAlertsExplorer.d4fb76c0.js.LICENSE.txt +9 -0
  151. package/__mf/js/async/__federation_expose_AlertManagerAlertsQuery.9ea3093c.js +1 -0
  152. package/__mf/js/async/__federation_expose_AlertManagerDatasource.2fbf067c.js +2 -0
  153. package/__mf/js/async/__federation_expose_AlertManagerDatasource.2fbf067c.js.LICENSE.txt +9 -0
  154. package/__mf/js/async/__federation_expose_AlertManagerSilencesExplorer.d2527c12.js +2 -0
  155. package/__mf/js/async/__federation_expose_AlertManagerSilencesExplorer.d2527c12.js.LICENSE.txt +9 -0
  156. package/__mf/js/async/__federation_expose_AlertManagerSilencesQuery.7aca31d3.js +2 -0
  157. package/__mf/js/async/__federation_expose_AlertManagerSilencesQuery.7aca31d3.js.LICENSE.txt +9 -0
  158. package/__mf/js/async/__federation_expose_AlertTable.4a636b80.js +1 -0
  159. package/__mf/js/async/__federation_expose_SilenceTable.11259028.js +1 -0
  160. package/__mf/js/async/lib-router.19f64904.js +2 -0
  161. package/__mf/js/async/lib-router.19f64904.js.LICENSE.txt +32 -0
  162. package/__mf/js/main.a1362788.js +7 -0
  163. package/lib/bootstrap.d.ts +2 -0
  164. package/lib/bootstrap.d.ts.map +1 -0
  165. package/lib/bootstrap.js +19 -0
  166. package/lib/bootstrap.js.map +1 -0
  167. package/lib/cjs/bootstrap.js +26 -0
  168. package/lib/cjs/components/ColumnsEditor.js +271 -0
  169. package/lib/cjs/components/LazyTextField.js +50 -0
  170. package/lib/cjs/components/MatcherEditor.js +153 -0
  171. package/lib/cjs/components/MatchersList.js +46 -0
  172. package/lib/cjs/components/SilenceForm.js +205 -0
  173. package/lib/cjs/components/StatusBadge.js +71 -0
  174. package/lib/cjs/components/index.js +44 -0
  175. package/lib/cjs/explore/AlertManagerAlertsExplorer.js +79 -0
  176. package/lib/cjs/explore/AlertManagerSilencesExplorer.js +153 -0
  177. package/lib/cjs/getPluginModule.js +39 -0
  178. package/lib/cjs/index-federation.js +55 -0
  179. package/lib/cjs/index.js +39 -0
  180. package/lib/cjs/model/alertmanager-client.js +128 -0
  181. package/lib/cjs/model/alertmanager-selectors.js +66 -0
  182. package/lib/cjs/model/api-types.js +22 -0
  183. package/lib/cjs/model/index.js +32 -0
  184. package/lib/cjs/plugins/AlertManagerDatasourceEditor.js +71 -0
  185. package/lib/cjs/plugins/alert-table/AlertTable.js +56 -0
  186. package/lib/cjs/plugins/alert-table/AlertTableColumnsEditor.js +110 -0
  187. package/lib/cjs/plugins/alert-table/AlertTableDeduplicationEditor.js +138 -0
  188. package/lib/cjs/plugins/alert-table/AlertTableLabelsEditor.js +277 -0
  189. package/lib/cjs/plugins/alert-table/AlertTableOptionsEditor.js +128 -0
  190. package/lib/cjs/plugins/alert-table/AlertTablePanel.js +773 -0
  191. package/lib/cjs/plugins/alert-table/alert-table-model.js +142 -0
  192. package/lib/cjs/plugins/alert-table/alert-table-sorting.js +205 -0
  193. package/lib/cjs/plugins/alert-table/label-colors.js +170 -0
  194. package/lib/cjs/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.js +51 -0
  195. package/lib/cjs/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.js +138 -0
  196. package/lib/cjs/plugins/alertmanager-alerts-query/get-alerts-data.js +124 -0
  197. package/lib/cjs/plugins/alertmanager-datasource.js +69 -0
  198. package/lib/cjs/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.js +45 -0
  199. package/lib/cjs/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.js +78 -0
  200. package/lib/cjs/plugins/alertmanager-silences-query/get-silences-data.js +64 -0
  201. package/lib/cjs/plugins/index.js +74 -0
  202. package/lib/cjs/plugins/silence-table/SilenceTable.js +42 -0
  203. package/lib/cjs/plugins/silence-table/SilenceTableColumnsEditor.js +137 -0
  204. package/lib/cjs/plugins/silence-table/SilenceTableOptionsEditor.js +63 -0
  205. package/lib/cjs/plugins/silence-table/SilenceTablePanel.js +345 -0
  206. package/lib/cjs/plugins/silence-table/silence-table-model.js +116 -0
  207. package/lib/cjs/plugins/silence-table/silence-table-sorting.js +68 -0
  208. package/lib/cjs/plugins/types.js +16 -0
  209. package/lib/cjs/setup-tests.js +18 -0
  210. package/lib/components/ColumnsEditor.d.ts +25 -0
  211. package/lib/components/ColumnsEditor.d.ts.map +1 -0
  212. package/lib/components/ColumnsEditor.js +258 -0
  213. package/lib/components/ColumnsEditor.js.map +1 -0
  214. package/lib/components/LazyTextField.d.ts +12 -0
  215. package/lib/components/LazyTextField.d.ts.map +1 -0
  216. package/lib/components/LazyTextField.js +42 -0
  217. package/lib/components/LazyTextField.js.map +1 -0
  218. package/lib/components/MatcherEditor.d.ts +17 -0
  219. package/lib/components/MatcherEditor.d.ts.map +1 -0
  220. package/lib/components/MatcherEditor.js +142 -0
  221. package/lib/components/MatcherEditor.js.map +1 -0
  222. package/lib/components/MatchersList.d.ts +10 -0
  223. package/lib/components/MatchersList.d.ts.map +1 -0
  224. package/lib/components/MatchersList.js +40 -0
  225. package/lib/components/MatchersList.js.map +1 -0
  226. package/lib/components/SilenceForm.d.ts +13 -0
  227. package/lib/components/SilenceForm.d.ts.map +1 -0
  228. package/lib/components/SilenceForm.js +194 -0
  229. package/lib/components/SilenceForm.js.map +1 -0
  230. package/lib/components/StatusBadge.d.ts +10 -0
  231. package/lib/components/StatusBadge.d.ts.map +1 -0
  232. package/lib/components/StatusBadge.js +65 -0
  233. package/lib/components/StatusBadge.js.map +1 -0
  234. package/lib/components/index.d.ts +11 -0
  235. package/lib/components/index.d.ts.map +1 -0
  236. package/lib/components/index.js +19 -0
  237. package/lib/components/index.js.map +1 -0
  238. package/lib/explore/AlertManagerAlertsExplorer.d.ts +3 -0
  239. package/lib/explore/AlertManagerAlertsExplorer.d.ts.map +1 -0
  240. package/lib/explore/AlertManagerAlertsExplorer.js +71 -0
  241. package/lib/explore/AlertManagerAlertsExplorer.js.map +1 -0
  242. package/lib/explore/AlertManagerSilencesExplorer.d.ts +3 -0
  243. package/lib/explore/AlertManagerSilencesExplorer.d.ts.map +1 -0
  244. package/lib/explore/AlertManagerSilencesExplorer.js +140 -0
  245. package/lib/explore/AlertManagerSilencesExplorer.js.map +1 -0
  246. package/lib/getPluginModule.d.ts +3 -0
  247. package/lib/getPluginModule.d.ts.map +1 -0
  248. package/lib/getPluginModule.js +26 -0
  249. package/lib/getPluginModule.js.map +1 -0
  250. package/lib/index-federation.d.ts +1 -0
  251. package/lib/index-federation.d.ts.map +1 -0
  252. package/lib/index-federation.js +15 -0
  253. package/lib/index-federation.js.map +1 -0
  254. package/lib/index.d.ts +5 -0
  255. package/lib/index.d.ts.map +1 -0
  256. package/lib/index.js +18 -0
  257. package/lib/index.js.map +1 -0
  258. package/lib/model/alertmanager-client.d.ts +27 -0
  259. package/lib/model/alertmanager-client.d.ts.map +1 -0
  260. package/lib/model/alertmanager-client.js +100 -0
  261. package/lib/model/alertmanager-client.js.map +1 -0
  262. package/lib/model/alertmanager-selectors.d.ts +13 -0
  263. package/lib/model/alertmanager-selectors.d.ts.map +1 -0
  264. package/lib/model/alertmanager-selectors.js +41 -0
  265. package/lib/model/alertmanager-selectors.js.map +1 -0
  266. package/lib/model/api-types.d.ts +120 -0
  267. package/lib/model/api-types.d.ts.map +1 -0
  268. package/lib/model/api-types.js +23 -0
  269. package/lib/model/api-types.js.map +1 -0
  270. package/lib/model/index.d.ts +4 -0
  271. package/lib/model/index.d.ts.map +1 -0
  272. package/lib/model/index.js +17 -0
  273. package/lib/model/index.js.map +1 -0
  274. package/lib/plugins/AlertManagerDatasourceEditor.d.ts +9 -0
  275. package/lib/plugins/AlertManagerDatasourceEditor.d.ts.map +1 -0
  276. package/lib/plugins/AlertManagerDatasourceEditor.js +63 -0
  277. package/lib/plugins/AlertManagerDatasourceEditor.js.map +1 -0
  278. package/lib/plugins/alert-table/AlertTable.d.ts +8 -0
  279. package/lib/plugins/alert-table/AlertTable.d.ts.map +1 -0
  280. package/lib/plugins/alert-table/AlertTable.js +50 -0
  281. package/lib/plugins/alert-table/AlertTable.js.map +1 -0
  282. package/lib/plugins/alert-table/AlertTableColumnsEditor.d.ts +5 -0
  283. package/lib/plugins/alert-table/AlertTableColumnsEditor.d.ts.map +1 -0
  284. package/lib/plugins/alert-table/AlertTableColumnsEditor.js +102 -0
  285. package/lib/plugins/alert-table/AlertTableColumnsEditor.js.map +1 -0
  286. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.d.ts +5 -0
  287. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.d.ts.map +1 -0
  288. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.js +130 -0
  289. package/lib/plugins/alert-table/AlertTableDeduplicationEditor.js.map +1 -0
  290. package/lib/plugins/alert-table/AlertTableLabelsEditor.d.ts +5 -0
  291. package/lib/plugins/alert-table/AlertTableLabelsEditor.d.ts.map +1 -0
  292. package/lib/plugins/alert-table/AlertTableLabelsEditor.js +264 -0
  293. package/lib/plugins/alert-table/AlertTableLabelsEditor.js.map +1 -0
  294. package/lib/plugins/alert-table/AlertTableOptionsEditor.d.ts +5 -0
  295. package/lib/plugins/alert-table/AlertTableOptionsEditor.d.ts.map +1 -0
  296. package/lib/plugins/alert-table/AlertTableOptionsEditor.js +120 -0
  297. package/lib/plugins/alert-table/AlertTableOptionsEditor.js.map +1 -0
  298. package/lib/plugins/alert-table/AlertTablePanel.d.ts +11 -0
  299. package/lib/plugins/alert-table/AlertTablePanel.d.ts.map +1 -0
  300. package/lib/plugins/alert-table/AlertTablePanel.js +763 -0
  301. package/lib/plugins/alert-table/AlertTablePanel.js.map +1 -0
  302. package/lib/plugins/alert-table/alert-table-model.d.ts +73 -0
  303. package/lib/plugins/alert-table/alert-table-model.d.ts.map +1 -0
  304. package/lib/plugins/alert-table/alert-table-model.js +127 -0
  305. package/lib/plugins/alert-table/alert-table-model.js.map +1 -0
  306. package/lib/plugins/alert-table/alert-table-sorting.d.ts +13 -0
  307. package/lib/plugins/alert-table/alert-table-sorting.d.ts.map +1 -0
  308. package/lib/plugins/alert-table/alert-table-sorting.js +180 -0
  309. package/lib/plugins/alert-table/alert-table-sorting.js.map +1 -0
  310. package/lib/plugins/alert-table/label-colors.d.ts +6 -0
  311. package/lib/plugins/alert-table/label-colors.d.ts.map +1 -0
  312. package/lib/plugins/alert-table/label-colors.js +148 -0
  313. package/lib/plugins/alert-table/label-colors.js.map +1 -0
  314. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.d.ts +4 -0
  315. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.d.ts.map +1 -0
  316. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.js +43 -0
  317. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQuery.js.map +1 -0
  318. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.d.ts +9 -0
  319. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.d.ts.map +1 -0
  320. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.js +130 -0
  321. package/lib/plugins/alertmanager-alerts-query/AlertManagerAlertsQueryEditor.js.map +1 -0
  322. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.d.ts +8 -0
  323. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.d.ts.map +1 -0
  324. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.js +118 -0
  325. package/lib/plugins/alertmanager-alerts-query/get-alerts-data.js.map +1 -0
  326. package/lib/plugins/alertmanager-datasource.d.ts +5 -0
  327. package/lib/plugins/alertmanager-datasource.d.ts.map +1 -0
  328. package/lib/plugins/alertmanager-datasource.js +61 -0
  329. package/lib/plugins/alertmanager-datasource.js.map +1 -0
  330. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.d.ts +4 -0
  331. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.d.ts.map +1 -0
  332. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.js +37 -0
  333. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQuery.js.map +1 -0
  334. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.d.ts +9 -0
  335. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.d.ts.map +1 -0
  336. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.js +70 -0
  337. package/lib/plugins/alertmanager-silences-query/AlertManagerSilencesQueryEditor.js.map +1 -0
  338. package/lib/plugins/alertmanager-silences-query/get-silences-data.d.ts +8 -0
  339. package/lib/plugins/alertmanager-silences-query/get-silences-data.d.ts.map +1 -0
  340. package/lib/plugins/alertmanager-silences-query/get-silences-data.js +58 -0
  341. package/lib/plugins/alertmanager-silences-query/get-silences-data.js.map +1 -0
  342. package/lib/plugins/index.d.ts +19 -0
  343. package/lib/plugins/index.d.ts.map +1 -0
  344. package/lib/plugins/index.js +30 -0
  345. package/lib/plugins/index.js.map +1 -0
  346. package/lib/plugins/silence-table/SilenceTable.d.ts +7 -0
  347. package/lib/plugins/silence-table/SilenceTable.d.ts.map +1 -0
  348. package/lib/plugins/silence-table/SilenceTable.js +36 -0
  349. package/lib/plugins/silence-table/SilenceTable.js.map +1 -0
  350. package/lib/plugins/silence-table/SilenceTableColumnsEditor.d.ts +5 -0
  351. package/lib/plugins/silence-table/SilenceTableColumnsEditor.d.ts.map +1 -0
  352. package/lib/plugins/silence-table/SilenceTableColumnsEditor.js +129 -0
  353. package/lib/plugins/silence-table/SilenceTableColumnsEditor.js.map +1 -0
  354. package/lib/plugins/silence-table/SilenceTableOptionsEditor.d.ts +5 -0
  355. package/lib/plugins/silence-table/SilenceTableOptionsEditor.d.ts.map +1 -0
  356. package/lib/plugins/silence-table/SilenceTableOptionsEditor.js +55 -0
  357. package/lib/plugins/silence-table/SilenceTableOptionsEditor.js.map +1 -0
  358. package/lib/plugins/silence-table/SilenceTablePanel.d.ts +11 -0
  359. package/lib/plugins/silence-table/SilenceTablePanel.d.ts.map +1 -0
  360. package/lib/plugins/silence-table/SilenceTablePanel.js +335 -0
  361. package/lib/plugins/silence-table/SilenceTablePanel.js.map +1 -0
  362. package/lib/plugins/silence-table/silence-table-model.d.ts +29 -0
  363. package/lib/plugins/silence-table/silence-table-model.d.ts.map +1 -0
  364. package/lib/plugins/silence-table/silence-table-model.js +90 -0
  365. package/lib/plugins/silence-table/silence-table-model.js.map +1 -0
  366. package/lib/plugins/silence-table/silence-table-sorting.d.ts +9 -0
  367. package/lib/plugins/silence-table/silence-table-sorting.d.ts.map +1 -0
  368. package/lib/plugins/silence-table/silence-table-sorting.js +60 -0
  369. package/lib/plugins/silence-table/silence-table-sorting.js.map +1 -0
  370. package/lib/plugins/types.d.ts +30 -0
  371. package/lib/plugins/types.d.ts.map +1 -0
  372. package/lib/plugins/types.js +17 -0
  373. package/lib/plugins/types.js.map +1 -0
  374. package/lib/setup-tests.d.ts +2 -0
  375. package/lib/setup-tests.d.ts.map +1 -0
  376. package/lib/setup-tests.js +16 -0
  377. package/lib/setup-tests.js.map +1 -0
  378. package/mf-manifest.json +631 -0
  379. package/mf-stats.json +752 -0
  380. package/package.json +115 -0
@@ -0,0 +1,773 @@
1
+ // Copyright The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ Object.defineProperty(exports, "AlertTablePanel", {
18
+ enumerable: true,
19
+ get: function() {
20
+ return AlertTablePanel;
21
+ }
22
+ });
23
+ const _jsxruntime = require("react/jsx-runtime");
24
+ const _material = require("@mui/material");
25
+ const _components = require("@perses-dev/components");
26
+ const _pluginsystem = require("@perses-dev/plugin-system");
27
+ const _reactquery = require("@tanstack/react-query");
28
+ const _BellOff = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/BellOff"));
29
+ const _BookOpen = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/BookOpen"));
30
+ const _ChevronDown = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/ChevronDown"));
31
+ const _ChevronRight = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/ChevronRight"));
32
+ const _Magnify = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/Magnify"));
33
+ const _UnfoldLessHorizontal = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/UnfoldLessHorizontal"));
34
+ const _UnfoldMoreHorizontal = /*#__PURE__*/ _interop_require_default(require("mdi-material-ui/UnfoldMoreHorizontal"));
35
+ const _react = require("react");
36
+ const _SilenceForm = require("../../components/SilenceForm");
37
+ const _StatusBadge = require("../../components/StatusBadge");
38
+ const _model = require("../../model");
39
+ const _alerttablemodel = require("./alert-table-model");
40
+ const _alerttablesorting = require("./alert-table-sorting");
41
+ const _labelcolors = require("./label-colors");
42
+ function _interop_require_default(obj) {
43
+ return obj && obj.__esModule ? obj : {
44
+ default: obj
45
+ };
46
+ }
47
+ function GroupSummaryChips({ summary }) {
48
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
49
+ direction: "row",
50
+ spacing: 0.5,
51
+ children: [
52
+ summary.firing > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
53
+ label: `${summary.firing} firing`,
54
+ color: "error",
55
+ size: "small"
56
+ }),
57
+ summary.suppressed > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
58
+ label: `${summary.suppressed} silenced`,
59
+ color: "warning",
60
+ size: "small"
61
+ }),
62
+ summary.pending > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
63
+ label: `${summary.pending} pending`,
64
+ color: "default",
65
+ size: "small"
66
+ })
67
+ ]
68
+ });
69
+ }
70
+ function LabelValueSummaryChips({ summary, mapping }) {
71
+ const counts = summary.labelCounts?.[mapping.labelKey];
72
+ if (!counts || Object.keys(counts).length === 0) {
73
+ return null;
74
+ }
75
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Stack, {
76
+ direction: "row",
77
+ spacing: 0.5,
78
+ children: Object.entries(counts).sort(([, a], [, b])=>b - a).map(([value, count])=>{
79
+ const bgColor = (0, _labelcolors.getLabelColor)(value, mapping);
80
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
81
+ label: `${count} ${value}`,
82
+ size: "small",
83
+ sx: {
84
+ backgroundColor: bgColor,
85
+ color: '#fff',
86
+ fontWeight: 500
87
+ }
88
+ }, value);
89
+ })
90
+ });
91
+ }
92
+ function AlertRow({ alert, allowedActions, columnDefs, columnKeySet, mappingsByKey, runbookAnnotationKey, onSilence, duplicateCount, showDuplicates }) {
93
+ const runbookUrl = alert.annotations?.[runbookAnnotationKey];
94
+ const showActions = allowedActions.length > 0;
95
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.TableRow, {
96
+ hover: true,
97
+ children: [
98
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
99
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_StatusBadge.StatusBadge, {
100
+ status: alert.suppressed ? 'suppressed' : alert.state,
101
+ variant: "alert"
102
+ })
103
+ }),
104
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
105
+ children: alert.name
106
+ }),
107
+ columnDefs.map((col, colIdx)=>{
108
+ const value = alert.labels[col.name];
109
+ const mapping = mappingsByKey.get(col.name);
110
+ if (value !== undefined && mapping) {
111
+ const bgColor = (0, _labelcolors.getLabelColor)(value, mapping);
112
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
113
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
114
+ label: value,
115
+ size: "small",
116
+ sx: {
117
+ backgroundColor: bgColor,
118
+ color: '#fff',
119
+ fontWeight: 500
120
+ }
121
+ })
122
+ }, colIdx);
123
+ }
124
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
125
+ children: value ?? ''
126
+ }, colIdx);
127
+ }),
128
+ showDuplicates && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
129
+ children: duplicateCount !== undefined && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
130
+ label: `${duplicateCount}`,
131
+ size: "small",
132
+ variant: "outlined",
133
+ color: "info"
134
+ })
135
+ }),
136
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
137
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Stack, {
138
+ direction: "row",
139
+ spacing: 0.5,
140
+ flexWrap: "wrap",
141
+ useFlexGap: true,
142
+ children: Object.entries(alert.labels).filter(([key])=>key !== 'alertname' && !columnKeySet.has(key)).map(([key, value])=>{
143
+ const mapping = mappingsByKey.get(key);
144
+ if (mapping) {
145
+ const bgColor = (0, _labelcolors.getLabelColor)(value, mapping);
146
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
147
+ label: `${key}=${value}`,
148
+ size: "small",
149
+ sx: {
150
+ backgroundColor: bgColor,
151
+ color: '#fff',
152
+ fontWeight: 500
153
+ }
154
+ }, key);
155
+ }
156
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
157
+ label: `${key}=${value}`,
158
+ size: "small",
159
+ variant: "outlined"
160
+ }, key);
161
+ })
162
+ })
163
+ }),
164
+ showActions && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
165
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
166
+ direction: "row",
167
+ spacing: 0.5,
168
+ children: [
169
+ allowedActions.includes('silence') && !alert.suppressed && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Tooltip, {
170
+ title: "Silence this alert",
171
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.IconButton, {
172
+ size: "small",
173
+ "aria-label": "Silence alert",
174
+ onClick: ()=>onSilence(alert),
175
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_BellOff.default, {
176
+ fontSize: "small"
177
+ })
178
+ })
179
+ }),
180
+ allowedActions.includes('runbook') && runbookUrl && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Tooltip, {
181
+ title: "View runbook",
182
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.IconButton, {
183
+ size: "small",
184
+ "aria-label": "View runbook",
185
+ component: "a",
186
+ href: runbookUrl,
187
+ target: "_blank",
188
+ rel: "noopener noreferrer",
189
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_BookOpen.default, {
190
+ fontSize: "small"
191
+ })
192
+ })
193
+ })
194
+ ]
195
+ })
196
+ })
197
+ ]
198
+ });
199
+ }
200
+ function AlertGroupRow({ group, expanded, allowedActions, columnDefs, columnKeySet, labelColorMappings, mappingsByKey, runbookAnnotationKey, onToggle, onSilence, duplicateCounts, showDuplicates }) {
201
+ const showActions = allowedActions.length > 0;
202
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
203
+ children: [
204
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.TableRow, {
205
+ sx: {
206
+ cursor: 'pointer',
207
+ '& > td': {
208
+ fontWeight: 'bold'
209
+ }
210
+ },
211
+ onClick: onToggle,
212
+ children: [
213
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
214
+ colSpan: 2,
215
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
216
+ direction: "row",
217
+ spacing: 1,
218
+ alignItems: "center",
219
+ children: [
220
+ expanded ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_ChevronDown.default, {}) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_ChevronRight.default, {}),
221
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
222
+ variant: "body2",
223
+ fontWeight: "bold",
224
+ children: group.key || 'Ungrouped'
225
+ }),
226
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
227
+ label: `${group.summary.total}`,
228
+ size: "small",
229
+ variant: "outlined"
230
+ })
231
+ ]
232
+ })
233
+ }),
234
+ columnDefs.map((col, colIdx)=>{
235
+ const counts = group.summary.labelCounts?.[col.name];
236
+ const mapping = mappingsByKey.get(col.name);
237
+ if (counts && mapping) {
238
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
239
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LabelValueSummaryChips, {
240
+ summary: group.summary,
241
+ mapping: mapping
242
+ })
243
+ }, colIdx);
244
+ }
245
+ if (counts) {
246
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
247
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Stack, {
248
+ direction: "row",
249
+ spacing: 0.5,
250
+ children: Object.entries(counts).sort(([, a], [, b])=>b - a).map(([value, count])=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Chip, {
251
+ label: `${count} ${value}`,
252
+ size: "small",
253
+ variant: "outlined"
254
+ }, value))
255
+ })
256
+ }, colIdx);
257
+ }
258
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {}, colIdx);
259
+ }),
260
+ showDuplicates && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {}),
261
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
262
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
263
+ direction: "row",
264
+ spacing: 1,
265
+ alignItems: "center",
266
+ flexWrap: "wrap",
267
+ useFlexGap: true,
268
+ children: [
269
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(GroupSummaryChips, {
270
+ summary: group.summary
271
+ }),
272
+ labelColorMappings.filter((mapping)=>!columnKeySet.has(mapping.labelKey)).map((mapping)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(LabelValueSummaryChips, {
273
+ summary: group.summary,
274
+ mapping: mapping
275
+ }, mapping.labelKey))
276
+ ]
277
+ })
278
+ }),
279
+ showActions && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {})
280
+ ]
281
+ }),
282
+ expanded && group.alerts.map((alert, idx)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(AlertRow, {
283
+ alert: alert,
284
+ allowedActions: allowedActions,
285
+ columnDefs: columnDefs,
286
+ columnKeySet: columnKeySet,
287
+ mappingsByKey: mappingsByKey,
288
+ runbookAnnotationKey: runbookAnnotationKey,
289
+ onSilence: onSilence,
290
+ duplicateCount: duplicateCounts.get(alert),
291
+ showDuplicates: showDuplicates
292
+ }, alert.id ?? String(idx)))
293
+ ]
294
+ });
295
+ }
296
+ function AlertTablePanel({ spec, queryResults, contentDimensions }) {
297
+ const datasourceSelector = (0, _react.useMemo)(()=>(0, _model.extractDatasourceSelector)(queryResults), [
298
+ queryResults
299
+ ]);
300
+ const { data: amClient } = (0, _pluginsystem.useDatasourceClient)(datasourceSelector);
301
+ const queryClient = (0, _reactquery.useQueryClient)();
302
+ const [silenceTarget, setSilenceTarget] = (0, _react.useState)(null);
303
+ const silenceKeyRef = (0, _react.useRef)(0);
304
+ const handleSetSilenceTarget = (0, _react.useCallback)((alert)=>{
305
+ silenceKeyRef.current++;
306
+ setSilenceTarget(alert);
307
+ }, []);
308
+ const [search, setSearch] = (0, _react.useState)('');
309
+ const [expandedGroups, setExpandedGroups] = (0, _react.useState)(new Set());
310
+ const { successSnackbar, exceptionSnackbar } = (0, _components.useSnackbar)();
311
+ const handleSilenceSubmit = (0, _react.useCallback)(async (silence)=>{
312
+ if (!amClient) return;
313
+ try {
314
+ await amClient.createSilence(silence);
315
+ setSilenceTarget(null);
316
+ successSnackbar('Silence created successfully');
317
+ queryClient.invalidateQueries({
318
+ queryKey: [
319
+ 'query',
320
+ 'AlertsQuery'
321
+ ]
322
+ });
323
+ queryClient.invalidateQueries({
324
+ queryKey: [
325
+ 'query',
326
+ 'SilencesQuery'
327
+ ]
328
+ });
329
+ } catch (err) {
330
+ exceptionSnackbar(err);
331
+ }
332
+ }, [
333
+ amClient,
334
+ queryClient,
335
+ successSnackbar,
336
+ exceptionSnackbar
337
+ ]);
338
+ const silenceInitial = (0, _react.useMemo)(()=>{
339
+ if (!silenceTarget) return undefined;
340
+ return {
341
+ matchers: Object.entries(silenceTarget.labels).map(([name, value])=>({
342
+ name,
343
+ value,
344
+ isEqual: true,
345
+ isRegex: false
346
+ }))
347
+ };
348
+ }, [
349
+ silenceTarget
350
+ ]);
351
+ const defaultGroupBy = (0, _react.useMemo)(()=>spec.defaultGroupBy ?? [
352
+ 'alertname'
353
+ ], [
354
+ spec.defaultGroupBy
355
+ ]);
356
+ const variableNames = (0, _react.useMemo)(()=>[
357
+ ...new Set(defaultGroupBy.flatMap((entry)=>(0, _pluginsystem.parseVariables)(entry)))
358
+ ], [
359
+ defaultGroupBy
360
+ ]);
361
+ const variableState = (0, _pluginsystem.useAllVariableValues)(variableNames);
362
+ const resolvedDefaultGroupBy = (0, _react.useMemo)(()=>{
363
+ const result = [];
364
+ for (const entry of defaultGroupBy){
365
+ const vars = (0, _pluginsystem.parseVariables)(entry);
366
+ if (vars.length === 0) {
367
+ result.push(entry);
368
+ } else if (vars.length === 1 && (entry === `$${vars[0]}` || entry === `\${${vars[0]}}`)) {
369
+ const varState = variableState[vars[0] ?? ''];
370
+ if (varState?.value) {
371
+ if (Array.isArray(varState.value)) {
372
+ result.push(...varState.value);
373
+ } else {
374
+ result.push(varState.value);
375
+ }
376
+ }
377
+ } else {
378
+ const resolved = (0, _pluginsystem.replaceVariablesInString)(entry, variableState);
379
+ if (resolved) result.push(resolved);
380
+ }
381
+ }
382
+ return result;
383
+ }, [
384
+ defaultGroupBy,
385
+ variableState
386
+ ]);
387
+ const [groupBy, setGroupBy] = (0, _react.useState)(resolvedDefaultGroupBy);
388
+ (0, _react.useEffect)(()=>{
389
+ setGroupBy(resolvedDefaultGroupBy);
390
+ }, [
391
+ resolvedDefaultGroupBy
392
+ ]);
393
+ const effectiveActions = (0, _react.useMemo)(()=>spec.allowedActions ?? _alerttablemodel.ALL_ALERT_ACTIONS, [
394
+ spec.allowedActions
395
+ ]);
396
+ const showActionsColumn = effectiveActions.length > 0;
397
+ const runbookAnnotationKey = spec.runbookAnnotationKey || 'runbook_url';
398
+ const columnDefs = (0, _react.useMemo)(()=>spec.columns ?? [], [
399
+ spec.columns
400
+ ]);
401
+ const columnKeySet = (0, _react.useMemo)(()=>new Set(columnDefs.map((c)=>c.name)), [
402
+ columnDefs
403
+ ]);
404
+ const labelColorMappings = (0, _react.useMemo)(()=>spec.labelColorMappings ?? [], [
405
+ spec.labelColorMappings
406
+ ]);
407
+ const labelKeys = (0, _react.useMemo)(()=>labelColorMappings.map((m)=>m.labelKey), [
408
+ labelColorMappings
409
+ ]);
410
+ const mappingsByKey = (0, _react.useMemo)(()=>new Map(labelColorMappings.map((m)=>[
411
+ m.labelKey,
412
+ m
413
+ ])), [
414
+ labelColorMappings
415
+ ]);
416
+ const allTrackedKeys = (0, _react.useMemo)(()=>[
417
+ ...new Set([
418
+ ...labelKeys,
419
+ ...columnDefs.map((c)=>c.name)
420
+ ])
421
+ ], [
422
+ labelKeys,
423
+ columnDefs
424
+ ]);
425
+ const initialSort = (0, _react.useMemo)(()=>{
426
+ const col = columnDefs.find((c)=>c.sort && c.enableSorting !== false);
427
+ if (!col?.sort) return null;
428
+ return {
429
+ columnName: col.name,
430
+ direction: col.sort,
431
+ mode: col.sortMode ?? 'alphabetical'
432
+ };
433
+ }, [
434
+ columnDefs
435
+ ]);
436
+ const [sortState, setSortState] = (0, _react.useState)(initialSort);
437
+ const handleSortClick = (0, _react.useCallback)((columnName, sortMode = 'alphabetical')=>{
438
+ setSortState((prev)=>{
439
+ if (prev?.columnName === columnName) {
440
+ return prev.direction === 'asc' ? {
441
+ ...prev,
442
+ direction: 'desc'
443
+ } : null;
444
+ }
445
+ return {
446
+ columnName,
447
+ direction: 'asc',
448
+ mode: sortMode
449
+ };
450
+ });
451
+ }, []);
452
+ // Flatten all alerts from all query results
453
+ const allAlerts = (0, _react.useMemo)(()=>{
454
+ return queryResults.flatMap((result)=>result.data?.alerts ?? []);
455
+ }, [
456
+ queryResults
457
+ ]);
458
+ // Deduplicate
459
+ const dedupConfig = (0, _react.useMemo)(()=>spec.deduplication ?? {
460
+ mode: 'fingerprint'
461
+ }, [
462
+ spec.deduplication
463
+ ]);
464
+ const dedupResult = (0, _react.useMemo)(()=>(0, _alerttablemodel.deduplicateAlerts)(allAlerts, dedupConfig), [
465
+ allAlerts,
466
+ dedupConfig
467
+ ]);
468
+ const dedupAlerts = dedupResult.alerts;
469
+ const duplicateCounts = dedupResult.duplicateCounts;
470
+ const hasDuplicates = duplicateCounts.size > 0;
471
+ // Filter by search term
472
+ const alerts = (0, _react.useMemo)(()=>{
473
+ const term = search.trim().toLowerCase();
474
+ if (!term) return dedupAlerts;
475
+ return dedupAlerts.filter((a)=>{
476
+ if (a.state.toLowerCase().includes(term)) return true;
477
+ if (a.suppressed && ('suppressed'.includes(term) || 'silenced'.includes(term))) return true;
478
+ if (Object.values(a.labels).some((v)=>v.toLowerCase().includes(term))) return true;
479
+ if (a.annotations && Object.values(a.annotations).some((v)=>v.toLowerCase().includes(term))) return true;
480
+ return false;
481
+ });
482
+ }, [
483
+ dedupAlerts,
484
+ search
485
+ ]);
486
+ // Extract available label keys for group-by selector
487
+ const availableLabelKeys = (0, _react.useMemo)(()=>(0, _alerttablemodel.extractLabelKeys)(alerts), [
488
+ alerts
489
+ ]);
490
+ // Group alerts
491
+ const groups = (0, _react.useMemo)(()=>{
492
+ let result;
493
+ if (groupBy.length === 0) {
494
+ result = [
495
+ {
496
+ key: '',
497
+ alerts: [
498
+ ...alerts
499
+ ],
500
+ summary: (0, _alerttablemodel.getGroupSummary)(alerts, allTrackedKeys)
501
+ }
502
+ ];
503
+ } else {
504
+ const groupMap = new Map();
505
+ for (const alert of alerts){
506
+ const key = (0, _alerttablemodel.getGroupKey)(alert, groupBy);
507
+ const existing = groupMap.get(key) ?? [];
508
+ existing.push(alert);
509
+ groupMap.set(key, existing);
510
+ }
511
+ result = Array.from(groupMap.entries()).map(([key, groupAlerts])=>({
512
+ key,
513
+ alerts: groupAlerts,
514
+ summary: (0, _alerttablemodel.getGroupSummary)(groupAlerts, allTrackedKeys)
515
+ }));
516
+ }
517
+ if (sortState) {
518
+ for (const group of result){
519
+ group.alerts.sort((a, b)=>(0, _alerttablesorting.compareAlertsByColumn)(a, b, sortState));
520
+ }
521
+ result.sort((a, b)=>(0, _alerttablesorting.compareGroupsByColumn)(a.summary.labelCounts?.[sortState.columnName], b.summary.labelCounts?.[sortState.columnName], sortState));
522
+ }
523
+ return result;
524
+ }, [
525
+ alerts,
526
+ groupBy,
527
+ allTrackedKeys,
528
+ sortState
529
+ ]);
530
+ const prevGroupKeysRef = (0, _react.useRef)('');
531
+ (0, _react.useEffect)(()=>{
532
+ const currentKeys = groups.map((g)=>g.key).join('\0');
533
+ if (currentKeys === prevGroupKeysRef.current) return;
534
+ prevGroupKeysRef.current = currentKeys;
535
+ if (groups.length === 1) {
536
+ setExpandedGroups(new Set(groups.map((g)=>g.key)));
537
+ } else {
538
+ setExpandedGroups(new Set());
539
+ }
540
+ }, [
541
+ groups
542
+ ]);
543
+ const handleToggleGroup = (0, _react.useCallback)((key)=>{
544
+ setExpandedGroups((prev)=>{
545
+ const next = new Set(prev);
546
+ if (next.has(key)) {
547
+ next.delete(key);
548
+ } else {
549
+ next.add(key);
550
+ }
551
+ return next;
552
+ });
553
+ }, []);
554
+ const handleExpandAll = (0, _react.useCallback)(()=>{
555
+ setExpandedGroups(new Set(groups.map((g)=>g.key)));
556
+ }, [
557
+ groups
558
+ ]);
559
+ const handleCollapseAll = (0, _react.useCallback)(()=>{
560
+ setExpandedGroups(new Set());
561
+ }, []);
562
+ const handleGroupByChange = (event)=>{
563
+ const value = event.target.value;
564
+ setGroupBy(typeof value === 'string' ? value.split(',') : value);
565
+ };
566
+ if (allAlerts.length === 0) {
567
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
568
+ sx: {
569
+ display: 'flex',
570
+ justifyContent: 'center',
571
+ alignItems: 'center',
572
+ height: contentDimensions?.height ?? '100%'
573
+ },
574
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
575
+ children: "No alerts to display"
576
+ })
577
+ });
578
+ }
579
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
580
+ spacing: 1,
581
+ sx: {
582
+ height: contentDimensions?.height,
583
+ overflow: 'auto'
584
+ },
585
+ children: [
586
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
587
+ direction: "row",
588
+ spacing: 2,
589
+ alignItems: "center",
590
+ sx: {
591
+ px: 1,
592
+ pt: 1
593
+ },
594
+ children: [
595
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TextField, {
596
+ size: "small",
597
+ placeholder: "Search alerts...",
598
+ value: search,
599
+ onChange: (e)=>setSearch(e.target.value),
600
+ sx: {
601
+ minWidth: 200
602
+ },
603
+ slotProps: {
604
+ htmlInput: {
605
+ 'aria-label': 'Search alerts'
606
+ },
607
+ input: {
608
+ startAdornment: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.InputAdornment, {
609
+ position: "start",
610
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Magnify.default, {
611
+ fontSize: "small"
612
+ })
613
+ })
614
+ }
615
+ }
616
+ }),
617
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.FormControl, {
618
+ size: "small",
619
+ sx: {
620
+ minWidth: 200
621
+ },
622
+ children: [
623
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.InputLabel, {
624
+ id: "group-by-label",
625
+ children: "Group by"
626
+ }),
627
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Select, {
628
+ labelId: "group-by-label",
629
+ multiple: true,
630
+ value: groupBy,
631
+ onChange: handleGroupByChange,
632
+ label: "Group by",
633
+ renderValue: (selected)=>selected.join(', '),
634
+ children: availableLabelKeys.map((key)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_material.MenuItem, {
635
+ value: key,
636
+ children: key
637
+ }, key))
638
+ })
639
+ ]
640
+ }),
641
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Typography, {
642
+ variant: "body2",
643
+ color: "text.secondary",
644
+ sx: {
645
+ flexGrow: 1
646
+ },
647
+ children: [
648
+ alerts.length,
649
+ " alert",
650
+ alerts.length !== 1 ? 's' : '',
651
+ " in ",
652
+ groups.length,
653
+ " group",
654
+ groups.length !== 1 ? 's' : ''
655
+ ]
656
+ }),
657
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Stack, {
658
+ direction: "row",
659
+ spacing: 0.5,
660
+ children: [
661
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Tooltip, {
662
+ title: "Expand all groups",
663
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.IconButton, {
664
+ size: "small",
665
+ "aria-label": "Expand all groups",
666
+ onClick: handleExpandAll,
667
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_UnfoldMoreHorizontal.default, {
668
+ fontSize: "small"
669
+ })
670
+ })
671
+ }),
672
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Tooltip, {
673
+ title: "Collapse all groups",
674
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.IconButton, {
675
+ size: "small",
676
+ "aria-label": "Collapse all groups",
677
+ onClick: handleCollapseAll,
678
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_UnfoldLessHorizontal.default, {
679
+ fontSize: "small"
680
+ })
681
+ })
682
+ })
683
+ ]
684
+ })
685
+ ]
686
+ }),
687
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableContainer, {
688
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.Table, {
689
+ size: "small",
690
+ stickyHeader: true,
691
+ children: [
692
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableHead, {
693
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_material.TableRow, {
694
+ children: [
695
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
696
+ sortDirection: sortState?.columnName === _alerttablesorting.SORT_COL_STATUS ? sortState.direction : false,
697
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableSortLabel, {
698
+ active: sortState?.columnName === _alerttablesorting.SORT_COL_STATUS,
699
+ direction: sortState?.columnName === _alerttablesorting.SORT_COL_STATUS ? sortState.direction : 'asc',
700
+ onClick: ()=>handleSortClick(_alerttablesorting.SORT_COL_STATUS, 'status'),
701
+ children: "Status"
702
+ })
703
+ }),
704
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
705
+ sortDirection: sortState?.columnName === _alerttablesorting.SORT_COL_ALERTNAME ? sortState.direction : false,
706
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableSortLabel, {
707
+ active: sortState?.columnName === _alerttablesorting.SORT_COL_ALERTNAME,
708
+ direction: sortState?.columnName === _alerttablesorting.SORT_COL_ALERTNAME ? sortState.direction : 'asc',
709
+ onClick: ()=>handleSortClick(_alerttablesorting.SORT_COL_ALERTNAME, 'alphabetical'),
710
+ children: "Alert Name"
711
+ })
712
+ }),
713
+ columnDefs.map((col, colIdx)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
714
+ sortDirection: sortState?.columnName === col.name ? sortState.direction : false,
715
+ children: col.enableSorting !== false ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableSortLabel, {
716
+ active: sortState?.columnName === col.name,
717
+ direction: sortState?.columnName === col.name ? sortState.direction : 'asc',
718
+ onClick: ()=>handleSortClick(col.name, col.sortMode),
719
+ children: col.header ?? col.name
720
+ }) : col.header ?? col.name
721
+ }, colIdx)),
722
+ hasDuplicates && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
723
+ children: "Duplicates"
724
+ }),
725
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
726
+ children: "Labels"
727
+ }),
728
+ showActionsColumn && /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
729
+ children: "Actions"
730
+ })
731
+ ]
732
+ })
733
+ }),
734
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableBody, {
735
+ children: alerts.length === 0 ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableRow, {
736
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.TableCell, {
737
+ colSpan: 99,
738
+ align: "center",
739
+ sx: {
740
+ py: 4
741
+ },
742
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Typography, {
743
+ color: "text.secondary",
744
+ children: "No matching alerts"
745
+ })
746
+ })
747
+ }) : groups.map((group)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(AlertGroupRow, {
748
+ group: group,
749
+ expanded: expandedGroups.has(group.key),
750
+ allowedActions: effectiveActions,
751
+ columnDefs: columnDefs,
752
+ columnKeySet: columnKeySet,
753
+ labelColorMappings: labelColorMappings,
754
+ mappingsByKey: mappingsByKey,
755
+ runbookAnnotationKey: runbookAnnotationKey,
756
+ onToggle: ()=>handleToggleGroup(group.key),
757
+ onSilence: handleSetSilenceTarget,
758
+ duplicateCounts: duplicateCounts,
759
+ showDuplicates: hasDuplicates
760
+ }, group.key))
761
+ })
762
+ ]
763
+ })
764
+ }),
765
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_SilenceForm.SilenceForm, {
766
+ open: !!silenceTarget,
767
+ onClose: ()=>setSilenceTarget(null),
768
+ onSubmit: handleSilenceSubmit,
769
+ initialSilence: silenceInitial
770
+ }, silenceKeyRef.current)
771
+ ]
772
+ });
773
+ }