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.
- package/README.md +16 -0
- package/app/dashboard/controller/App-dbg.controller.js +14 -14
- package/app/dashboard/controller/App-dbg.controller.js.map +1 -1
- package/app/dashboard/controller/App.controller.js +1 -1
- package/app/dashboard/controller/App.controller.js.map +1 -1
- package/app/dashboard/controller/App.controller.ts +14 -14
- package/app/dashboard/controller/BaseController-dbg.js +7 -0
- package/app/dashboard/controller/BaseController-dbg.js.map +1 -1
- package/app/dashboard/controller/BaseController.js +1 -1
- package/app/dashboard/controller/BaseController.js.map +1 -1
- package/app/dashboard/controller/BaseController.ts +10 -0
- package/app/dashboard/controller/Cache-dbg.controller.js +34 -25
- package/app/dashboard/controller/Cache-dbg.controller.js.map +1 -1
- package/app/dashboard/controller/Cache.controller.js +1 -1
- package/app/dashboard/controller/Cache.controller.js.map +1 -1
- package/app/dashboard/controller/Cache.controller.ts +36 -25
- package/app/dashboard/controller/SingleMetric-dbg.controller.js +56 -50
- package/app/dashboard/controller/SingleMetric-dbg.controller.js.map +1 -1
- package/app/dashboard/controller/SingleMetric.controller.js +1 -1
- package/app/dashboard/controller/SingleMetric.controller.js.map +1 -1
- package/app/dashboard/controller/SingleMetric.controller.ts +29 -22
- package/app/dashboard/i18n/i18n.properties +235 -0
- package/app/dashboard/i18n/i18n_de.properties +271 -3
- package/app/dashboard/i18n/i18n_en.properties +295 -2
- package/app/dashboard/resources/sap-ui-custom.js +11 -11
- package/app/dashboard/resources/sap-ui-custom.js.map +1 -1
- package/app/dashboard/view/Cache.view.xml +149 -149
- package/app/dashboard/view/Main.view.xml +7 -7
- package/app/dashboard/view/SingleMetric.view.xml +30 -30
- package/cds-plugin.js +31 -8
- package/lib/util.js +28 -2
- 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, "&").replace(/</g, "<").replace(/"/g, """).replace(/'/g, "'");
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 ||
|
|
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",
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
124
|
+
MessageBox.error(await this.i18nText("msgMetricNotFound"));
|
|
124
125
|
}
|
|
125
126
|
} catch (error) {
|
|
126
127
|
console.error("Error loading metric:", error);
|
|
127
|
-
MessageBox.error(
|
|
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: "
|
|
137
|
+
operation: t("chartOpAvgHitLatency"),
|
|
136
138
|
latency: metric.avgHitLatency || 0
|
|
137
139
|
}, {
|
|
138
|
-
operation: "
|
|
140
|
+
operation: t("chartOpAvgMissLatency"),
|
|
139
141
|
latency: metric.avgMissLatency || 0
|
|
140
142
|
}, {
|
|
141
|
-
operation: "
|
|
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: "
|
|
154
|
+
operation: t("chartOpHits"),
|
|
152
155
|
count: metric.hits || 0
|
|
153
156
|
}, {
|
|
154
|
-
operation: "
|
|
157
|
+
operation: t("chartOpMisses"),
|
|
155
158
|
count: metric.misses || 0
|
|
156
159
|
}, {
|
|
157
|
-
operation: "
|
|
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: "
|
|
171
|
+
operation: t("chartOpSets"),
|
|
168
172
|
count: metric.nativeSets || 0
|
|
169
173
|
}, {
|
|
170
|
-
operation: "
|
|
174
|
+
operation: t("chartOpGets"),
|
|
171
175
|
count: metric.nativeGets || 0
|
|
172
176
|
}, {
|
|
173
|
-
operation: "
|
|
177
|
+
operation: t("chartOpDeletes"),
|
|
174
178
|
count: metric.nativeDeletes || 0
|
|
175
179
|
}, {
|
|
176
|
-
operation: "
|
|
180
|
+
operation: t("chartOpClears"),
|
|
177
181
|
count: metric.nativeClears || 0
|
|
178
182
|
}, {
|
|
179
|
-
operation: "
|
|
183
|
+
operation: t("chartOpDeleteByTags"),
|
|
180
184
|
count: metric.nativeDeleteByTags || 0
|
|
181
185
|
}, {
|
|
182
|
-
operation: "
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
-
|
|
209
|
-
|
|
200
|
+
plotArea: {
|
|
201
|
+
dataLabel: {
|
|
202
|
+
visible: true,
|
|
203
|
+
formatString: "#,## ms"
|
|
204
|
+
},
|
|
205
|
+
gridline: {
|
|
206
|
+
visible: false
|
|
207
|
+
}
|
|
210
208
|
},
|
|
211
|
-
|
|
212
|
-
|
|
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":"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","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
|
|
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
|