@rancher/shell 0.4.0 → 0.5.1

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 (243) hide show
  1. package/assets/images/providers/ovhcloudmks.svg +122 -0
  2. package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
  3. package/assets/styles/global/_layout.scss +99 -0
  4. package/assets/translations/en-us.yaml +30 -5
  5. package/assets/translations/zh-hans.yaml +1 -1
  6. package/babel.config.js +7 -1
  7. package/chart/monitoring/alerting/index.vue +7 -21
  8. package/chart/monitoring/grafana/index.vue +55 -0
  9. package/chart/monitoring/index.vue +51 -17
  10. package/chart/monitoring/prometheus/index.vue +37 -43
  11. package/chart/rancher-backup/index.vue +2 -1
  12. package/cloud-credential/azure.vue +4 -17
  13. package/components/Certificates.vue +164 -0
  14. package/components/CodeMirror.vue +19 -21
  15. package/components/CruResource.vue +1 -0
  16. package/components/EtcdInfoBanner.vue +1 -1
  17. package/components/ExplorerProjectsNamespaces.vue +25 -1
  18. package/components/IconOrSvg.vue +1 -1
  19. package/components/LandingPagePreference.vue +1 -4
  20. package/components/Questions/index.vue +1 -1
  21. package/components/ResourceDetail/Masthead.vue +16 -3
  22. package/components/ResourceTable.vue +14 -2
  23. package/components/ResourceYaml.vue +5 -0
  24. package/components/SideNav.vue +1 -1
  25. package/components/SingleClusterInfo.vue +1 -4
  26. package/components/Tabbed/index.vue +12 -0
  27. package/components/fleet/FleetRepos.vue +62 -27
  28. package/components/fleet/FleetResources.vue +6 -1
  29. package/components/form/ArrayListSelect.vue +10 -0
  30. package/components/form/KeyValue.vue +4 -0
  31. package/components/form/LabeledSelect.vue +4 -0
  32. package/components/formatter/Checked.vue +11 -3
  33. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  34. package/components/formatter/FleetSummaryGraph.vue +23 -11
  35. package/components/formatter/LiveDuration.vue +1 -1
  36. package/components/formatter/PercentageBar.vue +1 -1
  37. package/components/formatter/__tests__/Checked.test.ts +19 -0
  38. package/components/nav/Group.vue +2 -2
  39. package/components/nav/Header.vue +0 -1
  40. package/components/nav/TopLevelMenu.vue +36 -6
  41. package/components/nav/Type.vue +1 -3
  42. package/components/nav/WindowManager/ContainerLogs.vue +101 -3
  43. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  44. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  45. package/components/nav/WindowManager/index.vue +11 -10
  46. package/components/nav/__tests__/TopLevelMenu.test.ts +33 -0
  47. package/components/nav/__tests__/Type.test.ts +1 -1
  48. package/components/nuxt/nuxt-child.js +14 -78
  49. package/components/nuxt/nuxt.js +1 -1
  50. package/{layouts → components/templates}/blank.vue +1 -1
  51. package/{layouts → components/templates}/default.vue +8 -98
  52. package/{layouts → components/templates}/error.vue +10 -19
  53. package/{layouts → components/templates}/home.vue +4 -1
  54. package/{layouts → components/templates}/plain.vue +4 -1
  55. package/{layouts → components/templates}/standalone.vue +1 -1
  56. package/{layouts → components/templates}/unauthenticated.vue +1 -1
  57. package/composables/useCompactInput.ts +20 -0
  58. package/composables/useLabeledFormElement.ts +138 -0
  59. package/config/harvester-manager-types.js +2 -0
  60. package/config/private-label.js +22 -0
  61. package/config/product/explorer.js +3 -0
  62. package/config/product/fleet.js +6 -1
  63. package/config/product/manager.js +8 -2
  64. package/config/query-params.js +1 -0
  65. package/config/router.js +385 -364
  66. package/config/settings.ts +1 -0
  67. package/config/store.js +1 -1
  68. package/config/system-namespaces.js +3 -0
  69. package/config/table-headers.js +47 -0
  70. package/core/plugin-routes.ts +56 -114
  71. package/core/plugin.ts +16 -10
  72. package/core/plugins-loader.js +7 -9
  73. package/core/plugins.js +0 -3
  74. package/creators/app/files/.gitlab-ci.yml +1 -1
  75. package/detail/fleet.cattle.io.cluster.vue +11 -1
  76. package/detail/provisioning.cattle.io.cluster.vue +4 -3
  77. package/dialog/ScaleMachineDownDialog.vue +34 -17
  78. package/edit/__tests__/service.test.ts +89 -0
  79. package/edit/auth/googleoauth.vue +1 -5
  80. package/edit/catalog.cattle.io.clusterrepo.vue +18 -0
  81. package/edit/cloudcredential.vue +2 -0
  82. package/edit/configmap.vue +2 -1
  83. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  84. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +15 -7
  85. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +112 -0
  86. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  87. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +4 -0
  88. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  89. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  90. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +7 -1
  91. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
  92. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  93. package/edit/provisioning.cattle.io.cluster/index.vue +92 -36
  94. package/edit/provisioning.cattle.io.cluster/rke2.vue +171 -583
  95. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  96. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +157 -0
  97. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +94 -19
  98. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  99. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  100. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +189 -0
  101. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +144 -0
  102. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  103. package/edit/service.vue +12 -0
  104. package/edit/workload/mixins/workload.js +1 -1
  105. package/initialize/App.js +25 -71
  106. package/initialize/client.js +21 -162
  107. package/initialize/index.js +27 -123
  108. package/list/management.cattle.io.feature.vue +1 -7
  109. package/list/node.vue +1 -0
  110. package/machine-config/__tests__/vmwarevsphere.test.ts +100 -21
  111. package/machine-config/vmwarevsphere.vue +73 -51
  112. package/middleware/authenticated.js +10 -17
  113. package/mixins/auth-config.js +2 -7
  114. package/mixins/brand.js +29 -41
  115. package/mixins/labeled-form-element.ts +6 -1
  116. package/models/__tests__/management.cattle.io.node.ts +85 -0
  117. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  118. package/models/__tests__/namespace.test.ts +49 -9
  119. package/models/__tests__/workload.test.ts +91 -0
  120. package/models/cluster/node.js +4 -4
  121. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  122. package/models/fleet.cattle.io.cluster.js +4 -0
  123. package/models/fleet.cattle.io.gitrepo.js +56 -13
  124. package/models/management.cattle.io.kontainerdriver.js +1 -1
  125. package/models/management.cattle.io.node.js +18 -14
  126. package/models/management.cattle.io.nodepool.js +17 -0
  127. package/models/namespace.js +1 -1
  128. package/models/pod.js +20 -0
  129. package/models/provisioning.cattle.io.cluster.js +20 -3
  130. package/models/secret.js +117 -18
  131. package/models/workload.js +16 -0
  132. package/models/workload.service.js +18 -0
  133. package/package.json +10 -9
  134. package/pages/about.vue +0 -1
  135. package/pages/account/create-key.vue +0 -1
  136. package/pages/account/index.vue +0 -1
  137. package/pages/auth/login.vue +0 -1
  138. package/pages/auth/logout.vue +0 -2
  139. package/pages/auth/setup.vue +0 -4
  140. package/pages/auth/verify.vue +14 -8
  141. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  142. package/pages/c/_cluster/apps/index.vue +0 -2
  143. package/pages/c/_cluster/auth/index.vue +0 -2
  144. package/pages/c/_cluster/ecm/index.vue +0 -2
  145. package/pages/c/_cluster/explorer/index.vue +28 -2
  146. package/pages/c/_cluster/fleet/index.vue +1 -1
  147. package/pages/c/_cluster/index.vue +0 -2
  148. package/pages/c/_cluster/settings/banners.vue +0 -2
  149. package/pages/c/_cluster/settings/brand.vue +0 -2
  150. package/pages/c/_cluster/settings/index.vue +0 -2
  151. package/pages/c/_cluster/settings/links.vue +0 -1
  152. package/pages/c/_cluster/settings/performance.vue +0 -1
  153. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +2 -1
  154. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  155. package/pages/c/_cluster/uiplugins/index.vue +0 -2
  156. package/pages/diagnostic.vue +1 -2
  157. package/pages/fail-whale.vue +0 -1
  158. package/pages/prefs.vue +0 -1
  159. package/pages/support/index.vue +2 -8
  160. package/pkg/auto-import.js +1 -1
  161. package/plugins/axios.js +0 -36
  162. package/plugins/back-button.js +3 -5
  163. package/plugins/codemirror-loader.js +1 -1
  164. package/plugins/codemirror.js +41 -0
  165. package/plugins/dashboard-store/__tests__/{mutations.spec.ts → mutations.test.ts} +1 -1
  166. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  167. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  168. package/plugins/dashboard-store/actions.js +30 -4
  169. package/plugins/dashboard-store/classify.js +1 -18
  170. package/plugins/dashboard-store/getters.js +10 -5
  171. package/plugins/dashboard-store/index.js +0 -12
  172. package/plugins/dashboard-store/mutations.js +0 -4
  173. package/plugins/dashboard-store/resource-class.js +59 -18
  174. package/plugins/steve/__tests__/steve-class.spec.ts +59 -0
  175. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  176. package/plugins/steve/getters.js +4 -1
  177. package/plugins/steve/norman-class.js +19 -0
  178. package/plugins/steve/steve-class.js +22 -0
  179. package/plugins/steve/subscribe.js +4 -10
  180. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  181. package/rancher-components/Accordion/Accordion.vue +85 -0
  182. package/rancher-components/Accordion/index.ts +1 -0
  183. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +19 -2
  184. package/rancher-components/Form/LabeledInput/LabeledInput.vue +12 -1
  185. package/rancher-components/Form/Radio/RadioButton.test.ts +7 -3
  186. package/rancher-components/Form/Radio/RadioGroup.test.ts +30 -0
  187. package/rancher-components/Form/Radio/RadioGroup.vue +4 -0
  188. package/rancher-components/StringList/StringList.test.ts +270 -0
  189. package/rancher-components/StringList/StringList.vue +57 -18
  190. package/rancher-components/components/Accordion/Accordion.test.ts +45 -0
  191. package/rancher-components/components/Accordion/Accordion.vue +85 -0
  192. package/rancher-components/components/Accordion/index.ts +1 -0
  193. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +19 -2
  194. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +4 -1
  195. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +50 -0
  196. package/scripts/extension/parse-tag-name +2 -2
  197. package/scripts/publish-shell.sh +10 -0
  198. package/scripts/test-plugins-build.sh +85 -9
  199. package/server/har-file.js +183 -0
  200. package/store/catalog.js +1 -1
  201. package/store/features.js +1 -0
  202. package/store/i18n.js +11 -0
  203. package/store/index.js +10 -11
  204. package/store/prefs.js +33 -35
  205. package/store/type-map.js +8 -7
  206. package/tsconfig.json +35 -9
  207. package/tsconfig.paths.json +18 -0
  208. package/types/shell/index.d.ts +345 -214
  209. package/utils/__tests__/create-yaml.test.ts +60 -0
  210. package/utils/axios.js +0 -19
  211. package/utils/azure.js +24 -0
  212. package/utils/create-yaml.js +17 -10
  213. package/utils/monitoring.js +1 -1
  214. package/utils/nuxt.js +18 -39
  215. package/utils/object.js +14 -0
  216. package/utils/router.scrollBehavior.js +12 -14
  217. package/utils/time.js +1 -1
  218. package/utils/url.ts +1 -1
  219. package/vue.config.js +23 -2
  220. package/.DS_Store +0 -0
  221. package/assets/images/providers/aks-black.svg +0 -28
  222. package/assets/images/providers/aks.svg +0 -31
  223. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -234
  224. package/initialize/layouts.ts +0 -26
  225. package/mixins/fetch.server.js +0 -73
  226. package/pages/c/index.vue +0 -9
  227. package/pages/rio/mesh.vue +0 -508
  228. package/plugins/transitions.js +0 -4
  229. package/scripts/.DS_Store +0 -0
  230. package/scripts/verdaccio.log +0 -205
  231. package/tsconfig.default.json +0 -46
  232. package/yarn-error.log +0 -200
  233. /package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +0 -0
  234. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +0 -0
  235. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  236. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  237. /package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +0 -0
  238. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  239. /package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +0 -0
  240. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  241. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  242. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  243. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
@@ -1,508 +0,0 @@
1
- <script>
2
- import { escapeHtml } from '@shell/utils/string';
3
-
4
- const RADIUS = 5;
5
-
6
- const INTERVAL = 10000;
7
-
8
- /*
9
- function randomStats() {
10
- return {
11
- 'p50ms': Math.random(),
12
- 'p90ms': Math.random() * 2,
13
- 'p99ms': Math.random() * 5,
14
- 'rps': Math.random() * 100,
15
- 'successRate': Math.random(),
16
- };
17
- }
18
-
19
- function randomItem(ary) {
20
- const idx = Math.floor(Math.random() * ary.length);
21
-
22
- return ary[idx];
23
- }
24
-
25
- function randomData() {
26
- const nodes = [];
27
- const edges = [];
28
-
29
- ['foo', 'bar', 'baz', 'bat', 'qux'].forEach((name) => {
30
- nodes.push({
31
- 'namespace': 'default',
32
- 'app': name,
33
- 'version': 'v1',
34
- 'stats': randomStats(),
35
- });
36
- });
37
-
38
- ['a', 'b', 'c', 'd', 'e'].forEach((name) => {
39
- nodes.push({
40
- 'namespace': 'another',
41
- 'app': name,
42
- 'version': 'v1',
43
- 'stats': randomStats(),
44
- });
45
- });
46
-
47
- for ( let i = 0 ; i < 10 ; i++ ) {
48
- const from = randomItem(nodes);
49
- const crossNs = Math.random() < 0.2;
50
- const toChoices = nodes.filter((x) => {
51
- if ( x === from ) {
52
- return false;
53
- }
54
-
55
- if ( crossNs ) {
56
- return x.namespace !== from.namespace;
57
- } else {
58
- return x.namespace === from.namespace;
59
- }
60
- });
61
- const to = randomItem(toChoices);
62
-
63
- edges.push({
64
- fromNamespace: from.namespace,
65
- fromApp: from.app,
66
- fromVersion: from.version,
67
- toNamespace: to.namespace,
68
- toApp: to.app,
69
- toVersion: to.version,
70
- stats: randomStats(),
71
- });
72
- }
73
-
74
- return {
75
- nodes,
76
- edges
77
- };
78
- }
79
- */
80
-
81
- function nodeIdFor(obj) {
82
- return `${ obj.namespace }:${ obj.app }@${ obj.version }`;
83
- }
84
-
85
- function fromId(obj) {
86
- return `${ obj.fromNamespace }:${ obj.fromApp }@${ obj.fromVersion }`;
87
- }
88
-
89
- function toId(obj) {
90
- return `${ obj.toNamespace }:${ obj.toApp }@${ obj.toVersion }`;
91
- }
92
-
93
- async function loadData(store) {
94
- const data = await store.dispatch('rancher/request', { url: '/v1-metrics/meshsummary' });
95
-
96
- const known = {};
97
-
98
- data.nodes = data.nodes.filter((x) => !!x.app && !!x.namespace);
99
- data.nodes.forEach((x) => {
100
- x.id = nodeIdFor(x);
101
- known[x.id] = true;
102
- });
103
-
104
- data.edges = data.edges.filter((x) => known[fromId(x)] && known[toId(x)]);
105
-
106
- return data;
107
- }
108
-
109
- function round3Digits(num) {
110
- if ( !num ) {
111
- return 0;
112
- }
113
-
114
- if ( num > 100 ) {
115
- return Math.round(num);
116
- } else if ( num > 10 ) {
117
- return Math.round(num * 10) / 10;
118
- } else {
119
- return Math.round(num * 100) / 100;
120
- }
121
- }
122
-
123
- export default {
124
-
125
- /* (
126
- data() {
127
- return {
128
- loading: true,
129
- ...randomData(),
130
- };
131
- },
132
- */
133
-
134
- async asyncData({ store }) {
135
- const data = await loadData(store);
136
-
137
- return data;
138
- },
139
- computed: {
140
- namespaces() {
141
- return this.$store.getters['namespaces']();
142
- },
143
-
144
- displayNodes() {
145
- console.log('get displayNodes'); // eslint-disable-line no-console
146
- const namespaces = this.namespaces;
147
-
148
- const out = this.nodes.filter((x) => {
149
- return namespaces[x.namespace];
150
- });
151
-
152
- return out;
153
- },
154
-
155
- displayEdges() {
156
- console.log('get displayEdges'); // eslint-disable-line no-console
157
- const namespaces = this.namespaces;
158
-
159
- const out = this.edges.filter((x) => {
160
- const ns1 = x.fromNamespace;
161
- const ns2 = x.toNamespace;
162
-
163
- return namespaces[ns1] && namespaces[ns2];
164
- });
165
-
166
- return out;
167
- },
168
- },
169
-
170
- watch: {
171
- // Nodes isn't watched, but gets updated at the same time...
172
- nodes() {
173
- console.log('nodes updated'); // eslint-disable-line no-console
174
- this.updateGraph();
175
- this.renderGraph();
176
- },
177
-
178
- namespaces() {
179
- console.log('namespaces updated'); // eslint-disable-line no-console
180
- this.updateGraph();
181
- this.renderGraph();
182
- },
183
-
184
- edges() {
185
- console.log('edges updated'); // eslint-disable-line no-console
186
- this.updateGraph();
187
- this.renderGraph();
188
- },
189
- },
190
-
191
- async mounted() {
192
- console.log('Mounted'); // eslint-disable-line no-console
193
- this.timer = setInterval(() => {
194
- console.log('Timer'); // eslint-disable-line no-console
195
- this.refreshData();
196
- }, INTERVAL);
197
-
198
- await this.initGraph();
199
- this.updateGraph();
200
- this.renderGraph();
201
-
202
- window.m = this;
203
- },
204
-
205
- beforeDestroy() {
206
- clearInterval(this.timer);
207
- },
208
-
209
- methods: {
210
- async refreshData() {
211
- console.log('Refreshing...'); // eslint-disable-line no-console
212
- const neu = await loadData(this.$store);
213
-
214
- this.nodes = neu.nodes;
215
- this.edges = neu.edges;
216
- console.log('Refreshed'); // eslint-disable-line no-console
217
- },
218
-
219
- async initGraph() {
220
- const d3 = await import('d3');
221
- const dagreD3 = await import('dagre-d3');
222
-
223
- const g = new dagreD3.graphlib.Graph({ compound: true });
224
-
225
- g.setGraph({
226
- marginx: 0,
227
- marginy: 0,
228
- rankdir: 'LR',
229
- align: 'UL',
230
- ranker: 'longest-path', // 'tight-tree',
231
- });
232
-
233
- g.setDefaultEdgeLabel(() => {
234
- return {};
235
- });
236
-
237
- // Create the renderer
238
- const render = new dagreD3.render();
239
-
240
- // Add our custom arrow
241
- render.arrows().smaller = function normal(parent, id, edge, type) {
242
- const marker = parent.append('marker')
243
- .attr('id', id)
244
- .attr('viewBox', '0 0 12 12')
245
- .attr('refX', 6)
246
- .attr('refY', 6)
247
- .attr('markerUnits', 'userSpaceOnUse')
248
- .attr('markerWidth', 12)
249
- .attr('markerHeight', 12)
250
- .attr('orient', 'auto');
251
- const path = marker.append('path')
252
- .attr('class', 'arrowhead')
253
- .attr('d', 'M 6 0 L 0 6 L 6 12 L 12 6 z')
254
- .style('stroke-width', 1)
255
- .style('stroke-dasharray', '1,0');
256
-
257
- dagreD3.util.applyStyle(path, edge[`${ type }Style`]);
258
- };
259
-
260
- // Set up an SVG group so that we can translate the final graph.
261
- const svg = d3.select(this.$refs.mesh);
262
- const group = svg.append('g');
263
-
264
- const zoom = d3.zoom().on('zoom', () => {
265
- if ( d3.event.sourceEvent ) {
266
- this.lastZoom = d3.event.transform;
267
- }
268
- group.attr('transform', d3.event.transform);
269
- });
270
-
271
- svg.call(zoom);
272
-
273
- this.d3 = d3;
274
- this.dagreD3 = dagreD3;
275
- this.graph = g;
276
- this.render = render;
277
- this.group = group;
278
- this.zoom = zoom;
279
- },
280
-
281
- updateGraph() {
282
- // @TODO diff nodes/edges, remove unexpected and add missing ones
283
- console.log('Updating...'); // eslint-disable-line no-console
284
-
285
- const e = escapeHtml;
286
- const g = this.graph;
287
-
288
- const seenNamespaces = {};
289
-
290
- for ( const node of this.displayNodes ) {
291
- const nsId = ensureNamespace(node.namespace);
292
- const id = nodeIdFor(node);
293
-
294
- node.label = `${ node.app }@${ node.version }`;
295
-
296
- let p99 = node.stats.p99ms;
297
- let unit = 'ms';
298
-
299
- if ( p99 > 1000 ) {
300
- p99 /= 1000;
301
- unit = 's';
302
- }
303
-
304
- const html = `
305
- <div class="version">
306
- <h4>${ e(node.app) }@${ e(node.version) }</h4>
307
- <div class="row">
308
- <div class="col span-4 sr">
309
- <span>${ round3Digits(node.stats.successRate * 100) }</span><span class="unit">%</span>
310
- </div>
311
- <div class="col span-4 rps">
312
- <span>${ round3Digits(node.stats.rps) }</span>
313
- </div>
314
- <div class="col span-4 p99">
315
- <span>${ round3Digits(p99) }</span><span class="unit">${ unit }</span>
316
- </div>
317
- </div>
318
- </div>
319
- `;
320
-
321
- g.setNode(id, {
322
- labelType: 'html',
323
- label: html,
324
- width: 158,
325
- height: 80,
326
- rx: RADIUS,
327
- ry: RADIUS,
328
- });
329
- g.setParent(id, nsId);
330
- }
331
-
332
- const rpses = this.displayEdges.map((x) => x.stats.rps);
333
- const min = Math.min(...rpses);
334
- const max = Math.max(...rpses);
335
-
336
- for ( const edge of this.displayEdges ) {
337
- ensureNamespace(edge.fromNamespace);
338
- ensureNamespace(edge.toNamespace);
339
- const weight = Math.floor(4 * (edge.stats.rps - min) / (max - min)) + 1;
340
-
341
- g.setEdge(fromId(edge), toId(edge), {
342
- arrowhead: 'smaller',
343
- arrowheadClass: 'arrowhead',
344
- class: `weight${ weight }`,
345
- curve: this.d3.curveBasis,
346
- weight,
347
- });
348
- }
349
-
350
- function ensureNamespace(name) {
351
- const id = `ns:${ name }`;
352
-
353
- if ( !seenNamespaces[name] ) {
354
- seenNamespaces[name] = true;
355
- g.setNode(id, {
356
- label: `Namespace: ${ name }`,
357
- clusterLabelPos: 'top',
358
- rx: RADIUS,
359
- ry: RADIUS
360
- });
361
- }
362
-
363
- return id;
364
- }
365
- },
366
-
367
- renderGraph() {
368
- console.log('Rendering...'); // eslint-disable-line no-console
369
-
370
- const d3 = this.d3;
371
- const svg = this.d3.select(this.$refs.mesh);
372
- const group = this.group;
373
- const g = this.graph;
374
- const render = this.render;
375
- const zoom = this.zoom;
376
-
377
- svg.call(zoom.transform, d3.zoomIdentity.translate(0, 0).scale(1));
378
-
379
- // Run the renderer. This is what draws the final graph.
380
- render(group, g);
381
-
382
- const graphWidth = g.graph().width;
383
- const graphHeight = g.graph().height;
384
- const width = parseInt(svg.style('width').replace(/px/, ''));
385
- const height = parseInt(svg.style('height').replace(/px/, ''));
386
- const scale = Math.min(width / graphWidth, height / graphHeight);
387
- const dX = (width / 2) - ((graphWidth * scale) / 2);
388
- const dY = (height / 2) - ((graphHeight * scale) / 2);
389
-
390
- console.log('render'); // eslint-disable-line no-console
391
- if ( this.lastZoom ) {
392
- svg.call(zoom.transform, d3.zoomIdentity.translate(this.lastZoom.x, this.lastZoom.y).scale(this.lastZoom.k));
393
- } else {
394
- svg.call(zoom.transform, d3.zoomIdentity.translate(dX, dY).scale(scale));
395
- }
396
-
397
- this.loading = false;
398
- },
399
-
400
- clicked(event) {
401
- const path = event.target.closest('.edgePath');
402
-
403
- console.log(path); // eslint-disable-line no-console
404
- }
405
- },
406
- };
407
- </script>
408
- <template>
409
- <div class="mesh">
410
- <header>
411
- <h1>App Mesh</h1>
412
- </header>
413
-
414
- <svg
415
- id="mesh"
416
- ref="mesh"
417
- @click="clicked"
418
- />
419
- </div>
420
- </template>
421
-
422
- <style lang="scss">
423
- #mesh {
424
- width: 100%;
425
- height: calc(100vh - 165px);
426
-
427
- .version {
428
- width: 158px;
429
- height: 80px;
430
- color: #b6b6c2;
431
- text-align: center;
432
-
433
- .row {
434
- margin: 0;
435
- }
436
-
437
- H4 {
438
- color: #b6b6c2;
439
- display: block;
440
- border-bottom: 1px solid #555;
441
- text-align: left;
442
- padding-bottom: 5px;
443
- margin-bottom: 5px;
444
- }
445
-
446
- .sr, .rps, .p99 {
447
- font-size: 20px;
448
-
449
- .unit {
450
- font-size: 12px;
451
- }
452
- }
453
-
454
- .sr:before, .rps:before, .p99:before {
455
- color: white;
456
- font-weight: bold;
457
- font-size: 15px;
458
- display: block;
459
- }
460
-
461
- .sr:before {
462
- content: 'SR';
463
- }
464
-
465
- .rps:before {
466
- content: 'RPS';
467
- }
468
-
469
- .p99:before {
470
- content: '99%';
471
- }
472
-
473
- }
474
-
475
- .clusters .label text {
476
- fill: #b6b6c2;
477
- font-weight: bold;
478
- }
479
-
480
- .clusters RECT {
481
- fill: #222;
482
- stroke: #555;
483
- }
484
-
485
- .arrowhead {
486
- fill: #6c6c76;
487
- }
488
-
489
- .node RECT {
490
- fill: #111;
491
- stroke: #555;
492
- }
493
-
494
- PATH {
495
- stroke: #6c6c76;
496
- }
497
-
498
- .edgePath {
499
- cursor: pointer;
500
- }
501
-
502
- .weight1 { stroke-width: 2px; }
503
- .weight2 { stroke-width: 3px; }
504
- .weight3 { stroke-width: 4px; }
505
- .weight4 { stroke-width: 5px; }
506
- .weight5 { stroke-width: 6px; }
507
- }
508
- </style>
@@ -1,4 +0,0 @@
1
- import Vue from 'vue';
2
- import Transitions from 'vue2-transitions';
3
-
4
- Vue.use(Transitions);
package/scripts/.DS_Store DELETED
Binary file