@kong-ui-public/analytics-metric-provider 11.1.6 → 11.1.7-pr.2694.d983d66d0.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.
- package/package.json +8 -8
- package/dist/style.css +0 -1
- package/dist/types/components/MetricCardContainer.vue.d.ts +0 -92
- package/dist/types/components/MetricCardContainer.vue.d.ts.map +0 -1
- package/dist/types/components/MetricsConsumer.vue.d.ts +0 -35
- package/dist/types/components/MetricsConsumer.vue.d.ts.map +0 -1
- package/dist/types/components/MetricsProvider.vue.d.ts +0 -49
- package/dist/types/components/MetricsProvider.vue.d.ts.map +0 -1
- package/dist/types/components/MetricsTestHarness.vue.d.ts +0 -27
- package/dist/types/components/MetricsTestHarness.vue.d.ts.map +0 -1
- package/dist/types/components/display/MetricCardLoadingSkeleton.vue.d.ts +0 -4
- package/dist/types/components/display/MetricCardLoadingSkeleton.vue.d.ts.map +0 -1
- package/dist/types/components/display/MetricsCard.vue.d.ts +0 -398
- package/dist/types/components/display/MetricsCard.vue.d.ts.map +0 -1
- package/dist/types/components/metricsProviderUtil.d.ts +0 -35
- package/dist/types/components/metricsProviderUtil.d.ts.map +0 -1
- package/dist/types/composables/index.d.ts +0 -14
- package/dist/types/composables/index.d.ts.map +0 -1
- package/dist/types/composables/useI18n.d.ts +0 -9
- package/dist/types/composables/useI18n.d.ts.map +0 -1
- package/dist/types/composables/useMetricCardBuilder.d.ts +0 -20
- package/dist/types/composables/useMetricCardBuilder.d.ts.map +0 -1
- package/dist/types/composables/useMetricFetcher.d.ts +0 -19
- package/dist/types/composables/useMetricFetcher.d.ts.map +0 -1
- package/dist/types/composables/useRequest.d.ts +0 -12
- package/dist/types/composables/useRequest.d.ts.map +0 -1
- package/dist/types/composables/useTrendRange.d.ts +0 -4
- package/dist/types/composables/useTrendRange.d.ts.map +0 -1
- package/dist/types/constants.d.ts +0 -7
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/enums/index.d.ts +0 -3
- package/dist/types/enums/index.d.ts.map +0 -1
- package/dist/types/enums/metric-card-size.enum.d.ts +0 -7
- package/dist/types/enums/metric-card-size.enum.d.ts.map +0 -1
- package/dist/types/enums/metric-card-type.enum.d.ts +0 -7
- package/dist/types/enums/metric-card-type.enum.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -10
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/mockExploreResponse.d.ts +0 -12
- package/dist/types/mockExploreResponse.d.ts.map +0 -1
- package/dist/types/types/fetcher-types.d.ts +0 -16
- package/dist/types/types/fetcher-types.d.ts.map +0 -1
- package/dist/types/types/index.d.ts +0 -3
- package/dist/types/types/index.d.ts.map +0 -1
- package/dist/types/types/metric-card.d.ts +0 -36
- package/dist/types/types/metric-card.d.ts.map +0 -1
- package/dist/types/utilities/index.d.ts +0 -2
- package/dist/types/utilities/index.d.ts.map +0 -1
- package/dist/types/utilities/trend-display.d.ts +0 -24
- package/dist/types/utilities/trend-display.d.ts.map +0 -1
- package/dist/vitals-metric-provider.es.js +0 -1243
- package/dist/vitals-metric-provider.umd.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(v,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):(v=typeof globalThis<"u"?globalThis:v||self,t(v["kong-ui-public-vitals-metric-provider"]={},v.Vue,v["kong-ui-public-analytics-utilities"],v["kong-ui-public-i18n"],v.axios,v["kong-ui-public-analytics-config-store"],v.KongIcons))})(this,function(v,t,re,te,Tr,De,C){"use strict";const ke={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 Ae(){const e=te.createI18n("en-us",ke);return{i18n:e,i18nT:te.i18nTComponent(e)}}const ne=2,w=["1XX","2XX","3XX","4XX","5XX"],$=["4XX","5XX"],be=["1XX","2XX","3XX"],ae=30*1e3,ie="analytics-query-provider";var oe=(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))(oe||{});const Ve=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 Ne(e=t.ref({}),r,n,s=Ve){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:oe}}const b=Symbol("default"),K="status_code_grouped",se=(e,r,n,s,i)=>{e[r][n]||(e[r][n]={}),e[r][n][s]=i};function Oe(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===K),u=i.find(m=>m!==K);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],c=u?o.event[u]:b,d=a?o.event[K]:b;return new Date(o.timestamp).getTime()===s&&r?se(m,"previous",c,d,l):se(m,"current",c,d,l),m},{previous:{},current:{}})}function we(e){e.queryReady===void 0&&(e.queryReady=t.computed(()=>!0));const r=t.computed(()=>{var l,c;return{metrics:e.metrics.value,dimensions:[...(l=e.dimensions)!=null&&l.length?[...e.dimensions]:[],...e.withTrend.value?["time"]:[]],granularity:e.withTrend.value?"trend":void 0,...(c=e.filter.value)!=null&&c.length?{filters:e.filter.value}:{},time_range:e.timeRange.value}}),n=t.computed(()=>{var c,d,y,E;if(!((c=e.queryReady)!=null&&c.value))return null;const l=(d=e.filter)!=null&&d.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${JSON.stringify(e.timeRange.value)}-${(y=e.dimensions)==null?void 0:y.join("-")}-${(E=e.metrics.value)==null?void 0:E.join("-")}-${l}-${e.refreshCounter.value}`}),{response:s,error:i,isValidating:a}=V.useRequest(()=>n.value,()=>e.queryFn({datasource:e.datasource.value,query:r.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:ne}),{state:u,swrvState:f}=Ne(s,i,a),m=t.computed(()=>{var l,c,d,y,E,T,p;return!((c=(l=s.value)==null?void 0:l.data)!=null&&c.length)||!((y=(d=s.value)==null?void 0:d.meta)!=null&&y.display)||!((p=(T=(E=s.value)==null?void 0:E.meta)==null?void 0:T.metric_names)!=null&&p.length)?{current:{},previous:{}}:Oe(s.value,e.withTrend.value)}),o=V.useTrendRange(e.withTrend,e.timeRange,t.computed(()=>{var l;return(l=s.value)==null?void 0:l.meta}));return{isLoading:t.computed(()=>f.PENDING===u.value),hasError:t.computed(()=>f.ERROR===u.value),raw:s,mapped:m,trendRange:o}}const L=(e,r,n=b,s)=>(s??[b]).reduce((a,u)=>{const f=e[r][n];return f?a+(f[u]||0):a},0);function Le(e){const{cardType:r,title:n,description:s,record:i,hasError:a,increaseIsBad:u,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(c){console.error("Metric card data doesn't have the expected structure:",c)}return{cardType:r,hasError:a.value,currentValue:o,previousValue:l,title:n.value,description:s,increaseIsBad:!!u,formatValueFn:f,trendRange:m==null?void 0:m.value}})}function le(e,r,n){const{i18n:s}=V.useI18n(),i=1e3*60,a=i*60,u=a*24,f=(o,l)=>{let c=l-o;e.value&&(c/=2);const d=c/u,y=c/a,E=c/i;return d>=1?s.t("trendRange.custom_days",{numDays:Math.round(d)}):y>=1?s.t("trendRange.custom_hours",{numHours:Math.round(y)}):E>=1?s.t("trendRange.custom_minutes",{numMinutes:Math.round(E)}):s.t("trendRange.custom_days",{numDays:Math.round(d)})},m=()=>{var o,l;if((o=n==null?void 0:n.value)!=null&&o.start_ms&&n.value.end_ms)return{startMs:n.value.start_ms,endMs:n.value.end_ms};if(((l=r==null?void 0:r.value)==null?void 0:l.type)==="absolute"&&r.value.start&&r.value.end)return{startMs:new Date(r.value.start).getTime(),endMs:new Date(r.value.end).getTime()}};return t.computed(()=>{var o,l;if(((o=r==null?void 0:r.value)==null?void 0:o.type)==="relative"&&e.value)return s.t(`trendRange.${r.value.time_range}`);if(e.value||((l=r==null?void 0:r.value)==null?void 0:l.type)==="absolute"){const c=m();if(c)return f(c.startMs,c.endMs)}return""})}var G=new WeakMap,ce=0;function Me(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]):G.has(e[n])?s=G.get(e[n]):(s=ce,G.set(e[n],ce++)),r+="@"+s}return r}function Fe(e){if(typeof e=="function")try{e=e()}catch{e=""}return Array.isArray(e)?e=Me(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 Fe(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,u=Date.now(),f={data:n,createdAt:u,expiresAt:a?u+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(),u=a>=n.expiresAt;u&&i.delete(s)},r)},e.prototype.delete=function(r){this.items.delete(r)},e}();function Be(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function qe(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var xe=function(e){return fetch(e).then(function(r){return r.json()})};const j={isOnline:Be,isDocumentVisible:qe,fetcher:xe};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(u){u(a)})}return new(n||(n=Promise))(function(a,u){function f(l){try{o(s.next(l))}catch(c){u(c)}}function m(l){try{o(s.throw(l))}catch(c){u(c)}}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,u;return u={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;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}}},Ue=function(e,r){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var s=n.call(e),i,a=[],u;try{for(;(r===void 0||r-- >0)&&!(i=s.next()).done;)a.push(i.value)}catch(f){u={error:f}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(u)throw u.error}}return a},Pe=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))},ue=new X,q=new X,H=new X,de={cache:ue,refreshInterval:0,ttl:0,serverTTL:1e3,dedupingInterval:2e3,revalidateOnFocus:!0,revalidateDebounce:0,shouldRetryOnError:!0,errorRetryInterval:5e3,errorRetryCount:5,fetcher:j.fetcher,isOnline:j.isOnline,isDocumentVisible:j.isDocumentVisible};function ze(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 $e(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 fe=function(e,r,n,s){return n===void 0&&(n=ue),s===void 0&&(s=de.ttl),M(void 0,void 0,void 0,function(){var i,a,u,f,m,o,l;return F(this,function(c){switch(c.label){case 0:if(!Ge(r))return[3,5];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,r];case 2:return i=c.sent(),[3,4];case 3:return f=c.sent(),a=f,[3,4];case 4:return[3,6];case 5:i=r,c.label=6;case 6:if(u=!1,m={data:i,error:a,isValidating:u},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,y){typeof m.data<"u"&&(d.data=m.data),d.error=m.error,d.isValidating=m.isValidating,d.isLoading=m.isValidating;var E=y===l.length-1;E||delete l[y]}),l=l.filter(Boolean)),[2,m]}})})};function Ke(){for(var e=this,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var s,i,a=A({},de),u=!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 c=l?a.serverTTL:a.ttl,d=typeof s=="function"?s:t.ref(s);typeof i>"u"&&(i=a.fetcher);var y=null;y||(y=t.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var E=function(g,h){return M(e,void 0,void 0,function(){var N,R,S,k,B,Ce,J,Se=this;return F(this,function(Z){switch(Z.label){case 0:return N=y.data===void 0,R=d.value,R?(S=a.cache.get(R),k=S&&S.data,y.isValidating=!0,y.isLoading=!k,k&&(y.data=k.data,y.error=k.error),B=g||i,!B||!a.isDocumentVisible()&&!N||(h==null?void 0:h.forceRevalidate)!==void 0&&!(h!=null&&h.forceRevalidate)?(y.isValidating=!1,y.isLoading=!1,[2]):S&&(Ce=!!(Date.now()-S.createdAt>=a.dedupingInterval||h!=null&&h.forceRevalidate),!Ce)?(y.isValidating=!1,y.isLoading=!1,[2]):(J=function(){return M(Se,void 0,void 0,function(){var O,_e,ee,Ie;return F(this,function(z){switch(z.label){case 0:return O=H.get(R),O?[3,2]:(_e=Array.isArray(R)?R:[R],ee=B.apply(void 0,Pe([],Ue(_e),!1)),H.set(R,ee,a.dedupingInterval),[4,fe(R,ee,a.cache,c)]);case 1:return z.sent(),[3,4];case 2:return[4,fe(R,O.data,a.cache,c)];case 3:z.sent(),z.label=4;case 4:return y.isValidating=!1,y.isLoading=!1,H.delete(R),y.error!==void 0&&(Ie=!u&&a.shouldRetryOnError&&(h?h.shouldRetryOnError:!0),Ie&&$e(E,h?h.errorRetryCount:1,a)),[2]}})})},k&&a.revalidateDebounce?(setTimeout(function(){return M(Se,void 0,void 0,function(){return F(this,function(O){switch(O.label){case 0:return u?[3,2]:[4,J()];case 1:O.sent(),O.label=2;case 2:return[2]}})})},a.revalidateDebounce),[3,3]):[3,1])):[2];case 1:return[4,J()];case 2:Z.sent(),Z.label=3;case 3:return[2]}})})},T=function(){return M(e,void 0,void 0,function(){return F(this,function(g){return[2,E(null,{shouldRetryOnError:!1})]})})},p=null;t.onMounted(function(){var g=function(){return M(e,void 0,void 0,function(){return F(this,function(h){switch(h.label){case 0:return!y.error&&a.isOnline()?[4,E()]:[3,2];case 1:return h.sent(),[3,3];case 2:p&&clearTimeout(p),h.label=3;case 3:return a.refreshInterval&&!u&&(p=setTimeout(g,a.refreshInterval)),[2]}})})};a.refreshInterval&&(p=setTimeout(g,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",T,!1),window.addEventListener("focus",T,!1))}),t.onUnmounted(function(){u=!0,p&&clearTimeout(p),a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",T,!1),window.removeEventListener("focus",T,!1));var g=q.get(d.value);g&&(g.data=g.data.filter(function(h){return h!==y}))});try{t.watch(d,function(g){t.isReadonly(d)||(d.value=g),y.key=g,y.isValidating=!!g,ze(d.value,y,c),!l&&!f&&d.value&&E(),f=!1},{immediate:!0})}catch{}var I=A(A({},t.toRefs(y)),{mutate:function(g,h){return E(g,A(A({},h),{forceRevalidate:!0}))}});return I}function Ge(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function Xe(e,r,n){const{data:s,error:i,isValidating:a,mutate:u}=Ke(e,r,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...n});return{data:t.computed(()=>s.value),response:s,error:i,isValidating:a,revalidate:u}}const V={useI18n:Ae,useMetricCardBuilder:Le,useMetricFetcher:we,useTrendRange:le,useRequest:Xe},me=Symbol("METRICS_PROVIDER_KEY"),je=e=>{const{datasource:r,dimension:n,dimensionFilterValue:s,additionalFilter:i,queryReady:a,timeRange:u,hasTrendAccess:f,refreshInterval:m,abortController:o,queryFn:l,averageLatencies:c}=e;if(s&&!n)throw new Error("Must provide a dimension if filtering by a value");const d=!!(n&&s),y=!!(n&&!s),E=t.computed(()=>{const h=[];return d&&h.push({field:n,operator:"in",value:[s]}),i.value&&h.push(...re.stripUnknownFilters(r.value,i.value)),h}),T={datasource:r,metrics:t.ref(["request_count"]),dimensions:[...n&&!d?[n]:[],"status_code_grouped"],filter:E,queryReady:a,timeRange:u,withTrend:t.computed(()=>f.value&&!y),refreshInterval:m,queryFn:l,abortController:o,refreshCounter:e.refreshCounter},p={datasource:r,metrics:t.computed(()=>[c.value?"response_latency_average":"response_latency_p99"]),...n&&!d?{dimensions:[n]}:{},filter:E,queryReady:a,timeRange:u,withTrend:t.computed(()=>f.value&&!y),refreshInterval:m,queryFn:l,abortController:o,refreshCounter:e.refreshCounter},I=V.useMetricFetcher(T),g=V.useMetricFetcher(p);return{trafficData:I,latencyData:g}},He=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:ae},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&&re.queryableExploreDimensions.findIndex(d=>d===r.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${r.dimension}`);const n=t.inject(ie);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=De.useAnalyticsConfigStore(),a=t.computed(()=>!0),u=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:c}=je({datasource:f,dimension:r.dimension,dimensionFilterValue:r.filterValue,additionalFilter:t.toRef(r,"additionalFilter"),queryReady:u,timeRange:m,hasTrendAccess:a,refreshInterval:r.refreshInterval,queryFn:s,averageLatencies:o,abortController:r.abortController,refreshCounter:t.toRef(r,"refreshCounter")});return t.provide(me,{data:{traffic:l,latency:c},description:t.toRef(()=>r.description),containerTitle:t.toRef(()=>r.containerTitle),hasTrendAccess:a,longCardTitles:r.longCardTitles,averageLatencies:o}),(d,y)=>t.renderSlot(d.$slots,"default",{hasTrendAccess:a.value,timeRange:m.value})}});function Ye(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ye={exports:{}};(function(e){(function(){function r(o,l){if(l.separator===!1||o<1e3)return o.toString();var c=typeof l.separator=="string"?l.separator:",",d=[],y=Math.round(o).toString().split("");return y.reverse().forEach(function(E,T){T&&T%3===0&&d.push(c),d.push(E)}),d.reverse().join("")}function n(o,l,c){var d=o/l,y=c.round?"round":"floor";return c.decimal===!1?(o=Math[y](d),o.toString()):(c.precision?o=d:o=d<10?Math[y](d*10)/10:Math[y](d),o=o.toString(),typeof c.decimal=="string"&&(o=o.replace(".",c.decimal)),o)}var s=1e3,i=1e4,a=1e6,u=1e9,f=1e12;function m(o,l){var c;l=l||{};var d=o<0;d&&(o=Math.abs(o)),l.precision&&(o=parseFloat(o.toPrecision(l.precision)));var y=l.min10k?i:s;return o<y||l.precision&&l.precision>Math.log10(o)?c=r(n(o,1,l),l):o<a?c=n(o,s,l)+"k":o<u?c=n(o,a,l)+"m":o<f?c=r(n(o,u,l),l)+"b":c=r(n(o,f,l),l)+"t",d&&(c="-"+c),l.capital&&(c=c.toUpperCase()),l.prefix&&(c=l.prefix+c),l.suffix&&(c=c+l.suffix),c}m.addCommas=r,e.exports=m})()})(ye);var Qe=ye.exports;const We=Ye(Qe);var D=(e=>(e.GENERIC_COUNT="GenericCount",e.TRAFFIC="Traffic",e.ERROR_RATE="ErrorRate",e.LATENCY="Latency",e))(D||{}),_=(e=>(e.Small="sm",e.Medium="md",e.Large="lg",e.ExtraLarge="xl",e))(_||{});const x=2,Y=x+2,ge=(e,r,n=!1)=>{let s=!r||Number(e.toFixed(Y))===0?0:Number(e.toFixed(Y))>0?1:-1;return n&&(s*=-1),s},he=(e,r,n)=>r?`${Math.abs(e*100).toFixed(x)}%`:n,ve=(e,r)=>r===0?0:e/r-1,pe=(e,r=!1)=>(r&&(e*=-1),e>0?C.TrendUpIcon:e<0?C.TrendDownIcon:C.IndeterminateSmallIcon),Je="#ad000e",Q="#6c7489",Ee="#52596e",Ze="#007d60",U="16px",er="20px",rr={key:0,class:"metricscard-description"},tr={class:"metricscard-valuetrend"},nr={key:0,class:"metricscard-error"},ar={key:2,class:"metricscard-trend"},ir={"data-testid":"metric-trend-change"},or={key:0,class:"metricscard-trend-range"},sr=t.defineComponent({__name:"MetricsCard",props:{cardType:{type:String,required:!0,default:D.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:C.IndeterminateSmallIcon},trendRange:{type:String,default:""},hasError:{type:Boolean,default:!1},errorMessage:{type:String,default:"Vitals data error"},cardSize:{type:String,required:!1,default:()=>_.Large},hasContainerTitle:{type:Boolean,required:!1,default:!1},titleTag:{type:String,default:"span"}},setup(e){const r=new Map([[D.GENERIC_COUNT,C.VitalsIcon],[D.TRAFFIC,C.CloudUploadIcon],[D.ERROR_RATE,C.WarningOutlineIcon],[D.LATENCY,C.ResponseIcon]]),n=e,s=f=>{const m={red:`var(--kui-color-text-danger-strong, ${Je})`,green:`var(--kui-color-text-success, ${Ze})`,grey:`var(--kui-color-text-neutral-strong, ${Ee})`};return f>0?m.green:f<0?m.red:m.grey},i=f=>f>0?"positive":f<0?"negative":"neutral",a=[_.Medium,_.Large].includes(n.cardSize),u=[_.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(u)?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(Q)})`,size:t.unref(U)},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(C.InfoIcon),{color:`var(--kui-color-text-neutral, ${t.unref(Q)})`,size:t.unref(U)},null,8,["color","size"])]),_:1},8,["text"])):t.createCommentVNode("",!0)],2),e.description&&t.unref(a)?(t.openBlock(),t.createElementBlock("div",rr,[t.createElementVNode("span",null,t.toDisplayString(e.description),1)])):t.createCommentVNode("",!0),t.createElementVNode("div",tr,[e.hasError?(t.openBlock(),t.createElementBlock("div",nr,[t.createVNode(t.unref(C.WarningIcon),{color:`var(--kui-color-text-neutral, ${t.unref(Q)})`,size:t.unref(er)},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",ar,[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(U)},null,8,["color","size"])):(t.openBlock(),t.createBlock(t.unref(C.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${t.unref(Ee)})`,size:t.unref(U)},null,8,["color","size"])),t.createElementVNode("div",ir,t.toDisplayString(e.metricChange),1)],2),e.trendRange?(t.openBlock(),t.createElementBlock("div",or,t.toDisplayString(e.trendRange),1)):t.createCommentVNode("",!0)])):t.createCommentVNode("",!0)])],2)}}}),W=(e,r)=>{const n=e.__vccOpts||e;for(const[s,i]of r)n[s]=i;return n},lr=W(sr,[["__scopeId","data-v-b1513f6f"]]),cr={},ur={class:"loading-tabs"};function dr(e,r){const n=t.resolveComponent("KSkeletonBox");return t.openBlock(),t.createElementBlock("div",ur,[t.createVNode(n,{width:"100"}),t.createVNode(n,{width:"75"})])}const fr=W(cr,[["render",dr],["__scopeId","data-v-9c7113d7"]]),mr={key:0,class:"container-title"},yr={key:0,class:"container-description"},gr={key:1,class:"error-display"},hr={key:0,class:"error-display-message"},vr={key:2,class:"cards-wrapper"},pr=W(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:()=>_.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=ve(i.currentValue,i.previousValue)||0,u=ge(a,r.hasTrendAccess,i.increaseIsBad);return{metricValue:i.formatValueFn?i.formatValueFn(i.currentValue):We(i.currentValue,{capital:!0,round:!0})||"0",metricChange:i.formatChangeFn?i.formatChangeFn(a):he(a,r.hasTrendAccess,r.fallbackDisplayText),changePolarity:u,trendIcon:pe(u,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",mr,[t.createTextVNode(t.toDisplayString(r.containerTitle)+" ",1),r.containerDescription?(t.openBlock(),t.createElementBlock("div",yr,t.toDisplayString(r.containerDescription),1)):t.createCommentVNode("",!0)])):t.createCommentVNode("",!0),n.value?(t.openBlock(),t.createElementBlock("div",gr,[t.createVNode(t.unref(C.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(t.openBlock(),t.createElementBlock("div",hr,t.toDisplayString(e.errorMessage),1)):t.createCommentVNode("",!0)])):(t.openBlock(),t.createElementBlock("div",vr,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.cards,(u,f)=>(t.openBlock(),t.createElementBlock(t.Fragment,null,[e.loading?(t.openBlock(),t.createElementBlock("div",{key:`skeleton-${f}`,class:"loading-tab"},[t.createVNode(fr,{class:t.normalizeClass(e.cardSize===t.unref(_).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])])):(t.openBlock(),t.createBlock(lr,t.mergeProps({key:f},{ref_for:!0},s(u),{"card-size":e.cardSize,"card-type":u.cardType,description:u.description,"error-message":e.errorMessage,"has-error":u.hasError,title:u.title,"title-tag":u.titleTag,tooltip:u.tooltip,"trend-range":u.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"]]),Er=t.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:_.Large},cardToDisplay:{default:void 0}},setup(e){const r=e,n=t.inject(me);if(!n)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:s,latency:i}=n.data,{i18n:a}=V.useI18n(),u=t.computed(()=>n.containerTitle.value?_.Medium:r.cardSize),f=V.useMetricCardBuilder({cardType:D.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:w,trendRange:s.trendRange}),m=p=>`${p.toFixed(x)}%`,o=t.computed(()=>{const p=s.mapped.value,I=L(p,"current",r.lookupKey,$),g=L(p,"current",r.lookupKey,w),h=I/g*100||0,N=L(p,"previous",r.lookupKey,$),R=L(p,"previous",r.lookupKey,w),S=N/R*100||0;return{cardType:D.ERROR_RATE,hasError:s.hasError.value,currentValue:h,previousValue:S,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`,c=V.useMetricCardBuilder({cardType:D.LATENCY,title:t.computed(()=>{const{longCardTitles:p,averageLatencies:I}=n,g=I.value?"averageLatency":"p99Latency";return p?a.t(`metricCard.long.${g}`):u.value===_.Small?a.t(`metricCard.small.${g}`):a.t(`metricCard.short.${g}`)}),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"?[c.value]:[f.value,o.value,c.value]),y=t.computed(()=>r.cardToDisplay==="TRAFFIC"||r.cardToDisplay==="ERROR_RATE"?s.isLoading.value:r.cardToDisplay==="LATENCY"?i.isLoading.value:s.isLoading.value||i.isLoading.value),E=t.computed(()=>({cards:d.value,containerTitle:n.containerTitle.value,containerDescription:n.description.value,loading:y.value,hasTrendAccess:n.hasTrendAccess.value,fallbackDisplayText:a.t("general.notAvailable"),cardSize:u.value,hideTitle:!0})),T=t.computed(()=>({loading:E.value.loading,trafficCard:f.value,errorRateCard:o.value,latencyCard:c.value,errorRateFormatted:m(o.value.currentValue),latencyFormatted:l(c.value.currentValue)}));return(p,I)=>t.renderSlot(p.$slots,"default",{cardValues:T.value},()=>[t.createVNode(pr,t.normalizeProps(t.guardReactiveProps(E.value)),null,16)])}}),P=e=>new Date(e),Rr=(e,r)=>{const n=e.body;e.reply({statusCode:200,body:Te(n,r)})},Re=e=>e.reduce((r,n)=>(r[n]={name:n},r),{}),Te=(e,r)=>{var T,p,I;const n=r!=null&&r.timeRange&&{start:r.timeRange.start,end:r.timeRange.end}||((T=e.time_range)==null?void 0:T.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(),u=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(g=>g!=="time"),l=(r==null?void 0:r.dimensionNames)??[],c=Math.max(l.length,1),d=e.metrics||[],y=[];for(let g=0;g<m;g++)for(let h=0;h<c;h++){const N=o?{[o]:l[h]}:{};(p=e.dimensions)!=null&&p.includes("status_code_grouped")?w.forEach(R=>{const S=d.reduce((k,B)=>((r==null?void 0:r.deterministic)??!0?k[B]=(m-g)*1e3+100*h+1:k[B]=Math.round(Math.random()*1e3),k),{...N,status_code_grouped:R});y.push({version:"v1",timestamp:g===0?P(u).toISOString():P(u+f).toISOString(),event:S})}):y.push({version:"v1",timestamp:g===0?P(u).toISOString():P(u+f).toISOString(),event:d.reduce((R,S)=>((r==null?void 0:r.deterministic)??!0?R[S]=(m-g)*1e3+100*h+1:R[S]=Math.round(Math.random()*1e3),R),{...N})})}const E={start_ms:u,end_ms:a,start:new Date(u).toISOString(),end:new Date(a).toISOString(),granularity_ms:f,display:o?{[o]:Re(l),...(I=e.dimensions)!=null&&I.includes("status_code_grouped")?{status_code_grouped:Re(w)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:y,meta:E}};v.ALL_STATUS_CODE_GROUPS=w,v.DECIMAL_DISPLAY=x,v.DECIMAL_ROUNDING_PRECISION=Y,v.DEFAULT_REFRESH_INTERVAL=ae,v.INJECT_QUERY_PROVIDER=ie,v.MAX_ANALYTICS_REQUEST_RETRIES=ne,v.MetricCardSize=_,v.MetricCardType=D,v.MetricsConsumer=Er,v.MetricsProvider=He,v.STATUS_CODES_FAILED=$,v.STATUS_CODES_SUCCESS=be,v.calculateChange=ve,v.changePolarity=ge,v.defineIcon=pe,v.metricChange=he,v.mockExploreResponse=Te,v.mockExploreResponseFromCypress=Rr,v.useTrendRange=le,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
|