@kong-ui-public/analytics-metric-provider 11.0.3 → 11.0.4-pr.2672.d176b7586.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/package.json +7 -7
  2. package/dist/style.css +0 -1
  3. package/dist/types/components/MetricCardContainer.vue.d.ts +0 -91
  4. package/dist/types/components/MetricCardContainer.vue.d.ts.map +0 -1
  5. package/dist/types/components/MetricsConsumer.vue.d.ts +0 -34
  6. package/dist/types/components/MetricsConsumer.vue.d.ts.map +0 -1
  7. package/dist/types/components/MetricsProvider.vue.d.ts +0 -48
  8. package/dist/types/components/MetricsProvider.vue.d.ts.map +0 -1
  9. package/dist/types/components/MetricsTestHarness.vue.d.ts +0 -26
  10. package/dist/types/components/MetricsTestHarness.vue.d.ts.map +0 -1
  11. package/dist/types/components/display/MetricCardLoadingSkeleton.vue.d.ts +0 -3
  12. package/dist/types/components/display/MetricCardLoadingSkeleton.vue.d.ts.map +0 -1
  13. package/dist/types/components/display/MetricsCard.vue.d.ts +0 -397
  14. package/dist/types/components/display/MetricsCard.vue.d.ts.map +0 -1
  15. package/dist/types/components/metricsProviderUtil.d.ts +0 -35
  16. package/dist/types/components/metricsProviderUtil.d.ts.map +0 -1
  17. package/dist/types/composables/index.d.ts +0 -12
  18. package/dist/types/composables/index.d.ts.map +0 -1
  19. package/dist/types/composables/useI18n.d.ts +0 -9
  20. package/dist/types/composables/useI18n.d.ts.map +0 -1
  21. package/dist/types/composables/useMetricCardBuilder.d.ts +0 -20
  22. package/dist/types/composables/useMetricCardBuilder.d.ts.map +0 -1
  23. package/dist/types/composables/useMetricFetcher.d.ts +0 -19
  24. package/dist/types/composables/useMetricFetcher.d.ts.map +0 -1
  25. package/dist/types/composables/useRequest.d.ts +0 -12
  26. package/dist/types/composables/useRequest.d.ts.map +0 -1
  27. package/dist/types/constants.d.ts +0 -7
  28. package/dist/types/constants.d.ts.map +0 -1
  29. package/dist/types/enums/index.d.ts +0 -3
  30. package/dist/types/enums/index.d.ts.map +0 -1
  31. package/dist/types/enums/metric-card-size.enum.d.ts +0 -7
  32. package/dist/types/enums/metric-card-size.enum.d.ts.map +0 -1
  33. package/dist/types/enums/metric-card-type.enum.d.ts +0 -7
  34. package/dist/types/enums/metric-card-type.enum.d.ts.map +0 -1
  35. package/dist/types/index.d.ts +0 -8
  36. package/dist/types/index.d.ts.map +0 -1
  37. package/dist/types/mockExploreResponse.d.ts +0 -12
  38. package/dist/types/mockExploreResponse.d.ts.map +0 -1
  39. package/dist/types/types/fetcher-types.d.ts +0 -16
  40. package/dist/types/types/fetcher-types.d.ts.map +0 -1
  41. package/dist/types/types/index.d.ts +0 -3
  42. package/dist/types/types/index.d.ts.map +0 -1
  43. package/dist/types/types/metric-card.d.ts +0 -36
  44. package/dist/types/types/metric-card.d.ts.map +0 -1
  45. package/dist/types/utilities/index.d.ts +0 -2
  46. package/dist/types/utilities/index.d.ts.map +0 -1
  47. package/dist/types/utilities/trend-display.d.ts +0 -24
  48. package/dist/types/utilities/trend-display.d.ts.map +0 -1
  49. package/dist/vitals-metric-provider.es.js +0 -1211
  50. package/dist/vitals-metric-provider.umd.js +0 -1
@@ -1 +0,0 @@
1
- (function(E,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue"),require("@kong-ui-public/analytics-utilities"),require("@kong-ui-public/i18n"),require("axios"),require("@kong-ui-public/analytics-config-store"),require("@kong/icons")):typeof define=="function"&&define.amd?define(["exports","vue","@kong-ui-public/analytics-utilities","@kong-ui-public/i18n","axios","@kong-ui-public/analytics-config-store","@kong/icons"],t):(E=typeof globalThis<"u"?globalThis:E||self,t(E["kong-ui-public-vitals-metric-provider"]={},E.Vue,E["kong-ui-public-analytics-utilities"],E["kong-ui-public-i18n"],E.axios,E["kong-ui-public-analytics-config-store"],E.KongIcons))})(this,function(E,t,ee,re,Er,Te,S){"use strict";const Ce={general:{notAvailable:"N/A"},metricCard:{small:{traffic:"Requests",errorRate:"Error rate",averageLatency:"Avg. latency",p99Latency:"P99 latency"},short:{traffic:"Requests",errorRate:"Error rate",averageLatency:"Average latency",p99Latency:"P99 latency"},long:{traffic:"Number of requests",errorRate:"Average error rate",averageLatency:"Average latency",p99Latency:"P99 latency"}},trendRange:{custom_days:"vs previous {numDays, plural, =1 {day} other {# days}}",custom_hours:"vs previous {numHours, plural, =1 {hour} other {# hours}}",custom_minutes:"vs previous {numMinutes, plural, =1 {minute} other {# minutes}}","15m":"vs previous 15 minutes","1h":"vs previous hour","6h":"vs previous 6 hours","12h":"vs previous 12 hours","24h":"vs previous 24 hours","7d":"vs previous 7 days","30d":"vs previous 30 days",current_week:"vs previous week",current_month:"vs previous month",current_quarter:"vs previous quarter",previous_week:"vs previous time period",previous_month:"vs previous time period",previous_quarter:"vs previous quarter"}};function Se(){const e=re.createI18n("en-us",Ce);return{i18n:e,i18nT:re.i18nTComponent(e)}}const te=2,O=["1XX","2XX","3XX","4XX","5XX"],P=["4XX","5XX"],_e=["1XX","2XX","3XX"],ne=30*1e3,ae="analytics-query-provider";var ie=(e=>(e.VALIDATING="VALIDATING",e.VALIDATING_HAS_DATA="VALIDATING_HAS_DATA",e.PENDING="PENDING",e.SUCCESS="SUCCESS",e.SUCCESS_HAS_DATA="SUCCESS_HAS_DATA",e.ERROR="ERROR",e.STALE_IF_ERROR="STALE_IF_ERROR",e))(ie||{});const Ie=e=>{var r,n,s,i,a;return e?!!((r=Object.keys(e))!=null&&r.length||(n=e.data)!=null&&n.length||(i=(s=e.data)==null?void 0:s.data)!=null&&i.length||!((a=e.data)!=null&&a.data)&&typeof e.data=="object"&&Object.keys(e==null?void 0:e.data).length):!1};function ke(e=t.ref({}),r,n,s=Ie){const i=t.ref("PENDING");return t.watchEffect(()=>{const a=s(e.value);if(e.value&&a&&n.value){i.value="VALIDATING_HAS_DATA";return}if(e.value&&n.value){i.value="VALIDATING";return}if(e.value&&r.value){i.value="STALE_IF_ERROR";return}if(e.value===void 0&&!r.value){i.value="PENDING";return}if(e.value&&!r.value&&a){i.value="SUCCESS_HAS_DATA";return}if(e.value&&!r.value){i.value="SUCCESS";return}e.value===void 0&&r&&(i.value="ERROR")}),{state:i,swrvState:ie}}const b=Symbol("default"),$="status_code_grouped",oe=(e,r,n,s,i)=>{e[r][n]||(e[r][n]={}),e[r][n][s]=i};function De(e,r){var f;const n=((f=e.meta.metric_names)==null?void 0:f[0])||"",s=e.meta.start_ms,i=Object.keys(e.meta.display||{}),a=!!i.find(m=>m===$),c=i.find(m=>m!==$);return i.length>2||i.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",i),{previous:{[b]:{[b]:0}},current:{[b]:{[b]:0}}}):e.data.reduce((m,o)=>{const l=o.event[n],u=c?o.event[c]:b,d=a?o.event[$]:b;return new Date(o.timestamp).getTime()===s&&r?oe(m,"previous",u,d,l):oe(m,"current",u,d,l),m},{previous:{},current:{}})}function Ae(e){e.queryReady===void 0&&(e.queryReady=t.computed(()=>!0));const{i18n:r}=V.useI18n(),n=t.computed(()=>{var u,d;return{metrics:e.metrics.value,dimensions:[...(u=e.dimensions)!=null&&u.length?[...e.dimensions]:[],...e.withTrend.value?["time"]:[]],granularity:e.withTrend.value?"trend":void 0,...(d=e.filter.value)!=null&&d.length?{filters:e.filter.value}:{},time_range:e.timeRange.value}}),s=t.computed(()=>{var d,g,v,R;if(!((d=e.queryReady)!=null&&d.value))return null;const u=(g=e.filter)!=null&&g.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${JSON.stringify(e.timeRange.value)}-${(v=e.dimensions)==null?void 0:v.join("-")}-${(R=e.metrics.value)==null?void 0:R.join("-")}-${u}-${e.refreshCounter.value}`}),{response:i,error:a,isValidating:c}=V.useRequest(()=>s.value,()=>e.queryFn({datasource:e.datasource.value,query:n.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:te}),{state:f,swrvState:m}=ke(i,a,c),o=t.computed(()=>{var u,d,g,v,R,p,C;return!((d=(u=i.value)==null?void 0:u.data)!=null&&d.length)||!((v=(g=i.value)==null?void 0:g.meta)!=null&&v.display)||!((C=(p=(R=i.value)==null?void 0:R.meta)==null?void 0:p.metric_names)!=null&&C.length)?{current:{},previous:{}}:De(i.value,e.withTrend.value)}),l=t.computed(()=>{var u,d;if(e.timeRange.value.type==="absolute"){if(!((d=(u=i.value)==null?void 0:u.meta)!=null&&d.start_ms))return"";const{start_ms:g,end_ms:v}=i.value.meta;let R=(v-g)/(1e3*60*60*24),p=(v-g)/(1e3*60*60),C=(v-g)/(1e3*60);return e.withTrend.value&&(R/=2,p/=2,C/=2),R>=1?r.t("trendRange.custom_days",{numDays:Math.round(R)}):p>=1?r.t("trendRange.custom_hours",{numHours:Math.round(p)}):C>=1?r.t("trendRange.custom_minutes",{numMinutes:Math.round(C)}):r.t("trendRange.custom_days",{numDays:Math.round(R)})}else return e.withTrend.value?r.t(`trendRange.${e.timeRange.value.time_range}`):""});return{isLoading:t.computed(()=>m.PENDING===f.value),hasError:t.computed(()=>m.ERROR===f.value),raw:i,mapped:o,trendRange:l}}const L=(e,r,n=b,s)=>(s??[b]).reduce((a,c)=>{const f=e[r][n];return f?a+(f[c]||0):a},0);function be(e){const{cardType:r,title:n,description:s,record:i,hasError:a,increaseIsBad:c,formatValueFn:f,trendRange:m}=e;return t.computed(()=>{let o=0,l=0;if(i!=null&&i.value)try{o=L(i.value,"current",e.lookupKey,e.sumGroupedValues),l=L(i.value,"previous",e.lookupKey,e.sumGroupedValues)}catch(u){console.error("Metric card data doesn't have the expected structure:",u)}return{cardType:r,hasError:a.value,currentValue:o,previousValue:l,title:n.value,description:s,increaseIsBad:!!c,formatValueFn:f,trendRange:m==null?void 0:m.value}})}var K=new WeakMap,se=0;function Ve(e){if(!e.length)return"";for(var r="arg",n=0;n<e.length;++n){var s=void 0;e[n]===null||typeof e[n]!="object"&&typeof e[n]!="function"?typeof e[n]=="string"?s='"'+e[n]+'"':s=String(e[n]):K.has(e[n])?s=K.get(e[n]):(s=se,K.set(e[n],se++)),r+="@"+s}return r}function we(e){if(typeof e=="function")try{e=e()}catch{e=""}return Array.isArray(e)?e=Ve(e):e=String(e||""),e}var X=function(){function e(r){r===void 0&&(r=0),this.items=new Map,this.ttl=r}return e.prototype.serializeKey=function(r){return we(r)},e.prototype.get=function(r){var n=this.serializeKey(r);return this.items.get(n)},e.prototype.set=function(r,n,s){var i=this.serializeKey(r),a=s||this.ttl,c=Date.now(),f={data:n,createdAt:c,expiresAt:a?c+a:1/0};this.dispatchExpire(a,f,i),this.items.set(i,f)},e.prototype.dispatchExpire=function(r,n,s){var i=this;r&&setTimeout(function(){var a=Date.now(),c=a>=n.expiresAt;c&&i.delete(s)},r)},e.prototype.delete=function(r){this.items.delete(r)},e}();function Ne(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function Oe(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var Le=function(e){return fetch(e).then(function(r){return r.json()})};const G={isOnline:Ne,isDocumentVisible:Oe,fetcher:Le};var A=function(){return A=Object.assign||function(e){for(var r,n=1,s=arguments.length;n<s;n++){r=arguments[n];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},A.apply(this,arguments)},M=function(e,r,n,s){function i(a){return a instanceof n?a:new n(function(c){c(a)})}return new(n||(n=Promise))(function(a,c){function f(l){try{o(s.next(l))}catch(u){c(u)}}function m(l){try{o(s.throw(l))}catch(u){c(u)}}function o(l){l.done?a(l.value):i(l.value).then(f,m)}o((s=s.apply(e,r||[])).next())})},F=function(e,r){var n={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},s,i,a,c;return c={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function f(o){return function(l){return m([o,l])}}function m(o){if(s)throw new TypeError("Generator is already executing.");for(;n;)try{if(s=1,i&&(a=o[0]&2?i.return:o[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,o[1])).done)return a;switch(i=0,a&&(o=[o[0]&2,a.value]),o[0]){case 0:case 1:a=o;break;case 4:return n.label++,{value:o[1],done:!1};case 5:n.label++,i=o[1],o=[0];continue;case 7:o=n.ops.pop(),n.trys.pop();continue;default:if(a=n.trys,!(a=a.length>0&&a[a.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]<a[3])){n.label=o[1];break}if(o[0]===6&&n.label<a[1]){n.label=a[1],a=o;break}if(a&&n.label<a[2]){n.label=a[2],n.ops.push(o);break}a[2]&&n.ops.pop(),n.trys.pop();continue}o=r.call(e,n)}catch(l){o=[6,l],i=0}finally{s=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Me=function(e,r){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var s=n.call(e),i,a=[],c;try{for(;(r===void 0||r-- >0)&&!(i=s.next()).done;)a.push(i.value)}catch(f){c={error:f}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(c)throw c.error}}return a},Fe=function(e,r,n){if(n||arguments.length===2)for(var s=0,i=r.length,a;s<i;s++)(a||!(s in r))&&(a||(a=Array.prototype.slice.call(r,0,s)),a[s]=r[s]);return e.concat(a||Array.prototype.slice.call(r))},le=new X,q=new X,j=new X,ce={cache:le,refreshInterval:0,ttl:0,serverTTL:1e3,dedupingInterval:2e3,revalidateOnFocus:!0,revalidateDebounce:0,shouldRetryOnError:!0,errorRetryInterval:5e3,errorRetryCount:5,fetcher:G.fetcher,isOnline:G.isOnline,isDocumentVisible:G.isDocumentVisible};function Be(e,r,n){var s=q.get(e);if(s)s.data.push(r);else{var i=5e3;q.set(e,[r],n>0?n+i:n)}}function qe(e,r,n){if(n.isDocumentVisible()&&!(n.errorRetryCount!==void 0&&r>n.errorRetryCount)){var s=Math.min(r||0,n.errorRetryCount),i=s*n.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:s+1,shouldRetryOnError:!0})},i)}}var ue=function(e,r,n,s){return n===void 0&&(n=le),s===void 0&&(s=ce.ttl),M(void 0,void 0,void 0,function(){var i,a,c,f,m,o,l;return F(this,function(u){switch(u.label){case 0:if(!Ue(r))return[3,5];u.label=1;case 1:return u.trys.push([1,3,,4]),[4,r];case 2:return i=u.sent(),[3,4];case 3:return f=u.sent(),a=f,[3,4];case 4:return[3,6];case 5:i=r,u.label=6;case 6:if(c=!1,m={data:i,error:a,isValidating:c},typeof i<"u")try{n.set(e,m,s)}catch(d){console.error("swrv(mutate): failed to set cache",d)}return o=q.get(e),o&&o.data.length&&(l=o.data.filter(function(d){return d.key===e}),l.forEach(function(d,g){typeof m.data<"u"&&(d.data=m.data),d.error=m.error,d.isValidating=m.isValidating,d.isLoading=m.isValidating;var v=g===l.length-1;v||delete l[g]}),l=l.filter(Boolean)),[2,m]}})})};function xe(){for(var e=this,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var s,i,a=A({},ce),c=!1,f=!1,m=t.getCurrentInstance(),o=(m==null?void 0:m.proxy)||m;if(!o)return console.error("Could not get current instance, check to make sure that `useSwrv` is declared in the top level of the setup function."),null;var l=(o==null?void 0:o.$isServer)||!1;r.length>=1&&(s=r[0]),r.length>=2&&(i=r[1]),r.length>2&&(a=A(A({},a),r[2]));var u=l?a.serverTTL:a.ttl,d=typeof s=="function"?s:t.ref(s);typeof i>"u"&&(i=a.fetcher);var g=null;g||(g=t.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var v=function(y,h){return M(e,void 0,void 0,function(){var w,T,_,D,B,pe,W,ve=this;return F(this,function(J){switch(J.label){case 0:return w=g.data===void 0,T=d.value,T?(_=a.cache.get(T),D=_&&_.data,g.isValidating=!0,g.isLoading=!D,D&&(g.data=D.data,g.error=D.error),B=y||i,!B||!a.isDocumentVisible()&&!w||(h==null?void 0:h.forceRevalidate)!==void 0&&!(h!=null&&h.forceRevalidate)?(g.isValidating=!1,g.isLoading=!1,[2]):_&&(pe=!!(Date.now()-_.createdAt>=a.dedupingInterval||h!=null&&h.forceRevalidate),!pe)?(g.isValidating=!1,g.isLoading=!1,[2]):(W=function(){return M(ve,void 0,void 0,function(){var N,Re,Z,Ee;return F(this,function(z){switch(z.label){case 0:return N=j.get(T),N?[3,2]:(Re=Array.isArray(T)?T:[T],Z=B.apply(void 0,Fe([],Me(Re),!1)),j.set(T,Z,a.dedupingInterval),[4,ue(T,Z,a.cache,u)]);case 1:return z.sent(),[3,4];case 2:return[4,ue(T,N.data,a.cache,u)];case 3:z.sent(),z.label=4;case 4:return g.isValidating=!1,g.isLoading=!1,j.delete(T),g.error!==void 0&&(Ee=!c&&a.shouldRetryOnError&&(h?h.shouldRetryOnError:!0),Ee&&qe(v,h?h.errorRetryCount:1,a)),[2]}})})},D&&a.revalidateDebounce?(setTimeout(function(){return M(ve,void 0,void 0,function(){return F(this,function(N){switch(N.label){case 0:return c?[3,2]:[4,W()];case 1:N.sent(),N.label=2;case 2:return[2]}})})},a.revalidateDebounce),[3,3]):[3,1])):[2];case 1:return[4,W()];case 2:J.sent(),J.label=3;case 3:return[2]}})})},R=function(){return M(e,void 0,void 0,function(){return F(this,function(y){return[2,v(null,{shouldRetryOnError:!1})]})})},p=null;t.onMounted(function(){var y=function(){return M(e,void 0,void 0,function(){return F(this,function(h){switch(h.label){case 0:return!g.error&&a.isOnline()?[4,v()]:[3,2];case 1:return h.sent(),[3,3];case 2:p&&clearTimeout(p),h.label=3;case 3:return a.refreshInterval&&!c&&(p=setTimeout(y,a.refreshInterval)),[2]}})})};a.refreshInterval&&(p=setTimeout(y,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",R,!1),window.addEventListener("focus",R,!1))}),t.onUnmounted(function(){c=!0,p&&clearTimeout(p),a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",R,!1),window.removeEventListener("focus",R,!1));var y=q.get(d.value);y&&(y.data=y.data.filter(function(h){return h!==g}))});try{t.watch(d,function(y){t.isReadonly(d)||(d.value=y),g.key=y,g.isValidating=!!y,Be(d.value,g,u),!l&&!f&&d.value&&v(),f=!1},{immediate:!0})}catch{}var C=A(A({},t.toRefs(g)),{mutate:function(y,h){return v(y,A(A({},h),{forceRevalidate:!0}))}});return C}function Ue(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function ze(e,r,n){const{data:s,error:i,isValidating:a,mutate:c}=xe(e,r,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...n});return{data:t.computed(()=>s.value),response:s,error:i,isValidating:a,revalidate:c}}const V={useI18n:Se,useMetricCardBuilder:be,useMetricFetcher:Ae,useRequest:ze},de=Symbol("METRICS_PROVIDER_KEY"),Pe=e=>{const{datasource:r,dimension:n,dimensionFilterValue:s,additionalFilter:i,queryReady:a,timeRange:c,hasTrendAccess:f,refreshInterval:m,abortController:o,queryFn:l,averageLatencies:u}=e;if(s&&!n)throw new Error("Must provide a dimension if filtering by a value");const d=!!(n&&s),g=!!(n&&!s),v=t.computed(()=>{const h=[];return d&&h.push({field:n,operator:"in",value:[s]}),i.value&&h.push(...ee.stripUnknownFilters(r.value,i.value)),h}),R={datasource:r,metrics:t.ref(["request_count"]),dimensions:[...n&&!d?[n]:[],"status_code_grouped"],filter:v,queryReady:a,timeRange:c,withTrend:t.computed(()=>f.value&&!g),refreshInterval:m,queryFn:l,abortController:o,refreshCounter:e.refreshCounter},p={datasource:r,metrics:t.computed(()=>[u.value?"response_latency_average":"response_latency_p99"]),...n&&!d?{dimensions:[n]}:{},filter:v,queryReady:a,timeRange:c,withTrend:t.computed(()=>f.value&&!g),refreshInterval:m,queryFn:l,abortController:o,refreshCounter:e.refreshCounter},C=V.useMetricFetcher(R),y=V.useMetricFetcher(p);return{trafficData:C,latencyData:y}},$e=t.defineComponent({__name:"MetricsProvider",props:{datasource:{default:void 0},maxTimeRange:{default:"30d"},overrideTimeRange:{default:void 0},dimension:{default:void 0},filterValue:{default:void 0},additionalFilter:{default:void 0},queryReady:{type:Boolean,default:!0},refreshInterval:{default:ne},longCardTitles:{type:Boolean,default:!1},containerTitle:{default:void 0},description:{default:void 0},percentileLatency:{type:Boolean,default:void 0},abortController:{default:void 0},refreshCounter:{default:0}},setup(e){const r=e;if(r.dimension&&ee.queryableExploreDimensions.findIndex(d=>d===r.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${r.dimension}`);const n=t.inject(ae);let s;n?s=n.queryFn:(console.warn("Analytics dashboards require a query bridge supplied via provide / inject."),console.warn("Please ensure your application has a query bridge provided under the key 'analytics-query-provider', as described in"),console.warn("https://github.com/Kong/public-ui-components/blob/main/packages/analytics/analytics-metric-provider/README.md#requirements"),s=()=>Promise.reject(new Error("Query bridge required")));const i=Te.useAnalyticsConfigStore(),a=t.computed(()=>!0),c=t.computed(()=>!i.loading&&r.queryReady),f=t.computed(()=>r.datasource?r.datasource:"basic"),m=t.computed(()=>{const d=r.overrideTimeRange;return d&&!d.tz&&(d.tz=new Intl.DateTimeFormat().resolvedOptions().timeZone),d||{type:"relative",time_range:"7d",tz:new Intl.DateTimeFormat().resolvedOptions().timeZone}}),o=t.computed(()=>!r.percentileLatency),{trafficData:l,latencyData:u}=Pe({datasource:f,dimension:r.dimension,dimensionFilterValue:r.filterValue,additionalFilter:t.toRef(r,"additionalFilter"),queryReady:c,timeRange:m,hasTrendAccess:a,refreshInterval:r.refreshInterval,queryFn:s,averageLatencies:o,abortController:r.abortController,refreshCounter:t.toRef(r,"refreshCounter")});return t.provide(de,{data:{traffic:l,latency:u},description:t.toRef(()=>r.description),containerTitle:t.toRef(()=>r.containerTitle),hasTrendAccess:a,longCardTitles:r.longCardTitles,averageLatencies:o}),(d,g)=>t.renderSlot(d.$slots,"default",{hasTrendAccess:a.value,timeRange:m.value})}});function Ke(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fe={exports:{}};(function(e){(function(){function r(o,l){if(l.separator===!1||o<1e3)return o.toString();var u=typeof l.separator=="string"?l.separator:",",d=[],g=Math.round(o).toString().split("");return g.reverse().forEach(function(v,R){R&&R%3===0&&d.push(u),d.push(v)}),d.reverse().join("")}function n(o,l,u){var d=o/l,g=u.round?"round":"floor";return u.decimal===!1?(o=Math[g](d),o.toString()):(u.precision?o=d:o=d<10?Math[g](d*10)/10:Math[g](d),o=o.toString(),typeof u.decimal=="string"&&(o=o.replace(".",u.decimal)),o)}var s=1e3,i=1e4,a=1e6,c=1e9,f=1e12;function m(o,l){var u;l=l||{};var d=o<0;d&&(o=Math.abs(o)),l.precision&&(o=parseFloat(o.toPrecision(l.precision)));var g=l.min10k?i:s;return o<g||l.precision&&l.precision>Math.log10(o)?u=r(n(o,1,l),l):o<a?u=n(o,s,l)+"k":o<c?u=n(o,a,l)+"m":o<f?u=r(n(o,c,l),l)+"b":u=r(n(o,f,l),l)+"t",d&&(u="-"+u),l.capital&&(u=u.toUpperCase()),l.prefix&&(u=l.prefix+u),l.suffix&&(u=u+l.suffix),u}m.addCommas=r,e.exports=m})()})(fe);var Xe=fe.exports;const Ge=Ke(Xe);var k=(e=>(e.GENERIC_COUNT="GenericCount",e.TRAFFIC="Traffic",e.ERROR_RATE="ErrorRate",e.LATENCY="Latency",e))(k||{}),I=(e=>(e.Small="sm",e.Medium="md",e.Large="lg",e.ExtraLarge="xl",e))(I||{});const H=2,me=H+2,je=(e,r,n=!1)=>{let s=!r||Number(e.toFixed(me))===0?0:Number(e.toFixed(me))>0?1:-1;return n&&(s*=-1),s},He=(e,r,n)=>r?`${Math.abs(e*100).toFixed(H)}%`:n,Ye=(e,r)=>r===0?0:e/r-1,Qe=(e,r=!1)=>(r&&(e*=-1),e>0?S.TrendUpIcon:e<0?S.TrendDownIcon:S.IndeterminateSmallIcon),We="#ad000e",Y="#6c7489",ge="#52596e",Je="#007d60",x="16px",Ze="20px",er={key:0,class:"metricscard-description"},rr={class:"metricscard-valuetrend"},tr={key:0,class:"metricscard-error"},nr={key:2,class:"metricscard-trend"},ar={"data-testid":"metric-trend-change"},ir={key:0,class:"metricscard-trend-range"},or=t.defineComponent({__name:"MetricsCard",props:{cardType:{type:String,required:!0,default:k.GENERIC_COUNT},title:{type:String,default:"0%",required:!0},description:{type:String,default:"",required:!1},tooltip:{type:String,required:!1,default:""},timeframe:{type:String,required:!1,default:""},metricValue:{type:String,default:""},metricChange:{type:String,required:!0},changePolarity:{type:Number,required:!0},trendIcon:{type:Object,default:S.IndeterminateSmallIcon},trendRange:{type:String,default:""},hasError:{type:Boolean,default:!1},errorMessage:{type:String,default:"Vitals data error"},cardSize:{type:String,required:!1,default:()=>I.Large},hasContainerTitle:{type:Boolean,required:!1,default:!1},titleTag:{type:String,default:"span"}},setup(e){const r=new Map([[k.GENERIC_COUNT,S.VitalsIcon],[k.TRAFFIC,S.CloudUploadIcon],[k.ERROR_RATE,S.WarningOutlineIcon],[k.LATENCY,S.ResponseIcon]]),n=e,s=f=>{const m={red:`var(--kui-color-text-danger-strong, ${We})`,green:`var(--kui-color-text-success, ${Je})`,grey:`var(--kui-color-text-neutral-strong, ${ge})`};return f>0?m.green:f<0?m.red:m.grey},i=f=>f>0?"positive":f<0?"negative":"neutral",a=[I.Medium,I.Large].includes(n.cardSize),c=[I.Small].includes(n.cardSize);return(f,m)=>{const o=t.resolveComponent("KTooltip");return t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(["metricscard",e.cardSize])},[t.createElementVNode("div",{class:t.normalizeClass(["metricscard-title",e.cardSize])},[t.unref(c)?t.createCommentVNode("",!0):(t.openBlock(),t.createBlock(t.resolveDynamicComponent(t.unref(r).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${t.unref(Y)})`,size:t.unref(x)},null,8,["color","size"])),(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.titleTag),null,{default:t.withCtx(()=>[t.createTextVNode(t.toDisplayString(e.title),1)]),_:1})),e.tooltip?(t.openBlock(),t.createBlock(o,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:t.withCtx(()=>[t.createVNode(t.unref(S.InfoIcon),{color:`var(--kui-color-text-neutral, ${t.unref(Y)})`,size:t.unref(x)},null,8,["color","size"])]),_:1},8,["text"])):t.createCommentVNode("",!0)],2),e.description&&t.unref(a)?(t.openBlock(),t.createElementBlock("div",er,[t.createElementVNode("span",null,t.toDisplayString(e.description),1)])):t.createCommentVNode("",!0),t.createElementVNode("div",rr,[e.hasError?(t.openBlock(),t.createElementBlock("div",tr,[t.createVNode(t.unref(S.WarningIcon),{color:`var(--kui-color-text-neutral, ${t.unref(Y)})`,size:t.unref(Ze)},null,8,["color","size"]),t.createElementVNode("div",null," "+t.toDisplayString(e.errorMessage),1)])):(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},t.toDisplayString(e.metricValue),3)),t.unref(a)?(t.openBlock(),t.createElementBlock("div",nr,[t.createElementVNode("div",{class:t.normalizeClass(["metricscard-trend-change",i(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.trendIcon),{key:0,color:s(e.changePolarity),size:t.unref(x)},null,8,["color","size"])):(t.openBlock(),t.createBlock(t.unref(S.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${t.unref(ge)})`,size:t.unref(x)},null,8,["color","size"])),t.createElementVNode("div",ar,t.toDisplayString(e.metricChange),1)],2),e.trendRange?(t.openBlock(),t.createElementBlock("div",ir,t.toDisplayString(e.trendRange),1)):t.createCommentVNode("",!0)])):t.createCommentVNode("",!0)])],2)}}}),Q=(e,r)=>{const n=e.__vccOpts||e;for(const[s,i]of r)n[s]=i;return n},sr=Q(or,[["__scopeId","data-v-b1513f6f"]]),lr={},cr={class:"loading-tabs"};function ur(e,r){const n=t.resolveComponent("KSkeletonBox");return t.openBlock(),t.createElementBlock("div",cr,[t.createVNode(n,{width:"100"}),t.createVNode(n,{width:"75"})])}const dr=Q(lr,[["render",ur],["__scopeId","data-v-9c7113d7"]]),fr={key:0,class:"container-title"},mr={key:0,class:"container-description"},gr={key:1,class:"error-display"},yr={key:0,class:"error-display-message"},hr={key:2,class:"cards-wrapper"},pr=Q(t.defineComponent({__name:"MetricCardContainer",props:{fallbackDisplayText:{type:String,required:!0},cards:{type:Array,required:!0},errorMessage:{type:String,required:!1,default:""},loading:{type:Boolean,required:!1,default:!1},hasTrendAccess:{type:Boolean,required:!1,default:!0},cardSize:{type:String,required:!1,default:()=>I.Large},containerTitle:{type:String,required:!1,default:""},containerDescription:{type:String,required:!1,default:""}},setup(e){const r=e,n=t.computed(()=>r.cards.every(i=>(i==null?void 0:i.hasError)===!0)),s=i=>{const a=Ye(i.currentValue,i.previousValue)||0,c=je(a,r.hasTrendAccess,i.increaseIsBad);return{metricValue:i.formatValueFn?i.formatValueFn(i.currentValue):Ge(i.currentValue,{capital:!0,round:!0})||"0",metricChange:i.formatChangeFn?i.formatChangeFn(a):He(a,r.hasTrendAccess,r.fallbackDisplayText),changePolarity:c,trendIcon:Qe(c,i.increaseIsBad),cardSize:r.cardSize,hasContainerTitle:!!r.containerTitle}};return(i,a)=>(t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[r.containerTitle||r.containerDescription?(t.openBlock(),t.createElementBlock("div",fr,[t.createTextVNode(t.toDisplayString(r.containerTitle)+" ",1),r.containerDescription?(t.openBlock(),t.createElementBlock("div",mr,t.toDisplayString(r.containerDescription),1)):t.createCommentVNode("",!0)])):t.createCommentVNode("",!0),n.value?(t.openBlock(),t.createElementBlock("div",gr,[t.createVNode(t.unref(S.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(t.openBlock(),t.createElementBlock("div",yr,t.toDisplayString(e.errorMessage),1)):t.createCommentVNode("",!0)])):(t.openBlock(),t.createElementBlock("div",hr,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.cards,(c,f)=>(t.openBlock(),t.createElementBlock(t.Fragment,null,[e.loading?(t.openBlock(),t.createElementBlock("div",{key:`skeleton-${f}`,class:"loading-tab"},[t.createVNode(dr,{class:t.normalizeClass(e.cardSize===t.unref(I).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])])):(t.openBlock(),t.createBlock(sr,t.mergeProps({key:f},{ref_for:!0},s(c),{"card-size":e.cardSize,"card-type":c.cardType,description:c.description,"error-message":e.errorMessage,"has-error":c.hasError,title:c.title,"title-tag":c.titleTag,tooltip:c.tooltip,"trend-range":c.trendRange}),null,16,["card-size","card-type","description","error-message","has-error","title","title-tag","tooltip","trend-range"]))],64))),256))]))],2))}}),[["__scopeId","data-v-7080ba56"]]),vr=t.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:I.Large},cardToDisplay:{default:void 0}},setup(e){const r=e,n=t.inject(de);if(!n)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:s,latency:i}=n.data,{i18n:a}=V.useI18n(),c=t.computed(()=>n.containerTitle.value?I.Medium:r.cardSize),f=V.useMetricCardBuilder({cardType:k.TRAFFIC,title:t.computed(()=>n.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:s.mapped,hasError:s.hasError,lookupKey:r.lookupKey,sumGroupedValues:O,trendRange:s.trendRange}),m=p=>`${p.toFixed(H)}%`,o=t.computed(()=>{const p=s.mapped.value,C=L(p,"current",r.lookupKey,P),y=L(p,"current",r.lookupKey,O),h=C/y*100||0,w=L(p,"previous",r.lookupKey,P),T=L(p,"previous",r.lookupKey,O),_=w/T*100||0;return{cardType:k.ERROR_RATE,hasError:s.hasError.value,currentValue:h,previousValue:_,formatValueFn:m,title:n.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:s.trendRange.value}}),l=p=>`${p}ms`,u=V.useMetricCardBuilder({cardType:k.LATENCY,title:t.computed(()=>{const{longCardTitles:p,averageLatencies:C}=n,y=C.value?"averageLatency":"p99Latency";return p?a.t(`metricCard.long.${y}`):c.value===I.Small?a.t(`metricCard.small.${y}`):a.t(`metricCard.short.${y}`)}),hasError:i.hasError,record:i.mapped,lookupKey:r.lookupKey,increaseIsBad:!0,formatValueFn:l,trendRange:i.trendRange}),d=t.computed(()=>r.cardToDisplay==="TRAFFIC"?[f.value]:r.cardToDisplay==="ERROR_RATE"?[o.value]:r.cardToDisplay==="LATENCY"?[u.value]:[f.value,o.value,u.value]),g=t.computed(()=>r.cardToDisplay==="TRAFFIC"||r.cardToDisplay==="ERROR_RATE"?s.isLoading.value:r.cardToDisplay==="LATENCY"?i.isLoading.value:s.isLoading.value||i.isLoading.value),v=t.computed(()=>({cards:d.value,containerTitle:n.containerTitle.value,containerDescription:n.description.value,loading:g.value,hasTrendAccess:n.hasTrendAccess.value,fallbackDisplayText:a.t("general.notAvailable"),cardSize:c.value,hideTitle:!0})),R=t.computed(()=>({loading:v.value.loading,trafficCard:f.value,errorRateCard:o.value,latencyCard:u.value,errorRateFormatted:m(o.value.currentValue),latencyFormatted:l(u.value.currentValue)}));return(p,C)=>t.renderSlot(p.$slots,"default",{cardValues:R.value},()=>[t.createVNode(pr,t.normalizeProps(t.guardReactiveProps(v.value)),null,16)])}}),U=e=>new Date(e),Rr=(e,r)=>{const n=e.body;e.reply({statusCode:200,body:he(n,r)})},ye=e=>e.reduce((r,n)=>(r[n]={name:n},r),{}),he=(e,r)=>{var R,p,C;const n=r!=null&&r.timeRange&&{start:r.timeRange.start,end:r.timeRange.end}||((R=e.time_range)==null?void 0:R.type)==="absolute"?{start:new Date(e.time_range.start),end:new Date(e.time_range.end)}:{start:new Date(Date.now()-864e5),end:new Date},s=n.end.getTime()-n.start.getTime(),i=e.granularity==="trend"?{start:new Date(n.start.getTime()-s),end:n.end,granularity:n.end.getTime()-n.start.getTime()}:{start:n.start,end:n.end,granularity:n.end.getTime()-n.start.getTime()},a=i.end.getTime(),c=i.start.getTime(),f=i.granularity,m=e.granularity==="trend"?2:1;if((e.dimensions??[]).length>2)throw new Error(`Explore only supports 0-2 dimensions; got: ${JSON.stringify(e.dimensions)}`);const o=(e.dimensions??[]).find(y=>y!=="time"),l=(r==null?void 0:r.dimensionNames)??[],u=Math.max(l.length,1),d=e.metrics||[],g=[];for(let y=0;y<m;y++)for(let h=0;h<u;h++){const w=o?{[o]:l[h]}:{};(p=e.dimensions)!=null&&p.includes("status_code_grouped")?O.forEach(T=>{const _=d.reduce((D,B)=>((r==null?void 0:r.deterministic)??!0?D[B]=(m-y)*1e3+100*h+1:D[B]=Math.round(Math.random()*1e3),D),{...w,status_code_grouped:T});g.push({version:"v1",timestamp:y===0?U(c).toISOString():U(c+f).toISOString(),event:_})}):g.push({version:"v1",timestamp:y===0?U(c).toISOString():U(c+f).toISOString(),event:d.reduce((T,_)=>((r==null?void 0:r.deterministic)??!0?T[_]=(m-y)*1e3+100*h+1:T[_]=Math.round(Math.random()*1e3),T),{...w})})}const v={start_ms:c,end_ms:a,start:new Date(c).toISOString(),end:new Date(a).toISOString(),granularity_ms:f,display:o?{[o]:ye(l),...(C=e.dimensions)!=null&&C.includes("status_code_grouped")?{status_code_grouped:ye(O)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:g,meta:v}};E.ALL_STATUS_CODE_GROUPS=O,E.DEFAULT_REFRESH_INTERVAL=ne,E.INJECT_QUERY_PROVIDER=ae,E.MAX_ANALYTICS_REQUEST_RETRIES=te,E.MetricCardSize=I,E.MetricCardType=k,E.MetricsConsumer=vr,E.MetricsProvider=$e,E.STATUS_CODES_FAILED=P,E.STATUS_CODES_SUCCESS=_e,E.mockExploreResponse=he,E.mockExploreResponseFromCypress=Rr,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});