cds-caching 3.0.1 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -77,7 +77,7 @@ This uses the in-memory store — no additional setup needed for development.
77
77
 
78
78
  The plugin ships CDS entity definitions for database-backed features. These load **conditionally** based on your configuration — no manual `model` property needed.
79
79
 
80
- > **Full guide:** [Feature Activation](docs/feature-activation.md) — decision tree, BTP/MTX best practices, and rules for avoiding duplicate model loading.
80
+ > **Full guide:** [Feature Activation](docs/feature-activation.md) — decision tree, BTP/MTX guidance, and rules for avoiding duplicate model loading.
81
81
 
82
82
  | Option | Entities loaded | Purpose |
83
83
  |--------|-----------------|---------|
@@ -258,7 +258,7 @@ For detailed key configuration and deployment instructions, see [Key Management]
258
258
 
259
259
  The plugin includes `CachingApiService`, an OData service for managing caches, browsing entries, and viewing metrics. It powers the [dashboard](docs/dashboard.md) and can be consumed by any OData client.
260
260
 
261
- See **[Feature Activation](docs/feature-activation.md)** for reuse vs own activation, BTP/MTX best practices, and API authorization.
261
+ See **[Feature Activation](docs/feature-activation.md)** for reuse vs own activation, BTP/MTX guidance, and API authorization.
262
262
 
263
263
  **Quick reference:**
264
264
 
@@ -9,12 +9,12 @@ sap.ui.predefine("cds/plugin/caching/dashboard/controller/SingleMetric.controlle
9
9
  sap.ui.predefine("cds/plugin/caching/dashboard/model/filters", ["sap/ui/model/Filter","sap/ui/model/FilterOperator"],function(e,r){"use strict";function t(t){return new e({path:"cache",operator:r.EQ,value1:t})}function a(t,a){return[new e({path:"cache",operator:r.EQ,value1:t}),new e({path:"ID",operator:r.EQ,value1:a})]}function n(t){return new e({path:"period",operator:r.EQ,value1:t})}var o={__esModule:true};o.cacheNameFilter=t;o.cacheAndIdFilter=a;o.periodFilter=n;return o});
10
10
  sap.ui.predefine("cds/plugin/caching/dashboard/model/formatter", ["sap/m/library"],function(e){"use strict";const r=e["ValueColor"];var t={formatIntegerValue(e){if(e===null||e===undefined||e===0){return"0"}return`${e.toFixed(0)}`},formatNumberValue(e){if(e===null||e===undefined||e===0){return"0"}return`${e.toFixed(2)}`},formatPercentage(e){if(e===null||e===undefined){return"0%"}return`${(e*100).toFixed(1)}%`},formatPercentageValue(e){if(e===null||e===undefined){return"0"}return`${(e*100).toFixed(1)}`},formatLatency(e){if(e===null||e===undefined){return"0ms"}const r=Number(e);if(r<1){return`${(r*1e3).toFixed(2)}μs`}return`${r.toFixed(2)}ms`},formatMemoryUsage(e){if(e===null||e===undefined){return"0 B"}const r=["B","KB","MB","GB"];const t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,t)).toFixed(2)} ${r[t]}`},formatThroughput(e){if(e===null||e===undefined){return"0 req/s"}return`${e.toFixed(2)} req/s`},formatCacheEfficiency(e){if(e===null||e===undefined||e===0){return"N/A"}if(e<1){return`${(e*100).toFixed(1)}%`}return`${e.toFixed(1)}x`},formatUptime(e){if(e===null||e===undefined){return"0s"}const r=Math.floor(e/1e3);const t=Math.floor(r/60);const n=Math.floor(t/60);const o=Math.floor(n/24);if(o>0){return`${o}d ${n%24}h ${t%60}m`}else if(n>0){return`${n}h ${t%60}m ${r%60}s`}else if(t>0){return`${t}m ${r%60}s`}else{return`${r}s`}},formatDate(e){if(!e){return""}const r=new Date(e);return r.toLocaleString()},formatHitRatioWithColor(e){if(e===null||e===undefined){return r.None}if(e>=.9){return r.Good}else if(e>=.7){return r.Critical}else{return r.Error}},formatLatencyWithColor(e){if(e===null||e===undefined){return r.None}if(e<=10){return r.Good}else if(e<=50){return r.Critical}else{return r.Error}},formatErrorRateWithColor(e){if(e<=.01){return r.Good}else if(e<=.05){return r.Critical}else if(e<=.1){return r.Error}else{return r.Neutral}},getTotalRequests(e,r){return(e||0)+(r||0)},getTotalOperations(e,r,t,n){return(e||0)+(r||0)+(t||0)+(n||0)},formatJSON(e){if(!e){return""}try{if(typeof e==="string"){const r=JSON.parse(e);return JSON.stringify(r,null,2)}else{return JSON.stringify(e,null,2)}}catch(r){return e}},formatKeyName(e,r=30){if(!e){return""}if(e.length<=r){return e}return e.substring(0,r-3)+"..."},getRelativeTime(e){if(!e){return"Never"}const r=new Date(e);const t=new Date;const n=t.getTime()-r.getTime();const o=Math.floor(n/1e3);const u=Math.floor(o/60);const i=Math.floor(u/60);const f=Math.floor(i/24);if(f>0){return`${f} day${f>1?"s":""} ago`}else if(i>0){return`${i} hour${i>1?"s":""} ago`}else if(u>0){return`${u} minute${u>1?"s":""} ago`}else{return`${o} second${o>1?"s":""} ago`}},formatCacheEfficiencyWithColor(e){if(e===null||e===undefined){return r.None}if(e>5){return r.Good}else if(e>=3){return r.Critical}else{return r.Error}},formatTruncatedText(e,r=50){if(!e){return""}if(e.length<=r){return e}return e.substring(0,r)+"..."}};return t});
11
11
  sap.ui.predefine("cds/plugin/caching/dashboard/model/models", ["sap/ui/model/json/JSONModel","sap/ui/model/BindingMode","sap/ui/Device"],function(e,i,n){"use strict";var d={createDeviceModel:()=>{const d=new e(n);d.setDefaultBindingMode(i.OneWay);return d}};return d});
12
- sap.ui.predefine("cds/plugin/caching/dashboard/service/CacheStatisticsService", ["sap/m/MessageBox","sap/ui/model/odata/v4/ODataModel","sap/ui/model/Filter","sap/ui/model/FilterOperator","sap/ui/model/Sorter","../model/filters"],function(e,t,r,s,a,n){"use strict";const i=n["cacheAndIdFilter"];const c=n["cacheNameFilter"];const o=n["periodFilter"];class l{constructor(e){this.model=e||new t({serviceUrl:"/odata/v4/caching/",autoExpandSelect:true,groupId:"$auto"})}getModel(){return this.model}async getCurrentMetrics(t){try{const e=this.model.bindList("/Metrics",undefined,[new a({path:"timestamp",descending:true})],[o("hourly"),c(t)]);const r=await e.requestContexts();const s=r.map(e=>e.getObject());if(s.length>0){return this.transformStatistics(s[0])}return null}catch(t){console.error("Error fetching current metrics:",t);e.error("Failed to load current metrics");return null}}async getHistoricalMetrics(t,n="hourly",i,l){try{const e=[o(n),c(t)];if(i){e.push(new r({path:"timestamp",operator:s.GE,value1:i}))}if(l){e.push(new r({path:"timestamp",operator:s.LE,value1:l}))}const d=this.model.bindList("/Metrics",undefined,[new a({path:"timestamp",descending:true})],e);const u=await d.requestContexts();return u.map(e=>e.getObject())}catch(t){console.error("Error fetching historical metrics:",t);e.error("Failed to load historical metrics");return[]}}async getTopKeys(t){try{const e=this.model.bindList("/KeyMetrics",undefined,[new a({path:"totalRequests",descending:true})],[o("current"),c(t)]);const r=await e.requestContexts();return r.map(e=>e.getObject())}catch(t){console.error("Error fetching top keys:",t);e.error("Failed to load top keys");return[]}}async getColdKeys(t){try{const e=this.model.bindList("/KeyMetrics",undefined,[new a({path:"lastAccess",descending:false})],[o("current"),c(t)]);const r=await e.requestContexts();return r.map(e=>e.getObject())}catch(t){console.error("Error fetching cold keys:",t);e.error("Failed to load cold keys");return[]}}async persistStatistics(){try{const e=this.model.bindContext("/persistStatistics(...)");await e.invoke();return true}catch(t){console.error("Error persisting statistics:",t);e.error("Failed to persist statistics");return false}}transformStatistics(e){return{hits:e.hits||0,misses:e.misses||0,sets:e.sets||0,deletes:e.deletes||0,errors:e.errors||0,avgLatency:e.avgLatency||0,p95Latency:e.p95Latency||0,p99Latency:e.p99Latency||0,minLatency:e.minLatency||0,maxLatency:e.maxLatency||0,avgHitLatency:e.avgHitLatency||0,p95HitLatency:e.p95HitLatency||0,p99HitLatency:e.p99HitLatency||0,minHitLatency:e.minHitLatency||0,maxHitLatency:e.maxHitLatency||0,avgMissLatency:e.avgMissLatency||0,p95MissLatency:e.p95MissLatency||0,p99MissLatency:e.p99MissLatency||0,minMissLatency:e.minMissLatency||0,maxMissLatency:e.maxMissLatency||0,avgSetLatency:e.avgSetLatency||0,avgDeleteLatency:e.avgDeleteLatency||0,memoryUsage:e.memoryUsage||0,itemCount:e.itemCount||0,hitRatio:e.hitRatio||0,throughput:e.throughput||0,errorRate:e.errorRate||0,cacheEfficiency:e.cacheEfficiency||0,uptimeMs:e.uptimeMs||0,uniqueKeys:0,topKeys:[],coldKeys:[],lastPersisted:e.lastPersisted||(new Date).toISOString()}}async getAvailableMetrics(t){try{const e=this.model.bindList("/Metrics",undefined,[new a({path:"timestamp",descending:true})],[c(t)]);const r=await e.requestContexts();return r.map(e=>e.getObject())}catch(t){console.error("Error fetching available metrics:",t);e.error("Failed to load available metrics");return[]}}async getMetricById(t,r){try{const e=this.model.bindList("/Metrics",undefined,undefined,i(t,r));const s=await e.requestContexts();const a=s.map(e=>e.getObject());if(a.length>0){return this.transformStatistics(a[0])}return null}catch(t){console.error("Error fetching metric by ID:",t);e.error("Failed to load metric");return null}}async setMetricsEnabled(t,r){try{const e=this.model.bindContext("/setMetricsEnabled(...)");e.setParameter("cache",t);e.setParameter("enabled",r);await e.invoke();return true}catch(t){console.error("Error setting metrics enabled:",t);e.error("Failed to update metrics configuration");return false}}async setKeyMetricsEnabled(t,r){try{const e=this.model.bindContext("/setKeyMetricsEnabled(...)");e.setParameter("cache",t);e.setParameter("enabled",r);await e.invoke();return true}catch(t){console.error("Error setting key metrics enabled:",t);e.error("Failed to update key metrics configuration");return false}}}return l});
12
+ sap.ui.predefine("cds/plugin/caching/dashboard/service/CacheStatisticsService", ["sap/m/MessageBox","sap/ui/model/odata/v4/ODataModel","sap/ui/model/Filter","sap/ui/model/FilterOperator","sap/ui/model/Sorter","../model/filters"],function(e,t,r,s,a,n){"use strict";const i=n["cacheAndIdFilter"];const c=n["cacheNameFilter"];const o=n["periodFilter"];class l{constructor(e){this.model=e||new t({serviceUrl:"/odata/v4/caching-api/",autoExpandSelect:true,groupId:"$auto"})}getModel(){return this.model}async getCurrentMetrics(t){try{const e=this.model.bindList("/Metrics",undefined,[new a({path:"timestamp",descending:true})],[o("hourly"),c(t)]);const r=await e.requestContexts();const s=r.map(e=>e.getObject());if(s.length>0){return this.transformStatistics(s[0])}return null}catch(t){console.error("Error fetching current metrics:",t);e.error("Failed to load current metrics");return null}}async getHistoricalMetrics(t,n="hourly",i,l){try{const e=[o(n),c(t)];if(i){e.push(new r({path:"timestamp",operator:s.GE,value1:i}))}if(l){e.push(new r({path:"timestamp",operator:s.LE,value1:l}))}const d=this.model.bindList("/Metrics",undefined,[new a({path:"timestamp",descending:true})],e);const u=await d.requestContexts();return u.map(e=>e.getObject())}catch(t){console.error("Error fetching historical metrics:",t);e.error("Failed to load historical metrics");return[]}}async getTopKeys(t){try{const e=this.model.bindList("/KeyMetrics",undefined,[new a({path:"totalRequests",descending:true})],[o("current"),c(t)]);const r=await e.requestContexts();return r.map(e=>e.getObject())}catch(t){console.error("Error fetching top keys:",t);e.error("Failed to load top keys");return[]}}async getColdKeys(t){try{const e=this.model.bindList("/KeyMetrics",undefined,[new a({path:"lastAccess",descending:false})],[o("current"),c(t)]);const r=await e.requestContexts();return r.map(e=>e.getObject())}catch(t){console.error("Error fetching cold keys:",t);e.error("Failed to load cold keys");return[]}}async persistStatistics(){try{const e=this.model.bindContext("/persistStatistics(...)");await e.invoke();return true}catch(t){console.error("Error persisting statistics:",t);e.error("Failed to persist statistics");return false}}transformStatistics(e){return{hits:e.hits||0,misses:e.misses||0,sets:e.sets||0,deletes:e.deletes||0,errors:e.errors||0,avgLatency:e.avgLatency||0,p95Latency:e.p95Latency||0,p99Latency:e.p99Latency||0,minLatency:e.minLatency||0,maxLatency:e.maxLatency||0,avgHitLatency:e.avgHitLatency||0,p95HitLatency:e.p95HitLatency||0,p99HitLatency:e.p99HitLatency||0,minHitLatency:e.minHitLatency||0,maxHitLatency:e.maxHitLatency||0,avgMissLatency:e.avgMissLatency||0,p95MissLatency:e.p95MissLatency||0,p99MissLatency:e.p99MissLatency||0,minMissLatency:e.minMissLatency||0,maxMissLatency:e.maxMissLatency||0,avgSetLatency:e.avgSetLatency||0,avgDeleteLatency:e.avgDeleteLatency||0,memoryUsage:e.memoryUsage||0,itemCount:e.itemCount||0,hitRatio:e.hitRatio||0,throughput:e.throughput||0,errorRate:e.errorRate||0,cacheEfficiency:e.cacheEfficiency||0,uptimeMs:e.uptimeMs||0,uniqueKeys:0,topKeys:[],coldKeys:[],lastPersisted:e.lastPersisted||(new Date).toISOString()}}async getAvailableMetrics(t){try{const e=this.model.bindList("/Metrics",undefined,[new a({path:"timestamp",descending:true})],[c(t)]);const r=await e.requestContexts();return r.map(e=>e.getObject())}catch(t){console.error("Error fetching available metrics:",t);e.error("Failed to load available metrics");return[]}}async getMetricById(t,r){try{const e=this.model.bindList("/Metrics",undefined,undefined,i(t,r));const s=await e.requestContexts();const a=s.map(e=>e.getObject());if(a.length>0){return this.transformStatistics(a[0])}return null}catch(t){console.error("Error fetching metric by ID:",t);e.error("Failed to load metric");return null}}async setMetricsEnabled(t,r){try{const e=this.model.bindContext("/setMetricsEnabled(...)");e.setParameter("cache",t);e.setParameter("enabled",r);await e.invoke();return true}catch(t){console.error("Error setting metrics enabled:",t);e.error("Failed to update metrics configuration");return false}}async setKeyMetricsEnabled(t,r){try{const e=this.model.bindContext("/setKeyMetricsEnabled(...)");e.setParameter("cache",t);e.setParameter("enabled",r);await e.invoke();return true}catch(t){console.error("Error setting key metrics enabled:",t);e.error("Failed to update key metrics configuration");return false}}}return l});
13
13
  sap.ui.require.preload({
14
14
  "cds/plugin/caching/dashboard/i18n/i18n.properties":'# Default (English) \\u2013 bundle fallback\n\nappTitle=Cache Performance Dashboard\nappDescription=Comprehensive cache statistics and monitoring dashboard\nbtnText=Say Hello\n\n# Main Dashboard\nmainTitle=Cache Performance Dashboard\nrefreshButton=Refresh\npersistButton=Persist Statistics\n\n# Navigation\nkeyAnalysis=Key Analysis\n\n# Metrics\nhitRatio=Hit Ratio\navgLatency=Average Latency\nthroughput=Throughput\nerrorRate=Error Rate\ntotalRequests=Total Requests\nmemoryUsage=Memory Usage\nuniqueKeys=Unique Keys\nuptime=Uptime\n\n# Keys\nkeysTitle=Key Analysis\nkeysSubtitle=Cache Key Access Patterns\ntopKeys=Top Accessed Keys\ncoldKeys=Cold Keys\nkeyStatistics=Key Statistics\ntotalKeysTracked=Total Keys Tracked\nmostActiveKey=Most Active Key\nleastActiveKey=Least Active Key\n\n# Common\nloading=Loading...\nnoData=No data available\nerror=Error\nsuccess=Success\nwarning=Warning\n\n# Statistics Page\nstatisticsTitle=Statistics\nstatisticsSubtitle=Historical cache statistics\nstatisticsFilters=Filters\nstatisticsFiltersSubtitle=Select date range and period\nstatisticsSummary=Summary\nstatisticsSummarySubtitle=Statistics overview\nstatisticsData=Statistics Data\nstatisticsDataSubtitle=Detailed statistics records\nstatisticsTrends=Trends\nstatisticsTrendsSubtitle=Performance trends over time\nstatisticsPeriod=Period\nstatisticsFrom=From\nstatisticsTo=To\nstatisticsLoad=Load\nstatisticsRefresh=Refresh\nstatisticsExport=Export CSV\nstatisticsTotalRecords=Total Records\nstatisticsAvgHitRatio=Average Hit Ratio\nstatisticsAvgLatency=Average Latency\nstatisticsTotalRequests=Total Requests\nstatisticsNoData=No statistics found for the selected criteria\n\n# Main list\nhomePageTitle=cds-caching \\u2013 Dashboard\ncachingServicesHeader=Caching Services\nnoCachesAvailable=No caches available\ncolName=Name\ncolStatisticTrackingEnabled=Statistic Tracking Enabled\ncolKeyTrackingEnabled=Key Tracking Enabled\n\n# Tooltips\nttFullScreenEnter=Enter Full Screen Mode\nttFullScreenExit=Exit Full Screen Mode\nttCloseMidColumn=Close middle column\nttCloseEndColumn=Close end column\n\n# Cache view \\u2013 page\ncachePagePrefix=Cache:\nenableMetricsLabel=Enable Metrics\nenableKeyMetricsLabel=Enable Key Metrics\nactionClearCache=Clear Cache\n\n# Tabs\ntabOverview=Overview\ntabMetrics=Metrics\ntabKeyMetrics=Key Metrics\ntabBrowseCacheEntries=Browse Cache Entries\n\n# Cards overview\nconfigCardTitle=Configuration\nconfigCardSubtitle=Cache Configuration\ncreateEntryTitle=Create Cache Entry\ncreateEntrySubtitle=Create a new cache entry\ngetEntryTitle=Get Cache Entry\ngetEntrySubtitle=Get a cache entry\ndeleteEntryTitle=Delete Cache Entry\ndeleteEntrySubtitle=Delete a cache entry\n\n# Form\nlabelKey=Key\nlabelValue=Value\nlabelTtlSeconds=TTL (seconds)\nbtnSetEntry=Set Entry\nbtnGetEntry=Get Entry\nbtnDeleteEntry=Delete Entry\n\n# Metrics & toolbars\naggregatedMetricsByHour=Aggregated Metrics by Hour\nbtnClearMetrics=Clear Metrics\nbtnLoadCacheEntries=Load Cache Entries\nkeyMetricsToolbarTitle=Key Metrics\n\n# Column groups\ngroupReadThrough=Read-Through\ngroupReadThroughOps=Read-Through Operations\ngroupReadThroughPerformance=Read-Through Performance\ngroupReadThroughLatencies=Read-Through Latencies\ngroupReadThroughHitLatencies=Read-Through Hit Latencies\ngroupReadThroughMissLatencies=Read-Through Miss Latencies\ngroupNativeFunction=Native Function\ngroupNativeFunctionOps=Native Function Operations\ngroupNativeFunctionPerformance=Native Function Performance\nctxGroup=Context\ninfoAdditional=Additional Information\n\n# Column sub-labels\ncolHits=Hits\ncolMisses=Misses\ncolTotalRequests=Total Requests\ncolHitRatioPct=Hit Ratio %\ncolErrorRatePct=Error Rate %\ncolCacheEfficiency=Cache Efficiency\ncolTimestamp=Timestamp\ncolAvgLatencyMs=Avg Latency (ms)\ncolHitAvgMs=Hit Avg (ms)\ncolHitMinMs=Hit Min (ms)\ncolHitMaxMs=Hit Max (ms)\ncolMissAvgMs=Miss Avg (ms)\ncolMissMinMs=Miss Min (ms)\ncolMissMaxMs=Miss Max (ms)\ncolTotal=Total\ncolSets=Sets\ncolGets=Gets\ncolDeletes=Deletes\ncolClears=Clears\ncolDeleteByTags=Delete By Tags\ncolErrors=Errors\ncolKeyName=Key Name\ncolOperation=Operation\ncolType=Type\ncolOperationType=Operation Type\ncolTarget=Target\ncolMetadata=Metadata\ncolAvgHitLatencyMs=Avg Hit Latency (ms)\ncolMinHitLatencyMs=Min Hit Latency (ms)\ncolMaxHitLatencyMs=Max Hit Latency (ms)\ncolAvgMissLatencyMs=Avg Miss Latency (ms)\ncolMinMissLatencyMs=Min Miss Latency (ms)\ncolMaxMissLatencyMs=Max Miss Latency (ms)\ncolTenant=Tenant\ncolUser=User\ncolLocale=Locale\ncolLastAccess=Last Access\ncolFirstAccess=First Access\ncolTags=Tags\nbtnShowMetadata=Show Metadata\n\n# Browse\ncacheEntriesTitle=Cache Entries\ncacheEntriesSubtitle=Browse all cache entries (use with caution)\nmessageStripLoadEntriesWarning=Warning: Loading all cache entries may impact performance for large caches. Use the button below to load entries on demand.\n\n# Placeholder chart\nchartPlaceholder=Chart visualization will be implemented here\nselectChartHitLatency=Hit Latency\nselectChartMissLatency=Miss Latency\n\n# Card chart headers (hidden section)\ntrendsCardTitle=Trends\ntrendsCardSubtitle=Performance trends over time\n\n# Single metric \\u2013 page\nmetricDetailsPageTitle=Metric Details\nmetricPagePrefix=Metric:\nkeyMetricDetailsPageTitle=Key Metric Details\nkeyMetricPagePrefix=Key:\nsectionReadThroughPerformance=Read-Through Performance\nsectionNativeFunctionPerformance=Native Function Performance\n\n# Generic tiles\ntileSubCacheHitRate=Cache Hit Rate\ntileSubPerformanceFactor=Performance Factor\ntileSubReqPerSec=Requests per Second\ntileSubCacheErrors=Cache Errors\ntileSubCacheOperations=Cache Operations\ntileSubSuccessfulRetrievals=Successful Retrievals\ntileSubFailedRetrievals=Failed Retrievals\ntileSubErrorCount=Error Count\ntileSubCacheHitResponse=Cache Hit Response\ntileSubCacheMissResponse=Cache Miss Response\nheaderCacheEfficiency=Cache Efficiency\nheaderErrorRate=Error Rate\nheaderCacheHits=Cache Hits\nheaderCacheMisses=Cache Misses\nheaderCacheErrors=Cache Errors\nheaderHitLatency=Hit Latency\nheaderMissLatency=Miss Latency\nheaderNativeThroughput=Native Throughput\nheaderNativeErrorRate=Native Error Rate\nheaderNativeSets=Native Sets\nheaderNativeGets=Native Gets\nheaderNativeDeletes=Native Deletes\nheaderNativeClears=Native Clears\nheaderDeleteByTags=Delete By Tags\nheaderNativeErrors=Native Errors\nheaderTotalNativeOps=Total Native Ops\ntileSubNativeOpsPerSec=Operations per Second\ntileSubWriteOps=Write Operations\ntileSubReadOps=Read Operations\ntileSubDeleteOps=Delete Operations\ntileSubClearOps=Clear Operations\ntileSubTagDeletes=Tag-based Deletes\ntileSubAllOperations=All Operations\n\n# Cards (single metric)\ncardReadThroughOps=Read-Through Operations\ncardReadThroughOpsSub=Hit/Miss/Error Distribution\ncardLatencyCompare=Latency Comparison\ncardLatencyCompareSub=Read-Through Latency Metrics\ncardNativeFunctionOps=Native Function Operations\ncardNativeFunctionOpsSub=Operation Distribution\n\n# Viz internal labels\nvizMeasureCount=Count\nvizMeasureLatency=Latency\n\n# Controllers & messages\nmsgNoCacheSelected=No cache selected\nmsgUpdatingStatsConfig=Updating statistics configuration\\u2026\nmsgStatsEnabled=Statistics enabled successfully\nmsgStatsDisabled=Statistics disabled successfully\nmsgFailedUpdateStatsConfig=Failed to update statistics configuration\nmsgErrorUpdateStatsConfig=Error updating statistics configuration\nmsgUpdatingKeyTracking=Updating key tracking configuration\\u2026\nmsgKeyTrackingEnabled=Key tracking enabled successfully\nmsgKeyTrackingDisabled=Key tracking disabled successfully\nmsgFailedKeyTracking=Failed to update key tracking configuration\nmsgErrorKeyTracking=Error updating key tracking configuration\nmsgStatsPersisted=Statistics persisted successfully\nmsgFailedPersistStats=Failed to persist statistics\nmsgErrorPersistStats=Error persisting statistics\nmsgLoadEntriesFailed=Failed to load cache entries\nmsgProvideKeyValue=Please provide both key and value\nmsgEntryCreated=Cache entry created successfully\nmsgCreateEntryFailed=Failed to create cache entry\nmsgProvideKey=Please provide a key\nmsgEntryDeleted=Cache entry deleted successfully\nmsgDeleteEntryFailed=Failed to delete cache entry\nmsgNotFound=Not found\nmsgGetEntryError=Error: Entry not found or error occurred\nmsgMetricsEnabled=Metrics enabled successfully\nmsgMetricsDisabled=Metrics disabled successfully\nmsgFailedUpdateMetrics=Failed to update metrics setting\nmsgKeyMetricsEnabled=Key metrics enabled successfully\nmsgKeyMetricsDisabled=Key metrics disabled successfully\nmsgFailedKeyMetrics=Failed to update key metrics setting\nmsgConfirmClearCache=Are you sure you want to clear this cache? This action cannot be undone.\nmsgCacheCleared=Cache cleared successfully\nmsgClearCacheFailed=Failed to clear cache\nmsgMetricsCleared=Metrics cleared successfully\nmsgKeyMetricsCleared=Key metrics cleared successfully\nmsgFailedClearMetrics=Failed to clear metrics\nmsgFailedClearKeyMetrics=Failed to clear key metrics\nmsgMetricNotFound=Metric not found\nmsgLoadMetricFailed=Failed to load metric details\n\n# Key metrics popover tabs\nkeyTabMetadata=Metadata\nkeyTabSubject=Subject\nkeyTabQuery=Query\nkeyTabCacheOptions=Cache Options\n\n# Chart (single metric) \\u2013 operation labels\nchartOpAvgHitLatency=Average Hit Latency\nchartOpAvgMissLatency=Average Miss Latency\nchartOpAvgReadThroughLatency=Average Read-Through Latency\nchartOpHits=Hits\nchartOpMisses=Misses\nchartOpErrors=Errors\nchartOpSets=Sets\nchartOpGets=Gets\nchartOpDeletes=Deletes\nchartOpClears=Clears\nchartOpDeleteByTags=Delete By Tags\n\nchartTitleLatencyByOperation=Latency by Operation\n',
15
15
  "cds/plugin/caching/dashboard/i18n/i18n_de.properties":'# German\n\nappTitle=Cache-Performance-Dashboard\nappDescription=Zusammenfassendes Statistik- und \\u00dcberwachungs-Dashboard\nbtnText=Hallo sagen\n\nmainTitle=Cache-Performance-Dashboard\nrefreshButton=Aktualisieren\npersistButton=Statistiken speichern\n\nkeyAnalysis=Schl\\u00fcsselanalyse\n\nhitRatio=Trefferquote\navgLatency=Mittlere Latenz\nthroughput=Durchsatz\nerrorRate=Fehlerrate\ntotalRequests=Anfragen gesamt\nmemoryUsage=Speicherverbrauch\nuniqueKeys=Eindeutige Schl\\u00fcssel\nuptime=Betriebszeit\n\nkeysTitle=Schl\\u00fcsselanalyse\nkeysSubtitle=Zugriffsmuster auf Cache-Schl\\u00fcssel\ntopKeys=Meist genutzte Schl\\u00fcssel\ncoldKeys=Kalte Schl\\u00fcssel\nkeyStatistics=Schl\\u00fcsselstatistiken\ntotalKeysTracked=Erfasste Schl\\u00fcssel gesamt\nmostActiveKey=Aktivster Schl\\u00fcssel\nleastActiveKey=Am wenigsten aktiver Schl\\u00fcssel\n\nloading=Wird geladen\\u2026\nnoData=Keine Daten verf\\u00fcgbar\nerror=Fehler\nsuccess=Erfolg\nwarning=Warnung\n\nstatisticsTitle=Statistiken\nstatisticsSubtitle=Historische Cache-Statistiken\nstatisticsFilters=Filter\nstatisticsFiltersSubtitle=Datumsbereich und Zeitraum w\\u00e4hlen\nstatisticsSummary=Zusammenfassung\nstatisticsSummarySubtitle=Statistik-\\u00dcberblick\nstatisticsData=Statistikdaten\nstatisticsDataSubtitle=Detaillierte Statistikdatens\\u00e4tze\nstatisticsTrends=Trends\nstatisticsTrendsSubtitle=Leistungstrends \\u00fcber die Zeit\nstatisticsPeriod=Zeitraum\nstatisticsFrom=Von\nstatisticsTo=Bis\nstatisticsLoad=Laden\nstatisticsRefresh=Aktualisieren\nstatisticsExport=CSV exportieren\nstatisticsTotalRecords=Datens\\u00e4tze gesamt\nstatisticsAvgHitRatio=Mittlere Trefferquote\nstatisticsAvgLatency=Mittlere Latenz\nstatisticsTotalRequests=Anfragen gesamt\nstatisticsNoData=Keine Statistiken f\\u00fcr die gew\\u00e4hlten Kriterien\n\nhomePageTitle=cds-caching \\u2013 Dashboard\ncachingServicesHeader=Caching-Services\nnoCachesAvailable=Keine Caches verf\\u00fcgbar\ncolName=Name\ncolStatisticTrackingEnabled=Statistiken aktiv\ncolKeyTrackingEnabled=Schl\\u00fcsselmetriken aktiv\n\nttFullScreenEnter=Vollbildmodus\nttFullScreenExit=Vollbildmodus beenden\nttCloseMidColumn=Mittlere Spalte schlie\\u00dfen\nttCloseEndColumn=Rechte Spalte schlie\\u00dfen\n\ncachePagePrefix=Cache:\nenableMetricsLabel=Metriken aktivieren\nenableKeyMetricsLabel=Schl\\u00fcsselmetriken aktivieren\nactionClearCache=Cache leeren\n\ntabOverview=\\u00dcberblick\ntabMetrics=Metriken\ntabKeyMetrics=Schl\\u00fcsselmetriken\ntabBrowseCacheEntries=Cache-Eintr\\u00e4ge durchsuchen\n\nconfigCardTitle=Konfiguration\nconfigCardSubtitle=Cache-Konfiguration\ncreateEntryTitle=Cache-Eintrag anlegen\ncreateEntrySubtitle=Neuen Cache-Eintrag anlegen\ngetEntryTitle=Cache-Eintrag lesen\ngetEntrySubtitle=Cache-Eintrag abrufen\ndeleteEntryTitle=Cache-Eintrag l\\u00f6schen\ndeleteEntrySubtitle=Cache-Eintrag entfernen\n\nlabelKey=Schl\\u00fcssel\nlabelValue=Wert\nlabelTtlSeconds=TTL (Sekunden)\nbtnSetEntry=Eintrag setzen\nbtnGetEntry=Eintrag abrufen\nbtnDeleteEntry=Eintrag l\\u00f6schen\n\naggregatedMetricsByHour=Aggregierte Metriken pro Stunde\nbtnClearMetrics=Metriken leeren\nbtnLoadCacheEntries=Cache-Eintr\\u00e4ge laden\nkeyMetricsToolbarTitle=Schl\\u00fcsselmetriken\n\ngroupReadThrough=Read-Through\ngroupReadThroughOps=Read-Through-Vorg\\u00e4nge\ngroupReadThroughPerformance=Read-Through-Leistung\ngroupReadThroughLatencies=Read-Through-Latenzen\ngroupReadThroughHitLatencies=Read-Through-Treffer-Latenzen\ngroupReadThroughMissLatencies=Read-Through-Cache-Miss-Latenzen\ngroupNativeFunction=Native-Funktion\ngroupNativeFunctionOps=Native-Funktionsvorg\\u00e4nge\ngroupNativeFunctionPerformance=Native-Funktionsleistung\nctxGroup=Kontext\ninfoAdditional=Zusatzinformationen\n\ncolHits=Hits\ncolMisses=Misses\ncolTotalRequests=Anfragen gesamt\ncolHitRatioPct=Trefferquote %\ncolErrorRatePct=Fehlerrate %\ncolCacheEfficiency=Cache-Effizienz\ncolTimestamp=Zeitstempel\ncolAvgLatencyMs=\\u00d8 Latenz (ms)\ncolHitAvgMs=Treffer \\u00d8 (ms)\ncolHitMinMs=Treffer min (ms)\ncolHitMaxMs=Treffer max (ms)\ncolMissAvgMs=Miss \\u00d8 (ms)\ncolMissMinMs=Miss min (ms)\ncolMissMaxMs=Miss max (ms)\ncolTotal=Gesamt\ncolSets=Sets\ncolGets=Gets\ncolDeletes=Deletes\ncolClears=Clears\ncolDeleteByTags=L\\u00f6schen per Tags\ncolErrors=Fehler\ncolKeyName=Schl\\u00fcsselname\ncolOperation=Operation\ncolType=Typ\ncolOperationType=Operationstyp\ncolTarget=Ziel\ncolMetadata=Metadaten\ncolAvgHitLatencyMs=\\u00d8 Treffer-Latenz (ms)\ncolMinHitLatencyMs=Min. Treffer-Latenz (ms)\ncolMaxHitLatencyMs=Max. Treffer-Latenz (ms)\ncolAvgMissLatencyMs=\\u00d8 Miss-Latenz (ms)\ncolMinMissLatencyMs=Min. Miss-Latenz (ms)\ncolMaxMissLatencyMs=Max. Miss-Latenz (ms)\ncolTenant=Mandant\ncolUser=Benutzer\ncolLocale=Locale\ncolLastAccess=Letzter Zugriff\ncolFirstAccess=Erster Zugriff\ncolTags=Tags\nbtnShowMetadata=Metadaten anzeigen\n\ncacheEntriesTitle=Cache-Eintr\\u00e4ge\ncacheEntriesSubtitle=Alle Cache-Eintr\\u00e4ge durchsuchen (Vorsicht)\nmessageStripLoadEntriesWarning=Hinweis: Das Laden aller Cache-Eintr\\u00e4ge kann bei gro\\u00dfen Caches die Leistung beeintr\\u00e4chtigen. Verwenden Sie die Schaltfl\\u00e4che, um Bedarf einzutragen.\n\nchartPlaceholder=Diagramm-Ansicht wird hier implementiert\nselectChartHitLatency=Treffer-Latenz\nselectChartMissLatency=Miss-Latenz\n\ntrendsCardTitle=Trends\ntrendsCardSubtitle=Leistungstrends \\u00fcber die Zeit\n\nmetricDetailsPageTitle=Metrikdetails\nmetricPagePrefix=Metrik:\nkeyMetricDetailsPageTitle=Schl\\u00fcsselmetrikdetails\nkeyMetricPagePrefix=Schl\\u00fcssel:\nsectionReadThroughPerformance=Read-Through-Leistung\nsectionNativeFunctionPerformance=Native-Funktionsleistung\n\ntileSubCacheHitRate=Cache-Trefferquote\ntileSubPerformanceFactor=Leistungsfaktor\ntileSubReqPerSec=Anfragen pro Sekunde\ntileSubCacheErrors=Cache-Fehler\ntileSubCacheOperations=Cache-Operationen\ntileSubSuccessfulRetrievals=Erfolgreiche Lesevorg\\u00e4nge\ntileSubFailedRetrievals=Fehlgeschlagene Lesevorg\\u00e4nge\ntileSubErrorCount=Fehleranzahl\ntileSubCacheHitResponse=Antwort bei Treffer\ntileSubCacheMissResponse=Antwort bei Miss\nheaderCacheEfficiency=Cache-Effizienz\nheaderErrorRate=Fehlerrate\nheaderCacheHits=Cache-Treffer\nheaderCacheMisses=Cache-Misses\nheaderCacheErrors=Cache-Fehler\nheaderHitLatency=Treffer-Latenz\nheaderMissLatency=Miss-Latenz\nheaderNativeThroughput=Native-Durchsatz\nheaderNativeErrorRate=Native-Fehlerrate\nheaderNativeSets=Native-Set-Operationen\nheaderNativeGets=Native-Get-Operationen\nheaderNativeDeletes=Native-L\\u00f6schvorg\\u00e4nge\nheaderNativeClears=Native-Clear-Operationen\nheaderDeleteByTags=L\\u00f6schen per Tags\nheaderNativeErrors=Native-Fehler\nheaderTotalNativeOps=Native-Operationen gesamt\ntileSubNativeOpsPerSec=Operationen pro Sekunde\ntileSubWriteOps=Schreibvorg\\u00e4nge\ntileSubReadOps=Lesevorg\\u00e4nge\ntileSubDeleteOps=L\\u00f6schvorg\\u00e4nge\ntileSubClearOps=Clear-Operationen\ntileSubTagDeletes=Tag-basiertes L\\u00f6schen\ntileSubAllOperations=Alle Operationen\n\ncardReadThroughOps=Read-Through-Vorg\\u00e4nge\ncardReadThroughOpsSub=Verteilung Treffer/Miss/Fehler\ncardLatencyCompare=Latenzvergleich\ncardLatencyCompareSub=Read-Through-Latenzmetriken\ncardNativeFunctionOps=Native-Funktionsvorg\\u00e4nge\ncardNativeFunctionOpsSub=Verteilung Treffer/Miss/Fehler\n\nvizMeasureCount=Anzahl\nvizMeasureLatency=Latenz\n\nmsgNoCacheSelected=Kein Cache ausgew\\u00e4hlt\nmsgUpdatingStatsConfig=Statistik-Konfiguration wird aktualisiert\\u2026\nmsgStatsEnabled=Statistik-Erfassung aktiviert\nmsgStatsDisabled=Statistik-Erfassung deaktiviert\nmsgFailedUpdateStatsConfig=Statistik-Konfiguration konnte nicht aktualisiert werden\nmsgErrorUpdateStatsConfig=Fehler beim Aktualisieren der Statistik-Konfiguration\nmsgUpdatingKeyTracking=Schl\\u00fcsselverfolgung wird konfiguriert\\u2026\nmsgKeyTrackingEnabled=Schl\\u00fcsselverfolgung aktiviert\nmsgKeyTrackingDisabled=Schl\\u00fcsselverfolgung deaktiviert\nmsgFailedKeyTracking=Schl\\u00fcsselverfolgung konnte nicht konfiguriert werden\nmsgErrorKeyTracking=Fehler bei der Konfiguration der Schl\\u00fcsselverfolgung\nmsgStatsPersisted=Statistiken gespeichert\nmsgFailedPersistStats=Statistiken konnten nicht gespeichert werden\nmsgErrorPersistStats=Fehler beim Speichern der Statistiken\nmsgLoadEntriesFailed=Cache-Eintr\\u00e4ge konnten nicht geladen werden\nmsgProvideKeyValue=Bitte Schl\\u00fcssel und Wert eingeben\nmsgEntryCreated=Cache-Eintrag angelegt\nmsgCreateEntryFailed=Cache-Eintrag konnte nicht angelegt werden\nmsgProvideKey=Bitte einen Schl\\u00fcssel eingeben\nmsgEntryDeleted=Cache-Eintrag gel\\u00f6scht\nmsgDeleteEntryFailed=Cache-Eintrag konnte nicht gel\\u00f6scht werden\nmsgNotFound=Nicht gefunden\nmsgGetEntryError=Fehler: Eintrag nicht gefunden oder Fehler\nmsgMetricsEnabled=Metriken aktiviert\nmsgMetricsDisabled=Metriken deaktiviert\nmsgFailedUpdateMetrics=Metrik-Einstellung konnte nicht aktualisiert werden\nmsgKeyMetricsEnabled=Schl\\u00fcsselmetriken aktiviert\nmsgKeyMetricsDisabled=Schl\\u00fcsselmetriken deaktiviert\nmsgFailedKeyMetrics=Schl\\u00fcsselmetriken-Einstellung konnte nicht aktualisiert werden\nmsgConfirmClearCache=Cache wirklich leeren? Diese Aktion kann nicht r\\u00fcckg\\u00e4ngig gemacht werden.\nmsgCacheCleared=Cache geleert\nmsgClearCacheFailed=Cache konnte nicht geleert werden\nmsgMetricsCleared=Metriken geleert\nmsgKeyMetricsCleared=Schl\\u00fcsselmetriken geleert\nmsgFailedClearMetrics=Metriken konnten nicht geleert werden\nmsgFailedClearKeyMetrics=Schl\\u00fcsselmetriken konnten nicht geleert werden\nmsgMetricNotFound=Metrik nicht gefunden\nmsgLoadMetricFailed=Metrikdetails konnten nicht geladen werden\n\nkeyTabMetadata=Metadaten\nkeyTabSubject=Subject\nkeyTabQuery=Abfrage\nkeyTabCacheOptions=Cache-Optionen\n\nchartOpAvgHitLatency=Mittlere Treffer-Latenz\nchartOpAvgMissLatency=Mittlere Miss-Latenz\nchartOpAvgReadThroughLatency=Mittlere Read-Through-Latenz\nchartOpHits=Hits\nchartOpMisses=Misses\nchartOpErrors=Fehler\nchartOpSets=Sets\nchartOpGets=Gets\nchartOpDeletes=Deletes\nchartOpClears=Clears\nchartOpDeleteByTags=L\\u00f6schen per Tags\n\nchartTitleLatencyByOperation=Latenz je Operation\n',
16
16
  "cds/plugin/caching/dashboard/i18n/i18n_en.properties":'# Default (English) \\u2013 bundle fallback\n\nappTitle=Cache Performance Dashboard\nappDescription=Comprehensive cache statistics and monitoring dashboard\nbtnText=Say Hello\n\n# Main Dashboard\nmainTitle=Cache Performance Dashboard\nrefreshButton=Refresh\npersistButton=Persist Statistics\n\n# Navigation\nkeyAnalysis=Key Analysis\n\n# Metrics\nhitRatio=Hit Ratio\navgLatency=Average Latency\nthroughput=Throughput\nerrorRate=Error Rate\ntotalRequests=Total Requests\nmemoryUsage=Memory Usage\nuniqueKeys=Unique Keys\nuptime=Uptime\n\n# Keys\nkeysTitle=Key Analysis\nkeysSubtitle=Cache Key Access Patterns\ntopKeys=Top Accessed Keys\ncoldKeys=Cold Keys\nkeyStatistics=Key Statistics\ntotalKeysTracked=Total Keys Tracked\nmostActiveKey=Most Active Key\nleastActiveKey=Least Active Key\n\n# Common\nloading=Loading...\nnoData=No data available\nerror=Error\nsuccess=Success\nwarning=Warning\n\n# Statistics Page\nstatisticsTitle=Statistics\nstatisticsSubtitle=Historical cache statistics\nstatisticsFilters=Filters\nstatisticsFiltersSubtitle=Select date range and period\nstatisticsSummary=Summary\nstatisticsSummarySubtitle=Statistics overview\nstatisticsData=Statistics Data\nstatisticsDataSubtitle=Detailed statistics records\nstatisticsTrends=Trends\nstatisticsTrendsSubtitle=Performance trends over time\nstatisticsPeriod=Period\nstatisticsFrom=From\nstatisticsTo=To\nstatisticsLoad=Load\nstatisticsRefresh=Refresh\nstatisticsExport=Export CSV\nstatisticsTotalRecords=Total Records\nstatisticsAvgHitRatio=Average Hit Ratio\nstatisticsAvgLatency=Average Latency\nstatisticsTotalRequests=Total Requests\nstatisticsNoData=No statistics found for the selected criteria\n\n# Main list\nhomePageTitle=cds-caching \\u2013 Dashboard\ncachingServicesHeader=Caching Services\nnoCachesAvailable=No caches available\ncolName=Name\ncolStatisticTrackingEnabled=Statistic Tracking Enabled\ncolKeyTrackingEnabled=Key Tracking Enabled\n\n# Tooltips\nttFullScreenEnter=Enter Full Screen Mode\nttFullScreenExit=Exit Full Screen Mode\nttCloseMidColumn=Close middle column\nttCloseEndColumn=Close end column\n\n# Cache view \\u2013 page\ncachePagePrefix=Cache:\nenableMetricsLabel=Enable Metrics\nenableKeyMetricsLabel=Enable Key Metrics\nactionClearCache=Clear Cache\n\n# Tabs\ntabOverview=Overview\ntabMetrics=Metrics\ntabKeyMetrics=Key Metrics\ntabBrowseCacheEntries=Browse Cache Entries\n\n# Cards overview\nconfigCardTitle=Configuration\nconfigCardSubtitle=Cache Configuration\ncreateEntryTitle=Create Cache Entry\ncreateEntrySubtitle=Create a new cache entry\ngetEntryTitle=Get Cache Entry\ngetEntrySubtitle=Get a cache entry\ndeleteEntryTitle=Delete Cache Entry\ndeleteEntrySubtitle=Delete a cache entry\n\n# Form\nlabelKey=Key\nlabelValue=Value\nlabelTtlSeconds=TTL (seconds)\nbtnSetEntry=Set Entry\nbtnGetEntry=Get Entry\nbtnDeleteEntry=Delete Entry\n\n# Metrics & toolbars\naggregatedMetricsByHour=Aggregated Metrics by Hour\nbtnClearMetrics=Clear Metrics\nbtnLoadCacheEntries=Load Cache Entries\nkeyMetricsToolbarTitle=Key Metrics\n\n# Column groups\ngroupReadThrough=Read-Through\ngroupReadThroughOps=Read-Through Operations\ngroupReadThroughPerformance=Read-Through Performance\ngroupReadThroughLatencies=Read-Through Latencies\ngroupReadThroughHitLatencies=Read-Through Hit Latencies\ngroupReadThroughMissLatencies=Read-Through Miss Latencies\ngroupNativeFunction=Native Function\ngroupNativeFunctionOps=Native Function Operations\ngroupNativeFunctionPerformance=Native Function Performance\nctxGroup=Context\ninfoAdditional=Additional Information\n\n# Column sub-labels\ncolHits=Hits\ncolMisses=Misses\ncolTotalRequests=Total Requests\ncolHitRatioPct=Hit Ratio %\ncolErrorRatePct=Error Rate %\ncolCacheEfficiency=Cache Efficiency\ncolTimestamp=Timestamp\ncolAvgLatencyMs=Avg Latency (ms)\ncolHitAvgMs=Hit Avg (ms)\ncolHitMinMs=Hit Min (ms)\ncolHitMaxMs=Hit Max (ms)\ncolMissAvgMs=Miss Avg (ms)\ncolMissMinMs=Miss Min (ms)\ncolMissMaxMs=Miss Max (ms)\ncolTotal=Total\ncolSets=Sets\ncolGets=Gets\ncolDeletes=Deletes\ncolClears=Clears\ncolDeleteByTags=Delete By Tags\ncolErrors=Errors\ncolKeyName=Key Name\ncolOperation=Operation\ncolType=Type\ncolOperationType=Operation Type\ncolTarget=Target\ncolMetadata=Metadata\ncolAvgHitLatencyMs=Avg Hit Latency (ms)\ncolMinHitLatencyMs=Min Hit Latency (ms)\ncolMaxHitLatencyMs=Max Hit Latency (ms)\ncolAvgMissLatencyMs=Avg Miss Latency (ms)\ncolMinMissLatencyMs=Min Miss Latency (ms)\ncolMaxMissLatencyMs=Max Miss Latency (ms)\ncolTenant=Tenant\ncolUser=User\ncolLocale=Locale\ncolLastAccess=Last Access\ncolFirstAccess=First Access\ncolTags=Tags\nbtnShowMetadata=Show Metadata\n\n# Browse\ncacheEntriesTitle=Cache Entries\ncacheEntriesSubtitle=Browse all cache entries (use with caution)\nmessageStripLoadEntriesWarning=Warning: Loading all cache entries may impact performance for large caches. Use the button below to load entries on demand.\n\n# Placeholder chart\nchartPlaceholder=Chart visualization will be implemented here\nselectChartHitLatency=Hit Latency\nselectChartMissLatency=Miss Latency\n\n# Card chart headers (hidden section)\ntrendsCardTitle=Trends\ntrendsCardSubtitle=Performance trends over time\n\n# Single metric \\u2013 page\nmetricDetailsPageTitle=Metric Details\nmetricPagePrefix=Metric:\nkeyMetricDetailsPageTitle=Key Metric Details\nkeyMetricPagePrefix=Key:\nsectionReadThroughPerformance=Read-Through Performance\nsectionNativeFunctionPerformance=Native Function Performance\n\n# Generic tiles\ntileSubCacheHitRate=Cache Hit Rate\ntileSubPerformanceFactor=Performance Factor\ntileSubReqPerSec=Requests per Second\ntileSubCacheErrors=Cache Errors\ntileSubCacheOperations=Cache Operations\ntileSubSuccessfulRetrievals=Successful Retrievals\ntileSubFailedRetrievals=Failed Retrievals\ntileSubErrorCount=Error Count\ntileSubCacheHitResponse=Cache Hit Response\ntileSubCacheMissResponse=Cache Miss Response\nheaderCacheEfficiency=Cache Efficiency\nheaderErrorRate=Error Rate\nheaderCacheHits=Cache Hits\nheaderCacheMisses=Cache Misses\nheaderCacheErrors=Cache Errors\nheaderHitLatency=Hit Latency\nheaderMissLatency=Miss Latency\nheaderNativeThroughput=Native Throughput\nheaderNativeErrorRate=Native Error Rate\nheaderNativeSets=Native Sets\nheaderNativeGets=Native Gets\nheaderNativeDeletes=Native Deletes\nheaderNativeClears=Native Clears\nheaderDeleteByTags=Delete By Tags\nheaderNativeErrors=Native Errors\nheaderTotalNativeOps=Total Native Ops\ntileSubNativeOpsPerSec=Operations per Second\ntileSubWriteOps=Write Operations\ntileSubReadOps=Read Operations\ntileSubDeleteOps=Delete Operations\ntileSubClearOps=Clear Operations\ntileSubTagDeletes=Tag-based Deletes\ntileSubAllOperations=All Operations\n\n# Cards (single metric)\ncardReadThroughOps=Read-Through Operations\ncardReadThroughOpsSub=Hit/Miss/Error Distribution\ncardLatencyCompare=Latency Comparison\ncardLatencyCompareSub=Read-Through Latency Metrics\ncardNativeFunctionOps=Native Function Operations\ncardNativeFunctionOpsSub=Operation Distribution\n\n# Viz internal labels\nvizMeasureCount=Count\nvizMeasureLatency=Latency\n\n# Controllers & messages\nmsgNoCacheSelected=No cache selected\nmsgUpdatingStatsConfig=Updating statistics configuration\\u2026\nmsgStatsEnabled=Statistics enabled successfully\nmsgStatsDisabled=Statistics disabled successfully\nmsgFailedUpdateStatsConfig=Failed to update statistics configuration\nmsgErrorUpdateStatsConfig=Error updating statistics configuration\nmsgUpdatingKeyTracking=Updating key tracking configuration\\u2026\nmsgKeyTrackingEnabled=Key tracking enabled successfully\nmsgKeyTrackingDisabled=Key tracking disabled successfully\nmsgFailedKeyTracking=Failed to update key tracking configuration\nmsgErrorKeyTracking=Error updating key tracking configuration\nmsgStatsPersisted=Statistics persisted successfully\nmsgFailedPersistStats=Failed to persist statistics\nmsgErrorPersistStats=Error persisting statistics\nmsgLoadEntriesFailed=Failed to load cache entries\nmsgProvideKeyValue=Please provide both key and value\nmsgEntryCreated=Cache entry created successfully\nmsgCreateEntryFailed=Failed to create cache entry\nmsgProvideKey=Please provide a key\nmsgEntryDeleted=Cache entry deleted successfully\nmsgDeleteEntryFailed=Failed to delete cache entry\nmsgNotFound=Not found\nmsgGetEntryError=Error: Entry not found or error occurred\nmsgMetricsEnabled=Metrics enabled successfully\nmsgMetricsDisabled=Metrics disabled successfully\nmsgFailedUpdateMetrics=Failed to update metrics setting\nmsgKeyMetricsEnabled=Key metrics enabled successfully\nmsgKeyMetricsDisabled=Key metrics disabled successfully\nmsgFailedKeyMetrics=Failed to update key metrics setting\nmsgConfirmClearCache=Are you sure you want to clear this cache? This action cannot be undone.\nmsgCacheCleared=Cache cleared successfully\nmsgClearCacheFailed=Failed to clear cache\nmsgMetricsCleared=Metrics cleared successfully\nmsgKeyMetricsCleared=Key metrics cleared successfully\nmsgFailedClearMetrics=Failed to clear metrics\nmsgFailedClearKeyMetrics=Failed to clear key metrics\nmsgMetricNotFound=Metric not found\nmsgLoadMetricFailed=Failed to load metric details\n\n# Key metrics popover tabs\nkeyTabMetadata=Metadata\nkeyTabSubject=Subject\nkeyTabQuery=Query\nkeyTabCacheOptions=Cache Options\n\n# Chart (single metric) \\u2013 operation labels\nchartOpAvgHitLatency=Average Hit Latency\nchartOpAvgMissLatency=Average Miss Latency\nchartOpAvgReadThroughLatency=Average Read-Through Latency\nchartOpHits=Hits\nchartOpMisses=Misses\nchartOpErrors=Errors\nchartOpSets=Sets\nchartOpGets=Gets\nchartOpDeletes=Deletes\nchartOpClears=Clears\nchartOpDeleteByTags=Delete By Tags\n\nchartTitleLatencyByOperation=Latency by Operation\n',
17
- "cds/plugin/caching/dashboard/manifest.json":'{"_version":"1.12.0","sap.app":{"id":"cds.plugin.caching.dashboard","type":"application","i18n":"i18n/i18n.properties","title":"{{appTitle}}","description":"{{appDescription}}","applicationVersion":{"version":"1.0.0"},"sourceTemplate":{"id":"generator-ui5-ts-app","version":"1.1.0"},"dataSources":{"caching":{"uri":"/odata/v4/caching/","type":"OData","settings":{"odataVersion":"4.0"}}}},"sap.ui":{"technology":"UI5","icons":{},"deviceTypes":{"desktop":true,"tablet":true,"phone":true}},"sap.ui5":{"rootView":{"viewName":"cds.plugin.caching.dashboard.view.App","type":"XML","id":"app"},"dependencies":{"minUI5Version":"1.136.1","libs":{"sap.ui.core":{},"sap.m":{},"sap.ui.layout":{},"sap.viz":{},"sap.ui.table":{},"sap.ui.unified":{},"sap.f":{},"sap.tnt":{}}},"handleValidation":true,"contentDensities":{"compact":true,"cozy":true},"models":{"i18n":{"type":"sap.ui.model.resource.ResourceModel","settings":{"bundleName":"cds.plugin.caching.dashboard.i18n.i18n","supportedLocales":["en","de"],"fallbackLocale":"en","async":true}},"formatter":{"type":"sap.ui.model.json.JSONModel","settings":{}},"":{"type":"sap.ui.model.odata.v4.ODataModel","settings":{"serviceUrl":"/odata/v4/caching-api/","operationMode":"Server","autoExpandSelect":true,"groupId":"$auto"}}},"routing":{"config":{"routerClass":"sap.f.routing.Router","viewType":"XML","viewPath":"cds.plugin.caching.dashboard.view","controlId":"fcl","controlAggregation":"pages"},"routes":[{"pattern":"","name":"main","target":"main","subroutes":[{"pattern":"cache/{cache}","name":"cache","target":"cache","subroutes":[{"pattern":"cache/{cache}/statistic/{metricId}","name":"singleMetric","target":"singleMetric"},{"pattern":"cache/{cache}/key-metric/{keyMetricId}/{keyName}","name":"singleKeyMetric","target":"singleKeyMetric"}]}]}],"targets":{"main":{"viewName":"Main","viewLevel":1,"controlAggregation":"beginColumnPages"},"cache":{"viewName":"Cache","viewLevel":2,"controlAggregation":"midColumnPages"},"singleMetric":{"viewName":"SingleMetric","viewLevel":3,"controlAggregation":"endColumnPages"},"singleKeyMetric":{"viewName":"SingleKeyMetric","viewLevel":3,"controlAggregation":"endColumnPages"}}},"flexBundle":false}}',
17
+ "cds/plugin/caching/dashboard/manifest.json":'{"_version":"1.12.0","sap.app":{"id":"cds.plugin.caching.dashboard","type":"application","i18n":"i18n/i18n.properties","title":"{{appTitle}}","description":"{{appDescription}}","applicationVersion":{"version":"1.0.0"},"sourceTemplate":{"id":"generator-ui5-ts-app","version":"1.1.0"},"dataSources":{"caching":{"uri":"/odata/v4/caching-api/","type":"OData","settings":{"odataVersion":"4.0"}}}},"sap.ui":{"technology":"UI5","icons":{},"deviceTypes":{"desktop":true,"tablet":true,"phone":true}},"sap.ui5":{"rootView":{"viewName":"cds.plugin.caching.dashboard.view.App","type":"XML","id":"app"},"dependencies":{"minUI5Version":"1.148.10","libs":{"sap.ui.core":{},"sap.m":{},"sap.ui.layout":{},"sap.viz":{},"sap.ui.table":{},"sap.ui.unified":{},"sap.f":{},"sap.tnt":{}}},"handleValidation":true,"contentDensities":{"compact":true,"cozy":true},"models":{"i18n":{"type":"sap.ui.model.resource.ResourceModel","settings":{"bundleName":"cds.plugin.caching.dashboard.i18n.i18n","supportedLocales":["en","de"],"fallbackLocale":"en","async":true}},"formatter":{"type":"sap.ui.model.json.JSONModel","settings":{}},"":{"type":"sap.ui.model.odata.v4.ODataModel","dataSource":"caching","settings":{"operationMode":"Server","autoExpandSelect":true,"groupId":"$auto"}}},"routing":{"config":{"routerClass":"sap.f.routing.Router","viewType":"XML","viewPath":"cds.plugin.caching.dashboard.view","controlId":"fcl","controlAggregation":"pages"},"routes":[{"pattern":"","name":"main","target":"main","subroutes":[{"pattern":"cache/{cache}","name":"cache","target":"cache","subroutes":[{"pattern":"cache/{cache}/statistic/{metricId}","name":"singleMetric","target":"singleMetric"},{"pattern":"cache/{cache}/key-metric/{keyMetricId}/{keyName}","name":"singleKeyMetric","target":"singleKeyMetric"}]}]}],"targets":{"main":{"viewName":"Main","viewLevel":1,"controlAggregation":"beginColumnPages"},"cache":{"viewName":"Cache","viewLevel":2,"controlAggregation":"midColumnPages"},"singleMetric":{"viewName":"SingleMetric","viewLevel":3,"controlAggregation":"endColumnPages"},"singleKeyMetric":{"viewName":"SingleKeyMetric","viewLevel":3,"controlAggregation":"endColumnPages"}}},"flexBundle":false}}',
18
18
  "cds/plugin/caching/dashboard/view/App.view.xml":'<mvc:View controllerName="cds.plugin.caching.dashboard.controller.App" displayBlock="true"\n\txmlns="sap.m"\n\txmlns:core="sap.ui.core"\n\txmlns:l="sap.ui.layout"\n\txmlns:f="sap.f"\n\txmlns:form="sap.ui.layout.form"\n\txmlns:fb="sap.ui.comp.filterbar"\n\txmlns:card="sap.f.cards"\n\txmlns:viz="sap.viz.ui5.controls"\n\txmlns:viz.feeds="sap.viz.ui5.controls.common.feeds"\n\txmlns:mvc="sap.ui.core.mvc"><App id="app"><f:FlexibleColumnLayout id="fcl" layout="{app>/layout}"></f:FlexibleColumnLayout></App></mvc:View> ',
19
19
  "cds/plugin/caching/dashboard/view/Cache.view.xml":'<mvc:View controllerName="cds.plugin.caching.dashboard.controller.Cache"\n\txmlns="sap.m"\n\txmlns:mvc="sap.ui.core.mvc"\n\txmlns:f="sap.f"\n\txmlns:card="sap.f.cards"\n\txmlns:core="sap.ui.core"\n\txmlns:l="sap.ui.layout"\n\txmlns:ui="sap.ui.table"\n\txmlns:form="sap.ui.layout.form"\n\txmlns:semantic="sap.m.semantic"\n\txmlns:unified="sap.ui.unified"\n\txmlns:app="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1" app:routePattern="statistics" core:require="{\n\t\tformatter: \'cds/plugin/caching/dashboard/model/formatter\'\n\t}"><f:DynamicPage title="{= ${i18n>cachePagePrefix} + \' \' + ${app>/selectedCache} }" stickySubheaderProvider="cacheStickySubheaderProvider"><f:title><f:DynamicPageTitle><f:heading><Title text="{= ${i18n>cachePagePrefix} + \' \' + ${app>/selectedCache} }"/></f:heading><f:actions><Label text="{i18n>enableMetricsLabel}" class=""/><Switch id="cacheEnableMetrics" state="{ path: \'metricsEnabled\', mode: \'sap.ui.model.BindingMode.OneWay\'}" change="onEnableMetricsChange" /><Label text="{i18n>enableKeyMetricsLabel}" class=""/><Switch id="cacheEnableKeyMetrics" state="{ path: \'keyMetricsEnabled\', mode: \'sap.ui.model.BindingMode.OneWay\' }" change="onEnableKeyMetricsChange" /><ToolbarSeparator /><Button text="{i18n>actionClearCache}" type="Transparent" press="onClearCache" /></f:actions><f:navigationActions><OverflowToolbarButton type="Transparent" icon="sap-icon://full-screen" press="handleFullScreen" tooltip="{i18n>ttFullScreenEnter}" visible="{= ${app>/layout} === \'TwoColumnsMidExpanded\' }"/><OverflowToolbarButton type="Transparent" icon="sap-icon://exit-full-screen" press="handleExitFullScreen" tooltip="{i18n>ttFullScreenExit}" visible="{= ${app>/layout} === \'MidColumnFullScreen\' }"/><OverflowToolbarButton type="Transparent" icon="sap-icon://decline" press="handleClose" tooltip="{i18n>ttCloseMidColumn}"/></f:navigationActions></f:DynamicPageTitle></f:title><f:header><f:DynamicPageHeader><f:content></f:content></f:DynamicPageHeader></f:header><f:content><IconTabBar id="cacheStickySubheaderProvider" stretchContentHeight="true" expandable="false" headerMode="Inline" selectedKey="{ui>/selectedTab}"><items><IconTabFilter text="{i18n>tabOverview}" key="main"><f:GridContainer snapToRow="true" allowDenseFill="true"><f:Card><f:header><card:Header title="{i18n>configCardTitle}" subtitle="{i18n>configCardSubtitle}" /></f:header><f:content><VBox width="100%"><form:SimpleForm width="100%" editable="true" labelSpanL="2" labelSpanM="2" labelSpanS="2" layout="ResponsiveGridLayout"><form:content><TextArea rows="10" editable="false" width="100%" value="{ path: \'config\', formatter: \'formatter.formatJSON\' }" /></form:content></form:SimpleForm></VBox></f:content><f:layoutData><f:GridContainerItemLayoutData columns="6" minRows="3"/></f:layoutData></f:Card><f:Card><f:header><card:Header title="{i18n>createEntryTitle}" subtitle="{i18n>createEntrySubtitle}" /></f:header><f:content><VBox width="100%"><form:SimpleForm width="100%" editable="true" labelSpanL="2" labelSpanM="2" labelSpanS="2" layout="ResponsiveGridLayout"><form:content><Label text="{i18n>labelKey}" /><Input id="createKeyInput" value="{ui>/createKey}" width="100%" /><Label text="{i18n>labelValue}"/><TextArea id="createValueInput" rows="10" value="{ui>/createValue}" width="100%" /><Label text="{i18n>labelTtlSeconds}"/><Input id="createTtlInput" type="Number" value="{ui>/createTtl}" width="100%" /></form:content></form:SimpleForm><Button text="{i18n>btnSetEntry}" type="Emphasized" press="onSetKey" class="sapUiSmallMarginEnd sapUiSmallMarginBottom"><layoutData><FlexItemData alignSelf="End" /></layoutData></Button></VBox></f:content><f:layoutData><f:GridContainerItemLayoutData columns="6" minRows="3"/></f:layoutData></f:Card><f:Card><f:header><card:Header title="{i18n>getEntryTitle}" subtitle="{i18n>getEntrySubtitle}" /></f:header><f:content><VBox width="100%"><form:SimpleForm width="100%" editable="true" labelSpanL="2" labelSpanM="2" labelSpanS="2" layout="ResponsiveGridLayout"><form:content><Label text="{i18n>labelKey}"/><Input id="getKeyInput" value="{ui>/getKey}" width="100%" /><Label text="{i18n>labelValue}"/><TextArea id="getValueOutput" rows="10" editable="false" width="100%" value="{ui>/getValue}" /></form:content></form:SimpleForm><Button text="{i18n>btnGetEntry}" type="Emphasized" press="onGetKey" class="sapUiSmallMarginEnd sapUiSmallMarginBottom"><layoutData><FlexItemData alignSelf="End" /></layoutData></Button></VBox></f:content><f:layoutData><f:GridContainerItemLayoutData columns="6" minRows="3"/></f:layoutData></f:Card><f:Card><f:header><card:Header title="{i18n>deleteEntryTitle}" subtitle="{i18n>deleteEntrySubtitle}" /></f:header><f:content><VBox width="100%"><form:SimpleForm width="100%" editable="true" labelSpanL="2" labelSpanM="2" labelSpanS="2" layout="ResponsiveGridLayout"><form:content><Label text="{i18n>labelKey}" class=""/><Input id="deleteKeyInput" value="{ui>/deleteKey}" width="100%" /></form:content></form:SimpleForm><Button text="{i18n>btnDeleteEntry}" type="Emphasized" press="onDeleteKey" class="sapUiSmallMarginEnd sapUiSmallMarginBottom"><layoutData><FlexItemData alignSelf="End" /></layoutData></Button></VBox></f:content><f:layoutData><f:GridContainerItemLayoutData columns="6" minRows="3"/></f:layoutData></f:Card></f:GridContainer></IconTabFilter><IconTabSeparator /><IconTabFilter text="{i18n>tabMetrics}" key="metrics"><Toolbar class="sapUiTinyMarginBottom" design="Transparent" style="Clear"><Title text="{i18n>aggregatedMetricsByHour}" /><ToolbarSpacer /><Button icon="sap-icon://refresh" text="{i18n>refreshButton}" press="onRefreshMetricsData" type="Transparent" class="sapUiTinyMarginEnd" /><Button type="Transparent" text="{i18n>btnClearMetrics}" press="onClearMetrics" class="sapUiTinyMarginEnd" /></Toolbar><ui:Table id="metricsTable" rows="{\n\t\t\t\t\t\t\t\t \tpath: \'/Metrics\',\n\t\t\t\t\t\t\t\t\tsuspended: true,\n\t\t\t\t\t\t\t\t\tfilters: [{\n\t\t\t\t\t\t\t\t\t\tpath: \'cache\',\n\t\t\t\t\t\t\t\t\t\toperator: \'EQ\',\n\t\t\t\t\t\t\t\t\t\tvalue1: \'{app>/selectedCache}\'\n\t\t\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t\t\tsorter: {\n\t\t\t\t\t\t\t\t\t\tpath: \'timestamp\',\n\t\t\t\t\t\t\t\t\t\tdescending: true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t }" rowMode="Auto" selectionMode="Single" selectionBehavior="RowOnly" rowSelectionChange=".onMetricsRowSelect" enableColumnReordering="true"><ui:columns><ui:Column width="150px" sortProperty="timestamp" filterProperty="timestamp"><ui:label><Text text="{i18n>colTimestamp}" /></ui:label><ui:template><Text text="{ path: \'timestamp\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="hits" filterProperty="hits" headerSpan="15,1"><ui:multiLabels><Text text="{i18n>groupReadThrough}" /><Text text="{i18n>colHits}" /></ui:multiLabels><ui:template><Text text="{path: \'hits\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="misses" filterProperty="misses"><ui:multiLabels><Text text="{i18n>groupReadThrough}" /><Text text="{i18n>colMisses}" /></ui:multiLabels><ui:template><Text text="{path: \'misses\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="errors" filterProperty="errors"><ui:multiLabels><Text text="{i18n>groupReadThrough}" /><Text text="{i18n>colErrors}" /></ui:multiLabels><ui:template><Text text="{path: \'errors\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="totalRequests" filterProperty="totalRequests"><ui:multiLabels><Text text="{i18n>groupReadThrough}" /><Text text="{i18n>colTotalRequests}" /></ui:multiLabels><ui:template><Text text="{path: \'totalRequests\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="hitRatio" filterProperty="hitRatio"><ui:multiLabels><Text text="{i18n>groupReadThroughPerformance}" /><Text text="{i18n>colHitRatioPct}" /></ui:multiLabels><ui:template><Text text="{path: \'hitRatio\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="throughput" filterProperty="throughput"><ui:multiLabels><Text text="{i18n>groupReadThroughPerformance}" /><Text text="{i18n>throughput}" /></ui:multiLabels><ui:template><Text text="{path: \'throughput\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="errorRate" filterProperty="errorRate"><ui:multiLabels><Text text="{i18n>groupReadThroughPerformance}" /><Text text="{i18n>colErrorRatePct}" /></ui:multiLabels><ui:template><Text text="{path: \'errorRate\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="cacheEfficiency" filterProperty="cacheEfficiency"><ui:multiLabels><Text text="{i18n>groupReadThroughPerformance}" /><Text text="{i18n>colCacheEfficiency}" /></ui:multiLabels><ui:template><Text text="{path: \'cacheEfficiency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="avgReadThroughLatency" filterProperty="avgReadThroughLatency" headerSpan="8,1"><ui:multiLabels><Text text="{i18n>groupReadThroughLatencies}" /><Text text="{i18n>colAvgLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'avgReadThroughLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="avgHitLatency" filterProperty="avgHitLatency" headerSpan="8,1"><ui:multiLabels><Text text="{i18n>groupReadThroughHitLatencies}" /><Text text="{i18n>colHitAvgMs}" /></ui:multiLabels><ui:template><Text text="{path: \'avgHitLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="minHitLatency" filterProperty="minHitLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughHitLatencies}" /><Text text="{i18n>colHitMinMs}" /></ui:multiLabels><ui:template><Text text="{path: \'minHitLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="maxHitLatency" filterProperty="maxHitLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughHitLatencies}" /><Text text="{i18n>colHitMaxMs}" /></ui:multiLabels><ui:template><Text text="{path: \'maxHitLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="avgMissLatency" filterProperty="avgMissLatency" headerSpan="5,1"><ui:multiLabels><Text text="{i18n>groupReadThroughMissLatencies}" /><Text text="{i18n>colMissAvgMs}" /></ui:multiLabels><ui:template><Text text="{path: \'avgMissLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="minMissLatency" filterProperty="minMissLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughMissLatencies}" /><Text text="{i18n>colMissMinMs}" /></ui:multiLabels><ui:template><Text text="{path: \'minMissLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="maxMissLatency" filterProperty="maxMissLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughMissLatencies}" /><Text text="{i18n>colMissMaxMs}" /></ui:multiLabels><ui:template><Text text="{path: \'maxMissLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}ms" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="nativeSets" filterProperty="nativeSets" headerSpan="9,1"><ui:multiLabels><Text text="{i18n>groupNativeFunction}" /><Text text="{i18n>colSets}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeSets\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="nativeGets" filterProperty="nativeGets"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colGets}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeGets\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="nativeDeletes" filterProperty="nativeDeletes"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colDeletes}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeDeletes\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="nativeClears" filterProperty="nativeClears"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colClears}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeClears\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="nativeDeleteByTags" filterProperty="nativeDeleteByTags"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colDeleteByTags}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeDeleteByTags\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="nativeErrors" filterProperty="nativeErrors"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colErrors}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeErrors\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="totalNativeOperations" filterProperty="totalNativeOperations"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colTotal}" /></ui:multiLabels><ui:template><Text text="{path: \'totalNativeOperations\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="nativeThroughput" filterProperty="nativeThroughput" headerSpan="2,1"><ui:multiLabels><Text text="{i18n>groupNativeFunctionPerformance}" /><Text text="{i18n>throughput}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeThroughput\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="nativeErrorRate" filterProperty="nativeErrorRate"><ui:multiLabels><Text text="{i18n>groupNativeFunctionPerformance}" /><Text text="{i18n>colErrorRatePct}" /></ui:multiLabels><ui:template><Text text="{path: \'nativeErrorRate\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column></ui:columns></ui:Table><f:Card class="sapUiTinyMarginBottom" visible="false"><f:header><card:Header title="{i18n>statisticsTrends}" subtitle="{i18n>statisticsTrendsSubtitle}" /></f:header><f:content><l:VerticalLayout class="sapUiTinyMargin"><l:HorizontalLayout class="sapUiTinyMarginBottom"><Select id="cacheChartMetric" selectedKey="{ui>/chartMetric}" change=".onChartMetricChange" class="sapUiTinyMarginEnd"><core:Item key="hitRatio" text="{i18n>hitRatio}" /><core:Item key="avgLatency" text="{i18n>avgLatency}" /><core:Item key="avgHitLatency" text="{i18n>selectChartHitLatency}" /><core:Item key="avgMissLatency" text="{i18n>selectChartMissLatency}" /><core:Item key="cacheEfficiency" text="{i18n>colCacheEfficiency}" /><core:Item key="throughput" text="{i18n>throughput}" /><core:Item key="errorRate" text="{i18n>errorRate}" /><core:Item key="memoryUsage" text="{i18n>memoryUsage}" /></Select></l:HorizontalLayout><Text text="{i18n>chartPlaceholder}" /></l:VerticalLayout></f:content></f:Card></IconTabFilter><IconTabFilter text="{i18n>keyMetricsToolbarTitle}" key="keymetrics"><Toolbar class="sapUiTinyMarginBottom" design="Transparent" style="Clear"><Title text="{i18n>keyMetricsToolbarTitle}" /><ToolbarSpacer /><Button icon="sap-icon://refresh" text="{i18n>refreshButton}" press="onRefreshKeyMetricsData" type="Transparent" class="sapUiTinyMarginEnd" /><Button type="Transparent" text="{i18n>btnClearMetrics}" press="onClearKeyMetrics" class="sapUiTinyMarginEnd" /></Toolbar><ui:Table id="keyMetricsTable" rows="{\n\t\t\t\t\t\t\t\t \tpath: \'/KeyMetrics\',\n\t\t\t\t\t\t\t\t\tsuspended: true,\n\t\t\t\t\t\t\t\t\tfilters: [{\n\t\t\t\t\t\t\t\t\t\tpath: \'cache\',\n\t\t\t\t\t\t\t\t\t\toperator: \'EQ\',\n\t\t\t\t\t\t\t\t\t\tvalue1: \'{app>/selectedCache}\'\n\t\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t }" \n\t\t\t\t\t\t\t\t rowMode="Auto" \n\t\t\t\t\t\t\t\t selectionMode="Single"\n\t\t\t\t\t\t\t\t selectionBehavior="RowOnly"\n\t\t\t\t\t\t\t\t rowSelectionChange=".onKeyMetricsRowSelect"\n\t\t\t\t\t\t\t\t enableColumnReordering="true"><ui:columns><ui:Column minWidth="200px" sortProperty="keyName" filterProperty="keyName"><ui:multiLabels><Text text="{i18n>colKeyName}" /></ui:multiLabels><ui:template><VBox width="100%"><Text text="{ path: \'keyName\'}" tooltip="{keyName}" wrapping="false" wrappingType="Normal" /><Text visible="false" text="{query}" /><Text visible="false" text="{metadata}" /><Text visible="false" text="{subject}" /><Text visible="false" text="{cacheOptions}" /></VBox></ui:template></ui:Column><ui:Column width="100px" sortProperty="operation" filterProperty="operation" headerSpan="5,1"><ui:multiLabels><Text text="{i18n>ctxGroup}" /><Text text="{i18n>colOperation}" /></ui:multiLabels><ui:template><Text text="{operation}" /></ui:template></ui:Column><ui:Column width="150px" sortProperty="dataType" filterProperty="dataType" ><ui:multiLabels><Text text="{i18n>ctxGroup}" /><Text text="{i18n>colType}" /></ui:multiLabels><ui:template><Text text="{dataType}" /></ui:template></ui:Column><ui:Column width="150px" sortProperty="operationType" filterProperty="operationType"><ui:multiLabels><Text text="{i18n>ctxGroup}" /><Text text="{i18n>colOperationType}" /></ui:multiLabels><ui:template><Text text="{operationType}" /></ui:template></ui:Column><ui:Column width="200px" sortProperty="target" filterProperty="target"><ui:multiLabels><Text text="{i18n>ctxGroup}" /><Text text="{i18n>colTarget}" /></ui:multiLabels><ui:template><Text text="{target}" /></ui:template></ui:Column><ui:Column width="180px" ><ui:multiLabels><Text text="{i18n>ctxGroup}" /><Text text="{i18n>colMetadata}" /></ui:multiLabels><ui:template><Button text="{i18n>btnShowMetadata}" type="Transparent" press="onShowKeyMetricsMetadata" /></ui:template></ui:Column><ui:Column width="60px" sortProperty="hits" filterProperty="hits" headerSpan="11,1"><ui:multiLabels><Text text="{i18n>groupReadThrough}" /><Text text="{i18n>colHits}" /></ui:multiLabels><ui:template><Text text="{path: \'hits\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="60px" sortProperty="misses" filterProperty="misses"><ui:multiLabels><Text text="{i18n>groupReadThroughOps}" /><Text text="{i18n>colMisses}" /></ui:multiLabels><ui:template><Text text="{path: \'misses\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="60px" sortProperty="total" filterProperty="total"><ui:multiLabels><Text text="{i18n>groupReadThroughOps}" /><Text text="{i18n>colTotal}" /></ui:multiLabels><ui:template><Text text="{path: \'totalRequests\', type: \'sap.ui.model.type.Integer\'}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="hitRatio" filterProperty="hitRatio" headerSpan="2,1"><ui:multiLabels><Text text="{i18n>groupReadThroughPerformance}" /><Text text="{i18n>colHitRatioPct}" /></ui:multiLabels><ui:template><Text text="{path: \'hitRatio\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="cacheEfficiency" filterProperty="cacheEfficiency"><ui:multiLabels><Text text="{i18n>groupReadThroughPerformance}" /><Text text="{i18n>colCacheEfficiency}" /></ui:multiLabels><ui:template><Text text="{path: \'cacheEfficiency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="avgHitLatency" filterProperty="avgHitLatency" headerSpan="5,1"><ui:multiLabels><Text text="{i18n>groupReadThroughHitLatencies}" /><Text text="{i18n>colAvgHitLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'avgHitLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="minHitLatency" filterProperty="minHitLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughHitLatencies}" /><Text text="{i18n>colMinHitLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'minHitLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="maxHitLatency" filterProperty="maxHitLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughHitLatencies}" /><Text text="{i18n>colMaxHitLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'maxHitLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="avgMissLatency" filterProperty="avgMissLatency" headerSpan="5,1"><ui:multiLabels><Text text="{i18n>groupReadThroughMissLatencies}" /><Text text="{i18n>colAvgMissLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'avgMissLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="minMissLatency" filterProperty="minMissLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughMissLatencies}" /><Text text="{i18n>colMinMissLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'minMissLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="120px" sortProperty="maxMissLatency" filterProperty="maxMissLatency"><ui:multiLabels><Text text="{i18n>groupReadThroughMissLatencies}" /><Text text="{i18n>colMaxMissLatencyMs}" /></ui:multiLabels><ui:template><Text text="{path: \'maxMissLatency\', type: \'sap.ui.model.type.Float\', formatOptions: {style: \'short\', decimals: 2}}" /></ui:template></ui:Column><ui:Column width="70px" sortProperty="nativeHits" filterProperty="nativeHits" headerSpan="4,1"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colHits}" /></ui:multiLabels><ui:template><Text text="{nativeHits}" /></ui:template></ui:Column><ui:Column width="70px" sortProperty="nativeMisses" filterProperty="nativeMisses"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colMisses}" /></ui:multiLabels><ui:template><Text text="{nativeMisses}" /></ui:template></ui:Column><ui:Column width="70px" sortProperty="nativeSets" filterProperty="nativeSets"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colSets}" /></ui:multiLabels><ui:template><Text text="{nativeSets}" /></ui:template></ui:Column><ui:Column width="70px" sortProperty="nativeDeletes" filterProperty="nativeDeletes"><ui:multiLabels><Text text="{i18n>groupNativeFunctionOps}" /><Text text="{i18n>colDeletes}" /></ui:multiLabels><ui:template><Text text="{nativeDeletes}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="tenant" filterProperty="tenant" headerSpan="5,1"><ui:multiLabels><Text text="{i18n>infoAdditional}" /><Text text="{i18n>colTenant}" /></ui:multiLabels><ui:template><Text text="{tenant}" /></ui:template></ui:Column><ui:Column width="100px" sortProperty="user" filterProperty="user"><ui:multiLabels><Text text="{i18n>infoAdditional}" /><Text text="{i18n>colUser}" /></ui:multiLabels><ui:template><Text text="{user}" /></ui:template></ui:Column><ui:Column width="80px" sortProperty="locale" filterProperty="locale"><ui:multiLabels><Text text="{i18n>infoAdditional}" /><Text text="{i18n>colLocale}" /></ui:multiLabels><ui:template><Text text="{locale}" /></ui:template></ui:Column><ui:Column width="150px" sortProperty="lastAccess" filterProperty="lastAccess" ><ui:multiLabels><Text text="{i18n>infoAdditional}" /><Text text="{i18n>colLastAccess}" /></ui:multiLabels><ui:template><Text text="{ path: \'lastAccess\'}" /></ui:template></ui:Column><ui:Column width="150px" sortProperty="timestamp" filterProperty="timestamp"><ui:multiLabels><Text text="{i18n>infoAdditional}" /><Text text="{i18n>colFirstAccess}" /></ui:multiLabels><ui:template><Text text="{ path: \'timestamp\'}" /></ui:template></ui:Column></ui:columns></ui:Table></IconTabFilter><IconTabSeparator ></IconTabSeparator><IconTabFilter text="{i18n>tabBrowseCacheEntries}" key="entries" icon="sap-icon://warning" iconColor="Critical"><l:VerticalLayout width="100%"><f:Card class="sapUiTinyMargin"><f:header><card:Header title="{i18n>cacheEntriesTitle}" subtitle="{i18n>cacheEntriesSubtitle}" /></f:header><f:content><l:VerticalLayout class="sapUiTinyMargin"><MessageStrip text="{i18n>messageStripLoadEntriesWarning}" type="Warning" showIcon="true" class="sapUiTinyMarginBottom" /><Button text="{i18n>btnLoadCacheEntries}" icon="sap-icon://download" press="onLoadCacheEntries" type="Emphasized" class="sapUiTinyMarginBottom" /><Table id="cacheEntriesTable" items="{ui>/cacheEntries}" busyIndicatorDelay="0" busy="{ui>/loadingEntries}" visible="{ui>/showEntriesTable}"><columns><Column width="200px"><Text text="{i18n>labelKey}" /></Column><Column width="300px"><Text text="{i18n>labelValue}" /></Column><Column width="100px"><Text text="{i18n>colTags}" /></Column><Column width="150px"><Text text="{i18n>colTimestamp}" /></Column></columns><items><ColumnListItem><cells><Text text="{ui>entryKey}" tooltip="{ui>entryKey}" /><Text text="{ui>value}" tooltip="{ui>value}" /><Text text="{ui>tags}" /><Text text="{ path: \'ui>timestamp\'}" /></cells></ColumnListItem></items></Table></l:VerticalLayout></f:content></f:Card></l:VerticalLayout></IconTabFilter></items></IconTabBar></f:content></f:DynamicPage></mvc:View> ',
20
20
  "cds/plugin/caching/dashboard/view/KeyMetricsMetadata.fragment.xml":'<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns="sap.m" xmlns:form="sap.ui.layout.form"><Popover title="{localData>/keyName}" placement="Bottom" contentWidth="30rem"><content><IconTabBar><items><IconTabFilter text="{i18n>keyTabMetadata}"><content><TextArea value="{localData>/metadata}" rows="20" width="100%" editable="false" /></content></IconTabFilter><IconTabFilter text="{i18n>keyTabSubject}"><content><TextArea value="{localData>/subject}" rows="20" width="100%" editable="false" /></content></IconTabFilter><IconTabFilter text="{i18n>keyTabQuery}"><content><TextArea value="{localData>/query}" rows="20" width="100%" editable="false" /></content></IconTabFilter><IconTabFilter text="{i18n>keyTabCacheOptions}"><content><TextArea value="{localData>/cacheOptions}" rows="20" width="100%" editable="false" /></content></IconTabFilter></items></IconTabBar></content></Popover></core:FragmentDefinition>\n',