cds-caching 1.3.1 → 1.3.2

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 (32) hide show
  1. package/README.md +16 -0
  2. package/app/dashboard/controller/App-dbg.controller.js +14 -14
  3. package/app/dashboard/controller/App-dbg.controller.js.map +1 -1
  4. package/app/dashboard/controller/App.controller.js +1 -1
  5. package/app/dashboard/controller/App.controller.js.map +1 -1
  6. package/app/dashboard/controller/App.controller.ts +14 -14
  7. package/app/dashboard/controller/BaseController-dbg.js +7 -0
  8. package/app/dashboard/controller/BaseController-dbg.js.map +1 -1
  9. package/app/dashboard/controller/BaseController.js +1 -1
  10. package/app/dashboard/controller/BaseController.js.map +1 -1
  11. package/app/dashboard/controller/BaseController.ts +10 -0
  12. package/app/dashboard/controller/Cache-dbg.controller.js +34 -25
  13. package/app/dashboard/controller/Cache-dbg.controller.js.map +1 -1
  14. package/app/dashboard/controller/Cache.controller.js +1 -1
  15. package/app/dashboard/controller/Cache.controller.js.map +1 -1
  16. package/app/dashboard/controller/Cache.controller.ts +36 -25
  17. package/app/dashboard/controller/SingleMetric-dbg.controller.js +56 -50
  18. package/app/dashboard/controller/SingleMetric-dbg.controller.js.map +1 -1
  19. package/app/dashboard/controller/SingleMetric.controller.js +1 -1
  20. package/app/dashboard/controller/SingleMetric.controller.js.map +1 -1
  21. package/app/dashboard/controller/SingleMetric.controller.ts +29 -22
  22. package/app/dashboard/i18n/i18n.properties +235 -0
  23. package/app/dashboard/i18n/i18n_de.properties +271 -3
  24. package/app/dashboard/i18n/i18n_en.properties +295 -2
  25. package/app/dashboard/resources/sap-ui-custom.js +11 -11
  26. package/app/dashboard/resources/sap-ui-custom.js.map +1 -1
  27. package/app/dashboard/view/Cache.view.xml +149 -149
  28. package/app/dashboard/view/Main.view.xml +7 -7
  29. package/app/dashboard/view/SingleMetric.view.xml +30 -30
  30. package/cds-plugin.js +31 -8
  31. package/lib/util.js +28 -2
  32. package/package.json +1 -1
@@ -19,6 +19,10 @@ import Popover from "sap/m/Popover";
19
19
  export default class Cache extends BaseController {
20
20
  private uiModel: JSONModel;
21
21
 
22
+ private static escapeFragmentXml(s: string): string {
23
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
24
+ }
25
+
22
26
  public onInit(): void {
23
27
  super.onInit();
24
28
 
@@ -132,7 +136,7 @@ export default class Cache extends BaseController {
132
136
 
133
137
  } catch (error) {
134
138
  console.error("Error loading cache entries:", error);
135
- MessageBox.error("Failed to load cache entries");
139
+ MessageBox.error(await this.i18nText("msgLoadEntriesFailed"));
136
140
  } finally {
137
141
  this.uiModel.setProperty("/loadingEntries", false);
138
142
  }
@@ -168,7 +172,7 @@ export default class Cache extends BaseController {
168
172
  const ttl = this.uiModel.getProperty("/createTtl");
169
173
 
170
174
  if (!key || !value) {
171
- MessageBox.error("Please provide both key and value");
175
+ MessageBox.error(await this.i18nText("msgProvideKeyValue"));
172
176
  return;
173
177
  }
174
178
 
@@ -181,7 +185,7 @@ export default class Cache extends BaseController {
181
185
  await context.invoke();
182
186
 
183
187
 
184
- MessageToast.show("Cache entry created successfully");
188
+ MessageToast.show(await this.i18nText("msgEntryCreated"));
185
189
 
186
190
  // Clear form
187
191
  this.uiModel.setProperty("/createKey", "");
@@ -190,7 +194,7 @@ export default class Cache extends BaseController {
190
194
 
191
195
  } catch (error) {
192
196
  console.error("Error setting cache entry:", error);
193
- MessageBox.error("Failed to create cache entry");
197
+ MessageBox.error(await this.i18nText("msgCreateEntryFailed"));
194
198
  }
195
199
  }
196
200
 
@@ -202,7 +206,7 @@ export default class Cache extends BaseController {
202
206
  const key = this.uiModel.getProperty("/getKey");
203
207
 
204
208
  if (!key) {
205
- MessageBox.error("Please provide a key");
209
+ MessageBox.error(await this.i18nText("msgProvideKey"));
206
210
  return;
207
211
  }
208
212
 
@@ -213,11 +217,11 @@ export default class Cache extends BaseController {
213
217
  await action.invoke();
214
218
 
215
219
  const result = await action.requestObject();
216
- this.uiModel.setProperty("/getValue", result.value || "Not found");
220
+ this.uiModel.setProperty("/getValue", result.value || (await this.i18nText("msgNotFound")));
217
221
 
218
222
  } catch (error) {
219
223
  console.error("Error getting cache entry:", error);
220
- this.uiModel.setProperty("/getValue", "Error: Entry not found or error occurred");
224
+ this.uiModel.setProperty("/getValue", await this.i18nText("msgGetEntryError"));
221
225
  }
222
226
  }
223
227
 
@@ -229,7 +233,7 @@ export default class Cache extends BaseController {
229
233
  const key = this.uiModel.getProperty("/deleteKey");
230
234
 
231
235
  if (!key) {
232
- MessageBox.error("Please provide a key");
236
+ MessageBox.error(await this.i18nText("msgProvideKey"));
233
237
  return;
234
238
  }
235
239
 
@@ -239,14 +243,14 @@ export default class Cache extends BaseController {
239
243
  context.setParameter("key", key);
240
244
  await context.invoke();
241
245
 
242
- MessageToast.show("Cache entry deleted successfully");
246
+ MessageToast.show(await this.i18nText("msgEntryDeleted"));
243
247
 
244
248
  // Clear form
245
249
  this.uiModel.setProperty("/deleteKey", "");
246
250
 
247
251
  } catch (error) {
248
252
  console.error("Error deleting cache entry:", error);
249
- MessageBox.error("Failed to delete cache entry");
253
+ MessageBox.error(await this.i18nText("msgDeleteEntryFailed"));
250
254
  }
251
255
  }
252
256
 
@@ -263,10 +267,10 @@ export default class Cache extends BaseController {
263
267
  context.setParameter("enabled", enabled);
264
268
  await context.invoke();
265
269
 
266
- MessageToast.show(`Metrics ${enabled ? 'enabled' : 'disabled'} successfully`);
270
+ MessageToast.show(await this.i18nText(enabled ? "msgMetricsEnabled" : "msgMetricsDisabled"));
267
271
  } catch (error) {
268
272
  console.error("Error setting metrics enabled:", error);
269
- MessageBox.error("Failed to update metrics setting");
273
+ MessageBox.error(await this.i18nText("msgFailedUpdateMetrics"));
270
274
  // Revert the switch
271
275
  this.uiModel.setProperty("/enableMetrics", !enabled);
272
276
  }
@@ -285,11 +289,11 @@ export default class Cache extends BaseController {
285
289
  context.setParameter("enabled", enabled);
286
290
  await context.invoke();
287
291
 
288
- MessageToast.show(`Key metrics ${enabled ? 'enabled' : 'disabled'} successfully`);
292
+ MessageToast.show(await this.i18nText(enabled ? "msgKeyMetricsEnabled" : "msgKeyMetricsDisabled"));
289
293
 
290
294
  } catch (error) {
291
295
  console.error("Error setting key metrics enabled:", error);
292
- MessageBox.error("Failed to update key metrics setting");
296
+ MessageBox.error(await this.i18nText("msgFailedKeyMetrics"));
293
297
  // Revert the switch
294
298
  this.uiModel.setProperty("/enableKeyMetrics", !enabled);
295
299
  }
@@ -301,7 +305,8 @@ export default class Cache extends BaseController {
301
305
  public async onClearCache(): Promise<void> {
302
306
  const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;
303
307
 
304
- MessageBox.confirm("Are you sure you want to clear this cache? This action cannot be undone.", {
308
+ const confirmMsg = await this.i18nText("msgConfirmClearCache");
309
+ MessageBox.confirm(confirmMsg, {
305
310
  actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],
306
311
  emphasizedAction: MessageBox.Action.OK,
307
312
  onClose: async (action: string) => {
@@ -311,14 +316,14 @@ export default class Cache extends BaseController {
311
316
  const context = model.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`, cacheContext);
312
317
  await context.invoke();
313
318
 
314
- MessageBox.success("Cache cleared successfully");
319
+ MessageBox.success(await this.i18nText("msgCacheCleared"));
315
320
 
316
321
  // Refresh the data
317
322
  await this.onRefresh();
318
323
 
319
324
  } catch (error) {
320
325
  console.error("Error clearing cache:", error);
321
- MessageBox.error("Failed to clear cache");
326
+ MessageBox.error(await this.i18nText("msgClearCacheFailed"));
322
327
  }
323
328
  }
324
329
  }
@@ -398,28 +403,34 @@ export default class Cache extends BaseController {
398
403
  keyName: context.getProperty("keyName"),
399
404
  });
400
405
 
406
+ const e = (s: string) => Cache.escapeFragmentXml(s);
407
+ const tabMeta = e(await this.i18nText("keyTabMetadata"));
408
+ const tabSub = e(await this.i18nText("keyTabSubject"));
409
+ const tabQ = e(await this.i18nText("keyTabQuery"));
410
+ const tabCo = e(await this.i18nText("keyTabCacheOptions"));
411
+
401
412
  const fragment = await Fragment.load({
402
413
  definition: `<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:form="sap.ui.layout.form">
403
414
  <Popover title="{localData>/keyName}" placement="Bottom" contentWidth="30rem">
404
415
  <content>
405
416
  <IconTabBar>
406
417
  <items>
407
- <IconTabFilter text="Metadata">
418
+ <IconTabFilter text="${tabMeta}">
408
419
  <content>
409
420
  <TextArea value="{localData>/metadata}" rows="20" width="100%" editable="false" />
410
421
  </content>
411
422
  </IconTabFilter>
412
- <IconTabFilter text="Subject" >
423
+ <IconTabFilter text="${tabSub}" >
413
424
  <content>
414
425
  <TextArea value="{localData>/subject}" rows="20" width="100%" editable="false" />
415
426
  </content>
416
427
  </IconTabFilter>
417
- <IconTabFilter text="Query" >
428
+ <IconTabFilter text="${tabQ}" >
418
429
  <content>
419
430
  <TextArea value="{localData>/query}" rows="20" width="100%" editable="false" />
420
431
  </content>
421
432
  </IconTabFilter>
422
- <IconTabFilter text="Cache Options" >
433
+ <IconTabFilter text="${tabCo}" >
423
434
  <content>
424
435
  <TextArea value="{localData>/cacheOptions}" rows="20" width="100%" editable="false" />
425
436
  </content>
@@ -451,14 +462,14 @@ export default class Cache extends BaseController {
451
462
  const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`, cacheContext);
452
463
  await action.invoke();
453
464
 
454
- MessageToast.show("Metrics cleared successfully");
465
+ MessageToast.show(await this.i18nText("msgMetricsCleared"));
455
466
 
456
467
  // Refresh the data
457
468
  await this.onRefreshMetricsData();
458
469
 
459
470
  } catch (error) {
460
471
  console.error("Error clearing metrics:", error);
461
- MessageBox.error("Failed to clear metrics");
472
+ MessageBox.error(await this.i18nText("msgFailedClearMetrics"));
462
473
  }
463
474
  }
464
475
 
@@ -476,14 +487,14 @@ export default class Cache extends BaseController {
476
487
  const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`, cacheContext);
477
488
  await action.invoke();
478
489
 
479
- MessageToast.show("Key metrics cleared successfully");
490
+ MessageToast.show(await this.i18nText("msgKeyMetricsCleared"));
480
491
 
481
492
  // Refresh the data
482
493
  await this.onRefreshKeyMetricsData();
483
494
 
484
495
  } catch (error) {
485
496
  console.error("Error clearing key metrics:", error);
486
- MessageBox.error("Failed to clear key metrics");
497
+ MessageBox.error(await this.i18nText("msgFailedClearKeyMetrics"));
487
498
  }
488
499
  }
489
500
 
@@ -73,6 +73,7 @@ sap.ui.define(["./BaseController", "sap/ui/model/json/JSONModel", "sap/m/Message
73
73
  loadMetric: async function _loadMetric(cacheName, metricId) {
74
74
  try {
75
75
  const model = this.getModel();
76
+ const rb = await this.getResourceBundle();
76
77
 
77
78
  // Try to get the metric from the Metrics entity
78
79
  const context = model.bindContext(`/Metrics(ID='${metricId}',cache='${cacheName}')`);
@@ -116,29 +117,30 @@ sap.ui.define(["./BaseController", "sap/ui/model/json/JSONModel", "sap/m/Message
116
117
  this.uiModel.setProperty("/uniqueKeys", 0); // TODO: Get from key metrics data
117
118
 
118
119
  // Generate chart data
119
- this.generateLatencyChartData(metric);
120
- this.generateCacheThroughChartData(metric);
121
- this.generateNativeChartData(metric);
120
+ this.generateLatencyChartData(metric, rb);
121
+ this.generateCacheThroughChartData(metric, rb);
122
+ this.generateNativeChartData(metric, rb);
122
123
  } else {
123
- MessageBox.error("Metric not found");
124
+ MessageBox.error(await this.i18nText("msgMetricNotFound"));
124
125
  }
125
126
  } catch (error) {
126
127
  console.error("Error loading metric:", error);
127
- MessageBox.error("Failed to load metric details");
128
+ MessageBox.error(await this.i18nText("msgLoadMetricFailed"));
128
129
  }
129
130
  },
130
131
  /**
131
132
  * Generate latency data for the chart
132
133
  */
133
- generateLatencyChartData: function _generateLatencyChartData(metric) {
134
+ generateLatencyChartData: function _generateLatencyChartData(metric, rb) {
135
+ const t = k => rb.getText(k);
134
136
  const latencyData = [{
135
- operation: "Average Hit Latency",
137
+ operation: t("chartOpAvgHitLatency"),
136
138
  latency: metric.avgHitLatency || 0
137
139
  }, {
138
- operation: "Average Miss Latency",
140
+ operation: t("chartOpAvgMissLatency"),
139
141
  latency: metric.avgMissLatency || 0
140
142
  }, {
141
- operation: "Average Read-Through Latency",
143
+ operation: t("chartOpAvgReadThroughLatency"),
142
144
  latency: metric.avgReadThroughLatency || 0
143
145
  }];
144
146
  this.uiModel.setProperty("/latencyData", latencyData);
@@ -146,15 +148,16 @@ sap.ui.define(["./BaseController", "sap/ui/model/json/JSONModel", "sap/m/Message
146
148
  /**
147
149
  * Generate Read-Through operations data for pie chart
148
150
  */
149
- generateCacheThroughChartData: function _generateCacheThroughChartData(metric) {
151
+ generateCacheThroughChartData: function _generateCacheThroughChartData(metric, rb) {
152
+ const t = k => rb.getText(k);
150
153
  const cacheThroughData = [{
151
- operation: "Hits",
154
+ operation: t("chartOpHits"),
152
155
  count: metric.hits || 0
153
156
  }, {
154
- operation: "Misses",
157
+ operation: t("chartOpMisses"),
155
158
  count: metric.misses || 0
156
159
  }, {
157
- operation: "Errors",
160
+ operation: t("chartOpErrors"),
158
161
  count: metric.errors || 0
159
162
  }];
160
163
  this.uiModel.setProperty("/cacheThroughData", cacheThroughData);
@@ -162,24 +165,25 @@ sap.ui.define(["./BaseController", "sap/ui/model/json/JSONModel", "sap/m/Message
162
165
  /**
163
166
  * Generate Native Function operations data for pie chart
164
167
  */
165
- generateNativeChartData: function _generateNativeChartData(metric) {
168
+ generateNativeChartData: function _generateNativeChartData(metric, rb) {
169
+ const t = k => rb.getText(k);
166
170
  const nativeData = [{
167
- operation: "Sets",
171
+ operation: t("chartOpSets"),
168
172
  count: metric.nativeSets || 0
169
173
  }, {
170
- operation: "Gets",
174
+ operation: t("chartOpGets"),
171
175
  count: metric.nativeGets || 0
172
176
  }, {
173
- operation: "Deletes",
177
+ operation: t("chartOpDeletes"),
174
178
  count: metric.nativeDeletes || 0
175
179
  }, {
176
- operation: "Clears",
180
+ operation: t("chartOpClears"),
177
181
  count: metric.nativeClears || 0
178
182
  }, {
179
- operation: "Delete By Tags",
183
+ operation: t("chartOpDeleteByTags"),
180
184
  count: metric.nativeDeleteByTags || 0
181
185
  }, {
182
- operation: "Errors",
186
+ operation: t("chartOpErrors"),
183
187
  count: metric.nativeErrors || 0
184
188
  }];
185
189
  this.uiModel.setProperty("/nativeData", nativeData);
@@ -188,42 +192,44 @@ sap.ui.define(["./BaseController", "sap/ui/model/json/JSONModel", "sap/m/Message
188
192
  // Format latency chart (bar chart)
189
193
  const latencyChart = this.getView().byId("metricLatencyChart");
190
194
  if (latencyChart) {
191
- latencyChart.setVizProperties({
192
- legend: {
193
- visible: false
194
- },
195
- plotArea: {
196
- dataLabel: {
197
- visible: true,
198
- formatString: "#,## ms"
199
- },
200
- gridline: {
201
- visible: false
202
- }
203
- },
204
- valueAxis: {
205
- axisLine: {
195
+ void this.getResourceBundle().then(rb => {
196
+ latencyChart.setVizProperties({
197
+ legend: {
206
198
  visible: false
207
199
  },
208
- axisTick: {
209
- visible: false
200
+ plotArea: {
201
+ dataLabel: {
202
+ visible: true,
203
+ formatString: "#,## ms"
204
+ },
205
+ gridline: {
206
+ visible: false
207
+ }
210
208
  },
211
- label: {
212
- visible: false
209
+ valueAxis: {
210
+ axisLine: {
211
+ visible: false
212
+ },
213
+ axisTick: {
214
+ visible: false
215
+ },
216
+ label: {
217
+ visible: false
218
+ },
219
+ title: {
220
+ visible: false
221
+ }
222
+ },
223
+ categoryAxis: {
224
+ title: {
225
+ visible: false
226
+ }
213
227
  },
214
228
  title: {
215
- visible: false
216
- }
217
- },
218
- categoryAxis: {
219
- title: {
220
- visible: false
229
+ visible: false,
230
+ text: rb.getText("chartTitleLatencyByOperation")
221
231
  }
222
- },
223
- title: {
224
- visible: false,
225
- text: 'Latency by Operation'
226
- }
232
+ });
227
233
  });
228
234
  }
229
235
 
@@ -1 +1 @@
1
- {"version":3,"file":"SingleMetric-dbg.controller.js","names":["BaseController","_interopRequireDefault","__BaseController","SingleMetric","extend","onInit","_onInit","BaseController.prototype.onInit.call","uiModel","JSONModel","metricId","hitRatio","cacheEfficiency","throughput","errorRate","avgLatency","avgHitLatency","avgMissLatency","hits","misses","sets","deletes","errors","nativeSets","nativeGets","nativeDeletes","nativeClears","nativeDeleteByTags","nativeErrors","totalNativeOperations","nativeThroughput","nativeErrorRate","memoryUsage","itemCount","uniqueKeys","uptimeMs","latencyData","cacheThroughData","nativeData","getView","setModel","getRouter","getRoute","attachPatternMatched","onRouteMatched","_onRouteMatched","event","cache","getParameter","setProperty","getModel","loadMetric","formatChart","_loadMetric","cacheName","model","context","bindContext","metric","requestObject","generateLatencyChartData","generateCacheThroughChartData","generateNativeChartData","MessageBox","error","console","_generateLatencyChartData","operation","latency","avgReadThroughLatency","_generateCacheThroughChartData","count","_generateNativeChartData","_formatChart","latencyChart","byId","setVizProperties","legend","visible","plotArea","dataLabel","formatString","gridline","valueAxis","axisLine","axisTick","label","title","categoryAxis","text","cacheThroughChart","nativeChart","onRefresh","_onRefresh","getProperty","handleFullScreen","_handleFullScreen","handleExitFullScreen","_handleExitFullScreen","handleClose","_handleClose","navTo","onColumnsChange","_onColumnsChange"],"sources":["SingleMetric.controller.ts"],"sourcesContent":["import BaseController from \"./BaseController\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport ODataModel from \"sap/ui/model/odata/v4/ODataModel\";\nimport { Route$PatternMatchedEvent } from \"sap/ui/core/routing/Route\";\nimport MessageBox from \"sap/m/MessageBox\";\n\n/**\n * @namespace cds.plugin.caching.dashboard.controller\n */\nexport default class SingleMetric extends BaseController {\n private uiModel: JSONModel;\n\n public onInit(): void {\n super.onInit();\n\n // Create a JSON model for UI data binding\n this.uiModel = new JSONModel({\n metricId: \"\",\n // Performance metrics\n hitRatio: 0,\n cacheEfficiency: 0,\n throughput: 0,\n errorRate: 0,\n // Latency metrics\n avgLatency: 0,\n avgHitLatency: 0,\n avgMissLatency: 0,\n // Operation counts\n hits: 0,\n misses: 0,\n sets: 0,\n deletes: 0,\n errors: 0,\n // Native function metrics\n nativeSets: 0,\n nativeGets: 0,\n nativeDeletes: 0,\n nativeClears: 0,\n nativeDeleteByTags: 0,\n nativeErrors: 0,\n totalNativeOperations: 0,\n nativeThroughput: 0,\n nativeErrorRate: 0,\n // System information\n memoryUsage: 0,\n itemCount: 0,\n uniqueKeys: 0,\n uptimeMs: 0,\n // Chart data\n latencyData: [],\n cacheThroughData: [],\n nativeData: []\n });\n this.getView().setModel(this.uiModel, \"ui\");\n\n this.getRouter().getRoute(\"singleMetric\").attachPatternMatched(this.onRouteMatched, this);\n }\n\n public onRouteMatched(event: Route$PatternMatchedEvent): void {\n const { cache, metricId } = event.getParameter(\"arguments\") as { cache: string; metricId: string };\n\n this.uiModel.setProperty(\"/metricId\", metricId);\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n\n // Load the specific metric\n this.loadMetric(cache, metricId);\n\n this.formatChart();\n }\n\n /**\n * Load specific metric data\n */\n private async loadMetric(cacheName: string, metricId: string): Promise<void> {\n try {\n const model = this.getModel() as ODataModel;\n\n // Try to get the metric from the Metrics entity\n const context = model.bindContext(`/Metrics(ID='${metricId}',cache='${cacheName}')`);\n const metric = await context.requestObject();\n\n if (metric) {\n // Set all the metric values\n this.uiModel.setProperty(\"/hitRatio\", metric.hitRatio || 0);\n this.uiModel.setProperty(\"/cacheEfficiency\", metric.cacheEfficiency || 0);\n this.uiModel.setProperty(\"/throughput\", metric.throughput || 0);\n this.uiModel.setProperty(\"/errorRate\", metric.errorRate || 0);\n\n // Latency metrics\n this.uiModel.setProperty(\"/avgLatency\", metric.avgLatency || 0);\n this.uiModel.setProperty(\"/avgHitLatency\", metric.avgHitLatency || 0);\n this.uiModel.setProperty(\"/avgMissLatency\", metric.avgMissLatency || 0);\n\n // Operation counts\n this.uiModel.setProperty(\"/hits\", metric.hits || 0);\n this.uiModel.setProperty(\"/misses\", metric.misses || 0);\n this.uiModel.setProperty(\"/sets\", metric.sets || 0);\n this.uiModel.setProperty(\"/deletes\", metric.deletes || 0);\n this.uiModel.setProperty(\"/errors\", metric.errors || 0);\n\n // Native function metrics\n this.uiModel.setProperty(\"/nativeSets\", metric.nativeSets || 0);\n this.uiModel.setProperty(\"/nativeGets\", metric.nativeGets || 0);\n this.uiModel.setProperty(\"/nativeDeletes\", metric.nativeDeletes || 0);\n this.uiModel.setProperty(\"/nativeClears\", metric.nativeClears || 0);\n this.uiModel.setProperty(\"/nativeDeleteByTags\", metric.nativeDeleteByTags || 0);\n this.uiModel.setProperty(\"/nativeErrors\", metric.nativeErrors || 0);\n this.uiModel.setProperty(\"/totalNativeOperations\", metric.totalNativeOperations || 0);\n this.uiModel.setProperty(\"/nativeThroughput\", metric.nativeThroughput || 0);\n this.uiModel.setProperty(\"/nativeErrorRate\", metric.nativeErrorRate || 0);\n\n // System information\n this.uiModel.setProperty(\"/memoryUsage\", metric.memoryUsage || 0);\n this.uiModel.setProperty(\"/itemCount\", metric.itemCount || 0);\n this.uiModel.setProperty(\"/uptimeMs\", metric.uptimeMs || 0);\n\n // Calculate unique keys (this might need to come from a different source)\n this.uiModel.setProperty(\"/uniqueKeys\", 0); // TODO: Get from key metrics data\n\n // Generate chart data\n this.generateLatencyChartData(metric);\n this.generateCacheThroughChartData(metric);\n this.generateNativeChartData(metric);\n\n } else {\n MessageBox.error(\"Metric not found\");\n }\n\n } catch (error) {\n console.error(\"Error loading metric:\", error);\n MessageBox.error(\"Failed to load metric details\");\n }\n }\n\n /**\n * Generate latency data for the chart\n */\n private generateLatencyChartData(metric: any): void {\n const latencyData = [\n {\n operation: \"Average Hit Latency\",\n latency: metric.avgHitLatency || 0\n },\n {\n operation: \"Average Miss Latency\",\n latency: metric.avgMissLatency || 0\n },\n {\n operation: \"Average Read-Through Latency\",\n latency: metric.avgReadThroughLatency || 0\n }\n ];\n\n this.uiModel.setProperty(\"/latencyData\", latencyData);\n }\n\n /**\n * Generate Read-Through operations data for pie chart\n */\n private generateCacheThroughChartData(metric: any): void {\n const cacheThroughData = [\n {\n operation: \"Hits\",\n count: metric.hits || 0\n },\n {\n operation: \"Misses\",\n count: metric.misses || 0\n },\n {\n operation: \"Errors\",\n count: metric.errors || 0\n }\n ];\n\n this.uiModel.setProperty(\"/cacheThroughData\", cacheThroughData);\n }\n\n /**\n * Generate Native Function operations data for pie chart\n */\n private generateNativeChartData(metric: any): void {\n const nativeData = [\n {\n operation: \"Sets\",\n count: metric.nativeSets || 0\n },\n {\n operation: \"Gets\",\n count: metric.nativeGets || 0\n },\n {\n operation: \"Deletes\",\n count: metric.nativeDeletes || 0\n },\n {\n operation: \"Clears\",\n count: metric.nativeClears || 0\n },\n {\n operation: \"Delete By Tags\",\n count: metric.nativeDeleteByTags || 0\n },\n {\n operation: \"Errors\",\n count: metric.nativeErrors || 0\n }\n ];\n\n this.uiModel.setProperty(\"/nativeData\", nativeData);\n }\n\n public formatChart() {\n // Format latency chart (bar chart)\n const latencyChart = this.getView().byId(\"metricLatencyChart\") as any;\n if (latencyChart) {\n latencyChart.setVizProperties({\n legend: {\n visible: false\n },\n plotArea: {\n dataLabel: {\n visible: true,\n formatString: \"#,## ms\"\n },\n gridline: {\n visible: false\n }\n },\n valueAxis: {\n axisLine: {\n visible: false\n },\n axisTick: {\n visible: false\n },\n label: {\n visible: false\n },\n title: {\n visible: false\n }\n },\n categoryAxis: {\n title: {\n visible: false\n }\n },\n title: {\n visible: false,\n text: 'Latency by Operation'\n }\n });\n }\n\n // Format Read-Through pie chart\n const cacheThroughChart = this.getView().byId(\"metricCacheThroughChart\") as any;\n if (cacheThroughChart) {\n cacheThroughChart.setVizProperties({\n legend: {\n visible: true\n },\n plotArea: {\n dataLabel: {\n visible: true\n }\n },\n title: {\n visible: false\n }\n });\n }\n\n // Format Native Function pie chart\n const nativeChart = this.getView().byId(\"metricNativeChart\") as any;\n if (nativeChart) {\n nativeChart.setVizProperties({\n legend: {\n visible: true\n },\n plotArea: {\n dataLabel: {\n visible: true\n }\n },\n title: {\n visible: false\n }\n });\n }\n }\n\n /**\n * Handle refresh button press\n */\n public onRefresh(): void {\n const cacheName = this.getModel(\"app\").getProperty(\"/selectedCache\");\n const metricId = this.uiModel.getProperty(\"/metricId\");\n\n if (cacheName && metricId) {\n this.loadMetric(cacheName, metricId);\n }\n }\n\n /**\n * Handle full screen mode\n */\n public handleFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"EndColumnFullScreen\");\n }\n\n /**\n * Handle exit full screen mode\n */\n public handleExitFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n\n /**\n * Handle close end column\n */\n public handleClose(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n this.getRouter().navTo(\"cache\", { cache: this.getModel(\"app\").getProperty(\"/selectedCache\") });\n }\n\n /**\n * Handle grid columns change\n */\n public onColumnsChange(): void {\n // Handle responsive grid column changes if needed\n }\n} "],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SingleMetric-dbg.controller.js","names":["BaseController","_interopRequireDefault","__BaseController","SingleMetric","extend","onInit","_onInit","BaseController.prototype.onInit.call","uiModel","JSONModel","metricId","hitRatio","cacheEfficiency","throughput","errorRate","avgLatency","avgHitLatency","avgMissLatency","hits","misses","sets","deletes","errors","nativeSets","nativeGets","nativeDeletes","nativeClears","nativeDeleteByTags","nativeErrors","totalNativeOperations","nativeThroughput","nativeErrorRate","memoryUsage","itemCount","uniqueKeys","uptimeMs","latencyData","cacheThroughData","nativeData","getView","setModel","getRouter","getRoute","attachPatternMatched","onRouteMatched","_onRouteMatched","event","cache","getParameter","setProperty","getModel","loadMetric","formatChart","_loadMetric","cacheName","model","rb","getResourceBundle","context","bindContext","metric","requestObject","generateLatencyChartData","generateCacheThroughChartData","generateNativeChartData","MessageBox","error","i18nText","console","_generateLatencyChartData","t","k","getText","operation","latency","avgReadThroughLatency","_generateCacheThroughChartData","count","_generateNativeChartData","_formatChart","latencyChart","byId","then","setVizProperties","legend","visible","plotArea","dataLabel","formatString","gridline","valueAxis","axisLine","axisTick","label","title","categoryAxis","text","cacheThroughChart","nativeChart","onRefresh","_onRefresh","getProperty","handleFullScreen","_handleFullScreen","handleExitFullScreen","_handleExitFullScreen","handleClose","_handleClose","navTo","onColumnsChange","_onColumnsChange"],"sources":["SingleMetric.controller.ts"],"sourcesContent":["import BaseController from \"./BaseController\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport ODataModel from \"sap/ui/model/odata/v4/ODataModel\";\nimport { Route$PatternMatchedEvent } from \"sap/ui/core/routing/Route\";\nimport MessageBox from \"sap/m/MessageBox\";\nimport ResourceBundle from \"sap/base/i18n/ResourceBundle\";\n\n/**\n * @namespace cds.plugin.caching.dashboard.controller\n */\nexport default class SingleMetric extends BaseController {\n private uiModel: JSONModel;\n\n public onInit(): void {\n super.onInit();\n\n // Create a JSON model for UI data binding\n this.uiModel = new JSONModel({\n metricId: \"\",\n // Performance metrics\n hitRatio: 0,\n cacheEfficiency: 0,\n throughput: 0,\n errorRate: 0,\n // Latency metrics\n avgLatency: 0,\n avgHitLatency: 0,\n avgMissLatency: 0,\n // Operation counts\n hits: 0,\n misses: 0,\n sets: 0,\n deletes: 0,\n errors: 0,\n // Native function metrics\n nativeSets: 0,\n nativeGets: 0,\n nativeDeletes: 0,\n nativeClears: 0,\n nativeDeleteByTags: 0,\n nativeErrors: 0,\n totalNativeOperations: 0,\n nativeThroughput: 0,\n nativeErrorRate: 0,\n // System information\n memoryUsage: 0,\n itemCount: 0,\n uniqueKeys: 0,\n uptimeMs: 0,\n // Chart data\n latencyData: [],\n cacheThroughData: [],\n nativeData: []\n });\n this.getView().setModel(this.uiModel, \"ui\");\n\n this.getRouter().getRoute(\"singleMetric\").attachPatternMatched(this.onRouteMatched, this);\n }\n\n public onRouteMatched(event: Route$PatternMatchedEvent): void {\n const { cache, metricId } = event.getParameter(\"arguments\") as { cache: string; metricId: string };\n\n this.uiModel.setProperty(\"/metricId\", metricId);\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n\n // Load the specific metric\n this.loadMetric(cache, metricId);\n\n this.formatChart();\n }\n\n /**\n * Load specific metric data\n */\n private async loadMetric(cacheName: string, metricId: string): Promise<void> {\n try {\n const model = this.getModel() as ODataModel;\n const rb = await this.getResourceBundle();\n\n // Try to get the metric from the Metrics entity\n const context = model.bindContext(`/Metrics(ID='${metricId}',cache='${cacheName}')`);\n const metric = await context.requestObject();\n\n if (metric) {\n // Set all the metric values\n this.uiModel.setProperty(\"/hitRatio\", metric.hitRatio || 0);\n this.uiModel.setProperty(\"/cacheEfficiency\", metric.cacheEfficiency || 0);\n this.uiModel.setProperty(\"/throughput\", metric.throughput || 0);\n this.uiModel.setProperty(\"/errorRate\", metric.errorRate || 0);\n\n // Latency metrics\n this.uiModel.setProperty(\"/avgLatency\", metric.avgLatency || 0);\n this.uiModel.setProperty(\"/avgHitLatency\", metric.avgHitLatency || 0);\n this.uiModel.setProperty(\"/avgMissLatency\", metric.avgMissLatency || 0);\n\n // Operation counts\n this.uiModel.setProperty(\"/hits\", metric.hits || 0);\n this.uiModel.setProperty(\"/misses\", metric.misses || 0);\n this.uiModel.setProperty(\"/sets\", metric.sets || 0);\n this.uiModel.setProperty(\"/deletes\", metric.deletes || 0);\n this.uiModel.setProperty(\"/errors\", metric.errors || 0);\n\n // Native function metrics\n this.uiModel.setProperty(\"/nativeSets\", metric.nativeSets || 0);\n this.uiModel.setProperty(\"/nativeGets\", metric.nativeGets || 0);\n this.uiModel.setProperty(\"/nativeDeletes\", metric.nativeDeletes || 0);\n this.uiModel.setProperty(\"/nativeClears\", metric.nativeClears || 0);\n this.uiModel.setProperty(\"/nativeDeleteByTags\", metric.nativeDeleteByTags || 0);\n this.uiModel.setProperty(\"/nativeErrors\", metric.nativeErrors || 0);\n this.uiModel.setProperty(\"/totalNativeOperations\", metric.totalNativeOperations || 0);\n this.uiModel.setProperty(\"/nativeThroughput\", metric.nativeThroughput || 0);\n this.uiModel.setProperty(\"/nativeErrorRate\", metric.nativeErrorRate || 0);\n\n // System information\n this.uiModel.setProperty(\"/memoryUsage\", metric.memoryUsage || 0);\n this.uiModel.setProperty(\"/itemCount\", metric.itemCount || 0);\n this.uiModel.setProperty(\"/uptimeMs\", metric.uptimeMs || 0);\n\n // Calculate unique keys (this might need to come from a different source)\n this.uiModel.setProperty(\"/uniqueKeys\", 0); // TODO: Get from key metrics data\n\n // Generate chart data\n this.generateLatencyChartData(metric, rb);\n this.generateCacheThroughChartData(metric, rb);\n this.generateNativeChartData(metric, rb);\n\n } else {\n MessageBox.error(await this.i18nText(\"msgMetricNotFound\"));\n }\n\n } catch (error) {\n console.error(\"Error loading metric:\", error);\n MessageBox.error(await this.i18nText(\"msgLoadMetricFailed\"));\n }\n }\n\n /**\n * Generate latency data for the chart\n */\n private generateLatencyChartData(metric: any, rb: ResourceBundle): void {\n const t = (k: string) => rb.getText(k);\n const latencyData = [\n {\n operation: t(\"chartOpAvgHitLatency\"),\n latency: metric.avgHitLatency || 0\n },\n {\n operation: t(\"chartOpAvgMissLatency\"),\n latency: metric.avgMissLatency || 0\n },\n {\n operation: t(\"chartOpAvgReadThroughLatency\"),\n latency: metric.avgReadThroughLatency || 0\n }\n ];\n\n this.uiModel.setProperty(\"/latencyData\", latencyData);\n }\n\n /**\n * Generate Read-Through operations data for pie chart\n */\n private generateCacheThroughChartData(metric: any, rb: ResourceBundle): void {\n const t = (k: string) => rb.getText(k);\n const cacheThroughData = [\n {\n operation: t(\"chartOpHits\"),\n count: metric.hits || 0\n },\n {\n operation: t(\"chartOpMisses\"),\n count: metric.misses || 0\n },\n {\n operation: t(\"chartOpErrors\"),\n count: metric.errors || 0\n }\n ];\n\n this.uiModel.setProperty(\"/cacheThroughData\", cacheThroughData);\n }\n\n /**\n * Generate Native Function operations data for pie chart\n */\n private generateNativeChartData(metric: any, rb: ResourceBundle): void {\n const t = (k: string) => rb.getText(k);\n const nativeData = [\n {\n operation: t(\"chartOpSets\"),\n count: metric.nativeSets || 0\n },\n {\n operation: t(\"chartOpGets\"),\n count: metric.nativeGets || 0\n },\n {\n operation: t(\"chartOpDeletes\"),\n count: metric.nativeDeletes || 0\n },\n {\n operation: t(\"chartOpClears\"),\n count: metric.nativeClears || 0\n },\n {\n operation: t(\"chartOpDeleteByTags\"),\n count: metric.nativeDeleteByTags || 0\n },\n {\n operation: t(\"chartOpErrors\"),\n count: metric.nativeErrors || 0\n }\n ];\n\n this.uiModel.setProperty(\"/nativeData\", nativeData);\n }\n\n public formatChart() {\n // Format latency chart (bar chart)\n const latencyChart = this.getView().byId(\"metricLatencyChart\") as any;\n if (latencyChart) {\n void this.getResourceBundle().then((rb) => {\n latencyChart.setVizProperties({\n legend: {\n visible: false\n },\n plotArea: {\n dataLabel: {\n visible: true,\n formatString: \"#,## ms\"\n },\n gridline: {\n visible: false\n }\n },\n valueAxis: {\n axisLine: {\n visible: false\n },\n axisTick: {\n visible: false\n },\n label: {\n visible: false\n },\n title: {\n visible: false\n }\n },\n categoryAxis: {\n title: {\n visible: false\n }\n },\n title: {\n visible: false,\n text: rb.getText(\"chartTitleLatencyByOperation\")\n }\n });\n });\n }\n\n // Format Read-Through pie chart\n const cacheThroughChart = this.getView().byId(\"metricCacheThroughChart\") as any;\n if (cacheThroughChart) {\n cacheThroughChart.setVizProperties({\n legend: {\n visible: true\n },\n plotArea: {\n dataLabel: {\n visible: true\n }\n },\n title: {\n visible: false\n }\n });\n }\n\n // Format Native Function pie chart\n const nativeChart = this.getView().byId(\"metricNativeChart\") as any;\n if (nativeChart) {\n nativeChart.setVizProperties({\n legend: {\n visible: true\n },\n plotArea: {\n dataLabel: {\n visible: true\n }\n },\n title: {\n visible: false\n }\n });\n }\n }\n\n /**\n * Handle refresh button press\n */\n public onRefresh(): void {\n const cacheName = this.getModel(\"app\").getProperty(\"/selectedCache\");\n const metricId = this.uiModel.getProperty(\"/metricId\");\n\n if (cacheName && metricId) {\n this.loadMetric(cacheName, metricId);\n }\n }\n\n /**\n * Handle full screen mode\n */\n public handleFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"EndColumnFullScreen\");\n }\n\n /**\n * Handle exit full screen mode\n */\n public handleExitFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n\n /**\n * Handle close end column\n */\n public handleClose(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n this.getRouter().navTo(\"cache\", { cache: this.getModel(\"app\").getProperty(\"/selectedCache\") });\n }\n\n /**\n * Handle grid columns change\n */\n public onColumnsChange(): void {\n // Handle responsive grid column changes if needed\n }\n} "],"mappings":";;;;;;QAAOA,cAAc,GAAAC,sBAAA,CAAAC,gBAAA;EAOrB;AACA;AACA;EAFA,MAGqBC,YAAY,GAASH,cAAc,CAAAI,MAAA;IAG7CC,MAAM,WAAAC,QAAA,EAAS;MAClBC,oCAAA;;MAEA;MACA,IAAI,CAACC,OAAO,GAAG,IAAIC,SAAS,CAAC;QACzBC,QAAQ,EAAE,EAAE;QACZ;QACAC,QAAQ,EAAE,CAAC;QACXC,eAAe,EAAE,CAAC;QAClBC,UAAU,EAAE,CAAC;QACbC,SAAS,EAAE,CAAC;QACZ;QACAC,UAAU,EAAE,CAAC;QACbC,aAAa,EAAE,CAAC;QAChBC,cAAc,EAAE,CAAC;QACjB;QACAC,IAAI,EAAE,CAAC;QACPC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,CAAC;QACPC,OAAO,EAAE,CAAC;QACVC,MAAM,EAAE,CAAC;QACT;QACAC,UAAU,EAAE,CAAC;QACbC,UAAU,EAAE,CAAC;QACbC,aAAa,EAAE,CAAC;QAChBC,YAAY,EAAE,CAAC;QACfC,kBAAkB,EAAE,CAAC;QACrBC,YAAY,EAAE,CAAC;QACfC,qBAAqB,EAAE,CAAC;QACxBC,gBAAgB,EAAE,CAAC;QACnBC,eAAe,EAAE,CAAC;QAClB;QACAC,WAAW,EAAE,CAAC;QACdC,SAAS,EAAE,CAAC;QACZC,UAAU,EAAE,CAAC;QACbC,QAAQ,EAAE,CAAC;QACX;QACAC,WAAW,EAAE,EAAE;QACfC,gBAAgB,EAAE,EAAE;QACpBC,UAAU,EAAE;MAChB,CAAC,CAAC;MACF,IAAI,CAACC,OAAO,CAAC,CAAC,CAACC,QAAQ,CAAC,IAAI,CAAChC,OAAO,EAAE,IAAI,CAAC;MAE3C,IAAI,CAACiC,SAAS,CAAC,CAAC,CAACC,QAAQ,CAAC,cAAc,CAAC,CAACC,oBAAoB,CAAC,IAAI,CAACC,cAAc,EAAE,IAAI,CAAC;IAC7F,CAAC;IAEMA,cAAc,WAAAC,gBAACC,KAAgC,EAAQ;MAC1D,MAAM;QAAEC,KAAK;QAAErC;MAAS,CAAC,GAAGoC,KAAK,CAACE,YAAY,CAAC,WAAW,CAAwC;MAElG,IAAI,CAACxC,OAAO,CAACyC,WAAW,CAAC,WAAW,EAAEvC,QAAQ,CAAC;;MAE/C;MACY,IAAI,CAACwC,QAAQ,CAAC,KAAK,CAAC,CAAED,WAAW,CAAC,SAAS,EAAE,yBAAyB,CAAC;;MAEnF;MACA,IAAI,CAACE,UAAU,CAACJ,KAAK,EAAErC,QAAQ,CAAC;MAEhC,IAAI,CAAC0C,WAAW,CAAC,CAAC;IACtB,CAAC;IAED;AACJ;AACA;IACkBD,UAAU,iBAAAE,YAACC,SAAiB,EAAE5C,QAAgB,EAAiB;MACzE,IAAI;QACA,MAAM6C,KAAK,GAAG,IAAI,CAACL,QAAQ,CAAC,CAAe;QAC3C,MAAMM,EAAE,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAAC,CAAC;;QAEzC;QACA,MAAMC,OAAO,GAAGH,KAAK,CAACI,WAAW,CAAC,gBAAgBjD,QAAQ,YAAY4C,SAAS,IAAI,CAAC;QACpF,MAAMM,MAAM,GAAG,MAAMF,OAAO,CAACG,aAAa,CAAC,CAAC;QAE5C,IAAID,MAAM,EAAE;UACR;UACA,IAAI,CAACpD,OAAO,CAACyC,WAAW,CAAC,WAAW,EAAEW,MAAM,CAACjD,QAAQ,IAAI,CAAC,CAAC;UAC3D,IAAI,CAACH,OAAO,CAACyC,WAAW,CAAC,kBAAkB,EAAEW,MAAM,CAAChD,eAAe,IAAI,CAAC,CAAC;UACzE,IAAI,CAACJ,OAAO,CAACyC,WAAW,CAAC,aAAa,EAAEW,MAAM,CAAC/C,UAAU,IAAI,CAAC,CAAC;UAC/D,IAAI,CAACL,OAAO,CAACyC,WAAW,CAAC,YAAY,EAAEW,MAAM,CAAC9C,SAAS,IAAI,CAAC,CAAC;;UAE7D;UACA,IAAI,CAACN,OAAO,CAACyC,WAAW,CAAC,aAAa,EAAEW,MAAM,CAAC7C,UAAU,IAAI,CAAC,CAAC;UAC/D,IAAI,CAACP,OAAO,CAACyC,WAAW,CAAC,gBAAgB,EAAEW,MAAM,CAAC5C,aAAa,IAAI,CAAC,CAAC;UACrE,IAAI,CAACR,OAAO,CAACyC,WAAW,CAAC,iBAAiB,EAAEW,MAAM,CAAC3C,cAAc,IAAI,CAAC,CAAC;;UAEvE;UACA,IAAI,CAACT,OAAO,CAACyC,WAAW,CAAC,OAAO,EAAEW,MAAM,CAAC1C,IAAI,IAAI,CAAC,CAAC;UACnD,IAAI,CAACV,OAAO,CAACyC,WAAW,CAAC,SAAS,EAAEW,MAAM,CAACzC,MAAM,IAAI,CAAC,CAAC;UACvD,IAAI,CAACX,OAAO,CAACyC,WAAW,CAAC,OAAO,EAAEW,MAAM,CAACxC,IAAI,IAAI,CAAC,CAAC;UACnD,IAAI,CAACZ,OAAO,CAACyC,WAAW,CAAC,UAAU,EAAEW,MAAM,CAACvC,OAAO,IAAI,CAAC,CAAC;UACzD,IAAI,CAACb,OAAO,CAACyC,WAAW,CAAC,SAAS,EAAEW,MAAM,CAACtC,MAAM,IAAI,CAAC,CAAC;;UAEvD;UACA,IAAI,CAACd,OAAO,CAACyC,WAAW,CAAC,aAAa,EAAEW,MAAM,CAACrC,UAAU,IAAI,CAAC,CAAC;UAC/D,IAAI,CAACf,OAAO,CAACyC,WAAW,CAAC,aAAa,EAAEW,MAAM,CAACpC,UAAU,IAAI,CAAC,CAAC;UAC/D,IAAI,CAAChB,OAAO,CAACyC,WAAW,CAAC,gBAAgB,EAAEW,MAAM,CAACnC,aAAa,IAAI,CAAC,CAAC;UACrE,IAAI,CAACjB,OAAO,CAACyC,WAAW,CAAC,eAAe,EAAEW,MAAM,CAAClC,YAAY,IAAI,CAAC,CAAC;UACnE,IAAI,CAAClB,OAAO,CAACyC,WAAW,CAAC,qBAAqB,EAAEW,MAAM,CAACjC,kBAAkB,IAAI,CAAC,CAAC;UAC/E,IAAI,CAACnB,OAAO,CAACyC,WAAW,CAAC,eAAe,EAAEW,MAAM,CAAChC,YAAY,IAAI,CAAC,CAAC;UACnE,IAAI,CAACpB,OAAO,CAACyC,WAAW,CAAC,wBAAwB,EAAEW,MAAM,CAAC/B,qBAAqB,IAAI,CAAC,CAAC;UACrF,IAAI,CAACrB,OAAO,CAACyC,WAAW,CAAC,mBAAmB,EAAEW,MAAM,CAAC9B,gBAAgB,IAAI,CAAC,CAAC;UAC3E,IAAI,CAACtB,OAAO,CAACyC,WAAW,CAAC,kBAAkB,EAAEW,MAAM,CAAC7B,eAAe,IAAI,CAAC,CAAC;;UAEzE;UACA,IAAI,CAACvB,OAAO,CAACyC,WAAW,CAAC,cAAc,EAAEW,MAAM,CAAC5B,WAAW,IAAI,CAAC,CAAC;UACjE,IAAI,CAACxB,OAAO,CAACyC,WAAW,CAAC,YAAY,EAAEW,MAAM,CAAC3B,SAAS,IAAI,CAAC,CAAC;UAC7D,IAAI,CAACzB,OAAO,CAACyC,WAAW,CAAC,WAAW,EAAEW,MAAM,CAACzB,QAAQ,IAAI,CAAC,CAAC;;UAE3D;UACA,IAAI,CAAC3B,OAAO,CAACyC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;;UAE5C;UACA,IAAI,CAACa,wBAAwB,CAACF,MAAM,EAAEJ,EAAE,CAAC;UACzC,IAAI,CAACO,6BAA6B,CAACH,MAAM,EAAEJ,EAAE,CAAC;UAC9C,IAAI,CAACQ,uBAAuB,CAACJ,MAAM,EAAEJ,EAAE,CAAC;QAE5C,CAAC,MAAM;UACHS,UAAU,CAACC,KAAK,CAAC,MAAM,IAAI,CAACC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC9D;MAEJ,CAAC,CAAC,OAAOD,KAAK,EAAE;QACZE,OAAO,CAACF,KAAK,CAAC,uBAAuB,EAAEA,KAAK,CAAC;QAC7CD,UAAU,CAACC,KAAK,CAAC,MAAM,IAAI,CAACC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;MAChE;IACJ,CAAC;IAED;AACJ;AACA;IACYL,wBAAwB,WAAAO,0BAACT,MAAW,EAAEJ,EAAkB,EAAQ;MACpE,MAAMc,CAAC,GAAIC,CAAS,IAAKf,EAAE,CAACgB,OAAO,CAACD,CAAC,CAAC;MACtC,MAAMnC,WAAW,GAAG,CAChB;QACIqC,SAAS,EAAEH,CAAC,CAAC,sBAAsB,CAAC;QACpCI,OAAO,EAAEd,MAAM,CAAC5C,aAAa,IAAI;MACrC,CAAC,EACD;QACIyD,SAAS,EAAEH,CAAC,CAAC,uBAAuB,CAAC;QACrCI,OAAO,EAAEd,MAAM,CAAC3C,cAAc,IAAI;MACtC,CAAC,EACD;QACIwD,SAAS,EAAEH,CAAC,CAAC,8BAA8B,CAAC;QAC5CI,OAAO,EAAEd,MAAM,CAACe,qBAAqB,IAAI;MAC7C,CAAC,CACJ;MAED,IAAI,CAACnE,OAAO,CAACyC,WAAW,CAAC,cAAc,EAAEb,WAAW,CAAC;IACzD,CAAC;IAED;AACJ;AACA;IACY2B,6BAA6B,WAAAa,+BAAChB,MAAW,EAAEJ,EAAkB,EAAQ;MACzE,MAAMc,CAAC,GAAIC,CAAS,IAAKf,EAAE,CAACgB,OAAO,CAACD,CAAC,CAAC;MACtC,MAAMlC,gBAAgB,GAAG,CACrB;QACIoC,SAAS,EAAEH,CAAC,CAAC,aAAa,CAAC;QAC3BO,KAAK,EAAEjB,MAAM,CAAC1C,IAAI,IAAI;MAC1B,CAAC,EACD;QACIuD,SAAS,EAAEH,CAAC,CAAC,eAAe,CAAC;QAC7BO,KAAK,EAAEjB,MAAM,CAACzC,MAAM,IAAI;MAC5B,CAAC,EACD;QACIsD,SAAS,EAAEH,CAAC,CAAC,eAAe,CAAC;QAC7BO,KAAK,EAAEjB,MAAM,CAACtC,MAAM,IAAI;MAC5B,CAAC,CACJ;MAED,IAAI,CAACd,OAAO,CAACyC,WAAW,CAAC,mBAAmB,EAAEZ,gBAAgB,CAAC;IACnE,CAAC;IAED;AACJ;AACA;IACY2B,uBAAuB,WAAAc,yBAAClB,MAAW,EAAEJ,EAAkB,EAAQ;MACnE,MAAMc,CAAC,GAAIC,CAAS,IAAKf,EAAE,CAACgB,OAAO,CAACD,CAAC,CAAC;MACtC,MAAMjC,UAAU,GAAG,CACf;QACImC,SAAS,EAAEH,CAAC,CAAC,aAAa,CAAC;QAC3BO,KAAK,EAAEjB,MAAM,CAACrC,UAAU,IAAI;MAChC,CAAC,EACD;QACIkD,SAAS,EAAEH,CAAC,CAAC,aAAa,CAAC;QAC3BO,KAAK,EAAEjB,MAAM,CAACpC,UAAU,IAAI;MAChC,CAAC,EACD;QACIiD,SAAS,EAAEH,CAAC,CAAC,gBAAgB,CAAC;QAC9BO,KAAK,EAAEjB,MAAM,CAACnC,aAAa,IAAI;MACnC,CAAC,EACD;QACIgD,SAAS,EAAEH,CAAC,CAAC,eAAe,CAAC;QAC7BO,KAAK,EAAEjB,MAAM,CAAClC,YAAY,IAAI;MAClC,CAAC,EACD;QACI+C,SAAS,EAAEH,CAAC,CAAC,qBAAqB,CAAC;QACnCO,KAAK,EAAEjB,MAAM,CAACjC,kBAAkB,IAAI;MACxC,CAAC,EACD;QACI8C,SAAS,EAAEH,CAAC,CAAC,eAAe,CAAC;QAC7BO,KAAK,EAAEjB,MAAM,CAAChC,YAAY,IAAI;MAClC,CAAC,CACJ;MAED,IAAI,CAACpB,OAAO,CAACyC,WAAW,CAAC,aAAa,EAAEX,UAAU,CAAC;IACvD,CAAC;IAEMc,WAAW,WAAA2B,aAAA,EAAG;MACjB;MACA,MAAMC,YAAY,GAAG,IAAI,CAACzC,OAAO,CAAC,CAAC,CAAC0C,IAAI,CAAC,oBAAoB,CAAQ;MACrE,IAAID,YAAY,EAAE;QACd,KAAK,IAAI,CAACvB,iBAAiB,CAAC,CAAC,CAACyB,IAAI,CAAE1B,EAAE,IAAK;UACvCwB,YAAY,CAACG,gBAAgB,CAAC;YAC9BC,MAAM,EAAE;cACJC,OAAO,EAAE;YACb,CAAC;YACDC,QAAQ,EAAE;cACNC,SAAS,EAAE;gBACPF,OAAO,EAAE,IAAI;gBACbG,YAAY,EAAE;cAClB,CAAC;cACDC,QAAQ,EAAE;gBACNJ,OAAO,EAAE;cACb;YACJ,CAAC;YACDK,SAAS,EAAE;cACPC,QAAQ,EAAE;gBACNN,OAAO,EAAE;cACb,CAAC;cACDO,QAAQ,EAAE;gBACNP,OAAO,EAAE;cACb,CAAC;cACDQ,KAAK,EAAE;gBACHR,OAAO,EAAE;cACb,CAAC;cACDS,KAAK,EAAE;gBACHT,OAAO,EAAE;cACb;YACJ,CAAC;YACDU,YAAY,EAAE;cACVD,KAAK,EAAE;gBACHT,OAAO,EAAE;cACb;YACJ,CAAC;YACDS,KAAK,EAAE;cACHT,OAAO,EAAE,KAAK;cACdW,IAAI,EAAExC,EAAE,CAACgB,OAAO,CAAC,8BAA8B;YACnD;UACJ,CAAC,CAAC;QACF,CAAC,CAAC;MACN;;MAEA;MACA,MAAMyB,iBAAiB,GAAG,IAAI,CAAC1D,OAAO,CAAC,CAAC,CAAC0C,IAAI,CAAC,yBAAyB,CAAQ;MAC/E,IAAIgB,iBAAiB,EAAE;QACnBA,iBAAiB,CAACd,gBAAgB,CAAC;UAC/BC,MAAM,EAAE;YACJC,OAAO,EAAE;UACb,CAAC;UACDC,QAAQ,EAAE;YACNC,SAAS,EAAE;cACPF,OAAO,EAAE;YACb;UACJ,CAAC;UACDS,KAAK,EAAE;YACHT,OAAO,EAAE;UACb;QACJ,CAAC,CAAC;MACN;;MAEA;MACA,MAAMa,WAAW,GAAG,IAAI,CAAC3D,OAAO,CAAC,CAAC,CAAC0C,IAAI,CAAC,mBAAmB,CAAQ;MACnE,IAAIiB,WAAW,EAAE;QACbA,WAAW,CAACf,gBAAgB,CAAC;UACzBC,MAAM,EAAE;YACJC,OAAO,EAAE;UACb,CAAC;UACDC,QAAQ,EAAE;YACNC,SAAS,EAAE;cACPF,OAAO,EAAE;YACb;UACJ,CAAC;UACDS,KAAK,EAAE;YACHT,OAAO,EAAE;UACb;QACJ,CAAC,CAAC;MACN;IACJ,CAAC;IAED;AACJ;AACA;IACWc,SAAS,WAAAC,WAAA,EAAS;MACrB,MAAM9C,SAAS,GAAG,IAAI,CAACJ,QAAQ,CAAC,KAAK,CAAC,CAACmD,WAAW,CAAC,gBAAgB,CAAC;MACpE,MAAM3F,QAAQ,GAAG,IAAI,CAACF,OAAO,CAAC6F,WAAW,CAAC,WAAW,CAAC;MAEtD,IAAI/C,SAAS,IAAI5C,QAAQ,EAAE;QACvB,IAAI,CAACyC,UAAU,CAACG,SAAS,EAAE5C,QAAQ,CAAC;MACxC;IACJ,CAAC;IAED;AACJ;AACA;IACW4F,gBAAgB,WAAAC,kBAAA,EAAS;MAChB,IAAI,CAACrD,QAAQ,CAAC,KAAK,CAAC,CAAED,WAAW,CAAC,SAAS,EAAE,qBAAqB,CAAC;IACnF,CAAC;IAED;AACJ;AACA;IACWuD,oBAAoB,WAAAC,sBAAA,EAAS;MACpB,IAAI,CAACvD,QAAQ,CAAC,KAAK,CAAC,CAAED,WAAW,CAAC,SAAS,EAAE,yBAAyB,CAAC;IACvF,CAAC;IAED;AACJ;AACA;IACWyD,WAAW,WAAAC,aAAA,EAAS;MACX,IAAI,CAACzD,QAAQ,CAAC,KAAK,CAAC,CAAED,WAAW,CAAC,SAAS,EAAE,uBAAuB,CAAC;MACjF,IAAI,CAACR,SAAS,CAAC,CAAC,CAACmE,KAAK,CAAC,OAAO,EAAE;QAAE7D,KAAK,EAAE,IAAI,CAACG,QAAQ,CAAC,KAAK,CAAC,CAACmD,WAAW,CAAC,gBAAgB;MAAE,CAAC,CAAC;IAClG,CAAC;IAED;AACJ;AACA;IACWQ,eAAe,WAAAC,iBAAA,EAAS;MAC3B;IAAA;EACH;EAAA,OA1UgB3G,YAAY;AAAA","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./BaseController","sap/ui/model/json/JSONModel","sap/m/MessageBox"],function(e,t,i){"use strict";function a(e){return e&&e.__esModule&&typeof e.default!=="undefined"?e.default:e}const s=a(e);const r=s.extend("cds.plugin.caching.dashboard.controller.SingleMetric",{onInit:function e(){s.prototype.onInit.call(this);this.uiModel=new t({metricId:"",hitRatio:0,cacheEfficiency:0,throughput:0,errorRate:0,avgLatency:0,avgHitLatency:0,avgMissLatency:0,hits:0,misses:0,sets:0,deletes:0,errors:0,nativeSets:0,nativeGets:0,nativeDeletes:0,nativeClears:0,nativeDeleteByTags:0,nativeErrors:0,totalNativeOperations:0,nativeThroughput:0,nativeErrorRate:0,memoryUsage:0,itemCount:0,uniqueKeys:0,uptimeMs:0,latencyData:[],cacheThroughData:[],nativeData:[]});this.getView().setModel(this.uiModel,"ui");this.getRouter().getRoute("singleMetric").attachPatternMatched(this.onRouteMatched,this)},onRouteMatched:function e(t){const{cache:i,metricId:a}=t.getParameter("arguments");this.uiModel.setProperty("/metricId",a);this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded");this.loadMetric(i,a);this.formatChart()},loadMetric:async function e(t,a){try{const e=this.getModel();const s=e.bindContext(`/Metrics(ID='${a}',cache='${t}')`);const r=await s.requestObject();if(r){this.uiModel.setProperty("/hitRatio",r.hitRatio||0);this.uiModel.setProperty("/cacheEfficiency",r.cacheEfficiency||0);this.uiModel.setProperty("/throughput",r.throughput||0);this.uiModel.setProperty("/errorRate",r.errorRate||0);this.uiModel.setProperty("/avgLatency",r.avgLatency||0);this.uiModel.setProperty("/avgHitLatency",r.avgHitLatency||0);this.uiModel.setProperty("/avgMissLatency",r.avgMissLatency||0);this.uiModel.setProperty("/hits",r.hits||0);this.uiModel.setProperty("/misses",r.misses||0);this.uiModel.setProperty("/sets",r.sets||0);this.uiModel.setProperty("/deletes",r.deletes||0);this.uiModel.setProperty("/errors",r.errors||0);this.uiModel.setProperty("/nativeSets",r.nativeSets||0);this.uiModel.setProperty("/nativeGets",r.nativeGets||0);this.uiModel.setProperty("/nativeDeletes",r.nativeDeletes||0);this.uiModel.setProperty("/nativeClears",r.nativeClears||0);this.uiModel.setProperty("/nativeDeleteByTags",r.nativeDeleteByTags||0);this.uiModel.setProperty("/nativeErrors",r.nativeErrors||0);this.uiModel.setProperty("/totalNativeOperations",r.totalNativeOperations||0);this.uiModel.setProperty("/nativeThroughput",r.nativeThroughput||0);this.uiModel.setProperty("/nativeErrorRate",r.nativeErrorRate||0);this.uiModel.setProperty("/memoryUsage",r.memoryUsage||0);this.uiModel.setProperty("/itemCount",r.itemCount||0);this.uiModel.setProperty("/uptimeMs",r.uptimeMs||0);this.uiModel.setProperty("/uniqueKeys",0);this.generateLatencyChartData(r);this.generateCacheThroughChartData(r);this.generateNativeChartData(r)}else{i.error("Metric not found")}}catch(e){console.error("Error loading metric:",e);i.error("Failed to load metric details")}},generateLatencyChartData:function e(t){const i=[{operation:"Average Hit Latency",latency:t.avgHitLatency||0},{operation:"Average Miss Latency",latency:t.avgMissLatency||0},{operation:"Average Read-Through Latency",latency:t.avgReadThroughLatency||0}];this.uiModel.setProperty("/latencyData",i)},generateCacheThroughChartData:function e(t){const i=[{operation:"Hits",count:t.hits||0},{operation:"Misses",count:t.misses||0},{operation:"Errors",count:t.errors||0}];this.uiModel.setProperty("/cacheThroughData",i)},generateNativeChartData:function e(t){const i=[{operation:"Sets",count:t.nativeSets||0},{operation:"Gets",count:t.nativeGets||0},{operation:"Deletes",count:t.nativeDeletes||0},{operation:"Clears",count:t.nativeClears||0},{operation:"Delete By Tags",count:t.nativeDeleteByTags||0},{operation:"Errors",count:t.nativeErrors||0}];this.uiModel.setProperty("/nativeData",i)},formatChart:function e(){const t=this.getView().byId("metricLatencyChart");if(t){t.setVizProperties({legend:{visible:false},plotArea:{dataLabel:{visible:true,formatString:"#,## ms"},gridline:{visible:false}},valueAxis:{axisLine:{visible:false},axisTick:{visible:false},label:{visible:false},title:{visible:false}},categoryAxis:{title:{visible:false}},title:{visible:false,text:"Latency by Operation"}})}const i=this.getView().byId("metricCacheThroughChart");if(i){i.setVizProperties({legend:{visible:true},plotArea:{dataLabel:{visible:true}},title:{visible:false}})}const a=this.getView().byId("metricNativeChart");if(a){a.setVizProperties({legend:{visible:true},plotArea:{dataLabel:{visible:true}},title:{visible:false}})}},onRefresh:function e(){const t=this.getModel("app").getProperty("/selectedCache");const i=this.uiModel.getProperty("/metricId");if(t&&i){this.loadMetric(t,i)}},handleFullScreen:function e(){this.getModel("app").setProperty("/layout","EndColumnFullScreen")},handleExitFullScreen:function e(){this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded")},handleClose:function e(){this.getModel("app").setProperty("/layout","TwoColumnsMidExpanded");this.getRouter().navTo("cache",{cache:this.getModel("app").getProperty("/selectedCache")})},onColumnsChange:function e(){}});return r});
1
+ sap.ui.define(["./BaseController","sap/ui/model/json/JSONModel","sap/m/MessageBox"],function(e,t,i){"use strict";function a(e){return e&&e.__esModule&&typeof e.default!=="undefined"?e.default:e}const r=a(e);const s=r.extend("cds.plugin.caching.dashboard.controller.SingleMetric",{onInit:function e(){r.prototype.onInit.call(this);this.uiModel=new t({metricId:"",hitRatio:0,cacheEfficiency:0,throughput:0,errorRate:0,avgLatency:0,avgHitLatency:0,avgMissLatency:0,hits:0,misses:0,sets:0,deletes:0,errors:0,nativeSets:0,nativeGets:0,nativeDeletes:0,nativeClears:0,nativeDeleteByTags:0,nativeErrors:0,totalNativeOperations:0,nativeThroughput:0,nativeErrorRate:0,memoryUsage:0,itemCount:0,uniqueKeys:0,uptimeMs:0,latencyData:[],cacheThroughData:[],nativeData:[]});this.getView().setModel(this.uiModel,"ui");this.getRouter().getRoute("singleMetric").attachPatternMatched(this.onRouteMatched,this)},onRouteMatched:function e(t){const{cache:i,metricId:a}=t.getParameter("arguments");this.uiModel.setProperty("/metricId",a);this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded");this.loadMetric(i,a);this.formatChart()},loadMetric:async function e(t,a){try{const e=this.getModel();const r=await this.getResourceBundle();const s=e.bindContext(`/Metrics(ID='${a}',cache='${t}')`);const o=await s.requestObject();if(o){this.uiModel.setProperty("/hitRatio",o.hitRatio||0);this.uiModel.setProperty("/cacheEfficiency",o.cacheEfficiency||0);this.uiModel.setProperty("/throughput",o.throughput||0);this.uiModel.setProperty("/errorRate",o.errorRate||0);this.uiModel.setProperty("/avgLatency",o.avgLatency||0);this.uiModel.setProperty("/avgHitLatency",o.avgHitLatency||0);this.uiModel.setProperty("/avgMissLatency",o.avgMissLatency||0);this.uiModel.setProperty("/hits",o.hits||0);this.uiModel.setProperty("/misses",o.misses||0);this.uiModel.setProperty("/sets",o.sets||0);this.uiModel.setProperty("/deletes",o.deletes||0);this.uiModel.setProperty("/errors",o.errors||0);this.uiModel.setProperty("/nativeSets",o.nativeSets||0);this.uiModel.setProperty("/nativeGets",o.nativeGets||0);this.uiModel.setProperty("/nativeDeletes",o.nativeDeletes||0);this.uiModel.setProperty("/nativeClears",o.nativeClears||0);this.uiModel.setProperty("/nativeDeleteByTags",o.nativeDeleteByTags||0);this.uiModel.setProperty("/nativeErrors",o.nativeErrors||0);this.uiModel.setProperty("/totalNativeOperations",o.totalNativeOperations||0);this.uiModel.setProperty("/nativeThroughput",o.nativeThroughput||0);this.uiModel.setProperty("/nativeErrorRate",o.nativeErrorRate||0);this.uiModel.setProperty("/memoryUsage",o.memoryUsage||0);this.uiModel.setProperty("/itemCount",o.itemCount||0);this.uiModel.setProperty("/uptimeMs",o.uptimeMs||0);this.uiModel.setProperty("/uniqueKeys",0);this.generateLatencyChartData(o,r);this.generateCacheThroughChartData(o,r);this.generateNativeChartData(o,r)}else{i.error(await this.i18nText("msgMetricNotFound"))}}catch(e){console.error("Error loading metric:",e);i.error(await this.i18nText("msgLoadMetricFailed"))}},generateLatencyChartData:function e(t,i){const a=e=>i.getText(e);const r=[{operation:a("chartOpAvgHitLatency"),latency:t.avgHitLatency||0},{operation:a("chartOpAvgMissLatency"),latency:t.avgMissLatency||0},{operation:a("chartOpAvgReadThroughLatency"),latency:t.avgReadThroughLatency||0}];this.uiModel.setProperty("/latencyData",r)},generateCacheThroughChartData:function e(t,i){const a=e=>i.getText(e);const r=[{operation:a("chartOpHits"),count:t.hits||0},{operation:a("chartOpMisses"),count:t.misses||0},{operation:a("chartOpErrors"),count:t.errors||0}];this.uiModel.setProperty("/cacheThroughData",r)},generateNativeChartData:function e(t,i){const a=e=>i.getText(e);const r=[{operation:a("chartOpSets"),count:t.nativeSets||0},{operation:a("chartOpGets"),count:t.nativeGets||0},{operation:a("chartOpDeletes"),count:t.nativeDeletes||0},{operation:a("chartOpClears"),count:t.nativeClears||0},{operation:a("chartOpDeleteByTags"),count:t.nativeDeleteByTags||0},{operation:a("chartOpErrors"),count:t.nativeErrors||0}];this.uiModel.setProperty("/nativeData",r)},formatChart:function e(){const t=this.getView().byId("metricLatencyChart");if(t){void this.getResourceBundle().then(e=>{t.setVizProperties({legend:{visible:false},plotArea:{dataLabel:{visible:true,formatString:"#,## ms"},gridline:{visible:false}},valueAxis:{axisLine:{visible:false},axisTick:{visible:false},label:{visible:false},title:{visible:false}},categoryAxis:{title:{visible:false}},title:{visible:false,text:e.getText("chartTitleLatencyByOperation")}})})}const i=this.getView().byId("metricCacheThroughChart");if(i){i.setVizProperties({legend:{visible:true},plotArea:{dataLabel:{visible:true}},title:{visible:false}})}const a=this.getView().byId("metricNativeChart");if(a){a.setVizProperties({legend:{visible:true},plotArea:{dataLabel:{visible:true}},title:{visible:false}})}},onRefresh:function e(){const t=this.getModel("app").getProperty("/selectedCache");const i=this.uiModel.getProperty("/metricId");if(t&&i){this.loadMetric(t,i)}},handleFullScreen:function e(){this.getModel("app").setProperty("/layout","EndColumnFullScreen")},handleExitFullScreen:function e(){this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded")},handleClose:function e(){this.getModel("app").setProperty("/layout","TwoColumnsMidExpanded");this.getRouter().navTo("cache",{cache:this.getModel("app").getProperty("/selectedCache")})},onColumnsChange:function e(){}});return s});
2
2
  //# sourceMappingURL=SingleMetric.controller.js.map