@kong-ui-public/analytics-metric-provider 11.3.44 → 11.3.45
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/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.metricscard-tooltip,.trafficcard.active .metricscard-tooltip{pointer-events:all}.metricscard[data-v-
|
|
1
|
+
.metricscard-tooltip,.trafficcard.active .metricscard-tooltip{pointer-events:all}.metricscard[data-v-71e77830]{display:flex;flex-direction:column;width:100%}@media (max-width: 767px){.metricscard[data-v-71e77830]{max-width:none;width:auto}}@media (min-width: 768px){.metricscard[data-v-71e77830]{height:100%;justify-content:space-evenly}.metricscard.sm[data-v-71e77830]:not(:last-child){border-right:1px solid #e0e4ea;border-right:var(--kui-border-width-10, 1px) solid var(--kui-color-border, #e0e4ea)}}.metricscard[data-v-71e77830]:hover{border:none;text-decoration:none}.metricscard-title[data-v-71e77830]{align-items:center;color:#000933;color:var(--kui-color-text, #000933);display:flex;flex-direction:row;font-size:14px;font-size:var(--kui-font-size-30, 14px);font-weight:500;font-weight:var(--kui-font-weight-medium, 500);line-height:16px;line-height:var(--kui-line-height-20, 16px);margin:0;margin:var(--kui-space-0, 0px)}.metricscard-title.sm[data-v-71e77830]{color:#52596e;color:var(--kui-color-text-neutral-strong, #52596e);font-size:12px;font-size:var(--kui-font-size-20, 12px);font-weight:600;font-weight:var(--kui-font-weight-semibold, 600)}.metricscard-title.md[data-v-71e77830]{font-size:14px;font-size:var(--kui-font-size-30, 14px);font-weight:600;font-weight:var(--kui-font-weight-semibold, 600)}.metricscard-title.lg[data-v-71e77830],.metricscard-title.xl[data-v-71e77830]{font-size:14px;font-size:var(--kui-font-size-30, 14px)}.metricscard-description[data-v-71e77830]{color:#afb7c5;color:var(--kui-color-text-disabled, #afb7c5);font-size:12px;font-size:var(--kui-font-size-20, 12px);line-height:16px;line-height:var(--kui-line-height-20, 16px);margin-top:8px;margin-top:var(--kui-space-40, 8px)}.metricscard-icon[data-v-71e77830]{margin-right:4px;margin-right:var(--kui-space-20, 4px)}.metricscard-value[data-v-71e77830]{color:#000933;color:var(--kui-color-text, #000933);display:flex;flex-direction:row;font-size:24px;font-size:var(--kui-font-size-70, 24px);font-weight:600;font-weight:var(--kui-font-weight-semibold, 600);justify-content:space-between;line-height:32px;line-height:var(--kui-line-height-60, 32px)}.metricscard-value.sm[data-v-71e77830]{font-size:14px;font-size:var(--kui-font-size-30, 14px);line-height:24px;line-height:var(--kui-line-height-40, 24px)}.metricscard-value.xl[data-v-71e77830]{font-size:48px;font-size:var(--kui-font-size-100, 48px)}.metricscard-valuetrend[data-v-71e77830]{display:flex;flex-direction:column;row-gap:12px;row-gap:var(--kui-space-50, 12px)}@media (max-width: 767px){.metricscard-valuetrend[data-v-71e77830]{row-gap:6px;row-gap:var(--kui-space-30, 6px)}}.metricscard-valuetrend.is-compact[data-v-71e77830]{align-items:center;flex-direction:row!important;justify-content:space-between;margin-top:0;margin-top:var(--kui-space-0, 0px)}.metricscard-trend[data-v-71e77830]{align-items:center;column-gap:8px;column-gap:var(--kui-space-40, 8px);display:flex}.metricscard-trend-change[data-v-71e77830]{align-items:center;border-radius:4px;border-radius:var(--kui-border-radius-20, 4px);display:flex;flex-direction:row;font-size:12px;font-size:var(--kui-font-size-20, 12px);font-weight:600;font-weight:var(--kui-font-weight-semibold, 600);padding:4px 8px;padding:var(--kui-space-20, 4px) var(--kui-space-40, 8px)}.metricscard-trend-change .kui-icon[data-v-71e77830]{margin-right:4px;margin-right:var(--kui-space-20, 4px)}.metricscard-trend-change.positive[data-v-71e77830]{background-color:#ecfffb;background-color:var(--kui-color-background-success-weakest, #ecfffb);color:#007d60;color:var(--kui-color-text-success, #007d60)}.metricscard-trend-change.negative[data-v-71e77830]{background-color:#ffe5e5;background-color:var(--kui-color-background-danger-weakest, #ffe5e5);color:#ad000e;color:var(--kui-color-text-danger-strong, #ad000e)}.metricscard-trend-change.neutral[data-v-71e77830]{background-color:#e0e4ea;background-color:var(--kui-color-background-neutral-weaker, #e0e4ea);color:#52596e;color:var(--kui-color-text-neutral-strong, #52596e)}.metricscard-trend-range[data-v-71e77830]{color:#000933;color:var(--kui-color-text, #000933);font-size:12px;font-size:var(--kui-font-size-20, 12px)}.metricscard-tooltip[data-v-71e77830]{display:inline-flex;margin:auto 0 auto 4px;margin:var(--kui-space-auto, auto) var(--kui-space-0, 0px) var(--kui-space-auto, auto) var(--kui-space-20, 4px);vertical-align:middle}.metricscard-error[data-v-71e77830]{align-items:center;color:#3a3f51;color:var(--kui-color-text-neutral-stronger, #3a3f51);display:flex;flex-direction:row;font-size:12px;font-size:var(--kui-font-size-20, 12px);margin-top:8px;margin-top:var(--kui-space-40, 8px)}.metricscard-error .kong-icon-warning[data-v-71e77830]{margin-right:12px;margin-right:var(--kui-space-50, 12px)}.metricscard.active .metricscard-tooltip[data-v-71e77830]{pointer-events:all}.loading-tabs-large[data-v-9c7113d7]{width:240px}.loading-tabs-small[data-v-9c7113d7]{width:120px}@media (max-width: 767px){.loading-tabs[data-v-9c7113d7]{width:auto}}.kong-ui-public-metric-card-container[data-v-7080ba56]{background-color:transparent;background-color:var(--kui-color-background-transparent, transparent);display:flex;flex-direction:column;height:100%;justify-content:space-between;width:100%}.kong-ui-public-metric-card-container .container-title[data-v-7080ba56]{align-items:center;display:flex;font-size:16px;font-size:var(--kui-font-size-40, 16px);font-weight:600;font-weight:var(--kui-font-weight-semibold, 600);justify-content:space-between;margin-bottom:12px;margin-bottom:var(--kui-space-50, 12px)}.kong-ui-public-metric-card-container .container-title .container-description[data-v-7080ba56]{color:#6c7489;color:var(--kui-color-text-neutral, #6c7489);font-size:12px;font-size:var(--kui-font-size-20, 12px);font-weight:400;font-weight:var(--kui-font-weight-regular, 400)}.kong-ui-public-metric-card-container .cards-wrapper[data-v-7080ba56]{display:flex;flex-direction:row;flex-grow:1;column-gap:24px;row-gap:16px}.kong-ui-public-metric-card-container .cards-wrapper .loading-tab[data-v-7080ba56]{display:flex;flex-direction:column;flex-grow:1;justify-content:center}@media (max-width: 767px){.kong-ui-public-metric-card-container .cards-wrapper[data-v-7080ba56]{column-gap:16px;row-gap:16px;flex-direction:column}}@media (min-width: 767px){.kong-ui-public-metric-card-container .cards-wrapper[data-v-7080ba56]>:not(:last-of-type){border-right:1px solid #e0e4ea;border-right:var(--kui-border-width-10, 1px) solid var(--kui-color-border, #e0e4ea)}}.kong-ui-public-metric-card-container.sm[data-v-7080ba56]{column-gap:0;row-gap:0}.kong-ui-public-metric-card-container .error-display[data-v-7080ba56]{align-items:center;display:flex;justify-content:center;margin:auto;margin:var(--kui-space-auto, auto)}.kong-ui-public-metric-card-container .error-display-icon[data-v-7080ba56]{display:flex}.kong-ui-public-metric-card-container .error-display-message[data-v-7080ba56]{color:#6c7489;color:var(--kui-color-text-neutral, #6c7489);font-size:14px;font-size:var(--kui-font-size-30, 14px);margin-left:12px;margin-left:var(--kui-space-50, 12px)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref as W, watchEffect as
|
|
1
|
+
import { ref as W, watchEffect as Pe, computed as m, getCurrentScope as Ke, reactive as Be, onScopeDispose as Xe, watch as Ge, isReadonly as He, toRefs as je, defineComponent as Z, inject as Ve, toRef as j, provide as Ye, renderSlot as Me, resolveComponent as ke, openBlock as R, createElementBlock as S, normalizeClass as P, createElementVNode as x, unref as T, createBlock as $, resolveDynamicComponent as ne, createCommentVNode as V, withCtx as pe, createTextVNode as Ne, toDisplayString as b, createVNode as F, Fragment as Re, renderList as Qe, mergeProps as We, normalizeProps as Je, guardReactiveProps as Ze } from "vue";
|
|
2
2
|
import { stripUnknownFilters as er, queryableExploreDimensions as rr } from "@kong-ui-public/analytics-utilities";
|
|
3
3
|
import { createI18n as tr, i18nTComponent as nr } from "@kong-ui-public/i18n";
|
|
4
4
|
import "axios";
|
|
@@ -70,7 +70,7 @@ function Sr(e = W({}), r, t, a = Er) {
|
|
|
70
70
|
"PENDING"
|
|
71
71
|
/* PENDING */
|
|
72
72
|
);
|
|
73
|
-
return
|
|
73
|
+
return Pe(() => {
|
|
74
74
|
const n = a(e.value);
|
|
75
75
|
if (e.value && n && t.value) {
|
|
76
76
|
i.value = "VALIDATING_HAS_DATA";
|
|
@@ -310,7 +310,7 @@ var w = function() {
|
|
|
310
310
|
}
|
|
311
311
|
return e;
|
|
312
312
|
}, w.apply(this, arguments);
|
|
313
|
-
},
|
|
313
|
+
}, z = function(e, r, t, a) {
|
|
314
314
|
function i(n) {
|
|
315
315
|
return n instanceof t ? n : new t(function(s) {
|
|
316
316
|
s(n);
|
|
@@ -336,7 +336,7 @@ var w = function() {
|
|
|
336
336
|
}
|
|
337
337
|
o((a = a.apply(e, r || [])).next());
|
|
338
338
|
});
|
|
339
|
-
},
|
|
339
|
+
}, U = function(e, r) {
|
|
340
340
|
var t = { label: 0, sent: function() {
|
|
341
341
|
if (n[0] & 1) throw n[1];
|
|
342
342
|
return n[1];
|
|
@@ -430,7 +430,7 @@ var w = function() {
|
|
|
430
430
|
isOnline: oe.isOnline,
|
|
431
431
|
isDocumentVisible: oe.isDocumentVisible
|
|
432
432
|
};
|
|
433
|
-
function
|
|
433
|
+
function kr(e, r, t) {
|
|
434
434
|
var a = J.get(e);
|
|
435
435
|
if (a)
|
|
436
436
|
a.data.push(r);
|
|
@@ -439,7 +439,7 @@ function Nr(e, r, t) {
|
|
|
439
439
|
J.set(e, [r], t > 0 ? t + i : t);
|
|
440
440
|
}
|
|
441
441
|
}
|
|
442
|
-
function
|
|
442
|
+
function Nr(e, r, t) {
|
|
443
443
|
if (t.isDocumentVisible() && !(t.errorRetryCount !== void 0 && r > t.errorRetryCount)) {
|
|
444
444
|
var a = Math.min(r || 0, t.errorRetryCount), i = a * t.errorRetryInterval;
|
|
445
445
|
setTimeout(function() {
|
|
@@ -452,9 +452,9 @@ function _e(e) {
|
|
|
452
452
|
return typeof t == "function" ? t(a) : typeof t == "boolean" ? t : ce.shouldRetryOnError;
|
|
453
453
|
}
|
|
454
454
|
var Ce = function(e, r, t, a) {
|
|
455
|
-
return t === void 0 && (t = $e), a === void 0 && (a = ce.ttl),
|
|
455
|
+
return t === void 0 && (t = $e), a === void 0 && (a = ce.ttl), z(void 0, void 0, void 0, function() {
|
|
456
456
|
var i, n, s, c, d, o, l;
|
|
457
|
-
return
|
|
457
|
+
return U(this, function(u) {
|
|
458
458
|
switch (u.label) {
|
|
459
459
|
case 0:
|
|
460
460
|
if (!xr(r)) return [3, 5];
|
|
@@ -506,35 +506,35 @@ function Fr() {
|
|
|
506
506
|
key: null
|
|
507
507
|
}));
|
|
508
508
|
var f = function(g, v) {
|
|
509
|
-
return
|
|
510
|
-
var _, E, C, I,
|
|
511
|
-
return
|
|
509
|
+
return z(e, void 0, void 0, function() {
|
|
510
|
+
var _, E, C, I, k, B, ee, ve = this;
|
|
511
|
+
return U(this, function(re) {
|
|
512
512
|
switch (re.label) {
|
|
513
513
|
case 0:
|
|
514
|
-
return _ = u.data === void 0, E = l.value, E ? (C = n.cache.get(E), I = C && C.data, u.isValidating = !0, u.isLoading = !I, I && (u.data = I.data, u.error = I.error),
|
|
514
|
+
return _ = u.data === void 0, E = l.value, E ? (C = n.cache.get(E), I = C && C.data, u.isValidating = !0, u.isLoading = !I, I && (u.data = I.data, u.error = I.error), k = g || i, !k || !n.isDocumentVisible() && !_ || (v == null ? void 0 : v.forceRevalidate) !== void 0 && !(v != null && v.forceRevalidate) ? (u.isValidating = !1, u.isLoading = !1, [
|
|
515
515
|
2
|
|
516
516
|
/*return*/
|
|
517
517
|
]) : C && (B = !!(Date.now() - C.createdAt >= n.dedupingInterval || v != null && v.forceRevalidate), !B) ? (u.isValidating = !1, u.isLoading = !1, [
|
|
518
518
|
2
|
|
519
519
|
/*return*/
|
|
520
520
|
]) : (ee = function() {
|
|
521
|
-
return
|
|
522
|
-
var
|
|
523
|
-
return
|
|
521
|
+
return z(ve, void 0, void 0, function() {
|
|
522
|
+
var N, me, te, ye, ge, he;
|
|
523
|
+
return U(this, function(H) {
|
|
524
524
|
switch (H.label) {
|
|
525
525
|
case 0:
|
|
526
|
-
return
|
|
526
|
+
return N = se.get(E), N ? [3, 2] : (me = Array.isArray(E) ? E : [E], te = k.apply(void 0, Mr([], Vr(me), !1)), se.set(E, te, n.dedupingInterval), [4, Ce(E, te, n.cache, o)]);
|
|
527
527
|
case 1:
|
|
528
528
|
return H.sent(), [3, 4];
|
|
529
529
|
case 2:
|
|
530
|
-
return [4, Ce(E,
|
|
530
|
+
return [4, Ce(E, N.data, n.cache, o)];
|
|
531
531
|
case 3:
|
|
532
532
|
H.sent(), H.label = 4;
|
|
533
533
|
case 4:
|
|
534
534
|
return u.isValidating = !1, u.isLoading = !1, se.delete(E), u.error !== void 0 && (ye = _e({ shouldRetry: n.shouldRetryOnError, error: u.error }), ge = _e({
|
|
535
535
|
shouldRetry: v ? v.shouldRetryOnError : !0,
|
|
536
536
|
error: u.error
|
|
537
|
-
}), he = !s && ye && ge, he &&
|
|
537
|
+
}), he = !s && ye && ge, he && Nr(f, v ? v.errorRetryCount : 1, n)), [
|
|
538
538
|
2
|
|
539
539
|
/*return*/
|
|
540
540
|
];
|
|
@@ -542,13 +542,13 @@ function Fr() {
|
|
|
542
542
|
});
|
|
543
543
|
});
|
|
544
544
|
}, I && n.revalidateDebounce ? (setTimeout(function() {
|
|
545
|
-
return
|
|
546
|
-
return
|
|
547
|
-
switch (
|
|
545
|
+
return z(ve, void 0, void 0, function() {
|
|
546
|
+
return U(this, function(N) {
|
|
547
|
+
switch (N.label) {
|
|
548
548
|
case 0:
|
|
549
549
|
return s ? [3, 2] : [4, ee()];
|
|
550
550
|
case 1:
|
|
551
|
-
|
|
551
|
+
N.sent(), N.label = 2;
|
|
552
552
|
case 2:
|
|
553
553
|
return [
|
|
554
554
|
2
|
|
@@ -574,16 +574,16 @@ function Fr() {
|
|
|
574
574
|
});
|
|
575
575
|
});
|
|
576
576
|
}, h = function() {
|
|
577
|
-
return
|
|
578
|
-
return
|
|
577
|
+
return z(e, void 0, void 0, function() {
|
|
578
|
+
return U(this, function(g) {
|
|
579
579
|
return [2, f(null, { shouldRetryOnError: !1 })];
|
|
580
580
|
});
|
|
581
581
|
});
|
|
582
582
|
}, y = null;
|
|
583
583
|
if (!d) {
|
|
584
584
|
var A = function() {
|
|
585
|
-
return
|
|
586
|
-
return
|
|
585
|
+
return z(e, void 0, void 0, function() {
|
|
586
|
+
return U(this, function(g) {
|
|
587
587
|
switch (g.label) {
|
|
588
588
|
case 0:
|
|
589
589
|
return !u.error && n.isOnline() ? [4, f()] : [3, 2];
|
|
@@ -611,7 +611,7 @@ function Fr() {
|
|
|
611
611
|
});
|
|
612
612
|
try {
|
|
613
613
|
Ge(l, function(g) {
|
|
614
|
-
He(l) || (l.value = g), u.key = g, u.isValidating = !!g,
|
|
614
|
+
He(l) || (l.value = g), u.key = g, u.isValidating = !!g, kr(l.value, u, o), !d && !c && l.value && f(), c = !1;
|
|
615
615
|
}, {
|
|
616
616
|
immediate: !0
|
|
617
617
|
});
|
|
@@ -651,7 +651,7 @@ const M = {
|
|
|
651
651
|
useMetricFetcher: Cr,
|
|
652
652
|
useTrendRange: Ar,
|
|
653
653
|
useRequest: qr
|
|
654
|
-
},
|
|
654
|
+
}, ze = Symbol("METRICS_PROVIDER_KEY"), $r = (e) => {
|
|
655
655
|
const {
|
|
656
656
|
datasource: r,
|
|
657
657
|
dimension: t,
|
|
@@ -765,7 +765,7 @@ const M = {
|
|
|
765
765
|
abortController: r.abortController,
|
|
766
766
|
refreshCounter: j(r, "refreshCounter")
|
|
767
767
|
});
|
|
768
|
-
return Ye(
|
|
768
|
+
return Ye(ze, {
|
|
769
769
|
data: {
|
|
770
770
|
traffic: l,
|
|
771
771
|
latency: u
|
|
@@ -780,7 +780,7 @@ const M = {
|
|
|
780
780
|
timeRange: d.value
|
|
781
781
|
});
|
|
782
782
|
}
|
|
783
|
-
}), Ie = 1e3,
|
|
783
|
+
}), Ie = 1e3, zr = 1e4, Ae = 1e6, De = 1e9, we = 1e12, X = (e, r) => {
|
|
784
784
|
if (r.separator === !1 || e < 1e3)
|
|
785
785
|
return e.toString();
|
|
786
786
|
const t = typeof r.separator == "string" ? r.separator : ",", a = [];
|
|
@@ -796,19 +796,19 @@ const M = {
|
|
|
796
796
|
let s = n.toString();
|
|
797
797
|
return typeof t.decimal == "string" && (s = s.replace(".", t.decimal)), s;
|
|
798
798
|
};
|
|
799
|
-
function
|
|
799
|
+
function Ue(e, r = {}) {
|
|
800
800
|
let t;
|
|
801
801
|
const a = e < 0;
|
|
802
802
|
a && (e = Math.abs(e)), r.precision && (e = parseFloat(e.toPrecision(r.precision)));
|
|
803
|
-
const i = r.min10k ?
|
|
803
|
+
const i = r.min10k ? zr : Ie;
|
|
804
804
|
return e < i || r.precision && r.precision > Math.log10(e) ? t = X(q(e, 1, r), r) : e < Ae ? t = `${q(e, Ie, r)}k` : e < De ? t = `${q(e, Ae, r)}m` : e < we ? t = `${X(q(e, De, r), r)}b` : t = `${X(q(e, we, r), r)}t`, a && (t = `-${t}`), r.capital && (t = t.toUpperCase()), r.prefix && (t = `${r.prefix}${t}`), r.suffix && (t = `${t}${r.suffix}`), t;
|
|
805
805
|
}
|
|
806
|
-
|
|
806
|
+
Ue.addCommas = X;
|
|
807
807
|
var O = /* @__PURE__ */ ((e) => (e.GENERIC_COUNT = "GenericCount", e.TRAFFIC = "Traffic", e.ERROR_RATE = "ErrorRate", e.LATENCY = "Latency", e))(O || {}), D = /* @__PURE__ */ ((e) => (e.Small = "sm", e.Medium = "md", e.Large = "lg", e.ExtraLarge = "xl", e))(D || {});
|
|
808
|
-
const de = 2, be = de + 2,
|
|
808
|
+
const de = 2, be = de + 2, Ur = (e, r, t = !1) => {
|
|
809
809
|
let a = !r || Number(e.toFixed(be)) === 0 ? 0 : Number(e.toFixed(be)) > 0 ? 1 : -1;
|
|
810
810
|
return t && (a *= -1), a;
|
|
811
|
-
},
|
|
811
|
+
}, Pr = (e, r, t) => r ? `${Math.abs(e * 100).toFixed(de)}%` : t, Kr = (e, r) => r === 0 ? 0 : e / r - 1, Br = (e, r = !1) => (r && (e *= -1), e > 0 ? ir : e < 0 ? or : Fe), Xr = "#ad000e", ue = "#6c7489", Oe = "#52596e", Gr = "#007d60", Y = "16px", Hr = "20px", jr = {
|
|
812
812
|
key: 0,
|
|
813
813
|
class: "metricscard-description"
|
|
814
814
|
}, Yr = { class: "metricscard-valuetrend" }, Qr = {
|
|
@@ -906,22 +906,22 @@ const de = 2, be = de + 2, Pr = (e, r, t = !1) => {
|
|
|
906
906
|
return c > 0 ? d.green : c < 0 ? d.red : d.grey;
|
|
907
907
|
}, i = (c) => c > 0 ? "positive" : c < 0 ? "negative" : "neutral", n = [D.Medium, D.Large].includes(t.cardSize), s = [D.Small].includes(t.cardSize);
|
|
908
908
|
return (c, d) => {
|
|
909
|
-
const o =
|
|
909
|
+
const o = ke("KTooltip");
|
|
910
910
|
return R(), S("div", {
|
|
911
|
-
class:
|
|
911
|
+
class: P(["metricscard", e.cardSize])
|
|
912
912
|
}, [
|
|
913
913
|
x("div", {
|
|
914
|
-
class:
|
|
914
|
+
class: P(["metricscard-title", e.cardSize])
|
|
915
915
|
}, [
|
|
916
916
|
T(s) ? V("", !0) : (R(), $(ne(T(r).get(e.cardType)), {
|
|
917
917
|
key: 0,
|
|
918
918
|
class: "metricscard-icon",
|
|
919
919
|
color: `var(--kui-color-text-neutral, ${T(ue)})`,
|
|
920
|
-
size: T(Y)
|
|
920
|
+
size: `var(--kui-icon-size-30, ${T(Y)})`
|
|
921
921
|
}, null, 8, ["color", "size"])),
|
|
922
922
|
(R(), $(ne(e.titleTag), null, {
|
|
923
923
|
default: pe(() => [
|
|
924
|
-
|
|
924
|
+
Ne(b(e.title), 1)
|
|
925
925
|
]),
|
|
926
926
|
_: 1
|
|
927
927
|
})),
|
|
@@ -934,7 +934,7 @@ const de = 2, be = de + 2, Pr = (e, r, t = !1) => {
|
|
|
934
934
|
default: pe(() => [
|
|
935
935
|
F(T(dr), {
|
|
936
936
|
color: `var(--kui-color-text-neutral, ${T(ue)})`,
|
|
937
|
-
size: T(Y)
|
|
937
|
+
size: `var(--kui-icon-size-30, ${T(Y)})`
|
|
938
938
|
}, null, 8, ["color", "size"])
|
|
939
939
|
]),
|
|
940
940
|
_: 1
|
|
@@ -947,27 +947,27 @@ const de = 2, be = de + 2, Pr = (e, r, t = !1) => {
|
|
|
947
947
|
e.hasError ? (R(), S("div", Qr, [
|
|
948
948
|
F(T(xe), {
|
|
949
949
|
color: `var(--kui-color-text-neutral, ${T(ue)})`,
|
|
950
|
-
size: T(Hr)
|
|
950
|
+
size: `var(--kui-icon-size-40, ${T(Hr)})`
|
|
951
951
|
}, null, 8, ["color", "size"]),
|
|
952
952
|
x("div", null, " " + b(e.errorMessage), 1)
|
|
953
953
|
])) : (R(), S("div", {
|
|
954
954
|
key: 1,
|
|
955
|
-
class:
|
|
955
|
+
class: P(["metricscard-value", e.cardSize]),
|
|
956
956
|
"data-testid": "metric-value"
|
|
957
957
|
}, b(e.metricValue), 3)),
|
|
958
958
|
T(n) ? (R(), S("div", Wr, [
|
|
959
959
|
x("div", {
|
|
960
|
-
class:
|
|
960
|
+
class: P(["metricscard-trend-change", i(e.changePolarity)]),
|
|
961
961
|
"data-testid": "metric-trend-parent"
|
|
962
962
|
}, [
|
|
963
963
|
e.changePolarity !== 0 ? (R(), $(ne(e.trendIcon), {
|
|
964
964
|
key: 0,
|
|
965
965
|
color: a(e.changePolarity),
|
|
966
|
-
size: T(Y)
|
|
966
|
+
size: `var(--kui-icon-size-30, ${T(Y)})`
|
|
967
967
|
}, null, 8, ["color", "size"])) : (R(), $(T(fr), {
|
|
968
968
|
key: 1,
|
|
969
969
|
color: `var(--kui-color-text-neutral-strong, ${T(Oe)})`,
|
|
970
|
-
size: T(Y)
|
|
970
|
+
size: `var(--kui-icon-size-30, ${T(Y)})`
|
|
971
971
|
}, null, 8, ["color", "size"])),
|
|
972
972
|
x("div", Jr, b(e.metricChange), 1)
|
|
973
973
|
], 2),
|
|
@@ -982,9 +982,9 @@ const de = 2, be = de + 2, Pr = (e, r, t = !1) => {
|
|
|
982
982
|
for (const [a, i] of r)
|
|
983
983
|
t[a] = i;
|
|
984
984
|
return t;
|
|
985
|
-
}, rt = /* @__PURE__ */ fe(et, [["__scopeId", "data-v-
|
|
985
|
+
}, rt = /* @__PURE__ */ fe(et, [["__scopeId", "data-v-71e77830"]]), tt = {}, nt = { class: "loading-tabs" };
|
|
986
986
|
function at(e, r) {
|
|
987
|
-
const t =
|
|
987
|
+
const t = ke("KSkeletonBox");
|
|
988
988
|
return R(), S("div", nt, [
|
|
989
989
|
F(t, { width: "100" }),
|
|
990
990
|
F(t, { width: "75" })
|
|
@@ -1049,10 +1049,10 @@ const it = /* @__PURE__ */ fe(tt, [["render", at], ["__scopeId", "data-v-9c7113d
|
|
|
1049
1049
|
},
|
|
1050
1050
|
setup(e) {
|
|
1051
1051
|
const r = e, t = m(() => r.cards.every((i) => (i == null ? void 0 : i.hasError) === !0)), a = (i) => {
|
|
1052
|
-
const n = Kr(i.currentValue, i.previousValue) || 0, s =
|
|
1052
|
+
const n = Kr(i.currentValue, i.previousValue) || 0, s = Ur(n, r.hasTrendAccess, i.increaseIsBad);
|
|
1053
1053
|
return {
|
|
1054
|
-
metricValue: i.formatValueFn ? i.formatValueFn(i.currentValue) :
|
|
1055
|
-
metricChange: i.formatChangeFn ? i.formatChangeFn(n) :
|
|
1054
|
+
metricValue: i.formatValueFn ? i.formatValueFn(i.currentValue) : Ue(i.currentValue, { capital: !0, round: !0 }) || "0",
|
|
1055
|
+
metricChange: i.formatChangeFn ? i.formatChangeFn(n) : Pr(n, r.hasTrendAccess, r.fallbackDisplayText),
|
|
1056
1056
|
changePolarity: s,
|
|
1057
1057
|
trendIcon: Br(s, i.increaseIsBad),
|
|
1058
1058
|
cardSize: r.cardSize,
|
|
@@ -1060,10 +1060,10 @@ const it = /* @__PURE__ */ fe(tt, [["render", at], ["__scopeId", "data-v-9c7113d
|
|
|
1060
1060
|
};
|
|
1061
1061
|
};
|
|
1062
1062
|
return (i, n) => (R(), S("div", {
|
|
1063
|
-
class:
|
|
1063
|
+
class: P(["kong-ui-public-metric-card-container", e.cardSize])
|
|
1064
1064
|
}, [
|
|
1065
1065
|
r.containerTitle || r.containerDescription ? (R(), S("div", ot, [
|
|
1066
|
-
|
|
1066
|
+
Ne(b(r.containerTitle) + " ", 1),
|
|
1067
1067
|
r.containerDescription ? (R(), S("div", st, b(r.containerDescription), 1)) : V("", !0)
|
|
1068
1068
|
])) : V("", !0),
|
|
1069
1069
|
t.value ? (R(), S("div", ut, [
|
|
@@ -1076,7 +1076,7 @@ const it = /* @__PURE__ */ fe(tt, [["render", at], ["__scopeId", "data-v-9c7113d
|
|
|
1076
1076
|
class: "loading-tab"
|
|
1077
1077
|
}, [
|
|
1078
1078
|
F(it, {
|
|
1079
|
-
class:
|
|
1079
|
+
class: P(e.cardSize === T(D).Small ? "loading-tabs-small" : "loading-tabs-large")
|
|
1080
1080
|
}, null, 8, ["class"])
|
|
1081
1081
|
])) : (R(), $(rt, We({ key: c }, { ref_for: !0 }, a(s), {
|
|
1082
1082
|
"card-size": e.cardSize,
|
|
@@ -1101,7 +1101,7 @@ const it = /* @__PURE__ */ fe(tt, [["render", at], ["__scopeId", "data-v-9c7113d
|
|
|
1101
1101
|
cardToDisplay: { default: void 0 }
|
|
1102
1102
|
},
|
|
1103
1103
|
setup(e) {
|
|
1104
|
-
const r = e, t = Ve(
|
|
1104
|
+
const r = e, t = Ve(ze);
|
|
1105
1105
|
if (!t)
|
|
1106
1106
|
throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");
|
|
1107
1107
|
const { traffic: a, latency: i } = t.data, { i18n: n } = M.useI18n(), s = m(() => t.containerTitle.value ? D.Medium : r.cardSize), c = M.useMetricCardBuilder({
|
|
@@ -1192,7 +1192,7 @@ const it = /* @__PURE__ */ fe(tt, [["render", at], ["__scopeId", "data-v-9c7113d
|
|
|
1192
1192
|
for (let _ = 0; _ < u; _++) {
|
|
1193
1193
|
const E = o ? { [o]: l[_] } : {};
|
|
1194
1194
|
(p = e.dimensions) != null && p.includes("status_code_grouped") ? G.forEach((C) => {
|
|
1195
|
-
const I = f.reduce((
|
|
1195
|
+
const I = f.reduce((k, B) => ((r == null ? void 0 : r.deterministic) ?? !0 ? k[B] = (d - v) * 1e3 + 100 * _ + 1 : k[B] = Math.round(Math.random() * 1e3), k), { ...E, status_code_grouped: C });
|
|
1196
1196
|
h.push({
|
|
1197
1197
|
version: "v1",
|
|
1198
1198
|
timestamp: v === 0 ? Q(s).toISOString() : Q(s + c).toISOString(),
|
|
@@ -1234,9 +1234,9 @@ export {
|
|
|
1234
1234
|
Te as STATUS_CODES_FAILED,
|
|
1235
1235
|
Tt as STATUS_CODES_SUCCESS,
|
|
1236
1236
|
Kr as calculateChange,
|
|
1237
|
-
|
|
1237
|
+
Ur as changePolarity,
|
|
1238
1238
|
Br as defineIcon,
|
|
1239
|
-
|
|
1239
|
+
Pr as metricChange,
|
|
1240
1240
|
vt as mockExploreResponse,
|
|
1241
1241
|
_t as mockExploreResponseFromCypress,
|
|
1242
1242
|
Ar as useTrendRange
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(g,n){typeof exports=="object"&&typeof module<"u"?n(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"],n):(g=typeof globalThis<"u"?globalThis:g||self,n(g["kong-ui-public-vitals-metric-provider"]={},g.Vue,g["kong-ui-public-analytics-utilities"],g["kong-ui-public-i18n"],g.axios,g["kong-ui-public-analytics-config-store"],g.KongIcons))})(this,function(g,n,ae,ie,Ar,Le,_){"use strict";const Me={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","90d":"vs previous 90 days","180d":"vs previous 180 days","365d":"vs previous 365 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 Fe(){const e=ie.createI18n("en-us",Me);return{i18n:e,i18nT:ie.i18nTComponent(e)}}const oe=2,N=["1XX","2XX","3XX","4XX","5XX"],G=["4XX","5XX"],Be=["1XX","2XX","3XX"],se=30*1e3,le="analytics-query-provider";var ce=(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))(ce||{});const qe=e=>{var r,t,i,o,a;return e?!!((r=Object.keys(e))!=null&&r.length||(t=e.data)!=null&&t.length||(o=(i=e.data)==null?void 0:i.data)!=null&&o.length||!((a=e.data)!=null&&a.data)&&typeof e.data=="object"&&Object.keys(e==null?void 0:e.data).length):!1};function Ue(e=n.ref({}),r,t,i=qe){const o=n.ref("PENDING");return n.watchEffect(()=>{const a=i(e.value);if(e.value&&a&&t.value){o.value="VALIDATING_HAS_DATA";return}if(e.value&&t.value){o.value="VALIDATING";return}if(e.value&&r.value){o.value="STALE_IF_ERROR";return}if(e.value===void 0&&!r.value){o.value="PENDING";return}if(e.value&&!r.value&&a){o.value="SUCCESS_HAS_DATA";return}if(e.value&&!r.value){o.value="SUCCESS";return}e.value===void 0&&r&&(o.value="ERROR")}),{state:o,swrvState:ce}}const b=Symbol("default"),X="status_code_grouped",ue=(e,r,t,i,o)=>{e[r][t]||(e[r][t]={}),e[r][t][i]=o};function $e(e,r){var d;const t=((d=e.meta.metric_names)==null?void 0:d[0])||"",i=new Date(e.meta.start).getTime(),o=Object.keys(e.meta.display||{}),a=!!o.find(f=>f===X),l=o.find(f=>f!==X);return o.length>2||o.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",o),{previous:{[b]:{[b]:0}},current:{[b]:{[b]:0}}}):e.data.reduce((f,s)=>{const u=s.event[t],c=l?s.event[l]:b,m=a?s.event[X]:b;return new Date(s.timestamp).getTime()===i&&r?ue(f,"previous",c,m,u):ue(f,"current",c,m,u),f},{previous:{},current:{}})}function xe(e){e.queryReady===void 0&&(e.queryReady=n.computed(()=>!0));const r=n.computed(()=>{var u,c;return{metrics:e.metrics.value,dimensions:[...(u=e.dimensions)!=null&&u.length?[...e.dimensions]:[],...e.withTrend.value?["time"]:[]],granularity:e.withTrend.value?"trend":void 0,...(c=e.filter.value)!=null&&c.length?{filters:e.filter.value}:{},time_range:e.timeRange.value}}),t=n.computed(()=>{var c,m,v,h;if(!((c=e.queryReady)!=null&&c.value))return null;const u=(m=e.filter)!=null&&m.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${JSON.stringify(e.timeRange.value)}-${(v=e.dimensions)==null?void 0:v.join("-")}-${(h=e.metrics.value)==null?void 0:h.join("-")}-${u}-${e.refreshCounter.value}`}),{response:i,error:o,isValidating:a}=w.useRequest(()=>t.value,()=>e.queryFn({datasource:e.datasource.value,query:r.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:oe}),{state:l,swrvState:d}=Ue(i,o,a),f=n.computed(()=>{var u,c,m,v,h,I,E;return!((c=(u=i.value)==null?void 0:u.data)!=null&&c.length)||!((v=(m=i.value)==null?void 0:m.meta)!=null&&v.display)||!((E=(I=(h=i.value)==null?void 0:h.meta)==null?void 0:I.metric_names)!=null&&E.length)?{current:{},previous:{}}:$e(i.value,e.withTrend.value)}),s=w.useTrendRange(e.withTrend,e.timeRange,n.computed(()=>{var u;return(u=i.value)==null?void 0:u.meta}));return{isLoading:n.computed(()=>d.PENDING===l.value),hasError:n.computed(()=>d.ERROR===l.value),raw:i,mapped:f,trendRange:s}}const L=(e,r,t=b,i)=>(i??[b]).reduce((a,l)=>{const d=e[r][t];return d?a+(d[l]||0):a},0);function Pe(e){const{cardType:r,title:t,description:i,record:o,hasError:a,increaseIsBad:l,formatValueFn:d,trendRange:f}=e;return n.computed(()=>{let s=0,u=0;if(o!=null&&o.value)try{s=L(o.value,"current",e.lookupKey,e.sumGroupedValues),u=L(o.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:s,previousValue:u,title:t.value,description:i,increaseIsBad:!!l,formatValueFn:d,trendRange:f==null?void 0:f.value}})}function de(e,r,t){const{i18n:i}=w.useI18n(),o=1e3*60,a=o*60,l=a*24,d=(s,u)=>{let c=u-s;e.value&&(c/=2);const m=c/l,v=c/a,h=c/o;return m>=1?i.t("trendRange.custom_days",{numDays:Math.round(m)}):v>=1?i.t("trendRange.custom_hours",{numHours:Math.round(v)}):h>=1?i.t("trendRange.custom_minutes",{numMinutes:Math.round(h)}):i.t("trendRange.custom_days",{numDays:Math.round(m)})},f=()=>{var s,u;if((s=t==null?void 0:t.value)!=null&&s.start&&t.value.end)return{startMs:new Date(t.value.start).getTime(),endMs:new Date(t.value.end).getTime()};if(((u=r==null?void 0:r.value)==null?void 0:u.type)==="absolute"&&r.value.start&&r.value.end)return{startMs:new Date(r.value.start).getTime(),endMs:new Date(r.value.end).getTime()}};return n.computed(()=>{var s,u;if(((s=r==null?void 0:r.value)==null?void 0:s.type)==="relative"&&e.value)return i.t(`trendRange.${r.value.time_range}`);if(e.value||((u=r==null?void 0:r.value)==null?void 0:u.type)==="absolute"){const c=f();if(c)return d(c.startMs,c.endMs)}return""})}var j=new WeakMap,fe=0;function ze(e){if(!e.length)return"";for(var r="arg",t=0;t<e.length;++t){var i=void 0;e[t]===null||typeof e[t]!="object"&&typeof e[t]!="function"?typeof e[t]=="string"?i='"'+e[t]+'"':i=String(e[t]):j.has(e[t])?i=j.get(e[t]):(i=fe,j.set(e[t],fe++)),r+="@"+i}return r}function Ke(e){if(typeof e=="function")try{e=e()}catch{e=""}return Array.isArray(e)?e=ze(e):e=String(e||""),e}var H=function(){function e(r){r===void 0&&(r=0),this.items=new Map,this.ttl=r}return e.prototype.serializeKey=function(r){return Ke(r)},e.prototype.get=function(r){var t=this.serializeKey(r);return this.items.get(t)},e.prototype.set=function(r,t,i){var o=this.serializeKey(r),a=i||this.ttl,l=Date.now(),d={data:t,createdAt:l,expiresAt:a?l+a:1/0};this.dispatchExpire(a,d,o),this.items.set(o,d)},e.prototype.dispatchExpire=function(r,t,i){var o=this;r&&setTimeout(function(){var a=Date.now(),l=a>=t.expiresAt;l&&o.delete(i)},r)},e.prototype.delete=function(r){this.items.delete(r)},e}();function Ge(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function Xe(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var je=function(e){return fetch(e).then(function(r){return r.json()})};const Y={isOnline:Ge,isDocumentVisible:Xe,fetcher:je};var k=function(){return k=Object.assign||function(e){for(var r,t=1,i=arguments.length;t<i;t++){r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},k.apply(this,arguments)},M=function(e,r,t,i){function o(a){return a instanceof t?a:new t(function(l){l(a)})}return new(t||(t=Promise))(function(a,l){function d(u){try{s(i.next(u))}catch(c){l(c)}}function f(u){try{s(i.throw(u))}catch(c){l(c)}}function s(u){u.done?a(u.value):o(u.value).then(d,f)}s((i=i.apply(e,r||[])).next())})},F=function(e,r){var t={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,o,a,l;return l={next:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function d(s){return function(u){return f([s,u])}}function f(s){if(i)throw new TypeError("Generator is already executing.");for(;t;)try{if(i=1,o&&(a=s[0]&2?o.return:s[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,s[1])).done)return a;switch(o=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return t.label++,{value:s[1],done:!1};case 5:t.label++,o=s[1],s=[0];continue;case 7:s=t.ops.pop(),t.trys.pop();continue;default:if(a=t.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){t=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]<a[3])){t.label=s[1];break}if(s[0]===6&&t.label<a[1]){t.label=a[1],a=s;break}if(a&&t.label<a[2]){t.label=a[2],t.ops.push(s);break}a[2]&&t.ops.pop(),t.trys.pop();continue}s=r.call(e,t)}catch(u){s=[6,u],o=0}finally{i=a=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}},He=function(e,r){var t=typeof Symbol=="function"&&e[Symbol.iterator];if(!t)return e;var i=t.call(e),o,a=[],l;try{for(;(r===void 0||r-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(d){l={error:d}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(l)throw l.error}}return a},Ye=function(e,r,t){if(t||arguments.length===2)for(var i=0,o=r.length,a;i<o;i++)(a||!(i in r))&&(a||(a=Array.prototype.slice.call(r,0,i)),a[i]=r[i]);return e.concat(a||Array.prototype.slice.call(r))},me=new H,$=new H,Q=new H,W={cache:me,refreshInterval:0,ttl:0,serverTTL:1e3,dedupingInterval:2e3,revalidateOnFocus:!0,revalidateDebounce:0,shouldRetryOnError:!0,errorRetryInterval:5e3,errorRetryCount:5,fetcher:Y.fetcher,isOnline:Y.isOnline,isDocumentVisible:Y.isDocumentVisible};function Qe(e,r,t){var i=$.get(e);if(i)i.data.push(r);else{var o=5e3;$.set(e,[r],t>0?t+o:t)}}function We(e,r,t){if(t.isDocumentVisible()&&!(t.errorRetryCount!==void 0&&r>t.errorRetryCount)){var i=Math.min(r||0,t.errorRetryCount),o=i*t.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:i+1,shouldRetryOnError:!0})},o)}}function ye(e){var r=e.shouldRetry,t=r===void 0?void 0:r,i=e.error;return typeof t=="function"?t(i):typeof t=="boolean"?t:W.shouldRetryOnError}var ge=function(e,r,t,i){return t===void 0&&(t=me),i===void 0&&(i=W.ttl),M(void 0,void 0,void 0,function(){var o,a,l,d,f,s,u;return F(this,function(c){switch(c.label){case 0:if(!Ze(r))return[3,5];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,r];case 2:return o=c.sent(),[3,4];case 3:return d=c.sent(),a=d,[3,4];case 4:return[3,6];case 5:o=r,c.label=6;case 6:if(l=!1,f={data:o,error:a,isValidating:l},typeof o<"u")try{t.set(e,f,i)}catch(m){console.error("swrv(mutate): failed to set cache",m)}return s=$.get(e),s&&s.data.length&&(u=s.data.filter(function(m){return m.key===e}),u.forEach(function(m,v){typeof f.data<"u"&&(m.data=f.data),m.error=f.error,m.isValidating=f.isValidating,m.isLoading=f.isValidating;var h=v===u.length-1;h||delete u[v]}),u=u.filter(Boolean)),[2,f]}})})};function Je(){for(var e=this,r=[],t=0;t<arguments.length;t++)r[t]=arguments[t];var i,o,a=k({},W),l=!1,d=!1;if(!n.getCurrentScope())return console.error("useSWRV must be called inside setup() or an active effectScope()."),null;var f=typeof window>"u"||typeof document>"u";r.length>=1&&(i=r[0]),r.length>=2&&(o=r[1]),r.length>2&&(a=k(k({},a),r[2]));var s=f?a.serverTTL:a.ttl,u=typeof i=="function"?i:n.ref(i);typeof o>"u"&&(o=a.fetcher);var c=null;c||(c=n.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var m=function(p,y){return M(e,void 0,void 0,function(){var T,R,S,C,V,U,re,be=this;return F(this,function(te){switch(te.label){case 0:return T=c.data===void 0,R=u.value,R?(S=a.cache.get(R),C=S&&S.data,c.isValidating=!0,c.isLoading=!C,C&&(c.data=C.data,c.error=C.error),V=p||o,!V||!a.isDocumentVisible()&&!T||(y==null?void 0:y.forceRevalidate)!==void 0&&!(y!=null&&y.forceRevalidate)?(c.isValidating=!1,c.isLoading=!1,[2]):S&&(U=!!(Date.now()-S.createdAt>=a.dedupingInterval||y!=null&&y.forceRevalidate),!U)?(c.isValidating=!1,c.isLoading=!1,[2]):(re=function(){return M(be,void 0,void 0,function(){var O,we,ne,Ve,Oe,Ne;return F(this,function(K){switch(K.label){case 0:return O=Q.get(R),O?[3,2]:(we=Array.isArray(R)?R:[R],ne=V.apply(void 0,Ye([],He(we),!1)),Q.set(R,ne,a.dedupingInterval),[4,ge(R,ne,a.cache,s)]);case 1:return K.sent(),[3,4];case 2:return[4,ge(R,O.data,a.cache,s)];case 3:K.sent(),K.label=4;case 4:return c.isValidating=!1,c.isLoading=!1,Q.delete(R),c.error!==void 0&&(Ve=ye({shouldRetry:a.shouldRetryOnError,error:c.error}),Oe=ye({shouldRetry:y?y.shouldRetryOnError:!0,error:c.error}),Ne=!l&&Ve&&Oe,Ne&&We(m,y?y.errorRetryCount:1,a)),[2]}})})},C&&a.revalidateDebounce?(setTimeout(function(){return M(be,void 0,void 0,function(){return F(this,function(O){switch(O.label){case 0:return l?[3,2]:[4,re()];case 1:O.sent(),O.label=2;case 2:return[2]}})})},a.revalidateDebounce),[3,3]):[3,1])):[2];case 1:return[4,re()];case 2:te.sent(),te.label=3;case 3:return[2]}})})},v=function(){return M(e,void 0,void 0,function(){return F(this,function(p){return[2,m(null,{shouldRetryOnError:!1})]})})},h=null;if(!f){var I=function(){return M(e,void 0,void 0,function(){return F(this,function(p){switch(p.label){case 0:return!c.error&&a.isOnline()?[4,m()]:[3,2];case 1:return p.sent(),[3,3];case 2:h&&(clearTimeout(h),h=null),p.label=3;case 3:return a.refreshInterval&&!l&&(h=setTimeout(I,a.refreshInterval)),[2]}})})};a.refreshInterval&&(h=setTimeout(I,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",v,!1),window.addEventListener("focus",v,!1))}n.onScopeDispose(function(){l=!0,h&&(clearTimeout(h),h=null),!f&&a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",v,!1),window.removeEventListener("focus",v,!1));var p=$.get(u.value);p&&(p.data=p.data.filter(function(y){return y!==c}))});try{n.watch(u,function(p){n.isReadonly(u)||(u.value=p),c.key=p,c.isValidating=!!p,Qe(u.value,c,s),!f&&!d&&u.value&&m(),d=!1},{immediate:!0})}catch{}var E=k(k({},n.toRefs(c)),{mutate:function(p,y){return m(p,k(k({},y),{forceRevalidate:!0}))}});return E}function Ze(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function er(e,r,t){const{data:i,error:o,isValidating:a,mutate:l}=Je(e,r,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...t});return{data:n.computed(()=>i.value),response:i,error:o,isValidating:a,revalidate:l}}const w={useI18n:Fe,useMetricCardBuilder:Pe,useMetricFetcher:xe,useTrendRange:de,useRequest:er},he=Symbol("METRICS_PROVIDER_KEY"),rr=e=>{const{datasource:r,dimension:t,dimensionFilterValue:i,additionalFilter:o,queryReady:a,timeRange:l,hasTrendAccess:d,refreshInterval:f,abortController:s,queryFn:u,averageLatencies:c}=e;if(i&&!t)throw new Error("Must provide a dimension if filtering by a value");const m=!!(t&&i),v=!!(t&&!i),h=n.computed(()=>{const T=[];return m&&T.push({field:t,operator:"in",value:[i]}),o.value&&T.push(...ae.stripUnknownFilters(r.value,o.value)),T}),I={datasource:r,metrics:n.ref(["request_count"]),dimensions:[...t&&!m?[t]:[],"status_code_grouped"],filter:h,queryReady:a,timeRange:l,withTrend:n.computed(()=>d.value&&!v),refreshInterval:f,queryFn:u,abortController:s,refreshCounter:e.refreshCounter},E={datasource:r,metrics:n.computed(()=>[c.value?"response_latency_average":"response_latency_p99"]),...t&&!m?{dimensions:[t]}:{},filter:h,queryReady:a,timeRange:l,withTrend:n.computed(()=>d.value&&!v),refreshInterval:f,queryFn:u,abortController:s,refreshCounter:e.refreshCounter},p=w.useMetricFetcher(I),y=w.useMetricFetcher(E);return{trafficData:p,latencyData:y}},tr=n.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:se},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&&ae.queryableExploreDimensions.findIndex(m=>m===r.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${r.dimension}`);const t=n.inject(le);let i;t?i=t.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"),i=()=>Promise.reject(new Error("Query bridge required")));const o=Le.useAnalyticsConfigStore(),a=n.computed(()=>!0),l=n.computed(()=>!o.loading&&r.queryReady),d=n.computed(()=>r.datasource?r.datasource:"basic"),f=n.computed(()=>{const m=r.overrideTimeRange;return m&&!m.tz&&(m.tz=new Intl.DateTimeFormat().resolvedOptions().timeZone),m||{type:"relative",time_range:"7d",tz:new Intl.DateTimeFormat().resolvedOptions().timeZone}}),s=n.computed(()=>!r.percentileLatency),{trafficData:u,latencyData:c}=rr({datasource:d,dimension:r.dimension,dimensionFilterValue:r.filterValue,additionalFilter:n.toRef(r,"additionalFilter"),queryReady:l,timeRange:f,hasTrendAccess:a,refreshInterval:r.refreshInterval,queryFn:i,averageLatencies:s,abortController:r.abortController,refreshCounter:n.toRef(r,"refreshCounter")});return n.provide(he,{data:{traffic:u,latency:c},description:n.toRef(()=>r.description),containerTitle:n.toRef(()=>r.containerTitle),hasTrendAccess:a,longCardTitles:r.longCardTitles,averageLatencies:s}),(m,v)=>n.renderSlot(m.$slots,"default",{hasTrendAccess:a.value,timeRange:f.value})}}),pe=1e3,nr=1e4,ve=1e6,Ee=1e9,Re=1e12,q=(e,r)=>{if(r.separator===!1||e<1e3)return e.toString();const t=typeof r.separator=="string"?r.separator:",",i=[];return Math.round(e).toString().split("").reverse().forEach((a,l)=>{l&&l%3===0&&i.push(t),i.push(a)}),i.reverse().join("")},B=(e,r,t)=>{const i=e/r,o=t.round?"round":"floor";if(t.decimal===!1)return Math[o](i).toString();let a;t.precision?a=i:a=i<10?Math[o](i*10)/10:Math[o](i);let l=a.toString();return typeof t.decimal=="string"&&(l=l.replace(".",t.decimal)),l};function Te(e,r={}){let t;const i=e<0;i&&(e=Math.abs(e)),r.precision&&(e=parseFloat(e.toPrecision(r.precision)));const o=r.min10k?nr:pe;return e<o||r.precision&&r.precision>Math.log10(e)?t=q(B(e,1,r),r):e<ve?t=`${B(e,pe,r)}k`:e<Ee?t=`${B(e,ve,r)}m`:e<Re?t=`${q(B(e,Ee,r),r)}b`:t=`${q(B(e,Re,r),r)}t`,i&&(t=`-${t}`),r.capital&&(t=t.toUpperCase()),r.prefix&&(t=`${r.prefix}${t}`),r.suffix&&(t=`${t}${r.suffix}`),t}Te.addCommas=q;var A=(e=>(e.GENERIC_COUNT="GenericCount",e.TRAFFIC="Traffic",e.ERROR_RATE="ErrorRate",e.LATENCY="Latency",e))(A||{}),D=(e=>(e.Small="sm",e.Medium="md",e.Large="lg",e.ExtraLarge="xl",e))(D||{});const x=2,J=x+2,Se=(e,r,t=!1)=>{let i=!r||Number(e.toFixed(J))===0?0:Number(e.toFixed(J))>0?1:-1;return t&&(i*=-1),i},Ce=(e,r,t)=>r?`${Math.abs(e*100).toFixed(x)}%`:t,_e=(e,r)=>r===0?0:e/r-1,Ie=(e,r=!1)=>(r&&(e*=-1),e>0?_.TrendUpIcon:e<0?_.TrendDownIcon:_.IndeterminateSmallIcon),ar="#ad000e",Z="#6c7489",De="#52596e",ir="#007d60",P="16px",or="20px",sr={key:0,class:"metricscard-description"},lr={class:"metricscard-valuetrend"},cr={key:0,class:"metricscard-error"},ur={key:2,class:"metricscard-trend"},dr={"data-testid":"metric-trend-change"},fr={key:0,class:"metricscard-trend-range"},mr=n.defineComponent({__name:"MetricsCard",props:{cardType:{type:String,required:!0,default:A.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:()=>D.Large},hasContainerTitle:{type:Boolean,required:!1,default:!1},titleTag:{type:String,default:"span"}},setup(e){const r=new Map([[A.GENERIC_COUNT,_.VitalsIcon],[A.TRAFFIC,_.CloudUploadIcon],[A.ERROR_RATE,_.WarningOutlineIcon],[A.LATENCY,_.ResponseIcon]]),t=e,i=d=>{const f={red:`var(--kui-color-text-danger-strong, ${ar})`,green:`var(--kui-color-text-success, ${ir})`,grey:`var(--kui-color-text-neutral-strong, ${De})`};return d>0?f.green:d<0?f.red:f.grey},o=d=>d>0?"positive":d<0?"negative":"neutral",a=[D.Medium,D.Large].includes(t.cardSize),l=[D.Small].includes(t.cardSize);return(d,f)=>{const s=n.resolveComponent("KTooltip");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["metricscard",e.cardSize])},[n.createElementVNode("div",{class:n.normalizeClass(["metricscard-title",e.cardSize])},[n.unref(l)?n.createCommentVNode("",!0):(n.openBlock(),n.createBlock(n.resolveDynamicComponent(n.unref(r).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${n.unref(Z)})`,size:n.unref(P)},null,8,["color","size"])),(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.titleTag),null,{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(e.title),1)]),_:1})),e.tooltip?(n.openBlock(),n.createBlock(s,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:n.withCtx(()=>[n.createVNode(n.unref(_.InfoIcon),{color:`var(--kui-color-text-neutral, ${n.unref(Z)})`,size:n.unref(P)},null,8,["color","size"])]),_:1},8,["text"])):n.createCommentVNode("",!0)],2),e.description&&n.unref(a)?(n.openBlock(),n.createElementBlock("div",sr,[n.createElementVNode("span",null,n.toDisplayString(e.description),1)])):n.createCommentVNode("",!0),n.createElementVNode("div",lr,[e.hasError?(n.openBlock(),n.createElementBlock("div",cr,[n.createVNode(n.unref(_.WarningIcon),{color:`var(--kui-color-text-neutral, ${n.unref(Z)})`,size:n.unref(or)},null,8,["color","size"]),n.createElementVNode("div",null," "+n.toDisplayString(e.errorMessage),1)])):(n.openBlock(),n.createElementBlock("div",{key:1,class:n.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},n.toDisplayString(e.metricValue),3)),n.unref(a)?(n.openBlock(),n.createElementBlock("div",ur,[n.createElementVNode("div",{class:n.normalizeClass(["metricscard-trend-change",o(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.trendIcon),{key:0,color:i(e.changePolarity),size:n.unref(P)},null,8,["color","size"])):(n.openBlock(),n.createBlock(n.unref(_.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${n.unref(De)})`,size:n.unref(P)},null,8,["color","size"])),n.createElementVNode("div",dr,n.toDisplayString(e.metricChange),1)],2),e.trendRange?(n.openBlock(),n.createElementBlock("div",fr,n.toDisplayString(e.trendRange),1)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])],2)}}}),ee=(e,r)=>{const t=e.__vccOpts||e;for(const[i,o]of r)t[i]=o;return t},yr=ee(mr,[["__scopeId","data-v-b1513f6f"]]),gr={},hr={class:"loading-tabs"};function pr(e,r){const t=n.resolveComponent("KSkeletonBox");return n.openBlock(),n.createElementBlock("div",hr,[n.createVNode(t,{width:"100"}),n.createVNode(t,{width:"75"})])}const vr=ee(gr,[["render",pr],["__scopeId","data-v-9c7113d7"]]),Er={key:0,class:"container-title"},Rr={key:0,class:"container-description"},Tr={key:1,class:"error-display"},Sr={key:0,class:"error-display-message"},Cr={key:2,class:"cards-wrapper"},_r=ee(n.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:()=>D.Large},containerTitle:{type:String,required:!1,default:""},containerDescription:{type:String,required:!1,default:""}},setup(e){const r=e,t=n.computed(()=>r.cards.every(o=>(o==null?void 0:o.hasError)===!0)),i=o=>{const a=_e(o.currentValue,o.previousValue)||0,l=Se(a,r.hasTrendAccess,o.increaseIsBad);return{metricValue:o.formatValueFn?o.formatValueFn(o.currentValue):Te(o.currentValue,{capital:!0,round:!0})||"0",metricChange:o.formatChangeFn?o.formatChangeFn(a):Ce(a,r.hasTrendAccess,r.fallbackDisplayText),changePolarity:l,trendIcon:Ie(l,o.increaseIsBad),cardSize:r.cardSize,hasContainerTitle:!!r.containerTitle}};return(o,a)=>(n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[r.containerTitle||r.containerDescription?(n.openBlock(),n.createElementBlock("div",Er,[n.createTextVNode(n.toDisplayString(r.containerTitle)+" ",1),r.containerDescription?(n.openBlock(),n.createElementBlock("div",Rr,n.toDisplayString(r.containerDescription),1)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),t.value?(n.openBlock(),n.createElementBlock("div",Tr,[n.createVNode(n.unref(_.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(n.openBlock(),n.createElementBlock("div",Sr,n.toDisplayString(e.errorMessage),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",Cr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.cards,(l,d)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.loading?(n.openBlock(),n.createElementBlock("div",{key:`skeleton-${d}`,class:"loading-tab"},[n.createVNode(vr,{class:n.normalizeClass(e.cardSize===n.unref(D).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])])):(n.openBlock(),n.createBlock(yr,n.mergeProps({key:d},{ref_for:!0},i(l),{"card-size":e.cardSize,"card-type":l.cardType,description:l.description,"error-message":e.errorMessage,"has-error":l.hasError,title:l.title,"title-tag":l.titleTag,tooltip:l.tooltip,"trend-range":l.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"]]),Ir=n.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:D.Large},cardToDisplay:{default:void 0}},setup(e){const r=e,t=n.inject(he);if(!t)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:i,latency:o}=t.data,{i18n:a}=w.useI18n(),l=n.computed(()=>t.containerTitle.value?D.Medium:r.cardSize),d=w.useMetricCardBuilder({cardType:A.TRAFFIC,title:n.computed(()=>t.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:i.mapped,hasError:i.hasError,lookupKey:r.lookupKey,sumGroupedValues:N,trendRange:i.trendRange}),f=E=>`${E.toFixed(x)}%`,s=n.computed(()=>{const E=i.mapped.value,p=L(E,"current",r.lookupKey,G),y=L(E,"current",r.lookupKey,N),T=p/y*100||0,R=L(E,"previous",r.lookupKey,G),S=L(E,"previous",r.lookupKey,N),C=R/S*100||0;return{cardType:A.ERROR_RATE,hasError:i.hasError.value,currentValue:T,previousValue:C,formatValueFn:f,title:t.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:i.trendRange.value}}),u=E=>`${E}ms`,c=w.useMetricCardBuilder({cardType:A.LATENCY,title:n.computed(()=>{const{longCardTitles:E,averageLatencies:p}=t,y=p.value?"averageLatency":"p99Latency";return E?a.t(`metricCard.long.${y}`):l.value===D.Small?a.t(`metricCard.small.${y}`):a.t(`metricCard.short.${y}`)}),hasError:o.hasError,record:o.mapped,lookupKey:r.lookupKey,increaseIsBad:!0,formatValueFn:u,trendRange:o.trendRange}),m=n.computed(()=>r.cardToDisplay==="TRAFFIC"?[d.value]:r.cardToDisplay==="ERROR_RATE"?[s.value]:r.cardToDisplay==="LATENCY"?[c.value]:[d.value,s.value,c.value]),v=n.computed(()=>r.cardToDisplay==="TRAFFIC"||r.cardToDisplay==="ERROR_RATE"?i.isLoading.value:r.cardToDisplay==="LATENCY"?o.isLoading.value:i.isLoading.value||o.isLoading.value),h=n.computed(()=>({cards:m.value,containerTitle:t.containerTitle.value,containerDescription:t.description.value,loading:v.value,hasTrendAccess:t.hasTrendAccess.value,fallbackDisplayText:a.t("general.notAvailable"),cardSize:l.value,hideTitle:!0})),I=n.computed(()=>({loading:h.value.loading,trafficCard:d.value,errorRateCard:s.value,latencyCard:c.value,errorRateFormatted:f(s.value.currentValue),latencyFormatted:u(c.value.currentValue)}));return(E,p)=>n.renderSlot(E.$slots,"default",{cardValues:I.value},()=>[n.createVNode(_r,n.normalizeProps(n.guardReactiveProps(h.value)),null,16)])}}),z=e=>new Date(e),Dr=(e,r)=>{const t=e.body;e.reply({statusCode:200,body:ke(t,r)})},Ae=e=>e.reduce((r,t)=>(r[t]={name:t},r),{}),ke=(e,r)=>{var I,E,p;const t=r!=null&&r.timeRange&&{start:r.timeRange.start,end:r.timeRange.end}||((I=e.time_range)==null?void 0:I.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},i=t.end.getTime()-t.start.getTime(),o=e.granularity==="trend"?{start:new Date(t.start.getTime()-i),end:t.end,granularity:t.end.getTime()-t.start.getTime()}:{start:t.start,end:t.end,granularity:t.end.getTime()-t.start.getTime()},a=o.end.getTime(),l=o.start.getTime(),d=o.granularity,f=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 s=(e.dimensions??[]).find(y=>y!=="time"),u=(r==null?void 0:r.dimensionNames)??[],c=Math.max(u.length,1),m=e.metrics||[],v=[];for(let y=0;y<f;y++)for(let T=0;T<c;T++){const R=s?{[s]:u[T]}:{};(E=e.dimensions)!=null&&E.includes("status_code_grouped")?N.forEach(S=>{const C=m.reduce((V,U)=>((r==null?void 0:r.deterministic)??!0?V[U]=(f-y)*1e3+100*T+1:V[U]=Math.round(Math.random()*1e3),V),{...R,status_code_grouped:S});v.push({version:"v1",timestamp:y===0?z(l).toISOString():z(l+d).toISOString(),event:C})}):v.push({version:"v1",timestamp:y===0?z(l).toISOString():z(l+d).toISOString(),event:m.reduce((S,C)=>((r==null?void 0:r.deterministic)??!0?S[C]=(f-y)*1e3+100*T+1:S[C]=Math.round(Math.random()*1e3),S),{...R})})}const h={start:new Date(l).toISOString(),end:new Date(a).toISOString(),granularity_ms:d,display:s?{[s]:Ae(u),...(p=e.dimensions)!=null&&p.includes("status_code_grouped")?{status_code_grouped:Ae(N)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:v,meta:h}};g.ALL_STATUS_CODE_GROUPS=N,g.DECIMAL_DISPLAY=x,g.DECIMAL_ROUNDING_PRECISION=J,g.DEFAULT_REFRESH_INTERVAL=se,g.INJECT_QUERY_PROVIDER=le,g.MAX_ANALYTICS_REQUEST_RETRIES=oe,g.MetricCardSize=D,g.MetricCardType=A,g.MetricsConsumer=Ir,g.MetricsProvider=tr,g.STATUS_CODES_FAILED=G,g.STATUS_CODES_SUCCESS=Be,g.calculateChange=_e,g.changePolarity=Se,g.defineIcon=Ie,g.metricChange=Ce,g.mockExploreResponse=ke,g.mockExploreResponseFromCypress=Dr,g.useTrendRange=de,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(g,n){typeof exports=="object"&&typeof module<"u"?n(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"],n):(g=typeof globalThis<"u"?globalThis:g||self,n(g["kong-ui-public-vitals-metric-provider"]={},g.Vue,g["kong-ui-public-analytics-utilities"],g["kong-ui-public-i18n"],g.axios,g["kong-ui-public-analytics-config-store"],g.KongIcons))})(this,function(g,n,ae,ie,kr,Le,_){"use strict";const Me={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","90d":"vs previous 90 days","180d":"vs previous 180 days","365d":"vs previous 365 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 Fe(){const e=ie.createI18n("en-us",Me);return{i18n:e,i18nT:ie.i18nTComponent(e)}}const oe=2,N=["1XX","2XX","3XX","4XX","5XX"],G=["4XX","5XX"],Be=["1XX","2XX","3XX"],se=30*1e3,le="analytics-query-provider";var ce=(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))(ce||{});const qe=e=>{var r,t,i,o,a;return e?!!((r=Object.keys(e))!=null&&r.length||(t=e.data)!=null&&t.length||(o=(i=e.data)==null?void 0:i.data)!=null&&o.length||!((a=e.data)!=null&&a.data)&&typeof e.data=="object"&&Object.keys(e==null?void 0:e.data).length):!1};function $e(e=n.ref({}),r,t,i=qe){const o=n.ref("PENDING");return n.watchEffect(()=>{const a=i(e.value);if(e.value&&a&&t.value){o.value="VALIDATING_HAS_DATA";return}if(e.value&&t.value){o.value="VALIDATING";return}if(e.value&&r.value){o.value="STALE_IF_ERROR";return}if(e.value===void 0&&!r.value){o.value="PENDING";return}if(e.value&&!r.value&&a){o.value="SUCCESS_HAS_DATA";return}if(e.value&&!r.value){o.value="SUCCESS";return}e.value===void 0&&r&&(o.value="ERROR")}),{state:o,swrvState:ce}}const b=Symbol("default"),X="status_code_grouped",ue=(e,r,t,i,o)=>{e[r][t]||(e[r][t]={}),e[r][t][i]=o};function Ue(e,r){var d;const t=((d=e.meta.metric_names)==null?void 0:d[0])||"",i=new Date(e.meta.start).getTime(),o=Object.keys(e.meta.display||{}),a=!!o.find(f=>f===X),l=o.find(f=>f!==X);return o.length>2||o.length>1&&!a?(console.error("Don't know how to work with provided dimensions:",o),{previous:{[b]:{[b]:0}},current:{[b]:{[b]:0}}}):e.data.reduce((f,s)=>{const u=s.event[t],c=l?s.event[l]:b,m=a?s.event[X]:b;return new Date(s.timestamp).getTime()===i&&r?ue(f,"previous",c,m,u):ue(f,"current",c,m,u),f},{previous:{},current:{}})}function ze(e){e.queryReady===void 0&&(e.queryReady=n.computed(()=>!0));const r=n.computed(()=>{var u,c;return{metrics:e.metrics.value,dimensions:[...(u=e.dimensions)!=null&&u.length?[...e.dimensions]:[],...e.withTrend.value?["time"]:[]],granularity:e.withTrend.value?"trend":void 0,...(c=e.filter.value)!=null&&c.length?{filters:e.filter.value}:{},time_range:e.timeRange.value}}),t=n.computed(()=>{var c,m,p,h;if(!((c=e.queryReady)!=null&&c.value))return null;const u=(m=e.filter)!=null&&m.value?JSON.stringify(e.filter.value):"";return`metric-fetcher-${JSON.stringify(e.timeRange.value)}-${(p=e.dimensions)==null?void 0:p.join("-")}-${(h=e.metrics.value)==null?void 0:h.join("-")}-${u}-${e.refreshCounter.value}`}),{response:i,error:o,isValidating:a}=w.useRequest(()=>t.value,()=>e.queryFn({datasource:e.datasource.value,query:r.value},e.abortController??new AbortController),{refreshInterval:e.refreshInterval,revalidateOnFocus:!1,errorRetryCount:oe}),{state:l,swrvState:d}=$e(i,o,a),f=n.computed(()=>{var u,c,m,p,h,I,E;return!((c=(u=i.value)==null?void 0:u.data)!=null&&c.length)||!((p=(m=i.value)==null?void 0:m.meta)!=null&&p.display)||!((E=(I=(h=i.value)==null?void 0:h.meta)==null?void 0:I.metric_names)!=null&&E.length)?{current:{},previous:{}}:Ue(i.value,e.withTrend.value)}),s=w.useTrendRange(e.withTrend,e.timeRange,n.computed(()=>{var u;return(u=i.value)==null?void 0:u.meta}));return{isLoading:n.computed(()=>d.PENDING===l.value),hasError:n.computed(()=>d.ERROR===l.value),raw:i,mapped:f,trendRange:s}}const L=(e,r,t=b,i)=>(i??[b]).reduce((a,l)=>{const d=e[r][t];return d?a+(d[l]||0):a},0);function xe(e){const{cardType:r,title:t,description:i,record:o,hasError:a,increaseIsBad:l,formatValueFn:d,trendRange:f}=e;return n.computed(()=>{let s=0,u=0;if(o!=null&&o.value)try{s=L(o.value,"current",e.lookupKey,e.sumGroupedValues),u=L(o.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:s,previousValue:u,title:t.value,description:i,increaseIsBad:!!l,formatValueFn:d,trendRange:f==null?void 0:f.value}})}function de(e,r,t){const{i18n:i}=w.useI18n(),o=1e3*60,a=o*60,l=a*24,d=(s,u)=>{let c=u-s;e.value&&(c/=2);const m=c/l,p=c/a,h=c/o;return m>=1?i.t("trendRange.custom_days",{numDays:Math.round(m)}):p>=1?i.t("trendRange.custom_hours",{numHours:Math.round(p)}):h>=1?i.t("trendRange.custom_minutes",{numMinutes:Math.round(h)}):i.t("trendRange.custom_days",{numDays:Math.round(m)})},f=()=>{var s,u;if((s=t==null?void 0:t.value)!=null&&s.start&&t.value.end)return{startMs:new Date(t.value.start).getTime(),endMs:new Date(t.value.end).getTime()};if(((u=r==null?void 0:r.value)==null?void 0:u.type)==="absolute"&&r.value.start&&r.value.end)return{startMs:new Date(r.value.start).getTime(),endMs:new Date(r.value.end).getTime()}};return n.computed(()=>{var s,u;if(((s=r==null?void 0:r.value)==null?void 0:s.type)==="relative"&&e.value)return i.t(`trendRange.${r.value.time_range}`);if(e.value||((u=r==null?void 0:r.value)==null?void 0:u.type)==="absolute"){const c=f();if(c)return d(c.startMs,c.endMs)}return""})}var j=new WeakMap,fe=0;function Pe(e){if(!e.length)return"";for(var r="arg",t=0;t<e.length;++t){var i=void 0;e[t]===null||typeof e[t]!="object"&&typeof e[t]!="function"?typeof e[t]=="string"?i='"'+e[t]+'"':i=String(e[t]):j.has(e[t])?i=j.get(e[t]):(i=fe,j.set(e[t],fe++)),r+="@"+i}return r}function Ke(e){if(typeof e=="function")try{e=e()}catch{e=""}return Array.isArray(e)?e=Pe(e):e=String(e||""),e}var H=function(){function e(r){r===void 0&&(r=0),this.items=new Map,this.ttl=r}return e.prototype.serializeKey=function(r){return Ke(r)},e.prototype.get=function(r){var t=this.serializeKey(r);return this.items.get(t)},e.prototype.set=function(r,t,i){var o=this.serializeKey(r),a=i||this.ttl,l=Date.now(),d={data:t,createdAt:l,expiresAt:a?l+a:1/0};this.dispatchExpire(a,d,o),this.items.set(o,d)},e.prototype.dispatchExpire=function(r,t,i){var o=this;r&&setTimeout(function(){var a=Date.now(),l=a>=t.expiresAt;l&&o.delete(i)},r)},e.prototype.delete=function(r){this.items.delete(r)},e}();function Ge(){return typeof navigator.onLine<"u"?navigator.onLine:!0}function Xe(){return typeof document<"u"&&typeof document.visibilityState<"u"?document.visibilityState!=="hidden":!0}var je=function(e){return fetch(e).then(function(r){return r.json()})};const Y={isOnline:Ge,isDocumentVisible:Xe,fetcher:je};var A=function(){return A=Object.assign||function(e){for(var r,t=1,i=arguments.length;t<i;t++){r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},A.apply(this,arguments)},M=function(e,r,t,i){function o(a){return a instanceof t?a:new t(function(l){l(a)})}return new(t||(t=Promise))(function(a,l){function d(u){try{s(i.next(u))}catch(c){l(c)}}function f(u){try{s(i.throw(u))}catch(c){l(c)}}function s(u){u.done?a(u.value):o(u.value).then(d,f)}s((i=i.apply(e,r||[])).next())})},F=function(e,r){var t={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,o,a,l;return l={next:d(0),throw:d(1),return:d(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function d(s){return function(u){return f([s,u])}}function f(s){if(i)throw new TypeError("Generator is already executing.");for(;t;)try{if(i=1,o&&(a=s[0]&2?o.return:s[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,s[1])).done)return a;switch(o=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return t.label++,{value:s[1],done:!1};case 5:t.label++,o=s[1],s=[0];continue;case 7:s=t.ops.pop(),t.trys.pop();continue;default:if(a=t.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){t=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]<a[3])){t.label=s[1];break}if(s[0]===6&&t.label<a[1]){t.label=a[1],a=s;break}if(a&&t.label<a[2]){t.label=a[2],t.ops.push(s);break}a[2]&&t.ops.pop(),t.trys.pop();continue}s=r.call(e,t)}catch(u){s=[6,u],o=0}finally{i=a=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}},He=function(e,r){var t=typeof Symbol=="function"&&e[Symbol.iterator];if(!t)return e;var i=t.call(e),o,a=[],l;try{for(;(r===void 0||r-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(d){l={error:d}}finally{try{o&&!o.done&&(t=i.return)&&t.call(i)}finally{if(l)throw l.error}}return a},Ye=function(e,r,t){if(t||arguments.length===2)for(var i=0,o=r.length,a;i<o;i++)(a||!(i in r))&&(a||(a=Array.prototype.slice.call(r,0,i)),a[i]=r[i]);return e.concat(a||Array.prototype.slice.call(r))},me=new H,U=new H,Q=new H,W={cache:me,refreshInterval:0,ttl:0,serverTTL:1e3,dedupingInterval:2e3,revalidateOnFocus:!0,revalidateDebounce:0,shouldRetryOnError:!0,errorRetryInterval:5e3,errorRetryCount:5,fetcher:Y.fetcher,isOnline:Y.isOnline,isDocumentVisible:Y.isDocumentVisible};function Qe(e,r,t){var i=U.get(e);if(i)i.data.push(r);else{var o=5e3;U.set(e,[r],t>0?t+o:t)}}function We(e,r,t){if(t.isDocumentVisible()&&!(t.errorRetryCount!==void 0&&r>t.errorRetryCount)){var i=Math.min(r||0,t.errorRetryCount),o=i*t.errorRetryInterval;setTimeout(function(){e(null,{errorRetryCount:i+1,shouldRetryOnError:!0})},o)}}function ye(e){var r=e.shouldRetry,t=r===void 0?void 0:r,i=e.error;return typeof t=="function"?t(i):typeof t=="boolean"?t:W.shouldRetryOnError}var ge=function(e,r,t,i){return t===void 0&&(t=me),i===void 0&&(i=W.ttl),M(void 0,void 0,void 0,function(){var o,a,l,d,f,s,u;return F(this,function(c){switch(c.label){case 0:if(!Ze(r))return[3,5];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,r];case 2:return o=c.sent(),[3,4];case 3:return d=c.sent(),a=d,[3,4];case 4:return[3,6];case 5:o=r,c.label=6;case 6:if(l=!1,f={data:o,error:a,isValidating:l},typeof o<"u")try{t.set(e,f,i)}catch(m){console.error("swrv(mutate): failed to set cache",m)}return s=U.get(e),s&&s.data.length&&(u=s.data.filter(function(m){return m.key===e}),u.forEach(function(m,p){typeof f.data<"u"&&(m.data=f.data),m.error=f.error,m.isValidating=f.isValidating,m.isLoading=f.isValidating;var h=p===u.length-1;h||delete u[p]}),u=u.filter(Boolean)),[2,f]}})})};function Je(){for(var e=this,r=[],t=0;t<arguments.length;t++)r[t]=arguments[t];var i,o,a=A({},W),l=!1,d=!1;if(!n.getCurrentScope())return console.error("useSWRV must be called inside setup() or an active effectScope()."),null;var f=typeof window>"u"||typeof document>"u";r.length>=1&&(i=r[0]),r.length>=2&&(o=r[1]),r.length>2&&(a=A(A({},a),r[2]));var s=f?a.serverTTL:a.ttl,u=typeof i=="function"?i:n.ref(i);typeof o>"u"&&(o=a.fetcher);var c=null;c||(c=n.reactive({data:void 0,error:void 0,isValidating:!0,isLoading:!0,key:null}));var m=function(v,y){return M(e,void 0,void 0,function(){var T,R,S,C,V,$,re,be=this;return F(this,function(te){switch(te.label){case 0:return T=c.data===void 0,R=u.value,R?(S=a.cache.get(R),C=S&&S.data,c.isValidating=!0,c.isLoading=!C,C&&(c.data=C.data,c.error=C.error),V=v||o,!V||!a.isDocumentVisible()&&!T||(y==null?void 0:y.forceRevalidate)!==void 0&&!(y!=null&&y.forceRevalidate)?(c.isValidating=!1,c.isLoading=!1,[2]):S&&($=!!(Date.now()-S.createdAt>=a.dedupingInterval||y!=null&&y.forceRevalidate),!$)?(c.isValidating=!1,c.isLoading=!1,[2]):(re=function(){return M(be,void 0,void 0,function(){var O,we,ne,Ve,Oe,Ne;return F(this,function(K){switch(K.label){case 0:return O=Q.get(R),O?[3,2]:(we=Array.isArray(R)?R:[R],ne=V.apply(void 0,Ye([],He(we),!1)),Q.set(R,ne,a.dedupingInterval),[4,ge(R,ne,a.cache,s)]);case 1:return K.sent(),[3,4];case 2:return[4,ge(R,O.data,a.cache,s)];case 3:K.sent(),K.label=4;case 4:return c.isValidating=!1,c.isLoading=!1,Q.delete(R),c.error!==void 0&&(Ve=ye({shouldRetry:a.shouldRetryOnError,error:c.error}),Oe=ye({shouldRetry:y?y.shouldRetryOnError:!0,error:c.error}),Ne=!l&&Ve&&Oe,Ne&&We(m,y?y.errorRetryCount:1,a)),[2]}})})},C&&a.revalidateDebounce?(setTimeout(function(){return M(be,void 0,void 0,function(){return F(this,function(O){switch(O.label){case 0:return l?[3,2]:[4,re()];case 1:O.sent(),O.label=2;case 2:return[2]}})})},a.revalidateDebounce),[3,3]):[3,1])):[2];case 1:return[4,re()];case 2:te.sent(),te.label=3;case 3:return[2]}})})},p=function(){return M(e,void 0,void 0,function(){return F(this,function(v){return[2,m(null,{shouldRetryOnError:!1})]})})},h=null;if(!f){var I=function(){return M(e,void 0,void 0,function(){return F(this,function(v){switch(v.label){case 0:return!c.error&&a.isOnline()?[4,m()]:[3,2];case 1:return v.sent(),[3,3];case 2:h&&(clearTimeout(h),h=null),v.label=3;case 3:return a.refreshInterval&&!l&&(h=setTimeout(I,a.refreshInterval)),[2]}})})};a.refreshInterval&&(h=setTimeout(I,a.refreshInterval)),a.revalidateOnFocus&&(document.addEventListener("visibilitychange",p,!1),window.addEventListener("focus",p,!1))}n.onScopeDispose(function(){l=!0,h&&(clearTimeout(h),h=null),!f&&a.revalidateOnFocus&&(document.removeEventListener("visibilitychange",p,!1),window.removeEventListener("focus",p,!1));var v=U.get(u.value);v&&(v.data=v.data.filter(function(y){return y!==c}))});try{n.watch(u,function(v){n.isReadonly(u)||(u.value=v),c.key=v,c.isValidating=!!v,Qe(u.value,c,s),!f&&!d&&u.value&&m(),d=!1},{immediate:!0})}catch{}var E=A(A({},n.toRefs(c)),{mutate:function(v,y){return m(v,A(A({},y),{forceRevalidate:!0}))}});return E}function Ze(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}function er(e,r,t){const{data:i,error:o,isValidating:a,mutate:l}=Je(e,r,{revalidateDebounce:500,revalidateOnFocus:!1,dedupingInterval:100,...t});return{data:n.computed(()=>i.value),response:i,error:o,isValidating:a,revalidate:l}}const w={useI18n:Fe,useMetricCardBuilder:xe,useMetricFetcher:ze,useTrendRange:de,useRequest:er},he=Symbol("METRICS_PROVIDER_KEY"),rr=e=>{const{datasource:r,dimension:t,dimensionFilterValue:i,additionalFilter:o,queryReady:a,timeRange:l,hasTrendAccess:d,refreshInterval:f,abortController:s,queryFn:u,averageLatencies:c}=e;if(i&&!t)throw new Error("Must provide a dimension if filtering by a value");const m=!!(t&&i),p=!!(t&&!i),h=n.computed(()=>{const T=[];return m&&T.push({field:t,operator:"in",value:[i]}),o.value&&T.push(...ae.stripUnknownFilters(r.value,o.value)),T}),I={datasource:r,metrics:n.ref(["request_count"]),dimensions:[...t&&!m?[t]:[],"status_code_grouped"],filter:h,queryReady:a,timeRange:l,withTrend:n.computed(()=>d.value&&!p),refreshInterval:f,queryFn:u,abortController:s,refreshCounter:e.refreshCounter},E={datasource:r,metrics:n.computed(()=>[c.value?"response_latency_average":"response_latency_p99"]),...t&&!m?{dimensions:[t]}:{},filter:h,queryReady:a,timeRange:l,withTrend:n.computed(()=>d.value&&!p),refreshInterval:f,queryFn:u,abortController:s,refreshCounter:e.refreshCounter},v=w.useMetricFetcher(I),y=w.useMetricFetcher(E);return{trafficData:v,latencyData:y}},tr=n.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:se},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&&ae.queryableExploreDimensions.findIndex(m=>m===r.dimension)===-1)throw new Error(`Attempted to use MetricsProvider with an invalid dimension: ${r.dimension}`);const t=n.inject(le);let i;t?i=t.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"),i=()=>Promise.reject(new Error("Query bridge required")));const o=Le.useAnalyticsConfigStore(),a=n.computed(()=>!0),l=n.computed(()=>!o.loading&&r.queryReady),d=n.computed(()=>r.datasource?r.datasource:"basic"),f=n.computed(()=>{const m=r.overrideTimeRange;return m&&!m.tz&&(m.tz=new Intl.DateTimeFormat().resolvedOptions().timeZone),m||{type:"relative",time_range:"7d",tz:new Intl.DateTimeFormat().resolvedOptions().timeZone}}),s=n.computed(()=>!r.percentileLatency),{trafficData:u,latencyData:c}=rr({datasource:d,dimension:r.dimension,dimensionFilterValue:r.filterValue,additionalFilter:n.toRef(r,"additionalFilter"),queryReady:l,timeRange:f,hasTrendAccess:a,refreshInterval:r.refreshInterval,queryFn:i,averageLatencies:s,abortController:r.abortController,refreshCounter:n.toRef(r,"refreshCounter")});return n.provide(he,{data:{traffic:u,latency:c},description:n.toRef(()=>r.description),containerTitle:n.toRef(()=>r.containerTitle),hasTrendAccess:a,longCardTitles:r.longCardTitles,averageLatencies:s}),(m,p)=>n.renderSlot(m.$slots,"default",{hasTrendAccess:a.value,timeRange:f.value})}}),ve=1e3,nr=1e4,pe=1e6,Ee=1e9,Re=1e12,q=(e,r)=>{if(r.separator===!1||e<1e3)return e.toString();const t=typeof r.separator=="string"?r.separator:",",i=[];return Math.round(e).toString().split("").reverse().forEach((a,l)=>{l&&l%3===0&&i.push(t),i.push(a)}),i.reverse().join("")},B=(e,r,t)=>{const i=e/r,o=t.round?"round":"floor";if(t.decimal===!1)return Math[o](i).toString();let a;t.precision?a=i:a=i<10?Math[o](i*10)/10:Math[o](i);let l=a.toString();return typeof t.decimal=="string"&&(l=l.replace(".",t.decimal)),l};function Te(e,r={}){let t;const i=e<0;i&&(e=Math.abs(e)),r.precision&&(e=parseFloat(e.toPrecision(r.precision)));const o=r.min10k?nr:ve;return e<o||r.precision&&r.precision>Math.log10(e)?t=q(B(e,1,r),r):e<pe?t=`${B(e,ve,r)}k`:e<Ee?t=`${B(e,pe,r)}m`:e<Re?t=`${q(B(e,Ee,r),r)}b`:t=`${q(B(e,Re,r),r)}t`,i&&(t=`-${t}`),r.capital&&(t=t.toUpperCase()),r.prefix&&(t=`${r.prefix}${t}`),r.suffix&&(t=`${t}${r.suffix}`),t}Te.addCommas=q;var k=(e=>(e.GENERIC_COUNT="GenericCount",e.TRAFFIC="Traffic",e.ERROR_RATE="ErrorRate",e.LATENCY="Latency",e))(k||{}),D=(e=>(e.Small="sm",e.Medium="md",e.Large="lg",e.ExtraLarge="xl",e))(D||{});const z=2,J=z+2,Se=(e,r,t=!1)=>{let i=!r||Number(e.toFixed(J))===0?0:Number(e.toFixed(J))>0?1:-1;return t&&(i*=-1),i},Ce=(e,r,t)=>r?`${Math.abs(e*100).toFixed(z)}%`:t,_e=(e,r)=>r===0?0:e/r-1,Ie=(e,r=!1)=>(r&&(e*=-1),e>0?_.TrendUpIcon:e<0?_.TrendDownIcon:_.IndeterminateSmallIcon),ar="#ad000e",Z="#6c7489",De="#52596e",ir="#007d60",x="16px",or="20px",sr={key:0,class:"metricscard-description"},lr={class:"metricscard-valuetrend"},cr={key:0,class:"metricscard-error"},ur={key:2,class:"metricscard-trend"},dr={"data-testid":"metric-trend-change"},fr={key:0,class:"metricscard-trend-range"},mr=n.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:()=>D.Large},hasContainerTitle:{type:Boolean,required:!1,default:!1},titleTag:{type:String,default:"span"}},setup(e){const r=new Map([[k.GENERIC_COUNT,_.VitalsIcon],[k.TRAFFIC,_.CloudUploadIcon],[k.ERROR_RATE,_.WarningOutlineIcon],[k.LATENCY,_.ResponseIcon]]),t=e,i=d=>{const f={red:`var(--kui-color-text-danger-strong, ${ar})`,green:`var(--kui-color-text-success, ${ir})`,grey:`var(--kui-color-text-neutral-strong, ${De})`};return d>0?f.green:d<0?f.red:f.grey},o=d=>d>0?"positive":d<0?"negative":"neutral",a=[D.Medium,D.Large].includes(t.cardSize),l=[D.Small].includes(t.cardSize);return(d,f)=>{const s=n.resolveComponent("KTooltip");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["metricscard",e.cardSize])},[n.createElementVNode("div",{class:n.normalizeClass(["metricscard-title",e.cardSize])},[n.unref(l)?n.createCommentVNode("",!0):(n.openBlock(),n.createBlock(n.resolveDynamicComponent(n.unref(r).get(e.cardType)),{key:0,class:"metricscard-icon",color:`var(--kui-color-text-neutral, ${n.unref(Z)})`,size:`var(--kui-icon-size-30, ${n.unref(x)})`},null,8,["color","size"])),(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.titleTag),null,{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(e.title),1)]),_:1})),e.tooltip?(n.openBlock(),n.createBlock(s,{key:1,class:"metricscard-tooltip",placement:"right",text:e.tooltip},{default:n.withCtx(()=>[n.createVNode(n.unref(_.InfoIcon),{color:`var(--kui-color-text-neutral, ${n.unref(Z)})`,size:`var(--kui-icon-size-30, ${n.unref(x)})`},null,8,["color","size"])]),_:1},8,["text"])):n.createCommentVNode("",!0)],2),e.description&&n.unref(a)?(n.openBlock(),n.createElementBlock("div",sr,[n.createElementVNode("span",null,n.toDisplayString(e.description),1)])):n.createCommentVNode("",!0),n.createElementVNode("div",lr,[e.hasError?(n.openBlock(),n.createElementBlock("div",cr,[n.createVNode(n.unref(_.WarningIcon),{color:`var(--kui-color-text-neutral, ${n.unref(Z)})`,size:`var(--kui-icon-size-40, ${n.unref(or)})`},null,8,["color","size"]),n.createElementVNode("div",null," "+n.toDisplayString(e.errorMessage),1)])):(n.openBlock(),n.createElementBlock("div",{key:1,class:n.normalizeClass(["metricscard-value",e.cardSize]),"data-testid":"metric-value"},n.toDisplayString(e.metricValue),3)),n.unref(a)?(n.openBlock(),n.createElementBlock("div",ur,[n.createElementVNode("div",{class:n.normalizeClass(["metricscard-trend-change",o(e.changePolarity)]),"data-testid":"metric-trend-parent"},[e.changePolarity!==0?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.trendIcon),{key:0,color:i(e.changePolarity),size:`var(--kui-icon-size-30, ${n.unref(x)})`},null,8,["color","size"])):(n.openBlock(),n.createBlock(n.unref(_.EqualIcon),{key:1,color:`var(--kui-color-text-neutral-strong, ${n.unref(De)})`,size:`var(--kui-icon-size-30, ${n.unref(x)})`},null,8,["color","size"])),n.createElementVNode("div",dr,n.toDisplayString(e.metricChange),1)],2),e.trendRange?(n.openBlock(),n.createElementBlock("div",fr,n.toDisplayString(e.trendRange),1)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])],2)}}}),ee=(e,r)=>{const t=e.__vccOpts||e;for(const[i,o]of r)t[i]=o;return t},yr=ee(mr,[["__scopeId","data-v-71e77830"]]),gr={},hr={class:"loading-tabs"};function vr(e,r){const t=n.resolveComponent("KSkeletonBox");return n.openBlock(),n.createElementBlock("div",hr,[n.createVNode(t,{width:"100"}),n.createVNode(t,{width:"75"})])}const pr=ee(gr,[["render",vr],["__scopeId","data-v-9c7113d7"]]),Er={key:0,class:"container-title"},Rr={key:0,class:"container-description"},Tr={key:1,class:"error-display"},Sr={key:0,class:"error-display-message"},Cr={key:2,class:"cards-wrapper"},_r=ee(n.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:()=>D.Large},containerTitle:{type:String,required:!1,default:""},containerDescription:{type:String,required:!1,default:""}},setup(e){const r=e,t=n.computed(()=>r.cards.every(o=>(o==null?void 0:o.hasError)===!0)),i=o=>{const a=_e(o.currentValue,o.previousValue)||0,l=Se(a,r.hasTrendAccess,o.increaseIsBad);return{metricValue:o.formatValueFn?o.formatValueFn(o.currentValue):Te(o.currentValue,{capital:!0,round:!0})||"0",metricChange:o.formatChangeFn?o.formatChangeFn(a):Ce(a,r.hasTrendAccess,r.fallbackDisplayText),changePolarity:l,trendIcon:Ie(l,o.increaseIsBad),cardSize:r.cardSize,hasContainerTitle:!!r.containerTitle}};return(o,a)=>(n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["kong-ui-public-metric-card-container",e.cardSize])},[r.containerTitle||r.containerDescription?(n.openBlock(),n.createElementBlock("div",Er,[n.createTextVNode(n.toDisplayString(r.containerTitle)+" ",1),r.containerDescription?(n.openBlock(),n.createElementBlock("div",Rr,n.toDisplayString(r.containerDescription),1)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),t.value?(n.openBlock(),n.createElementBlock("div",Tr,[n.createVNode(n.unref(_.WarningIcon),{class:"error-display-icon"}),e.errorMessage?(n.openBlock(),n.createElementBlock("div",Sr,n.toDisplayString(e.errorMessage),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",Cr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.cards,(l,d)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.loading?(n.openBlock(),n.createElementBlock("div",{key:`skeleton-${d}`,class:"loading-tab"},[n.createVNode(pr,{class:n.normalizeClass(e.cardSize===n.unref(D).Small?"loading-tabs-small":"loading-tabs-large")},null,8,["class"])])):(n.openBlock(),n.createBlock(yr,n.mergeProps({key:d},{ref_for:!0},i(l),{"card-size":e.cardSize,"card-type":l.cardType,description:l.description,"error-message":e.errorMessage,"has-error":l.hasError,title:l.title,"title-tag":l.titleTag,tooltip:l.tooltip,"trend-range":l.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"]]),Ir=n.defineComponent({__name:"MetricsConsumer",props:{lookupKey:{default:void 0},cardSize:{default:D.Large},cardToDisplay:{default:void 0}},setup(e){const r=e,t=n.inject(he);if(!t)throw new Error("MetricsConsumer must be nested inside a MetricsProvider instance.");const{traffic:i,latency:o}=t.data,{i18n:a}=w.useI18n(),l=n.computed(()=>t.containerTitle.value?D.Medium:r.cardSize),d=w.useMetricCardBuilder({cardType:k.TRAFFIC,title:n.computed(()=>t.longCardTitles?a.t("metricCard.long.traffic"):a.t("metricCard.short.traffic")),record:i.mapped,hasError:i.hasError,lookupKey:r.lookupKey,sumGroupedValues:N,trendRange:i.trendRange}),f=E=>`${E.toFixed(z)}%`,s=n.computed(()=>{const E=i.mapped.value,v=L(E,"current",r.lookupKey,G),y=L(E,"current",r.lookupKey,N),T=v/y*100||0,R=L(E,"previous",r.lookupKey,G),S=L(E,"previous",r.lookupKey,N),C=R/S*100||0;return{cardType:k.ERROR_RATE,hasError:i.hasError.value,currentValue:T,previousValue:C,formatValueFn:f,title:t.longCardTitles?a.t("metricCard.long.errorRate"):a.t("metricCard.short.errorRate"),increaseIsBad:!0,trendRange:i.trendRange.value}}),u=E=>`${E}ms`,c=w.useMetricCardBuilder({cardType:k.LATENCY,title:n.computed(()=>{const{longCardTitles:E,averageLatencies:v}=t,y=v.value?"averageLatency":"p99Latency";return E?a.t(`metricCard.long.${y}`):l.value===D.Small?a.t(`metricCard.small.${y}`):a.t(`metricCard.short.${y}`)}),hasError:o.hasError,record:o.mapped,lookupKey:r.lookupKey,increaseIsBad:!0,formatValueFn:u,trendRange:o.trendRange}),m=n.computed(()=>r.cardToDisplay==="TRAFFIC"?[d.value]:r.cardToDisplay==="ERROR_RATE"?[s.value]:r.cardToDisplay==="LATENCY"?[c.value]:[d.value,s.value,c.value]),p=n.computed(()=>r.cardToDisplay==="TRAFFIC"||r.cardToDisplay==="ERROR_RATE"?i.isLoading.value:r.cardToDisplay==="LATENCY"?o.isLoading.value:i.isLoading.value||o.isLoading.value),h=n.computed(()=>({cards:m.value,containerTitle:t.containerTitle.value,containerDescription:t.description.value,loading:p.value,hasTrendAccess:t.hasTrendAccess.value,fallbackDisplayText:a.t("general.notAvailable"),cardSize:l.value,hideTitle:!0})),I=n.computed(()=>({loading:h.value.loading,trafficCard:d.value,errorRateCard:s.value,latencyCard:c.value,errorRateFormatted:f(s.value.currentValue),latencyFormatted:u(c.value.currentValue)}));return(E,v)=>n.renderSlot(E.$slots,"default",{cardValues:I.value},()=>[n.createVNode(_r,n.normalizeProps(n.guardReactiveProps(h.value)),null,16)])}}),P=e=>new Date(e),Dr=(e,r)=>{const t=e.body;e.reply({statusCode:200,body:Ae(t,r)})},ke=e=>e.reduce((r,t)=>(r[t]={name:t},r),{}),Ae=(e,r)=>{var I,E,v;const t=r!=null&&r.timeRange&&{start:r.timeRange.start,end:r.timeRange.end}||((I=e.time_range)==null?void 0:I.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},i=t.end.getTime()-t.start.getTime(),o=e.granularity==="trend"?{start:new Date(t.start.getTime()-i),end:t.end,granularity:t.end.getTime()-t.start.getTime()}:{start:t.start,end:t.end,granularity:t.end.getTime()-t.start.getTime()},a=o.end.getTime(),l=o.start.getTime(),d=o.granularity,f=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 s=(e.dimensions??[]).find(y=>y!=="time"),u=(r==null?void 0:r.dimensionNames)??[],c=Math.max(u.length,1),m=e.metrics||[],p=[];for(let y=0;y<f;y++)for(let T=0;T<c;T++){const R=s?{[s]:u[T]}:{};(E=e.dimensions)!=null&&E.includes("status_code_grouped")?N.forEach(S=>{const C=m.reduce((V,$)=>((r==null?void 0:r.deterministic)??!0?V[$]=(f-y)*1e3+100*T+1:V[$]=Math.round(Math.random()*1e3),V),{...R,status_code_grouped:S});p.push({version:"v1",timestamp:y===0?P(l).toISOString():P(l+d).toISOString(),event:C})}):p.push({version:"v1",timestamp:y===0?P(l).toISOString():P(l+d).toISOString(),event:m.reduce((S,C)=>((r==null?void 0:r.deterministic)??!0?S[C]=(f-y)*1e3+100*T+1:S[C]=Math.round(Math.random()*1e3),S),{...R})})}const h={start:new Date(l).toISOString(),end:new Date(a).toISOString(),granularity_ms:d,display:s?{[s]:ke(u),...(v=e.dimensions)!=null&&v.includes("status_code_grouped")?{status_code_grouped:ke(N)}:{}}:{},metric_names:e.metrics,query_id:"test"};return{data:p,meta:h}};g.ALL_STATUS_CODE_GROUPS=N,g.DECIMAL_DISPLAY=z,g.DECIMAL_ROUNDING_PRECISION=J,g.DEFAULT_REFRESH_INTERVAL=se,g.INJECT_QUERY_PROVIDER=le,g.MAX_ANALYTICS_REQUEST_RETRIES=oe,g.MetricCardSize=D,g.MetricCardType=k,g.MetricsConsumer=Ir,g.MetricsProvider=tr,g.STATUS_CODES_FAILED=G,g.STATUS_CODES_SUCCESS=Be,g.calculateChange=_e,g.changePolarity=Se,g.defineIcon=Ie,g.metricChange=Ce,g.mockExploreResponse=Ae,g.mockExploreResponseFromCypress=Dr,g.useTrendRange=de,Object.defineProperty(g,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": "11.3.
|
|
3
|
+
"version": "11.3.45",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/vitals-metric-provider.umd.js",
|
|
6
6
|
"module": "./dist/vitals-metric-provider.es.js",
|
|
@@ -36,21 +36,21 @@
|
|
|
36
36
|
"approximate-number": "^3.0.1",
|
|
37
37
|
"axios": "^1.16.1",
|
|
38
38
|
"swrv": "^1.2.0",
|
|
39
|
-
"@kong-ui-public/core": "^1.11.
|
|
39
|
+
"@kong-ui-public/core": "^1.11.27"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@kong/kongponents": "^9.59.0",
|
|
43
|
-
"@kong-ui-public/analytics-config-store": "^1.3.
|
|
44
|
-
"@kong-ui-public/
|
|
45
|
-
"@kong-ui-public/
|
|
43
|
+
"@kong-ui-public/analytics-config-store": "^1.3.27",
|
|
44
|
+
"@kong-ui-public/analytics-utilities": "^12.19.1",
|
|
45
|
+
"@kong-ui-public/i18n": "^2.4.6"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@kong/design-tokens": "
|
|
48
|
+
"@kong/design-tokens": "2.0.0",
|
|
49
49
|
"@kong/kongponents": "9.60.0",
|
|
50
50
|
"pinia": ">= 3.0.4 < 4",
|
|
51
|
-
"@kong-ui-public/analytics-
|
|
52
|
-
"@kong-ui-public/
|
|
53
|
-
"@kong-ui-public/
|
|
51
|
+
"@kong-ui-public/analytics-config-store": "^1.3.27",
|
|
52
|
+
"@kong-ui-public/analytics-utilities": "^12.19.1",
|
|
53
|
+
"@kong-ui-public/i18n": "^2.4.6"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"dev": "cross-env USE_SANDBOX=true vite",
|