@kong-ui-public/analytics-metric-provider 9.0.2 → 9.0.3-pr.2274.eabe722e7.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.
@@ -1,4 +1,4 @@
1
- import { ref as H, watchEffect as Me, computed as h, getCurrentInstance as xe, reactive as qe, onMounted as Ue, onUnmounted as ze, watch as Ke, isReadonly as Pe, toRefs as $e, defineComponent as Q, inject as _e, toRef as X, provide as Be, renderSlot as Ie, resolveComponent as Ae, createElementBlock as _, openBlock as T, normalizeClass as U, createElementVNode as M, createCommentVNode as V, createBlock as N, unref as E, resolveDynamicComponent as re, withCtx as ye, createTextVNode as De, toDisplayString as w, createVNode as K, Fragment as he, renderList as Xe, mergeProps as Ge, normalizeProps as je, guardReactiveProps as He } from "vue";
1
+ import { ref as H, watchEffect as Me, computed as h, getCurrentInstance as xe, reactive as qe, onMounted as Ue, onUnmounted as ze, watch as Ke, isReadonly as Pe, toRefs as $e, defineComponent as Q, inject as _e, toRef as X, provide as Be, renderSlot as Ie, resolveComponent as Ae, createElementBlock as _, openBlock as T, normalizeClass as z, createElementVNode as x, createCommentVNode as V, createBlock as N, unref as E, resolveDynamicComponent as re, withCtx as ye, createTextVNode as De, toDisplayString as w, createVNode as P, Fragment as he, renderList as Xe, mergeProps as Ge, normalizeProps as je, guardReactiveProps as He } from "vue";
2
2
  import { stripUnknownFilters as Ye, TimeframeKeys as se, queryableExploreDimensions as Qe, TimePeriods as be, DeltaQueryTime as We, UnaryQueryTime as Je } from "@kong-ui-public/analytics-utilities";
3
3
  import { createI18n as Ze, i18nTComponent as er } from "@kong-ui-public/i18n";
4
4
  import "axios";
@@ -169,7 +169,7 @@ function Er(e) {
169
169
  trendRange: s
170
170
  };
171
171
  }
172
- const z = (e, r, t = L, o) => (o ?? [L]).reduce((n, l) => {
172
+ const K = (e, r, t = L, o) => (o ?? [L]).reduce((n, l) => {
173
173
  const c = e[r][t];
174
174
  return c ? n + (c[l] || 0) : n;
175
175
  }, 0);
@@ -188,7 +188,7 @@ function Cr(e) {
188
188
  let i = 0, s = 0;
189
189
  if (a != null && a.value)
190
190
  try {
191
- i = z(a.value, "current", e.lookupKey, e.sumGroupedValues), s = z(a.value, "previous", e.lookupKey, e.sumGroupedValues);
191
+ i = K(a.value, "current", e.lookupKey, e.sumGroupedValues), s = K(a.value, "previous", e.lookupKey, e.sumGroupedValues);
192
192
  } catch (u) {
193
193
  console.error(
194
194
  "Metric card data doesn't have the expected structure:",
@@ -281,7 +281,7 @@ var b = function() {
281
281
  }
282
282
  return e;
283
283
  }, b.apply(this, arguments);
284
- }, x = function(e, r, t, o) {
284
+ }, q = function(e, r, t, o) {
285
285
  function a(n) {
286
286
  return n instanceof t ? n : new t(function(l) {
287
287
  l(n);
@@ -307,7 +307,7 @@ var b = function() {
307
307
  }
308
308
  i((o = o.apply(e, r || [])).next());
309
309
  });
310
- }, q = function(e, r) {
310
+ }, U = function(e, r) {
311
311
  var t = { label: 0, sent: function() {
312
312
  if (n[0] & 1) throw n[1];
313
313
  return n[1];
@@ -419,9 +419,9 @@ function Lr(e, r, t) {
419
419
  }
420
420
  }
421
421
  var Te = function(e, r, t, o) {
422
- return t === void 0 && (t = Ve), o === void 0 && (o = ke.ttl), x(void 0, void 0, void 0, function() {
422
+ return t === void 0 && (t = Ve), o === void 0 && (o = ke.ttl), q(void 0, void 0, void 0, function() {
423
423
  var a, n, l, c, f, i, s;
424
- return q(this, function(u) {
424
+ return U(this, function(u) {
425
425
  switch (u.label) {
426
426
  case 0:
427
427
  if (!kr(r)) return [3, 5];
@@ -446,7 +446,7 @@ var Te = function(e, r, t, o) {
446
446
  return i = Y.get(e), i && i.data.length && (s = i.data.filter(function(d) {
447
447
  return d.key === e;
448
448
  }), s.forEach(function(d, v) {
449
- typeof f.data < "u" && (d.data = f.data), d.error = f.error, d.isValidating = f.isValidating;
449
+ typeof f.data < "u" && (d.data = f.data), d.error = f.error, d.isValidating = f.isValidating, d.isLoading = f.isValidating;
450
450
  var g = v === s.length - 1;
451
451
  g || delete s[v];
452
452
  }), s = s.filter(Boolean)), [2, f];
@@ -469,24 +469,25 @@ function Vr() {
469
469
  data: void 0,
470
470
  error: void 0,
471
471
  isValidating: !0,
472
+ isLoading: !0,
472
473
  key: null
473
474
  }));
474
475
  var g = function(p, y) {
475
- return x(e, void 0, void 0, function() {
476
- var I, S, A, P, W, de, J, fe = this;
477
- return q(this, function(Z) {
476
+ return q(e, void 0, void 0, function() {
477
+ var I, S, A, M, W, de, J, fe = this;
478
+ return U(this, function(Z) {
478
479
  switch (Z.label) {
479
480
  case 0:
480
- return I = v.data === void 0, S = d.value, S ? (A = n.cache.get(S), P = A && A.data, v.isValidating = !0, P && (v.data = P.data, v.error = P.error), W = p || a, !W || !n.isDocumentVisible() && !I || (y == null ? void 0 : y.forceRevalidate) !== void 0 && !(y != null && y.forceRevalidate) ? (v.isValidating = !1, [
481
+ return I = v.data === void 0, S = d.value, S ? (A = n.cache.get(S), M = A && A.data, v.isValidating = !0, v.isLoading = !M, M && (v.data = M.data, v.error = M.error), W = p || a, !W || !n.isDocumentVisible() && !I || (y == null ? void 0 : y.forceRevalidate) !== void 0 && !(y != null && y.forceRevalidate) ? (v.isValidating = !1, v.isLoading = !1, [
481
482
  2
482
483
  /*return*/
483
- ]) : A && (de = !!(Date.now() - A.createdAt >= n.dedupingInterval || y != null && y.forceRevalidate), !de) ? (v.isValidating = !1, [
484
+ ]) : A && (de = !!(Date.now() - A.createdAt >= n.dedupingInterval || y != null && y.forceRevalidate), !de) ? (v.isValidating = !1, v.isLoading = !1, [
484
485
  2
485
486
  /*return*/
486
487
  ]) : (J = function() {
487
- return x(fe, void 0, void 0, function() {
488
+ return q(fe, void 0, void 0, function() {
488
489
  var k, ve, ee, me;
489
- return q(this, function(B) {
490
+ return U(this, function(B) {
490
491
  switch (B.label) {
491
492
  case 0:
492
493
  return k = ie.get(S), k ? [3, 2] : (ve = Array.isArray(S) ? S : [S], ee = W.apply(void 0, wr([], br(ve), !1)), ie.set(S, ee, n.dedupingInterval), [4, Te(S, ee, n.cache, u)]);
@@ -497,16 +498,16 @@ function Vr() {
497
498
  case 3:
498
499
  B.sent(), B.label = 4;
499
500
  case 4:
500
- return v.isValidating = !1, ie.delete(S), v.error !== void 0 && (me = !l && n.shouldRetryOnError && (y ? y.shouldRetryOnError : !0), me && Lr(g, y ? y.errorRetryCount : 1, n)), [
501
+ return v.isValidating = !1, v.isLoading = !1, ie.delete(S), v.error !== void 0 && (me = !l && n.shouldRetryOnError && (y ? y.shouldRetryOnError : !0), me && Lr(g, y ? y.errorRetryCount : 1, n)), [
501
502
  2
502
503
  /*return*/
503
504
  ];
504
505
  }
505
506
  });
506
507
  });
507
- }, P && n.revalidateDebounce ? (setTimeout(function() {
508
- return x(fe, void 0, void 0, function() {
509
- return q(this, function(k) {
508
+ }, M && n.revalidateDebounce ? (setTimeout(function() {
509
+ return q(fe, void 0, void 0, function() {
510
+ return U(this, function(k) {
510
511
  switch (k.label) {
511
512
  case 0:
512
513
  return l ? [3, 2] : [4, J()];
@@ -537,16 +538,16 @@ function Vr() {
537
538
  });
538
539
  });
539
540
  }, R = function() {
540
- return x(e, void 0, void 0, function() {
541
- return q(this, function(p) {
541
+ return q(e, void 0, void 0, function() {
542
+ return U(this, function(p) {
542
543
  return [2, g(null, { shouldRetryOnError: !1 })];
543
544
  });
544
545
  });
545
546
  }, m = null;
546
547
  Ue(function() {
547
548
  var p = function() {
548
- return x(e, void 0, void 0, function() {
549
- return q(this, function(y) {
549
+ return q(e, void 0, void 0, function() {
550
+ return U(this, function(y) {
550
551
  switch (y.label) {
551
552
  case 0:
552
553
  return !v.error && n.isOnline() ? [4, g()] : [3, 2];
@@ -876,10 +877,10 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
876
877
  return (c, f) => {
877
878
  const i = Ae("KTooltip");
878
879
  return T(), _("div", {
879
- class: U(["metricscard", e.cardSize])
880
+ class: z(["metricscard", e.cardSize])
880
881
  }, [
881
- M("div", {
882
- class: U(["metricscard-title", e.cardSize])
882
+ x("div", {
883
+ class: z(["metricscard-title", e.cardSize])
883
884
  }, [
884
885
  E(l) ? V("", !0) : (T(), N(re(E(r).get(e.cardType)), {
885
886
  key: 0,
@@ -900,7 +901,7 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
900
901
  text: e.tooltip
901
902
  }, {
902
903
  default: ye(() => [
903
- K(E(ur), {
904
+ P(E(ur), {
904
905
  color: `var(--kui-color-text-neutral, ${E(oe)})`,
905
906
  size: E(G)
906
907
  }, null, 8, ["color", "size"])
@@ -909,23 +910,23 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
909
910
  }, 8, ["text"])) : V("", !0)
910
911
  ], 2),
911
912
  e.description && E(n) ? (T(), _("div", Gr, [
912
- M("span", null, w(e.description), 1)
913
+ x("span", null, w(e.description), 1)
913
914
  ])) : V("", !0),
914
- M("div", jr, [
915
+ x("div", jr, [
915
916
  e.hasError ? (T(), _("div", Hr, [
916
- K(E(Oe), {
917
+ P(E(Oe), {
917
918
  color: `var(--kui-color-text-neutral, ${E(oe)})`,
918
919
  size: E(Xr)
919
920
  }, null, 8, ["color", "size"]),
920
- M("div", null, " " + w(e.errorMessage), 1)
921
+ x("div", null, " " + w(e.errorMessage), 1)
921
922
  ])) : (T(), _("div", {
922
923
  key: 1,
923
- class: U(["metricscard-value", e.cardSize]),
924
+ class: z(["metricscard-value", e.cardSize]),
924
925
  "data-testid": "metric-value"
925
926
  }, w(e.metricValue), 3)),
926
927
  E(n) ? (T(), _("div", Yr, [
927
- M("div", {
928
- class: U(["metricscard-trend-change", a(e.changePolarity)]),
928
+ x("div", {
929
+ class: z(["metricscard-trend-change", a(e.changePolarity)]),
929
930
  "data-testid": "metric-trend-parent"
930
931
  }, [
931
932
  e.changePolarity !== 0 ? (T(), N(re(e.trendIcon), {
@@ -937,7 +938,7 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
937
938
  color: `var(--kui-color-text-neutral-strong, ${E(Ce)})`,
938
939
  size: E(G)
939
940
  }, null, 8, ["color", "size"])),
940
- M("div", Qr, w(e.metricChange), 1)
941
+ x("div", Qr, w(e.metricChange), 1)
941
942
  ], 2),
942
943
  e.trendRange ? (T(), _("div", Wr, w(e.trendRange), 1)) : V("", !0)
943
944
  ])) : V("", !0)
@@ -954,8 +955,8 @@ const le = 2, Ee = le + 2, Ur = (e, r, t = !1) => {
954
955
  function tt(e, r) {
955
956
  const t = Ae("KSkeletonBox");
956
957
  return T(), _("div", rt, [
957
- K(t, { width: "100" }),
958
- K(t, { width: "75" })
958
+ P(t, { width: "100" }),
959
+ P(t, { width: "75" })
959
960
  ]);
960
961
  }
961
962
  const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-50eab68c"]]), at = {
@@ -1028,20 +1029,20 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-50eab68
1028
1029
  };
1029
1030
  };
1030
1031
  return (a, n) => (T(), _("div", {
1031
- class: U(["kong-ui-public-metric-card-container", e.cardSize])
1032
+ class: z(["kong-ui-public-metric-card-container", e.cardSize])
1032
1033
  }, [
1033
1034
  r.containerTitle || r.containerDescription ? (T(), _("div", at, [
1034
1035
  De(w(r.containerTitle) + " ", 1),
1035
1036
  r.containerDescription ? (T(), _("div", it, w(r.containerDescription), 1)) : V("", !0)
1036
1037
  ])) : V("", !0),
1037
1038
  t.value ? (T(), _("div", ot, [
1038
- K(E(Oe), { class: "error-display-icon" }),
1039
+ P(E(Oe), { class: "error-display-icon" }),
1039
1040
  e.errorMessage ? (T(), _("div", st, w(e.errorMessage), 1)) : V("", !0)
1040
1041
  ])) : (T(), _("div", ut, [
1041
1042
  (T(!0), _(he, null, Xe(e.cards, (l, c) => (T(), _(he, null, [
1042
1043
  e.loading ? (T(), N(nt, {
1043
1044
  key: `skeleton-${c}`,
1044
- class: U(e.cardSize === E(D).Small ? "loading-tabs-small" : "loading-tabs-large")
1045
+ class: z(e.cardSize === E(D).Small ? "loading-tabs-small" : "loading-tabs-large")
1045
1046
  }, null, 8, ["class"])) : (T(), N(Zr, Ge({
1046
1047
  key: c,
1047
1048
  ref_for: !0
@@ -1080,7 +1081,7 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-50eab68
1080
1081
  sumGroupedValues: $,
1081
1082
  trendRange: o.trendRange
1082
1083
  }), f = (m) => `${m.toFixed(le)}%`, i = h(() => {
1083
- const m = o.mapped.value, C = z(m, "current", r.lookupKey, ge), p = z(m, "current", r.lookupKey, $), y = C / p * 100 || 0, I = z(m, "previous", r.lookupKey, ge), S = z(m, "previous", r.lookupKey, $), A = I / S * 100 || 0;
1084
+ const m = o.mapped.value, C = K(m, "current", r.lookupKey, ge), p = K(m, "current", r.lookupKey, $), y = C / p * 100 || 0, I = K(m, "previous", r.lookupKey, ge), S = K(m, "previous", r.lookupKey, $), A = I / S * 100 || 0;
1084
1085
  return {
1085
1086
  cardType: O.ERROR_RATE,
1086
1087
  hasError: o.hasError.value,
@@ -1121,7 +1122,7 @@ const nt = /* @__PURE__ */ ce(et, [["render", tt], ["__scopeId", "data-v-50eab68
1121
1122
  latencyFormatted: s(u.value.currentValue)
1122
1123
  }));
1123
1124
  return (m, C) => Ie(m.$slots, "default", { cardValues: R.value }, () => [
1124
- K(ct, je(He(g.value)), null, 16)
1125
+ P(ct, je(He(g.value)), null, 16)
1125
1126
  ]);
1126
1127
  }
1127
1128
  }), j = (e) => new Date(e), Et = (e, r) => {
@@ -1 +1 @@
1
- (function(R,r){typeof exports=="object"&&typeof module<"u"?r(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"],r):(R=typeof globalThis<"u"?globalThis:R||self,r(R["kong-ui-public-vitals-metric-provider"]={},R.Vue,R["kong-ui-public-analytics-utilities"],R["kong-ui-public-i18n"],R.axios,R["kong-ui-public-analytics-config-store"],R.KongIcons))})(this,function(R,r,D,re,Rr,Te,_){"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:"vs previous {numDays, plural, =1 {day} other {# days}}","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,w=["1XX","2XX","3XX","4XX","5XX"],K=["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 t,n,s,i,a;return e?!!((t=Object.keys(e))!=null&&t.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=r.ref({}),t,n,s=Ie){const i=r.ref("PENDING");return r.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&&t.value){i.value="STALE_IF_ERROR";return}if(e.value===void 0&&!t.value){i.value="PENDING";return}if(e.value&&!t.value&&a){i.value="SUCCESS_HAS_DATA";return}if(e.value&&!t.value){i.value="SUCCESS";return}e.value===void 0&&t&&(i.value="ERROR")}),{state:i,swrvState:ie}}const V=Symbol("default"),U="status_code_grouped",oe=(e,t,n,s,i)=>{e[t][n]||(e[t][n]={}),e[t][n][s]=i};function Ae(e,t){var d;const n=((d=e.meta.metric_names)==null?void 0:d[0])||"",s=e.meta.start_ms,i=Object.keys(e.meta.display||{}),a=!!i.find(m=>m===U),u=i.find(m=>m!==U);return i.length>2||i.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",i),{previous:{[V]:{[V]:0}},current:{[V]:{[V]:0}}}):e.data.reduce((m,o)=>{const c=o.event[n],l=u?o.event[u]:V,f=a?o.event[U]:V;return new Date(o.timestamp).getTime()===s&&t?oe(m,"previous",l,f,c):oe(m,"current",l,f,c),m},{previous:{},current:{}})}function De(e){e.queryReady===void 0&&(e.queryReady=r.computed(()=>!0));const{i18n:t}=N.useI18n(),n=r.computed(()=>{var l,f;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,...(f=e.filter.value)!=null&&f.length?{filters:e.filter.value}:{},time_range:e.timeframe.value.v4Query(e.tz.value)}}),s=r.computed(()=>{var f,y,p,E;if(!((f=e.queryReady)!=null&&f.value))return null;const l=(y=e.filter)!=null&&y.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${e.timeframe.value.cacheKey()}-${(p=e.dimensions)==null?void 0:p.join("-")}-${(E=e.metrics.value)==null?void 0:E.join("-")}-${l}-${e.refreshCounter.value}`}),{response:i,error:a,isValidating:u}=N.useRequest(()=>s.value,()=>e.queryFn({datasource:e.datasource.value,query:n.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:te}),{state:d,swrvState:m}=ke(i,a,u),o=r.computed(()=>{var l,f,y,p,E,h,T;return!((f=(l=i.value)==null?void 0:l.data)!=null&&f.length)||!((p=(y=i.value)==null?void 0:y.meta)!=null&&p.display)||!((T=(h=(E=i.value)==null?void 0:E.meta)==null?void 0:h.metric_names)!=null&&T.length)?{current:{},previous:{}}:Ae(i.value,e.withTrend.value)}),c=r.computed(()=>{var l,f;if(e.timeframe.value.key==="custom"){if(!((f=(l=i.value)==null?void 0:l.meta)!=null&&f.start_ms))return"";const{start_ms:y,end_ms:p}=i.value.meta;let E=(p-y)/(1e3*60*60*24);return e.withTrend.value&&(E/=2),t.t("trendRange.custom",{numDays:Math.round(E)})}else return e.withTrend.value?t.t(`trendRange.${e.timeframe.value.key}`):""});return{isLoading:r.computed(()=>m.PENDING===d.value),hasError:r.computed(()=>m.ERROR===d.value),raw:i,mapped:o,trendRange:c}}const L=(e,t,n=V,s)=>(s??[V]).reduce((a,u)=>{const d=e[t][n];return d?a+(d[u]||0):a},0);function be(e){const{cardType:t,title:n,description:s,record:i,hasError:a,increaseIsBad:u,formatValueFn:d,trendRange:m}=e;return r.computed(()=>{let o=0,c=0;if(i!=null&&i.value)try{o=L(i.value,"current",e.lookupKey,e.sumGroupedValues),c=L(i.value,"previous",e.lookupKey,e.sumGroupedValues)}catch(l){console.error("Metric card data doesn't have the expected structure:",l)}return{cardType:t,hasError:a.value,currentValue:o,previousValue:c,title:n.value,description:s,increaseIsBad:!!u,formatValueFn:d,trendRange:m==null?void 0:m.value}})}var $=new WeakMap,se=0;function Ve(e){if(!e.length)return"";for(var t="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]):$.has(e[n])?s=$.get(e[n]):(s=se,$.set(e[n],se++)),t+="@"+s}return t}function Ne(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(t){t===void 0&&(t=0),this.items=new Map,this.ttl=t}return e.prototype.serializeKey=function(t){return Ne(t)},e.prototype.get=function(t){var n=this.serializeKey(t);return this.items.get(n)},e.prototype.set=function(t,n,s){var i=this.serializeKey(t),a=s||this.ttl,u=Date.now(),d={data:n,createdAt:u,expiresAt:a?u+a:1/0};this.dispatchExpire(a,d,i),this.items.set(i,d)},e.prototype.dispatchExpire=function(t,n,s){var i=this;t&&setTimeout(function(){var a=Date.now(),u=a>=n.expiresAt;u&&i.delete(s)},t)},e.prototype.delete=function(t){this.items.delete(t)},e}();function Oe(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function we(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var Le=function(e){return fetch(e).then(function(t){return t.json()})};const G={isOnline:Oe,isDocumentVisible:we,fetcher:Le};var b=function(){return b=Object.assign||function(e){for(var t,n=1,s=arguments.length;n<s;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},b.apply(this,arguments)},B=function(e,t,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 d(c){try{o(s.next(c))}catch(l){u(l)}}function m(c){try{o(s.throw(c))}catch(l){u(l)}}function o(c){c.done?a(c.value):i(c.value).then(d,m)}o((s=s.apply(e,t||[])).next())})},F=function(e,t){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:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(o){return function(c){return m([o,c])}}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=t.call(e,n)}catch(c){o=[6,c],i=0}finally{s=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Be=function(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var s=n.call(e),i,a=[],u;try{for(;(t===void 0||t-- >0)&&!(i=s.next()).done;)a.push(i.value)}catch(d){u={error:d}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(u)throw u.error}}return a},Fe=function(e,t,n){if(n||arguments.length===2)for(var s=0,i=t.length,a;s<i;s++)(a||!(s in t))&&(a||(a=Array.prototype.slice.call(t,0,s)),a[s]=t[s]);return e.concat(a||Array.prototype.slice.call(t))},ce=new X,q=new X,j=new X,le={cache:ce,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 Me(e,t,n){var s=q.get(e);if(s)s.data.push(t);else{var i=5e3;q.set(e,[t],n>0?n+i:n)}}function qe(e,t,n){if(n.isDocumentVisible()&&!(n.errorRetryCount!==void 0&&t>n.errorRetryCount)){var s=Math.min(t||0,n.errorRetryCount),i=s*n.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:s+1,shouldRetryOnError:!0})},i)}}var ue=function(e,t,n,s){return n===void 0&&(n=ce),s===void 0&&(s=le.ttl),B(void 0,void 0,void 0,function(){var i,a,u,d,m,o,c;return F(this,function(l){switch(l.label){case 0:if(!ze(t))return[3,5];l.label=1;case 1:return l.trys.push([1,3,,4]),[4,t];case 2:return i=l.sent(),[3,4];case 3:return d=l.sent(),a=d,[3,4];case 4:return[3,6];case 5:i=t,l.label=6;case 6:if(u=!1,m={data:i,error:a,isValidating:u},typeof i<"u")try{n.set(e,m,s)}catch(f){console.error("swrv(mutate): failed to set cache",f)}return o=q.get(e),o&&o.data.length&&(c=o.data.filter(function(f){return f.key===e}),c.forEach(function(f,y){typeof m.data<"u"&&(f.data=m.data),f.error=m.error,f.isValidating=m.isValidating;var p=y===c.length-1;p||delete c[y]}),c=c.filter(Boolean)),[2,m]}})})};function xe(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var s,i,a=b({},le),u=!1,d=!1,m=r.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 c=(o==null?void 0:o.$isServer)||!1;t.length>=1&&(s=t[0]),t.length>=2&&(i=t[1]),t.length>2&&(a=b(b({},a),t[2]));var l=c?a.serverTTL:a.ttl,f=typeof s=="function"?s:r.ref(s);typeof i>"u"&&(i=a.fetcher);var y=null;y||(y=r.reactive({data:void 0,error:void 0,isValidating:!0,key:null}));var p=function(v,g){return B(e,void 0,void 0,function(){var S,C,A,M,W,pe,J,ve=this;return F(this,function(Z){switch(Z.label){case 0:return S=y.data===void 0,C=f.value,C?(A=a.cache.get(C),M=A&&A.data,y.isValidating=!0,M&&(y.data=M.data,y.error=M.error),W=v||i,!W||!a.isDocumentVisible()&&!S||(g==null?void 0:g.forceRevalidate)!==void 0&&!(g!=null&&g.forceRevalidate)?(y.isValidating=!1,[2]):A&&(pe=!!(Date.now()-A.createdAt>=a.dedupingInterval||g!=null&&g.forceRevalidate),!pe)?(y.isValidating=!1,[2]):(J=function(){return B(ve,void 0,void 0,function(){var O,Ee,ee,Re;return F(this,function(P){switch(P.label){case 0:return O=j.get(C),O?[3,2]:(Ee=Array.isArray(C)?C:[C],ee=W.apply(void 0,Fe([],Be(Ee),!1)),j.set(C,ee,a.dedupingInterval),[4,ue(C,ee,a.cache,l)]);case 1:return P.sent(),[3,4];case 2:return[4,ue(C,O.data,a.cache,l)];case 3:P.sent(),P.label=4;case 4:return y.isValidating=!1,j.delete(C),y.error!==void 0&&(Re=!u&&a.shouldRetryOnError&&(g?g.shouldRetryOnError:!0),Re&&qe(p,g?g.errorRetryCount:1,a)),[2]}})})},M&&a.revalidateDebounce?(setTimeout(function(){return B(ve,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]}})})},E=function(){return B(e,void 0,void 0,function(){return F(this,function(v){return[2,p(null,{shouldRetryOnError:!1})]})})},h=null;r.onMounted(function(){var v=function(){return B(e,void 0,void 0,function(){return F(this,function(g){switch(g.label){case 0:return!y.error&&a.isOnline()?[4,p()]:[3,2];case 1:return g.sent(),[3,3];case 2:h&&clearTimeout(h),g.label=3;case 3:return a.refreshInterval&&!u&&(h=setTimeout(v,a.refreshInterval)),[2]}})})};a.refreshInterval&&(h=setTimeout(v,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",E,!1),window.addEventListener("focus",E,!1))}),r.onUnmounted(function(){u=!0,h&&clearTimeout(h),a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",E,!1),window.removeEventListener("focus",E,!1));var v=q.get(f.value);v&&(v.data=v.data.filter(function(g){return g!==y}))});try{r.watch(f,function(v){r.isReadonly(f)||(f.value=v),y.key=v,y.isValidating=!!v,Me(f.value,y,l),!c&&!d&&f.value&&p(),d=!1},{immediate:!0})}catch{}var T=b(b({},r.toRefs(y)),{mutate:function(v,g){return p(v,b(b({},g),{forceRevalidate:!0}))}});return T}function ze(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function Pe(e,t,n){const{data:s,error:i,isValidating:a,mutate:u}=xe(e,t,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...n});return{data:r.computed(()=>s.value),response:s,error:i,isValidating:a,revalidate:u}}const N={useI18n:Se,useMetricCardBuilder:be,useMetricFetcher:De,useRequest:Pe},de=Symbol("METRICS_PROVIDER_KEY"),Ke=e=>{const{datasource:t,dimension:n,dimensionFilterValue:s,additionalFilter:i,queryReady:a,timeframe:u,tz:d,hasTrendAccess:m,refreshInterval:o,abortController:c,queryFn:l,averageLatencies:f}=e;if(s&&!n)throw new Error("Must provide a dimension if filtering by a value");const y=!!(n&&s),p=!!(n&&!s),E=r.computed(()=>{const S=[];return y&&S.push({field:n,operator:"in",value:[s]}),i.value&&S.push(...D.stripUnknownFilters(t.value,i.value)),S}),h={datasource:t,metrics:r.ref(["request_count"]),dimensions:[...n&&!y?[n]:[],"status_code_grouped"],filter:E,queryReady:a,timeframe:u,tz:d,withTrend:r.computed(()=>m.value&&!p),refreshInterval:o,queryFn:l,abortController:c,refreshCounter:e.refreshCounter},T={datasource:t,metrics:r.computed(()=>[f.value?"response_latency_average":"response_latency_p99"]),...n&&!y?{dimensions:[n]}:{},filter:E,queryReady:a,timeframe:u,tz:d,withTrend:r.computed(()=>m.value&&!p),refreshInterval:o,queryFn:l,abortController:c,refreshCounter:e.refreshCounter},v=N.useMetricFetcher(h),g=N.useMetricFetcher(T);return{trafficData:v,latencyData:g}},Ue=r.defineComponent({__name:"MetricsProvider",props:{datasource:{default:void 0},maxTimeframe:{default:D.TimeframeKeys.THIRTY_DAY},overrideTimeframe:{default:void 0},tz:{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 t=e;if(t.dimension&&D.queryableExploreDimensions.findIndex(y=>y===t.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${t.dimension}`);const n=r.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=r.computed(()=>!0),u=r.computed(()=>!i.loading&&t.queryReady),d=r.computed(()=>t.tz?t.tz:new Intl.DateTimeFormat().resolvedOptions().timeZone),m=r.computed(()=>t.datasource?t.datasource:"basic"),o=r.computed(()=>t.overrideTimeframe||D.TimePeriods.get(D.TimeframeKeys.SEVEN_DAY)),c=r.computed(()=>!t.percentileLatency),{trafficData:l,latencyData:f}=Ke({datasource:m,dimension:t.dimension,dimensionFilterValue:t.filterValue,additionalFilter:r.toRef(t,"additionalFilter"),queryReady:u,timeframe:o,tz:d,hasTrendAccess:a,refreshInterval:t.refreshInterval,queryFn:s,averageLatencies:c,abortController:t.abortController,refreshCounter:r.toRef(t,"refreshCounter")});return r.provide(de,{data:{traffic:l,latency:f},description:r.toRef(()=>t.description),containerTitle:r.toRef(()=>t.containerTitle),hasTrendAccess:a,longCardTitles:t.longCardTitles,averageLatencies:c}),(y,p)=>r.renderSlot(y.$slots,"default",{hasTrendAccess:a.value,timeframe:o.value})}});function $e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fe={exports:{}};(function(e){(function(){function t(o,c){if(c.separator===!1||o<1e3)return o.toString();var l=typeof c.separator=="string"?c.separator:",",f=[],y=Math.round(o).toString().split("");return y.reverse().forEach(function(p,E){E&&E%3===0&&f.push(l),f.push(p)}),f.reverse().join("")}function n(o,c,l){var f=o/c,y=l.round?"round":"floor";return l.decimal===!1?(o=Math[y](f),o.toString()):(l.precision?o=f:o=f<10?Math[y](f*10)/10:Math[y](f),o=o.toString(),typeof l.decimal=="string"&&(o=o.replace(".",l.decimal)),o)}var s=1e3,i=1e4,a=1e6,u=1e9,d=1e12;function m(o,c){var l;c=c||{};var f=o<0;f&&(o=Math.abs(o)),c.precision&&(o=parseFloat(o.toPrecision(c.precision)));var y=c.min10k?i:s;return o<y||c.precision&&c.precision>Math.log10(o)?l=t(n(o,1,c),c):o<a?l=n(o,s,c)+"k":o<u?l=n(o,a,c)+"m":o<d?l=t(n(o,u,c),c)+"b":l=t(n(o,d,c),c)+"t",f&&(l="-"+l),c.capital&&(l=l.toUpperCase()),c.prefix&&(l=c.prefix+l),c.suffix&&(l=l+c.suffix),l}m.addCommas=t,e.exports=m})()})(fe);var Xe=fe.exports;const Ge=$e(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 Y=2,me=Y+2,je=(e,t,n=!1)=>{let s=!t||Number(e.toFixed(me))===0?0:Number(e.toFixed(me))>0?1:-1;return n&&(s*=-1),s},Ye=(e,t,n)=>t?`${Math.abs(e*100).toFixed(Y)}%`:n,He=(e,t)=>t===0?0:e/t-1,Qe=(e,t=!1)=>(t&&(e*=-1),e>0?_.TrendUpIcon:e<0?_.TrendDownIcon:_.IndeterminateSmallIcon),We="#ad000e",H="#6c7489",ye="#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=r.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:_.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 t=new Map([[k.GENERIC_COUNT,_.VitalsIcon],[k.TRAFFIC,_.CloudUploadIcon],[k.ERROR_RATE,_.WarningOutlineIcon],[k.LATENCY,_.ResponseIcon]]),n=e,s=d=>{const m={red:`var(--kui-color-text-danger-strong, ${We})`,green:`var(--kui-color-text-success, ${Je})`,grey:`var(--kui-color-text-neutral-strong, ${ye})`};return d>0?m.green:d<0?m.red:m.grey},i=d=>d>0?"positive":d<0?"negative":"neutral",a=[I.Medium,I.Large].includes(n.cardSize),u=[I.Small].includes(n.cardSize);return(d,m)=>{const o=r.resolveComponent("KTooltip");return r.openBlock(),r.createElementBlock("div",{class:r.normalizeClass(["metricscard",e.cardSize])},[r.createElementVNode("div",{class:r.normalizeClass(["metricscard-title",e.cardSize])},[r.unref(u)?r.createCommentVNode("",!0):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(r.unref(t).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(x)},null,8,["color","size"])),(r.openBlock(),r.createBlock(r.resolveDynamicComponent(e.titleTag),null,{default:r.withCtx(()=>[r.createTextVNode(r.toDisplayString(e.title),1)]),_:1})),e.tooltip?(r.openBlock(),r.createBlock(o,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:r.withCtx(()=>[r.createVNode(r.unref(_.InfoIcon),{color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(x)},null,8,["color","size"])]),_:1},8,["text"])):r.createCommentVNode("",!0)],2),e.description&&r.unref(a)?(r.openBlock(),r.createElementBlock("div",er,[r.createElementVNode("span",null,r.toDisplayString(e.description),1)])):r.createCommentVNode("",!0),r.createElementVNode("div",rr,[e.hasError?(r.openBlock(),r.createElementBlock("div",tr,[r.createVNode(r.unref(_.WarningIcon),{color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(Ze)},null,8,["color","size"]),r.createElementVNode("div",null," "+r.toDisplayString(e.errorMessage),1)])):(r.openBlock(),r.createElementBlock("div",{key:1,class:r.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},r.toDisplayString(e.metricValue),3)),r.unref(a)?(r.openBlock(),r.createElementBlock("div",nr,[r.createElementVNode("div",{class:r.normalizeClass(["metricscard-trend-change",i(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(r.openBlock(),r.createBlock(r.resolveDynamicComponent(e.trendIcon),{key:0,color:s(e.changePolarity),size:r.unref(x)},null,8,["color","size"])):(r.openBlock(),r.createBlock(r.unref(_.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${r.unref(ye)})`,size:r.unref(x)},null,8,["color","size"])),r.createElementVNode("div",ar,r.toDisplayString(e.metricChange),1)],2),e.trendRange?(r.openBlock(),r.createElementBlock("div",ir,r.toDisplayString(e.trendRange),1)):r.createCommentVNode("",!0)])):r.createCommentVNode("",!0)])],2)}}}),Q=(e,t)=>{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},sr=Q(or,[["__scopeId","data-v-b1513f6f"]]),cr={},lr={class:"loading-tabs"};function ur(e,t){const n=r.resolveComponent("KSkeletonBox");return r.openBlock(),r.createElementBlock("div",lr,[r.createVNode(n,{width:"100"}),r.createVNode(n,{width:"75"})])}const dr=Q(cr,[["render",ur],["__scopeId","data-v-50eab68c"]]),fr={key:0,class:"container-title"},mr={key:0,class:"container-description"},yr={key:1,class:"error-display"},hr={key:0,class:"error-display-message"},gr={key:2,class:"cards-wrapper"},pr=Q(r.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 t=e,n=r.computed(()=>t.cards.every(i=>(i==null?void 0:i.hasError)===!0)),s=i=>{const a=He(i.currentValue,i.previousValue)||0,u=je(a,t.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):Ye(a,t.hasTrendAccess,t.fallbackDisplayText),changePolarity:u,trendIcon:Qe(u,i.increaseIsBad),cardSize:t.cardSize,hasContainerTitle:!!t.containerTitle}};return(i,a)=>(r.openBlock(),r.createElementBlock("div",{class:r.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[t.containerTitle||t.containerDescription?(r.openBlock(),r.createElementBlock("div",fr,[r.createTextVNode(r.toDisplayString(t.containerTitle)+" ",1),t.containerDescription?(r.openBlock(),r.createElementBlock("div",mr,r.toDisplayString(t.containerDescription),1)):r.createCommentVNode("",!0)])):r.createCommentVNode("",!0),n.value?(r.openBlock(),r.createElementBlock("div",yr,[r.createVNode(r.unref(_.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(r.openBlock(),r.createElementBlock("div",hr,r.toDisplayString(e.errorMessage),1)):r.createCommentVNode("",!0)])):(r.openBlock(),r.createElementBlock("div",gr,[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(e.cards,(u,d)=>(r.openBlock(),r.createElementBlock(r.Fragment,null,[e.loading?(r.openBlock(),r.createBlock(dr,{key:`skeleton-${d}`,class:r.normalizeClass(e.cardSize===r.unref(I).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])):(r.openBlock(),r.createBlock(sr,r.mergeProps({key:d,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-eac0ca04"]]),vr=r.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:I.Large},cardToDisplay:{default:void 0}},setup(e){const t=e,n=r.inject(de);if(!n)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:s,latency:i}=n.data,{i18n:a}=N.useI18n(),u=r.computed(()=>n.containerTitle.value?I.Medium:t.cardSize),d=N.useMetricCardBuilder({cardType:k.TRAFFIC,title:r.computed(()=>n.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:s.mapped,hasError:s.hasError,lookupKey:t.lookupKey,sumGroupedValues:w,trendRange:s.trendRange}),m=h=>`${h.toFixed(Y)}%`,o=r.computed(()=>{const h=s.mapped.value,T=L(h,"current",t.lookupKey,K),v=L(h,"current",t.lookupKey,w),g=T/v*100||0,S=L(h,"previous",t.lookupKey,K),C=L(h,"previous",t.lookupKey,w),A=S/C*100||0;return{cardType:k.ERROR_RATE,hasError:s.hasError.value,currentValue:g,previousValue:A,formatValueFn:m,title:n.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:s.trendRange.value}}),c=h=>`${h}ms`,l=N.useMetricCardBuilder({cardType:k.LATENCY,title:r.computed(()=>{const{longCardTitles:h,averageLatencies:T}=n,v=T.value?"averageLatency":"p99Latency";return h?a.t(`metricCard.long.${v}`):u.value===I.Small?a.t(`metricCard.small.${v}`):a.t(`metricCard.short.${v}`)}),hasError:i.hasError,record:i.mapped,lookupKey:t.lookupKey,increaseIsBad:!0,formatValueFn:c,trendRange:i.trendRange}),f=r.computed(()=>t.cardToDisplay==="TRAFFIC"?[d.value]:t.cardToDisplay==="ERROR_RATE"?[o.value]:t.cardToDisplay==="LATENCY"?[l.value]:[d.value,o.value,l.value]),y=r.computed(()=>t.cardToDisplay==="TRAFFIC"||t.cardToDisplay==="ERROR_RATE"?s.isLoading.value:t.cardToDisplay==="LATENCY"?i.isLoading.value:s.isLoading.value||i.isLoading.value),p=r.computed(()=>({cards:f.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})),E=r.computed(()=>({loading:p.value.loading,trafficCard:d.value,errorRateCard:o.value,latencyCard:l.value,errorRateFormatted:m(o.value.currentValue),latencyFormatted:c(l.value.currentValue)}));return(h,T)=>r.renderSlot(h.$slots,"default",{cardValues:E.value},()=>[r.createVNode(pr,r.normalizeProps(r.guardReactiveProps(p.value)),null,16)])}}),z=e=>new Date(e),Er=(e,t)=>{const n=e.body;e.reply({statusCode:200,body:ge(n,t)})},he=e=>e.reduce((t,n)=>(t[n]={name:n},t),{}),ge=(e,t)=>{var p,E;const n=D.TimePeriods.get(D.TimeframeKeys.ONE_DAY),s=e.granularity==="trend"?new D.DeltaQueryTime(n):new D.UnaryQueryTime(n),i=s.endMs(),a=s.startMs(),u=s.granularityMs(),d=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 m=(e.dimensions??[]).find(h=>h!=="time"),o=(t==null?void 0:t.dimensionNames)??[],c=Math.max(o.length,1),l=e.metrics||[],f=[];for(let h=0;h<d;h++)for(let T=0;T<c;T++){const v=m?{[m]:o[T]}:{};(p=e.dimensions)!=null&&p.includes("status_code_grouped")?w.forEach(g=>{const S=l.reduce((C,A)=>((t==null?void 0:t.deterministic)??!0?C[A]=(d-h)*1e3+100*T+1:C[A]=Math.round(Math.random()*1e3),C),{...v,status_code_grouped:g});f.push({version:"v1",timestamp:h===0?z(a).toISOString():z(a+u).toISOString(),event:S})}):f.push({version:"v1",timestamp:h===0?z(a).toISOString():z(a+u).toISOString(),event:l.reduce((g,S)=>((t==null?void 0:t.deterministic)??!0?g[S]=(d-h)*1e3+100*T+1:g[S]=Math.round(Math.random()*1e3),g),{...v})})}const y={start_ms:a,end_ms:i,start:new Date(a).toISOString(),end:new Date(i).toISOString(),granularity_ms:u,display:m?{[m]:he(o),...(E=e.dimensions)!=null&&E.includes("status_code_grouped")?{status_code_grouped:he(w)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:f,meta:y}};R.ALL_STATUS_CODE_GROUPS=w,R.DEFAULT_REFRESH_INTERVAL=ne,R.INJECT_QUERY_PROVIDER=ae,R.MAX_ANALYTICS_REQUEST_RETRIES=te,R.MetricCardSize=I,R.MetricCardType=k,R.MetricsConsumer=vr,R.MetricsProvider=Ue,R.STATUS_CODES_FAILED=K,R.STATUS_CODES_SUCCESS=_e,R.mockExploreResponse=ge,R.mockExploreResponseFromCypress=Er,Object.defineProperty(R,Symbol.toStringTag,{value:"Module"})});
1
+ (function(R,r){typeof exports=="object"&&typeof module<"u"?r(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"],r):(R=typeof globalThis<"u"?globalThis:R||self,r(R["kong-ui-public-vitals-metric-provider"]={},R.Vue,R["kong-ui-public-analytics-utilities"],R["kong-ui-public-i18n"],R.axios,R["kong-ui-public-analytics-config-store"],R.KongIcons))})(this,function(R,r,D,re,Rr,Te,_){"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:"vs previous {numDays, plural, =1 {day} other {# days}}","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,w=["1XX","2XX","3XX","4XX","5XX"],K=["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 t,n,s,i,a;return e?!!((t=Object.keys(e))!=null&&t.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=r.ref({}),t,n,s=Ie){const i=r.ref("PENDING");return r.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&&t.value){i.value="STALE_IF_ERROR";return}if(e.value===void 0&&!t.value){i.value="PENDING";return}if(e.value&&!t.value&&a){i.value="SUCCESS_HAS_DATA";return}if(e.value&&!t.value){i.value="SUCCESS";return}e.value===void 0&&t&&(i.value="ERROR")}),{state:i,swrvState:ie}}const V=Symbol("default"),U="status_code_grouped",oe=(e,t,n,s,i)=>{e[t][n]||(e[t][n]={}),e[t][n][s]=i};function Ae(e,t){var d;const n=((d=e.meta.metric_names)==null?void 0:d[0])||"",s=e.meta.start_ms,i=Object.keys(e.meta.display||{}),a=!!i.find(m=>m===U),u=i.find(m=>m!==U);return i.length>2||i.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",i),{previous:{[V]:{[V]:0}},current:{[V]:{[V]:0}}}):e.data.reduce((m,o)=>{const c=o.event[n],l=u?o.event[u]:V,f=a?o.event[U]:V;return new Date(o.timestamp).getTime()===s&&t?oe(m,"previous",l,f,c):oe(m,"current",l,f,c),m},{previous:{},current:{}})}function De(e){e.queryReady===void 0&&(e.queryReady=r.computed(()=>!0));const{i18n:t}=N.useI18n(),n=r.computed(()=>{var l,f;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,...(f=e.filter.value)!=null&&f.length?{filters:e.filter.value}:{},time_range:e.timeframe.value.v4Query(e.tz.value)}}),s=r.computed(()=>{var f,y,p,E;if(!((f=e.queryReady)!=null&&f.value))return null;const l=(y=e.filter)!=null&&y.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${e.timeframe.value.cacheKey()}-${(p=e.dimensions)==null?void 0:p.join("-")}-${(E=e.metrics.value)==null?void 0:E.join("-")}-${l}-${e.refreshCounter.value}`}),{response:i,error:a,isValidating:u}=N.useRequest(()=>s.value,()=>e.queryFn({datasource:e.datasource.value,query:n.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:te}),{state:d,swrvState:m}=ke(i,a,u),o=r.computed(()=>{var l,f,y,p,E,g,T;return!((f=(l=i.value)==null?void 0:l.data)!=null&&f.length)||!((p=(y=i.value)==null?void 0:y.meta)!=null&&p.display)||!((T=(g=(E=i.value)==null?void 0:E.meta)==null?void 0:g.metric_names)!=null&&T.length)?{current:{},previous:{}}:Ae(i.value,e.withTrend.value)}),c=r.computed(()=>{var l,f;if(e.timeframe.value.key==="custom"){if(!((f=(l=i.value)==null?void 0:l.meta)!=null&&f.start_ms))return"";const{start_ms:y,end_ms:p}=i.value.meta;let E=(p-y)/(1e3*60*60*24);return e.withTrend.value&&(E/=2),t.t("trendRange.custom",{numDays:Math.round(E)})}else return e.withTrend.value?t.t(`trendRange.${e.timeframe.value.key}`):""});return{isLoading:r.computed(()=>m.PENDING===d.value),hasError:r.computed(()=>m.ERROR===d.value),raw:i,mapped:o,trendRange:c}}const L=(e,t,n=V,s)=>(s??[V]).reduce((a,u)=>{const d=e[t][n];return d?a+(d[u]||0):a},0);function be(e){const{cardType:t,title:n,description:s,record:i,hasError:a,increaseIsBad:u,formatValueFn:d,trendRange:m}=e;return r.computed(()=>{let o=0,c=0;if(i!=null&&i.value)try{o=L(i.value,"current",e.lookupKey,e.sumGroupedValues),c=L(i.value,"previous",e.lookupKey,e.sumGroupedValues)}catch(l){console.error("Metric card data doesn't have the expected structure:",l)}return{cardType:t,hasError:a.value,currentValue:o,previousValue:c,title:n.value,description:s,increaseIsBad:!!u,formatValueFn:d,trendRange:m==null?void 0:m.value}})}var $=new WeakMap,se=0;function Ve(e){if(!e.length)return"";for(var t="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]):$.has(e[n])?s=$.get(e[n]):(s=se,$.set(e[n],se++)),t+="@"+s}return t}function Ne(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(t){t===void 0&&(t=0),this.items=new Map,this.ttl=t}return e.prototype.serializeKey=function(t){return Ne(t)},e.prototype.get=function(t){var n=this.serializeKey(t);return this.items.get(n)},e.prototype.set=function(t,n,s){var i=this.serializeKey(t),a=s||this.ttl,u=Date.now(),d={data:n,createdAt:u,expiresAt:a?u+a:1/0};this.dispatchExpire(a,d,i),this.items.set(i,d)},e.prototype.dispatchExpire=function(t,n,s){var i=this;t&&setTimeout(function(){var a=Date.now(),u=a>=n.expiresAt;u&&i.delete(s)},t)},e.prototype.delete=function(t){this.items.delete(t)},e}();function Oe(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function we(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var Le=function(e){return fetch(e).then(function(t){return t.json()})};const G={isOnline:Oe,isDocumentVisible:we,fetcher:Le};var b=function(){return b=Object.assign||function(e){for(var t,n=1,s=arguments.length;n<s;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},b.apply(this,arguments)},B=function(e,t,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 d(c){try{o(s.next(c))}catch(l){u(l)}}function m(c){try{o(s.throw(c))}catch(l){u(l)}}function o(c){c.done?a(c.value):i(c.value).then(d,m)}o((s=s.apply(e,t||[])).next())})},F=function(e,t){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:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function d(o){return function(c){return m([o,c])}}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=t.call(e,n)}catch(c){o=[6,c],i=0}finally{s=a=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}},Be=function(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var s=n.call(e),i,a=[],u;try{for(;(t===void 0||t-- >0)&&!(i=s.next()).done;)a.push(i.value)}catch(d){u={error:d}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(u)throw u.error}}return a},Fe=function(e,t,n){if(n||arguments.length===2)for(var s=0,i=t.length,a;s<i;s++)(a||!(s in t))&&(a||(a=Array.prototype.slice.call(t,0,s)),a[s]=t[s]);return e.concat(a||Array.prototype.slice.call(t))},ce=new X,q=new X,j=new X,le={cache:ce,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 Me(e,t,n){var s=q.get(e);if(s)s.data.push(t);else{var i=5e3;q.set(e,[t],n>0?n+i:n)}}function qe(e,t,n){if(n.isDocumentVisible()&&!(n.errorRetryCount!==void 0&&t>n.errorRetryCount)){var s=Math.min(t||0,n.errorRetryCount),i=s*n.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:s+1,shouldRetryOnError:!0})},i)}}var ue=function(e,t,n,s){return n===void 0&&(n=ce),s===void 0&&(s=le.ttl),B(void 0,void 0,void 0,function(){var i,a,u,d,m,o,c;return F(this,function(l){switch(l.label){case 0:if(!ze(t))return[3,5];l.label=1;case 1:return l.trys.push([1,3,,4]),[4,t];case 2:return i=l.sent(),[3,4];case 3:return d=l.sent(),a=d,[3,4];case 4:return[3,6];case 5:i=t,l.label=6;case 6:if(u=!1,m={data:i,error:a,isValidating:u},typeof i<"u")try{n.set(e,m,s)}catch(f){console.error("swrv(mutate): failed to set cache",f)}return o=q.get(e),o&&o.data.length&&(c=o.data.filter(function(f){return f.key===e}),c.forEach(function(f,y){typeof m.data<"u"&&(f.data=m.data),f.error=m.error,f.isValidating=m.isValidating,f.isLoading=m.isValidating;var p=y===c.length-1;p||delete c[y]}),c=c.filter(Boolean)),[2,m]}})})};function xe(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var s,i,a=b({},le),u=!1,d=!1,m=r.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 c=(o==null?void 0:o.$isServer)||!1;t.length>=1&&(s=t[0]),t.length>=2&&(i=t[1]),t.length>2&&(a=b(b({},a),t[2]));var l=c?a.serverTTL:a.ttl,f=typeof s=="function"?s:r.ref(s);typeof i>"u"&&(i=a.fetcher);var y=null;y||(y=r.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var p=function(v,h){return B(e,void 0,void 0,function(){var S,C,A,M,W,pe,J,ve=this;return F(this,function(Z){switch(Z.label){case 0:return S=y.data===void 0,C=f.value,C?(A=a.cache.get(C),M=A&&A.data,y.isValidating=!0,y.isLoading=!M,M&&(y.data=M.data,y.error=M.error),W=v||i,!W||!a.isDocumentVisible()&&!S||(h==null?void 0:h.forceRevalidate)!==void 0&&!(h!=null&&h.forceRevalidate)?(y.isValidating=!1,y.isLoading=!1,[2]):A&&(pe=!!(Date.now()-A.createdAt>=a.dedupingInterval||h!=null&&h.forceRevalidate),!pe)?(y.isValidating=!1,y.isLoading=!1,[2]):(J=function(){return B(ve,void 0,void 0,function(){var O,Ee,ee,Re;return F(this,function(P){switch(P.label){case 0:return O=j.get(C),O?[3,2]:(Ee=Array.isArray(C)?C:[C],ee=W.apply(void 0,Fe([],Be(Ee),!1)),j.set(C,ee,a.dedupingInterval),[4,ue(C,ee,a.cache,l)]);case 1:return P.sent(),[3,4];case 2:return[4,ue(C,O.data,a.cache,l)];case 3:P.sent(),P.label=4;case 4:return y.isValidating=!1,y.isLoading=!1,j.delete(C),y.error!==void 0&&(Re=!u&&a.shouldRetryOnError&&(h?h.shouldRetryOnError:!0),Re&&qe(p,h?h.errorRetryCount:1,a)),[2]}})})},M&&a.revalidateDebounce?(setTimeout(function(){return B(ve,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]}})})},E=function(){return B(e,void 0,void 0,function(){return F(this,function(v){return[2,p(null,{shouldRetryOnError:!1})]})})},g=null;r.onMounted(function(){var v=function(){return B(e,void 0,void 0,function(){return F(this,function(h){switch(h.label){case 0:return!y.error&&a.isOnline()?[4,p()]:[3,2];case 1:return h.sent(),[3,3];case 2:g&&clearTimeout(g),h.label=3;case 3:return a.refreshInterval&&!u&&(g=setTimeout(v,a.refreshInterval)),[2]}})})};a.refreshInterval&&(g=setTimeout(v,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",E,!1),window.addEventListener("focus",E,!1))}),r.onUnmounted(function(){u=!0,g&&clearTimeout(g),a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",E,!1),window.removeEventListener("focus",E,!1));var v=q.get(f.value);v&&(v.data=v.data.filter(function(h){return h!==y}))});try{r.watch(f,function(v){r.isReadonly(f)||(f.value=v),y.key=v,y.isValidating=!!v,Me(f.value,y,l),!c&&!d&&f.value&&p(),d=!1},{immediate:!0})}catch{}var T=b(b({},r.toRefs(y)),{mutate:function(v,h){return p(v,b(b({},h),{forceRevalidate:!0}))}});return T}function ze(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function Pe(e,t,n){const{data:s,error:i,isValidating:a,mutate:u}=xe(e,t,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...n});return{data:r.computed(()=>s.value),response:s,error:i,isValidating:a,revalidate:u}}const N={useI18n:Se,useMetricCardBuilder:be,useMetricFetcher:De,useRequest:Pe},de=Symbol("METRICS_PROVIDER_KEY"),Ke=e=>{const{datasource:t,dimension:n,dimensionFilterValue:s,additionalFilter:i,queryReady:a,timeframe:u,tz:d,hasTrendAccess:m,refreshInterval:o,abortController:c,queryFn:l,averageLatencies:f}=e;if(s&&!n)throw new Error("Must provide a dimension if filtering by a value");const y=!!(n&&s),p=!!(n&&!s),E=r.computed(()=>{const S=[];return y&&S.push({field:n,operator:"in",value:[s]}),i.value&&S.push(...D.stripUnknownFilters(t.value,i.value)),S}),g={datasource:t,metrics:r.ref(["request_count"]),dimensions:[...n&&!y?[n]:[],"status_code_grouped"],filter:E,queryReady:a,timeframe:u,tz:d,withTrend:r.computed(()=>m.value&&!p),refreshInterval:o,queryFn:l,abortController:c,refreshCounter:e.refreshCounter},T={datasource:t,metrics:r.computed(()=>[f.value?"response_latency_average":"response_latency_p99"]),...n&&!y?{dimensions:[n]}:{},filter:E,queryReady:a,timeframe:u,tz:d,withTrend:r.computed(()=>m.value&&!p),refreshInterval:o,queryFn:l,abortController:c,refreshCounter:e.refreshCounter},v=N.useMetricFetcher(g),h=N.useMetricFetcher(T);return{trafficData:v,latencyData:h}},Ue=r.defineComponent({__name:"MetricsProvider",props:{datasource:{default:void 0},maxTimeframe:{default:D.TimeframeKeys.THIRTY_DAY},overrideTimeframe:{default:void 0},tz:{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 t=e;if(t.dimension&&D.queryableExploreDimensions.findIndex(y=>y===t.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${t.dimension}`);const n=r.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=r.computed(()=>!0),u=r.computed(()=>!i.loading&&t.queryReady),d=r.computed(()=>t.tz?t.tz:new Intl.DateTimeFormat().resolvedOptions().timeZone),m=r.computed(()=>t.datasource?t.datasource:"basic"),o=r.computed(()=>t.overrideTimeframe||D.TimePeriods.get(D.TimeframeKeys.SEVEN_DAY)),c=r.computed(()=>!t.percentileLatency),{trafficData:l,latencyData:f}=Ke({datasource:m,dimension:t.dimension,dimensionFilterValue:t.filterValue,additionalFilter:r.toRef(t,"additionalFilter"),queryReady:u,timeframe:o,tz:d,hasTrendAccess:a,refreshInterval:t.refreshInterval,queryFn:s,averageLatencies:c,abortController:t.abortController,refreshCounter:r.toRef(t,"refreshCounter")});return r.provide(de,{data:{traffic:l,latency:f},description:r.toRef(()=>t.description),containerTitle:r.toRef(()=>t.containerTitle),hasTrendAccess:a,longCardTitles:t.longCardTitles,averageLatencies:c}),(y,p)=>r.renderSlot(y.$slots,"default",{hasTrendAccess:a.value,timeframe:o.value})}});function $e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fe={exports:{}};(function(e){(function(){function t(o,c){if(c.separator===!1||o<1e3)return o.toString();var l=typeof c.separator=="string"?c.separator:",",f=[],y=Math.round(o).toString().split("");return y.reverse().forEach(function(p,E){E&&E%3===0&&f.push(l),f.push(p)}),f.reverse().join("")}function n(o,c,l){var f=o/c,y=l.round?"round":"floor";return l.decimal===!1?(o=Math[y](f),o.toString()):(l.precision?o=f:o=f<10?Math[y](f*10)/10:Math[y](f),o=o.toString(),typeof l.decimal=="string"&&(o=o.replace(".",l.decimal)),o)}var s=1e3,i=1e4,a=1e6,u=1e9,d=1e12;function m(o,c){var l;c=c||{};var f=o<0;f&&(o=Math.abs(o)),c.precision&&(o=parseFloat(o.toPrecision(c.precision)));var y=c.min10k?i:s;return o<y||c.precision&&c.precision>Math.log10(o)?l=t(n(o,1,c),c):o<a?l=n(o,s,c)+"k":o<u?l=n(o,a,c)+"m":o<d?l=t(n(o,u,c),c)+"b":l=t(n(o,d,c),c)+"t",f&&(l="-"+l),c.capital&&(l=l.toUpperCase()),c.prefix&&(l=c.prefix+l),c.suffix&&(l=l+c.suffix),l}m.addCommas=t,e.exports=m})()})(fe);var Xe=fe.exports;const Ge=$e(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 Y=2,me=Y+2,je=(e,t,n=!1)=>{let s=!t||Number(e.toFixed(me))===0?0:Number(e.toFixed(me))>0?1:-1;return n&&(s*=-1),s},Ye=(e,t,n)=>t?`${Math.abs(e*100).toFixed(Y)}%`:n,He=(e,t)=>t===0?0:e/t-1,Qe=(e,t=!1)=>(t&&(e*=-1),e>0?_.TrendUpIcon:e<0?_.TrendDownIcon:_.IndeterminateSmallIcon),We="#ad000e",H="#6c7489",ye="#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=r.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:_.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 t=new Map([[k.GENERIC_COUNT,_.VitalsIcon],[k.TRAFFIC,_.CloudUploadIcon],[k.ERROR_RATE,_.WarningOutlineIcon],[k.LATENCY,_.ResponseIcon]]),n=e,s=d=>{const m={red:`var(--kui-color-text-danger-strong, ${We})`,green:`var(--kui-color-text-success, ${Je})`,grey:`var(--kui-color-text-neutral-strong, ${ye})`};return d>0?m.green:d<0?m.red:m.grey},i=d=>d>0?"positive":d<0?"negative":"neutral",a=[I.Medium,I.Large].includes(n.cardSize),u=[I.Small].includes(n.cardSize);return(d,m)=>{const o=r.resolveComponent("KTooltip");return r.openBlock(),r.createElementBlock("div",{class:r.normalizeClass(["metricscard",e.cardSize])},[r.createElementVNode("div",{class:r.normalizeClass(["metricscard-title",e.cardSize])},[r.unref(u)?r.createCommentVNode("",!0):(r.openBlock(),r.createBlock(r.resolveDynamicComponent(r.unref(t).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(x)},null,8,["color","size"])),(r.openBlock(),r.createBlock(r.resolveDynamicComponent(e.titleTag),null,{default:r.withCtx(()=>[r.createTextVNode(r.toDisplayString(e.title),1)]),_:1})),e.tooltip?(r.openBlock(),r.createBlock(o,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:r.withCtx(()=>[r.createVNode(r.unref(_.InfoIcon),{color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(x)},null,8,["color","size"])]),_:1},8,["text"])):r.createCommentVNode("",!0)],2),e.description&&r.unref(a)?(r.openBlock(),r.createElementBlock("div",er,[r.createElementVNode("span",null,r.toDisplayString(e.description),1)])):r.createCommentVNode("",!0),r.createElementVNode("div",rr,[e.hasError?(r.openBlock(),r.createElementBlock("div",tr,[r.createVNode(r.unref(_.WarningIcon),{color:`var(--kui-color-text-neutral, ${r.unref(H)})`,size:r.unref(Ze)},null,8,["color","size"]),r.createElementVNode("div",null," "+r.toDisplayString(e.errorMessage),1)])):(r.openBlock(),r.createElementBlock("div",{key:1,class:r.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},r.toDisplayString(e.metricValue),3)),r.unref(a)?(r.openBlock(),r.createElementBlock("div",nr,[r.createElementVNode("div",{class:r.normalizeClass(["metricscard-trend-change",i(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(r.openBlock(),r.createBlock(r.resolveDynamicComponent(e.trendIcon),{key:0,color:s(e.changePolarity),size:r.unref(x)},null,8,["color","size"])):(r.openBlock(),r.createBlock(r.unref(_.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${r.unref(ye)})`,size:r.unref(x)},null,8,["color","size"])),r.createElementVNode("div",ar,r.toDisplayString(e.metricChange),1)],2),e.trendRange?(r.openBlock(),r.createElementBlock("div",ir,r.toDisplayString(e.trendRange),1)):r.createCommentVNode("",!0)])):r.createCommentVNode("",!0)])],2)}}}),Q=(e,t)=>{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},sr=Q(or,[["__scopeId","data-v-b1513f6f"]]),cr={},lr={class:"loading-tabs"};function ur(e,t){const n=r.resolveComponent("KSkeletonBox");return r.openBlock(),r.createElementBlock("div",lr,[r.createVNode(n,{width:"100"}),r.createVNode(n,{width:"75"})])}const dr=Q(cr,[["render",ur],["__scopeId","data-v-50eab68c"]]),fr={key:0,class:"container-title"},mr={key:0,class:"container-description"},yr={key:1,class:"error-display"},gr={key:0,class:"error-display-message"},hr={key:2,class:"cards-wrapper"},pr=Q(r.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 t=e,n=r.computed(()=>t.cards.every(i=>(i==null?void 0:i.hasError)===!0)),s=i=>{const a=He(i.currentValue,i.previousValue)||0,u=je(a,t.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):Ye(a,t.hasTrendAccess,t.fallbackDisplayText),changePolarity:u,trendIcon:Qe(u,i.increaseIsBad),cardSize:t.cardSize,hasContainerTitle:!!t.containerTitle}};return(i,a)=>(r.openBlock(),r.createElementBlock("div",{class:r.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[t.containerTitle||t.containerDescription?(r.openBlock(),r.createElementBlock("div",fr,[r.createTextVNode(r.toDisplayString(t.containerTitle)+" ",1),t.containerDescription?(r.openBlock(),r.createElementBlock("div",mr,r.toDisplayString(t.containerDescription),1)):r.createCommentVNode("",!0)])):r.createCommentVNode("",!0),n.value?(r.openBlock(),r.createElementBlock("div",yr,[r.createVNode(r.unref(_.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(r.openBlock(),r.createElementBlock("div",gr,r.toDisplayString(e.errorMessage),1)):r.createCommentVNode("",!0)])):(r.openBlock(),r.createElementBlock("div",hr,[(r.openBlock(!0),r.createElementBlock(r.Fragment,null,r.renderList(e.cards,(u,d)=>(r.openBlock(),r.createElementBlock(r.Fragment,null,[e.loading?(r.openBlock(),r.createBlock(dr,{key:`skeleton-${d}`,class:r.normalizeClass(e.cardSize===r.unref(I).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])):(r.openBlock(),r.createBlock(sr,r.mergeProps({key:d,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-eac0ca04"]]),vr=r.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:I.Large},cardToDisplay:{default:void 0}},setup(e){const t=e,n=r.inject(de);if(!n)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:s,latency:i}=n.data,{i18n:a}=N.useI18n(),u=r.computed(()=>n.containerTitle.value?I.Medium:t.cardSize),d=N.useMetricCardBuilder({cardType:k.TRAFFIC,title:r.computed(()=>n.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:s.mapped,hasError:s.hasError,lookupKey:t.lookupKey,sumGroupedValues:w,trendRange:s.trendRange}),m=g=>`${g.toFixed(Y)}%`,o=r.computed(()=>{const g=s.mapped.value,T=L(g,"current",t.lookupKey,K),v=L(g,"current",t.lookupKey,w),h=T/v*100||0,S=L(g,"previous",t.lookupKey,K),C=L(g,"previous",t.lookupKey,w),A=S/C*100||0;return{cardType:k.ERROR_RATE,hasError:s.hasError.value,currentValue:h,previousValue:A,formatValueFn:m,title:n.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:s.trendRange.value}}),c=g=>`${g}ms`,l=N.useMetricCardBuilder({cardType:k.LATENCY,title:r.computed(()=>{const{longCardTitles:g,averageLatencies:T}=n,v=T.value?"averageLatency":"p99Latency";return g?a.t(`metricCard.long.${v}`):u.value===I.Small?a.t(`metricCard.small.${v}`):a.t(`metricCard.short.${v}`)}),hasError:i.hasError,record:i.mapped,lookupKey:t.lookupKey,increaseIsBad:!0,formatValueFn:c,trendRange:i.trendRange}),f=r.computed(()=>t.cardToDisplay==="TRAFFIC"?[d.value]:t.cardToDisplay==="ERROR_RATE"?[o.value]:t.cardToDisplay==="LATENCY"?[l.value]:[d.value,o.value,l.value]),y=r.computed(()=>t.cardToDisplay==="TRAFFIC"||t.cardToDisplay==="ERROR_RATE"?s.isLoading.value:t.cardToDisplay==="LATENCY"?i.isLoading.value:s.isLoading.value||i.isLoading.value),p=r.computed(()=>({cards:f.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})),E=r.computed(()=>({loading:p.value.loading,trafficCard:d.value,errorRateCard:o.value,latencyCard:l.value,errorRateFormatted:m(o.value.currentValue),latencyFormatted:c(l.value.currentValue)}));return(g,T)=>r.renderSlot(g.$slots,"default",{cardValues:E.value},()=>[r.createVNode(pr,r.normalizeProps(r.guardReactiveProps(p.value)),null,16)])}}),z=e=>new Date(e),Er=(e,t)=>{const n=e.body;e.reply({statusCode:200,body:he(n,t)})},ge=e=>e.reduce((t,n)=>(t[n]={name:n},t),{}),he=(e,t)=>{var p,E;const n=D.TimePeriods.get(D.TimeframeKeys.ONE_DAY),s=e.granularity==="trend"?new D.DeltaQueryTime(n):new D.UnaryQueryTime(n),i=s.endMs(),a=s.startMs(),u=s.granularityMs(),d=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 m=(e.dimensions??[]).find(g=>g!=="time"),o=(t==null?void 0:t.dimensionNames)??[],c=Math.max(o.length,1),l=e.metrics||[],f=[];for(let g=0;g<d;g++)for(let T=0;T<c;T++){const v=m?{[m]:o[T]}:{};(p=e.dimensions)!=null&&p.includes("status_code_grouped")?w.forEach(h=>{const S=l.reduce((C,A)=>((t==null?void 0:t.deterministic)??!0?C[A]=(d-g)*1e3+100*T+1:C[A]=Math.round(Math.random()*1e3),C),{...v,status_code_grouped:h});f.push({version:"v1",timestamp:g===0?z(a).toISOString():z(a+u).toISOString(),event:S})}):f.push({version:"v1",timestamp:g===0?z(a).toISOString():z(a+u).toISOString(),event:l.reduce((h,S)=>((t==null?void 0:t.deterministic)??!0?h[S]=(d-g)*1e3+100*T+1:h[S]=Math.round(Math.random()*1e3),h),{...v})})}const y={start_ms:a,end_ms:i,start:new Date(a).toISOString(),end:new Date(i).toISOString(),granularity_ms:u,display:m?{[m]:ge(o),...(E=e.dimensions)!=null&&E.includes("status_code_grouped")?{status_code_grouped:ge(w)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:f,meta:y}};R.ALL_STATUS_CODE_GROUPS=w,R.DEFAULT_REFRESH_INTERVAL=ne,R.INJECT_QUERY_PROVIDER=ae,R.MAX_ANALYTICS_REQUEST_RETRIES=te,R.MetricCardSize=I,R.MetricCardType=k,R.MetricsConsumer=vr,R.MetricsProvider=Ue,R.STATUS_CODES_FAILED=K,R.STATUS_CODES_SUCCESS=_e,R.mockExploreResponse=he,R.mockExploreResponseFromCypress=Er,Object.defineProperty(R,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kong-ui-public/analytics-metric-provider",
3
- "version": "9.0.2",
3
+ "version": "9.0.3-pr.2274.eabe722e7.0",
4
4
  "type": "module",
5
5
  "main": "./dist/vitals-metric-provider.umd.js",
6
6
  "module": "./dist/vitals-metric-provider.es.js",
@@ -32,25 +32,25 @@
32
32
  "extends": "../../../package.json"
33
33
  },
34
34
  "dependencies": {
35
- "@kong/icons": "^1.31.0",
35
+ "@kong/icons": "^1.33.2",
36
36
  "approximate-number": "^2.1.1",
37
- "axios": "^1.7.7",
37
+ "axios": "^1.11.0",
38
38
  "swrv": "^1.0.4",
39
- "@kong-ui-public/core": "^1.10.11"
39
+ "@kong-ui-public/core": "^1.10.12-pr.2274.eabe722e7.0"
40
40
  },
41
41
  "peerDependencies": {
42
42
  "@kong/kongponents": "^9.34.2",
43
- "@kong-ui-public/analytics-utilities": "^10.0.0",
44
- "@kong-ui-public/i18n": "^2.3.2",
45
- "@kong-ui-public/analytics-config-store": "^1.0.3"
43
+ "@kong-ui-public/analytics-config-store": "^1.0.4-pr.2274.eabe722e7.0",
44
+ "@kong-ui-public/analytics-utilities": "^10.0.1-pr.2274.eabe722e7.0",
45
+ "@kong-ui-public/i18n": "^2.3.3-pr.2274.eabe722e7.0"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@kong/design-tokens": "1.17.4",
49
- "@kong/kongponents": "9.34.2",
49
+ "@kong/kongponents": "^9.34.2",
50
50
  "pinia": ">= 2.1.7 < 3",
51
- "@kong-ui-public/analytics-config-store": "^1.0.3",
52
- "@kong-ui-public/analytics-utilities": "^10.0.0",
53
- "@kong-ui-public/i18n": "^2.3.2"
51
+ "@kong-ui-public/i18n": "^2.3.3-pr.2274.eabe722e7.0",
52
+ "@kong-ui-public/analytics-utilities": "^10.0.1-pr.2274.eabe722e7.0",
53
+ "@kong-ui-public/analytics-config-store": "^1.0.4-pr.2274.eabe722e7.0"
54
54
  },
55
55
  "scripts": {
56
56
  "dev": "cross-env USE_SANDBOX=true vite",