@localstack/appinspector-ui 1.0.23 → 1.0.25
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/index.cjs +388 -383
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +236 -231
- package/dist/index.js.map +1 -1
- package/package.json +49 -37
package/dist/index.js
CHANGED
|
@@ -162,6 +162,9 @@ var WrapInComponent = ({ children, wrap, wrapperFn }) => {
|
|
|
162
162
|
return children;
|
|
163
163
|
};
|
|
164
164
|
|
|
165
|
+
// src/components/aws-service-icon/icons/index.tsx
|
|
166
|
+
import { memo } from "react";
|
|
167
|
+
|
|
165
168
|
// src/types/service-names.ts
|
|
166
169
|
var SERVICE_NAME = {
|
|
167
170
|
ACCESSANALYZER: "accessanalyzer",
|
|
@@ -2351,7 +2354,8 @@ var SvgXray = (props) => /* @__PURE__ */ jsxs118("svg", { xmlns: "http://www.w3.
|
|
|
2351
2354
|
] });
|
|
2352
2355
|
var xray_default = SvgXray;
|
|
2353
2356
|
|
|
2354
|
-
// src/components/aws-service-icon/icons/index.
|
|
2357
|
+
// src/components/aws-service-icon/icons/index.tsx
|
|
2358
|
+
import { jsx as jsx122 } from "react/jsx-runtime";
|
|
2355
2359
|
var ICONS_MAP = {
|
|
2356
2360
|
[SERVICE_NAME.ACCOUNT]: account_default,
|
|
2357
2361
|
[SERVICE_NAME.ACM]: acm_default,
|
|
@@ -2474,30 +2478,30 @@ var ICONS_MAP = {
|
|
|
2474
2478
|
[SERVICE_NAME.WAFV2]: wafv2_default,
|
|
2475
2479
|
[SERVICE_NAME.XRAY]: xray_default
|
|
2476
2480
|
};
|
|
2477
|
-
var
|
|
2478
|
-
|
|
2479
|
-
};
|
|
2481
|
+
var AwsServiceIconBase = memo((props) => {
|
|
2482
|
+
const Icon = ICONS_MAP[props.service] ?? ICONS_MAP.infrastructure;
|
|
2483
|
+
return /* @__PURE__ */ jsx122(Icon, { ...props });
|
|
2484
|
+
});
|
|
2480
2485
|
var supportedServiceNames = Object.keys(ICONS_MAP);
|
|
2481
2486
|
|
|
2482
2487
|
// src/components/aws-service-icon/aws-service-icon.tsx
|
|
2483
|
-
import { jsx as
|
|
2488
|
+
import { jsx as jsx123 } from "react/jsx-runtime";
|
|
2484
2489
|
var sizes = { large: [32, 32], medium: [22, 22], small: [11, 11] };
|
|
2485
2490
|
var AwsServiceIcon = ({ hideTooltip, service, size = "medium", title }) => {
|
|
2486
2491
|
const [width, height] = sizes[size];
|
|
2487
|
-
|
|
2488
|
-
return /* @__PURE__ */ jsx122(
|
|
2492
|
+
return /* @__PURE__ */ jsx123(
|
|
2489
2493
|
WrapInComponent,
|
|
2490
2494
|
{
|
|
2491
2495
|
wrap: !hideTooltip,
|
|
2492
|
-
wrapperFn: (child) => /* @__PURE__ */
|
|
2493
|
-
children: /* @__PURE__ */
|
|
2496
|
+
wrapperFn: (child) => /* @__PURE__ */ jsx123(Tooltip2, { placement: "top", title: title ?? service, children: child }),
|
|
2497
|
+
children: /* @__PURE__ */ jsx123(AwsServiceIconBase, { height, service, style: { display: "block" }, width })
|
|
2494
2498
|
}
|
|
2495
2499
|
);
|
|
2496
2500
|
};
|
|
2497
2501
|
|
|
2498
2502
|
// src/components/cells/pill-cell.tsx
|
|
2499
2503
|
import { Box as Box2 } from "@mui/material";
|
|
2500
|
-
import { jsx as
|
|
2504
|
+
import { jsx as jsx124 } from "react/jsx-runtime";
|
|
2501
2505
|
var PillCell = ({
|
|
2502
2506
|
backgroundColor,
|
|
2503
2507
|
borderColor,
|
|
@@ -2507,7 +2511,7 @@ var PillCell = ({
|
|
|
2507
2511
|
paddingBottom,
|
|
2508
2512
|
paddingTop
|
|
2509
2513
|
}) => {
|
|
2510
|
-
return /* @__PURE__ */
|
|
2514
|
+
return /* @__PURE__ */ jsx124(
|
|
2511
2515
|
Box2,
|
|
2512
2516
|
{
|
|
2513
2517
|
sx: {
|
|
@@ -2530,7 +2534,7 @@ var PillCell = ({
|
|
|
2530
2534
|
};
|
|
2531
2535
|
|
|
2532
2536
|
// src/components/cells/service-cell.tsx
|
|
2533
|
-
import { Fragment as Fragment2, jsx as
|
|
2537
|
+
import { Fragment as Fragment2, jsx as jsx125, jsxs as jsxs119 } from "react/jsx-runtime";
|
|
2534
2538
|
var ServiceCell = ({
|
|
2535
2539
|
borderColor,
|
|
2536
2540
|
borderWidth,
|
|
@@ -2540,26 +2544,27 @@ var ServiceCell = ({
|
|
|
2540
2544
|
showIcon = true,
|
|
2541
2545
|
width = "32px"
|
|
2542
2546
|
}) => {
|
|
2543
|
-
return /* @__PURE__ */
|
|
2547
|
+
return /* @__PURE__ */ jsx125(Box3, { sx: { width: "100%" }, children: /* @__PURE__ */ jsxs119(PillCell, { borderColor, borderWidth, height, children: [
|
|
2544
2548
|
showIcon ? /* @__PURE__ */ jsxs119(Fragment2, { children: [
|
|
2545
|
-
/* @__PURE__ */
|
|
2549
|
+
/* @__PURE__ */ jsx125(
|
|
2546
2550
|
Box3,
|
|
2547
2551
|
{
|
|
2548
2552
|
sx: {
|
|
2549
2553
|
alignItems: "center",
|
|
2550
2554
|
display: "flex",
|
|
2555
|
+
flexShrink: 0,
|
|
2551
2556
|
height,
|
|
2552
2557
|
justifyContent: "center",
|
|
2553
2558
|
overflow: "hidden",
|
|
2554
2559
|
padding: 0,
|
|
2555
2560
|
width
|
|
2556
2561
|
},
|
|
2557
|
-
children: /* @__PURE__ */
|
|
2562
|
+
children: /* @__PURE__ */ jsx125(AwsServiceIcon, { hideTooltip: true, service, size: "large" })
|
|
2558
2563
|
}
|
|
2559
2564
|
),
|
|
2560
|
-
/* @__PURE__ */
|
|
2565
|
+
/* @__PURE__ */ jsx125(Divider, { orientation: "vertical" })
|
|
2561
2566
|
] }) : void 0,
|
|
2562
|
-
/* @__PURE__ */
|
|
2567
|
+
/* @__PURE__ */ jsx125(
|
|
2563
2568
|
Typography,
|
|
2564
2569
|
{
|
|
2565
2570
|
sx: {
|
|
@@ -2583,8 +2588,8 @@ var ServiceCell = ({
|
|
|
2583
2588
|
}
|
|
2584
2589
|
),
|
|
2585
2590
|
resource ? /* @__PURE__ */ jsxs119(Fragment2, { children: [
|
|
2586
|
-
/* @__PURE__ */
|
|
2587
|
-
/* @__PURE__ */
|
|
2591
|
+
/* @__PURE__ */ jsx125(Box3, { sx: { height: "100%", paddingY: 0.5 }, children: /* @__PURE__ */ jsx125(Divider, { orientation: "vertical" }) }),
|
|
2592
|
+
/* @__PURE__ */ jsx125(
|
|
2588
2593
|
Typography,
|
|
2589
2594
|
{
|
|
2590
2595
|
sx: {
|
|
@@ -2674,7 +2679,7 @@ var searchInObject = (object, searchTerm, skipKeys = []) => {
|
|
|
2674
2679
|
};
|
|
2675
2680
|
|
|
2676
2681
|
// src/components/spans-list/spans-data-grid.tsx
|
|
2677
|
-
import { Fragment as Fragment3, jsx as
|
|
2682
|
+
import { Fragment as Fragment3, jsx as jsx126, jsxs as jsxs120 } from "react/jsx-runtime";
|
|
2678
2683
|
var resourceNameComparator = (v1 = "", v2 = "") => {
|
|
2679
2684
|
return v1.localeCompare(v2);
|
|
2680
2685
|
};
|
|
@@ -2689,7 +2694,7 @@ var columns = [
|
|
|
2689
2694
|
field: "trace_id",
|
|
2690
2695
|
headerName: "Trace",
|
|
2691
2696
|
renderCell: (parameters) => {
|
|
2692
|
-
return /* @__PURE__ */
|
|
2697
|
+
return /* @__PURE__ */ jsx126(Tooltip3, { arrow: true, title: String(parameters.value), children: /* @__PURE__ */ jsx126(
|
|
2693
2698
|
"span",
|
|
2694
2699
|
{
|
|
2695
2700
|
style: {
|
|
@@ -2708,7 +2713,7 @@ var columns = [
|
|
|
2708
2713
|
{
|
|
2709
2714
|
field: "start_time_unix_nano",
|
|
2710
2715
|
headerName: "Time",
|
|
2711
|
-
renderCell: (parameters) => /* @__PURE__ */
|
|
2716
|
+
renderCell: (parameters) => /* @__PURE__ */ jsx126(ResponsiveTimestampCell, { value: parameters.value }),
|
|
2712
2717
|
type: "string",
|
|
2713
2718
|
width: 180
|
|
2714
2719
|
},
|
|
@@ -2719,7 +2724,7 @@ var columns = [
|
|
|
2719
2724
|
if (!parameters.row.parent_service_name || !parameters.row.parent_resource_name) {
|
|
2720
2725
|
return;
|
|
2721
2726
|
}
|
|
2722
|
-
return /* @__PURE__ */
|
|
2727
|
+
return /* @__PURE__ */ jsx126(ServiceCell, { resource: parameters.row.parent_resource_name, service: parameters.row.parent_service_name });
|
|
2723
2728
|
},
|
|
2724
2729
|
sortable: true,
|
|
2725
2730
|
sortComparator: resourceNameComparator,
|
|
@@ -2737,7 +2742,7 @@ var columns = [
|
|
|
2737
2742
|
headerName: "Consumer",
|
|
2738
2743
|
maxWidth: 260,
|
|
2739
2744
|
renderCell: (parameters) => {
|
|
2740
|
-
return /* @__PURE__ */
|
|
2745
|
+
return /* @__PURE__ */ jsx126(ServiceCell, { resource: parameters.row.resource_name, service: parameters.row.service_name });
|
|
2741
2746
|
},
|
|
2742
2747
|
sortComparator: resourceNameComparator
|
|
2743
2748
|
},
|
|
@@ -2746,7 +2751,7 @@ var columns = [
|
|
|
2746
2751
|
field: "events",
|
|
2747
2752
|
headerName: "Events",
|
|
2748
2753
|
minWidth: 120,
|
|
2749
|
-
renderCell: (parameters) => /* @__PURE__ */
|
|
2754
|
+
renderCell: (parameters) => /* @__PURE__ */ jsx126(EventIndicatorCell, { events: parameters.row.events }),
|
|
2750
2755
|
sortable: false
|
|
2751
2756
|
}
|
|
2752
2757
|
];
|
|
@@ -2810,13 +2815,13 @@ var SpansDataGrid = ({
|
|
|
2810
2815
|
[filtersToApply, rows]
|
|
2811
2816
|
);
|
|
2812
2817
|
return /* @__PURE__ */ jsxs120(Fragment3, { children: [
|
|
2813
|
-
/* @__PURE__ */
|
|
2814
|
-
/* @__PURE__ */
|
|
2818
|
+
/* @__PURE__ */ jsx126(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs120(Box4, { sx: { alignItems: "center", display: "flex", gap: "0.5rem" }, children: [
|
|
2819
|
+
/* @__PURE__ */ jsx126(
|
|
2815
2820
|
TextField,
|
|
2816
2821
|
{
|
|
2817
2822
|
label: /* @__PURE__ */ jsxs120(Box4, { sx: { display: "flex", gap: "0.25rem" }, children: [
|
|
2818
|
-
/* @__PURE__ */
|
|
2819
|
-
/* @__PURE__ */
|
|
2823
|
+
/* @__PURE__ */ jsx126(Search, { fontSize: "small" }),
|
|
2824
|
+
/* @__PURE__ */ jsx126(Typography2, { children: "Search Spans" })
|
|
2820
2825
|
] }),
|
|
2821
2826
|
onChange: handleSearchTermChange,
|
|
2822
2827
|
size: "small",
|
|
@@ -2824,11 +2829,11 @@ var SpansDataGrid = ({
|
|
|
2824
2829
|
value: searchTerm
|
|
2825
2830
|
}
|
|
2826
2831
|
),
|
|
2827
|
-
/* @__PURE__ */
|
|
2828
|
-
onFilterWriteOperationsChange && /* @__PURE__ */
|
|
2832
|
+
/* @__PURE__ */ jsx126(Box4, { sx: { flexGrow: 1 } }),
|
|
2833
|
+
onFilterWriteOperationsChange && /* @__PURE__ */ jsx126(
|
|
2829
2834
|
FormControlLabel,
|
|
2830
2835
|
{
|
|
2831
|
-
control: /* @__PURE__ */
|
|
2836
|
+
control: /* @__PURE__ */ jsx126(
|
|
2832
2837
|
Switch,
|
|
2833
2838
|
{
|
|
2834
2839
|
checked: filterWriteOperations,
|
|
@@ -2841,10 +2846,10 @@ var SpansDataGrid = ({
|
|
|
2841
2846
|
label: "Only Write Operations"
|
|
2842
2847
|
}
|
|
2843
2848
|
),
|
|
2844
|
-
/* @__PURE__ */
|
|
2845
|
-
/* @__PURE__ */
|
|
2849
|
+
/* @__PURE__ */ jsx126(Button, { onClick: onClearSpans, startIcon: /* @__PURE__ */ jsx126(DeleteForeverOutlined, {}), children: "Clear Spans" }),
|
|
2850
|
+
/* @__PURE__ */ jsx126(Button, { disabled: loading, onClick: onRefresh, startIcon: /* @__PURE__ */ jsx126(Cached, {}), children: "Refresh" })
|
|
2846
2851
|
] }) }),
|
|
2847
|
-
/* @__PURE__ */
|
|
2852
|
+
/* @__PURE__ */ jsx126("div", { style: { display: "flex", flexDirection: "column", flexGrow: 1 }, children: /* @__PURE__ */ jsx126(
|
|
2848
2853
|
Paper,
|
|
2849
2854
|
{
|
|
2850
2855
|
sx: {
|
|
@@ -2855,7 +2860,7 @@ var SpansDataGrid = ({
|
|
|
2855
2860
|
minHeight: 120,
|
|
2856
2861
|
p: 2
|
|
2857
2862
|
},
|
|
2858
|
-
children: /* @__PURE__ */
|
|
2863
|
+
children: /* @__PURE__ */ jsx126(
|
|
2859
2864
|
DataGrid,
|
|
2860
2865
|
{
|
|
2861
2866
|
columns,
|
|
@@ -2893,13 +2898,13 @@ var SpansDataGrid = ({
|
|
|
2893
2898
|
};
|
|
2894
2899
|
|
|
2895
2900
|
// src/components/spans-list/spans-list.tsx
|
|
2896
|
-
import { jsx as
|
|
2901
|
+
import { jsx as jsx127, jsxs as jsxs121 } from "react/jsx-runtime";
|
|
2897
2902
|
var SpansList = (props) => {
|
|
2898
2903
|
return /* @__PURE__ */ jsxs121(Box5, { "data-testid": "spans-data-grid", sx: { display: "flex", flexDirection: "column", flexGrow: 1, gap: 2, width: "100%" }, children: [
|
|
2899
2904
|
props.spans.error && /* @__PURE__ */ jsxs121(
|
|
2900
2905
|
Alert,
|
|
2901
2906
|
{
|
|
2902
|
-
action: /* @__PURE__ */
|
|
2907
|
+
action: /* @__PURE__ */ jsx127(Button2, { onClick: props.onRefresh, children: "Retry" }),
|
|
2903
2908
|
severity: "error",
|
|
2904
2909
|
children: [
|
|
2905
2910
|
"Unexpected error:",
|
|
@@ -2908,7 +2913,7 @@ var SpansList = (props) => {
|
|
|
2908
2913
|
]
|
|
2909
2914
|
}
|
|
2910
2915
|
),
|
|
2911
|
-
(props.spans.data !== void 0 || props.spans.loading) && /* @__PURE__ */
|
|
2916
|
+
(props.spans.data !== void 0 || props.spans.loading) && /* @__PURE__ */ jsx127(
|
|
2912
2917
|
SpansDataGrid,
|
|
2913
2918
|
{
|
|
2914
2919
|
filterWriteOperations: props.filterWriteOperations,
|
|
@@ -2974,14 +2979,14 @@ var getAppInspectorApiUrl = (localstackEndpoint, endpoint) => {
|
|
|
2974
2979
|
};
|
|
2975
2980
|
|
|
2976
2981
|
// src/components/status-message/status-message.tsx
|
|
2977
|
-
import { Fragment as Fragment4, jsx as
|
|
2982
|
+
import { Fragment as Fragment4, jsx as jsx128, jsxs as jsxs122 } from "react/jsx-runtime";
|
|
2978
2983
|
var StatusMessage = ({
|
|
2979
2984
|
error,
|
|
2980
2985
|
onRetry,
|
|
2981
2986
|
status
|
|
2982
2987
|
}) => {
|
|
2983
2988
|
if (error instanceof AppInspectorNotFoundError) {
|
|
2984
|
-
return /* @__PURE__ */
|
|
2989
|
+
return /* @__PURE__ */ jsx128(
|
|
2985
2990
|
Box6,
|
|
2986
2991
|
{
|
|
2987
2992
|
sx: {
|
|
@@ -2995,15 +3000,15 @@ var StatusMessage = ({
|
|
|
2995
3000
|
children: /* @__PURE__ */ jsxs122(
|
|
2996
3001
|
Alert2,
|
|
2997
3002
|
{
|
|
2998
|
-
icon: /* @__PURE__ */
|
|
3003
|
+
icon: /* @__PURE__ */ jsx128(ErrorOutline, { fontSize: "large" }),
|
|
2999
3004
|
severity: "error",
|
|
3000
3005
|
sx: { maxWidth: 600, width: "100%" },
|
|
3001
3006
|
children: [
|
|
3002
|
-
/* @__PURE__ */
|
|
3003
|
-
/* @__PURE__ */
|
|
3004
|
-
/* @__PURE__ */
|
|
3005
|
-
/* @__PURE__ */
|
|
3006
|
-
/* @__PURE__ */
|
|
3007
|
+
/* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "App Inspector Not Available" }),
|
|
3008
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: "The App Inspector extension is not licensed or not enabled in LocalStack." }),
|
|
3009
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To enable App Inspector:" }) }),
|
|
3010
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: "Set the environment variable and restart LocalStack:" }),
|
|
3011
|
+
/* @__PURE__ */ jsx128(
|
|
3007
3012
|
Box6,
|
|
3008
3013
|
{
|
|
3009
3014
|
component: "pre",
|
|
@@ -3025,15 +3030,15 @@ var StatusMessage = ({
|
|
|
3025
3030
|
] }),
|
|
3026
3031
|
". For persistent default state across restarts, adjust the",
|
|
3027
3032
|
" ",
|
|
3028
|
-
/* @__PURE__ */
|
|
3033
|
+
/* @__PURE__ */ jsx128("code", { children: "LOCALSTACK_APPINSPECTOR_ENABLE" }),
|
|
3029
3034
|
" ",
|
|
3030
3035
|
"environment variable in your",
|
|
3031
3036
|
" ",
|
|
3032
|
-
/* @__PURE__ */
|
|
3037
|
+
/* @__PURE__ */ jsx128("code", { children: "~/.localstack" }),
|
|
3033
3038
|
" ",
|
|
3034
3039
|
"profile files.",
|
|
3035
3040
|
" ",
|
|
3036
|
-
/* @__PURE__ */
|
|
3041
|
+
/* @__PURE__ */ jsx128(
|
|
3037
3042
|
Link,
|
|
3038
3043
|
{
|
|
3039
3044
|
href: "https://docs.localstack.cloud/aws/capabilities/config/configuration/#profiles",
|
|
@@ -3043,8 +3048,8 @@ var StatusMessage = ({
|
|
|
3043
3048
|
}
|
|
3044
3049
|
)
|
|
3045
3050
|
] }),
|
|
3046
|
-
/* @__PURE__ */
|
|
3047
|
-
/* @__PURE__ */
|
|
3051
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1, mt: 2 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "For more information:" }) }),
|
|
3052
|
+
/* @__PURE__ */ jsx128(
|
|
3048
3053
|
Link,
|
|
3049
3054
|
{
|
|
3050
3055
|
href: "https://docs.localstack.cloud/user-guide/tools/application-inspector/",
|
|
@@ -3053,7 +3058,7 @@ var StatusMessage = ({
|
|
|
3053
3058
|
children: "App Inspector Documentation"
|
|
3054
3059
|
}
|
|
3055
3060
|
),
|
|
3056
|
-
onRetry && /* @__PURE__ */
|
|
3061
|
+
onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
|
|
3057
3062
|
Button3,
|
|
3058
3063
|
{
|
|
3059
3064
|
"aria-label": "Check App Inspector status again",
|
|
@@ -3069,7 +3074,7 @@ var StatusMessage = ({
|
|
|
3069
3074
|
);
|
|
3070
3075
|
}
|
|
3071
3076
|
if (error instanceof ConnectionError) {
|
|
3072
|
-
return /* @__PURE__ */
|
|
3077
|
+
return /* @__PURE__ */ jsx128(
|
|
3073
3078
|
Box6,
|
|
3074
3079
|
{
|
|
3075
3080
|
sx: {
|
|
@@ -3083,14 +3088,14 @@ var StatusMessage = ({
|
|
|
3083
3088
|
children: /* @__PURE__ */ jsxs122(
|
|
3084
3089
|
Alert2,
|
|
3085
3090
|
{
|
|
3086
|
-
icon: /* @__PURE__ */
|
|
3091
|
+
icon: /* @__PURE__ */ jsx128(ErrorOutline, { fontSize: "large" }),
|
|
3087
3092
|
severity: "error",
|
|
3088
3093
|
sx: { maxWidth: 600, width: "100%" },
|
|
3089
3094
|
children: [
|
|
3090
|
-
/* @__PURE__ */
|
|
3091
|
-
/* @__PURE__ */
|
|
3092
|
-
/* @__PURE__ */
|
|
3093
|
-
/* @__PURE__ */
|
|
3095
|
+
/* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "Connection Error" }),
|
|
3096
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: "Failed to connect to LocalStack. Please ensure LocalStack is running and accessible." }),
|
|
3097
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To start LocalStack:" }) }),
|
|
3098
|
+
/* @__PURE__ */ jsx128(
|
|
3094
3099
|
Box6,
|
|
3095
3100
|
{
|
|
3096
3101
|
component: "pre",
|
|
@@ -3103,7 +3108,7 @@ var StatusMessage = ({
|
|
|
3103
3108
|
children: "localstack start"
|
|
3104
3109
|
}
|
|
3105
3110
|
),
|
|
3106
|
-
onRetry && /* @__PURE__ */
|
|
3111
|
+
onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
|
|
3107
3112
|
Button3,
|
|
3108
3113
|
{
|
|
3109
3114
|
"aria-label": "Retry connection to LocalStack",
|
|
@@ -3119,7 +3124,7 @@ var StatusMessage = ({
|
|
|
3119
3124
|
);
|
|
3120
3125
|
}
|
|
3121
3126
|
if (status?.status === "DISABLED") {
|
|
3122
|
-
return /* @__PURE__ */
|
|
3127
|
+
return /* @__PURE__ */ jsx128(
|
|
3123
3128
|
Box6,
|
|
3124
3129
|
{
|
|
3125
3130
|
sx: {
|
|
@@ -3133,14 +3138,14 @@ var StatusMessage = ({
|
|
|
3133
3138
|
children: /* @__PURE__ */ jsxs122(
|
|
3134
3139
|
Alert2,
|
|
3135
3140
|
{
|
|
3136
|
-
icon: /* @__PURE__ */
|
|
3141
|
+
icon: /* @__PURE__ */ jsx128(InfoOutlined, { fontSize: "large" }),
|
|
3137
3142
|
severity: "warning",
|
|
3138
3143
|
sx: { maxWidth: 600, width: "100%" },
|
|
3139
3144
|
children: [
|
|
3140
|
-
/* @__PURE__ */
|
|
3141
|
-
/* @__PURE__ */
|
|
3142
|
-
/* @__PURE__ */
|
|
3143
|
-
/* @__PURE__ */
|
|
3145
|
+
/* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "App Inspector is Disabled" }),
|
|
3146
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: "App Inspector is currently disabled. Please enable it to view traces and spans." }),
|
|
3147
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To enable App Inspector at runtime:" }) }),
|
|
3148
|
+
/* @__PURE__ */ jsx128(
|
|
3144
3149
|
Box6,
|
|
3145
3150
|
{
|
|
3146
3151
|
component: "pre",
|
|
@@ -3151,14 +3156,14 @@ var StatusMessage = ({
|
|
|
3151
3156
|
overflowX: "auto",
|
|
3152
3157
|
p: 1
|
|
3153
3158
|
},
|
|
3154
|
-
children: `curl -X PUT http://localhost:4566${APPINSPECTOR_API_PREFIX}/status
|
|
3155
|
-
-H "Content-Type: application/json"
|
|
3159
|
+
children: String.raw`curl -X PUT http://localhost:4566${APPINSPECTOR_API_PREFIX}/status \
|
|
3160
|
+
-H "Content-Type: application/json" \
|
|
3156
3161
|
-d '{"status": "ENABLED"}'`
|
|
3157
3162
|
}
|
|
3158
3163
|
),
|
|
3159
|
-
/* @__PURE__ */
|
|
3160
|
-
/* @__PURE__ */
|
|
3161
|
-
/* @__PURE__ */
|
|
3164
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1, mt: 2 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To enable App Inspector persistently across restarts:" }) }),
|
|
3165
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: "Set the environment variable:" }),
|
|
3166
|
+
/* @__PURE__ */ jsx128(
|
|
3162
3167
|
Box6,
|
|
3163
3168
|
{
|
|
3164
3169
|
component: "pre",
|
|
@@ -3171,8 +3176,8 @@ var StatusMessage = ({
|
|
|
3171
3176
|
children: "APPINSPECTOR=1"
|
|
3172
3177
|
}
|
|
3173
3178
|
),
|
|
3174
|
-
Boolean(status.note) && /* @__PURE__ */
|
|
3175
|
-
onRetry && /* @__PURE__ */
|
|
3179
|
+
Boolean(status.note) && /* @__PURE__ */ jsx128(Typography3, { sx: { display: "block", fontStyle: "italic", mt: 2 }, variant: "caption", children: status.note }),
|
|
3180
|
+
onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
|
|
3176
3181
|
Button3,
|
|
3177
3182
|
{
|
|
3178
3183
|
"aria-label": "Check if App Inspector is enabled",
|
|
@@ -3188,7 +3193,7 @@ var StatusMessage = ({
|
|
|
3188
3193
|
);
|
|
3189
3194
|
}
|
|
3190
3195
|
if (error) {
|
|
3191
|
-
return /* @__PURE__ */
|
|
3196
|
+
return /* @__PURE__ */ jsx128(
|
|
3192
3197
|
Box6,
|
|
3193
3198
|
{
|
|
3194
3199
|
sx: {
|
|
@@ -3202,13 +3207,13 @@ var StatusMessage = ({
|
|
|
3202
3207
|
children: /* @__PURE__ */ jsxs122(
|
|
3203
3208
|
Alert2,
|
|
3204
3209
|
{
|
|
3205
|
-
icon: /* @__PURE__ */
|
|
3210
|
+
icon: /* @__PURE__ */ jsx128(ErrorOutline, { fontSize: "large" }),
|
|
3206
3211
|
severity: "error",
|
|
3207
3212
|
sx: { maxWidth: 600, width: "100%" },
|
|
3208
3213
|
children: [
|
|
3209
|
-
/* @__PURE__ */
|
|
3210
|
-
/* @__PURE__ */
|
|
3211
|
-
onRetry && /* @__PURE__ */
|
|
3214
|
+
/* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "Error" }),
|
|
3215
|
+
/* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: error.message }),
|
|
3216
|
+
onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
|
|
3212
3217
|
Button3,
|
|
3213
3218
|
{
|
|
3214
3219
|
"aria-label": "Retry operation",
|
|
@@ -3223,7 +3228,7 @@ var StatusMessage = ({
|
|
|
3223
3228
|
}
|
|
3224
3229
|
);
|
|
3225
3230
|
}
|
|
3226
|
-
return /* @__PURE__ */
|
|
3231
|
+
return /* @__PURE__ */ jsx128(Fragment4, {});
|
|
3227
3232
|
};
|
|
3228
3233
|
|
|
3229
3234
|
// src/context.tsx
|
|
@@ -3349,7 +3354,7 @@ var createApiClient = ({ localstackEndpoint }) => {
|
|
|
3349
3354
|
};
|
|
3350
3355
|
|
|
3351
3356
|
// src/context.tsx
|
|
3352
|
-
import { jsx as
|
|
3357
|
+
import { jsx as jsx129 } from "react/jsx-runtime";
|
|
3353
3358
|
var AppInspectorContext = createContext2(void 0);
|
|
3354
3359
|
var useAppInspector = () => {
|
|
3355
3360
|
const context = useContext2(AppInspectorContext);
|
|
@@ -3382,7 +3387,7 @@ var AppInspectorContextProvider = (props) => {
|
|
|
3382
3387
|
}),
|
|
3383
3388
|
[props.linkComponent, props.localstackEndpoint, resolveLink]
|
|
3384
3389
|
);
|
|
3385
|
-
return /* @__PURE__ */
|
|
3390
|
+
return /* @__PURE__ */ jsx129(ApiProvider, { api, children: /* @__PURE__ */ jsx129(AppInspectorContext.Provider, { value: contextValue, children: props.children }) });
|
|
3386
3391
|
};
|
|
3387
3392
|
|
|
3388
3393
|
// src/hooks/use-local-storage.tsx
|
|
@@ -3470,7 +3475,8 @@ var useStatus = () => {
|
|
|
3470
3475
|
};
|
|
3471
3476
|
|
|
3472
3477
|
// src/pages/spans-list-page.tsx
|
|
3473
|
-
import { jsx as
|
|
3478
|
+
import { jsx as jsx130 } from "react/jsx-runtime";
|
|
3479
|
+
var spansPerPageOptions = [25, 50, 100];
|
|
3474
3480
|
var SpansListPage = () => {
|
|
3475
3481
|
const api = useAppInspectorApi();
|
|
3476
3482
|
const [spans, setSpans] = useState5();
|
|
@@ -3480,7 +3486,6 @@ var SpansListPage = () => {
|
|
|
3480
3486
|
const mapPageToNextCursor = useRef3({});
|
|
3481
3487
|
const [page, setPage] = useState5(0);
|
|
3482
3488
|
const [pageSize, setPageSize] = useState5(100);
|
|
3483
|
-
const [spansPerPageOptions] = useState5(() => [25, 50, 100]);
|
|
3484
3489
|
const [spanCount, setSpanCount] = useState5(0);
|
|
3485
3490
|
const queryOptions = useMemo4(() => {
|
|
3486
3491
|
return {
|
|
@@ -3545,7 +3550,7 @@ var SpansListPage = () => {
|
|
|
3545
3550
|
void checkStatus();
|
|
3546
3551
|
}, [checkStatus]);
|
|
3547
3552
|
const shouldShowStatusMessage = Boolean(statusError) || status?.status === "DISABLED";
|
|
3548
|
-
return /* @__PURE__ */
|
|
3553
|
+
return /* @__PURE__ */ jsx130(
|
|
3549
3554
|
Box7,
|
|
3550
3555
|
{
|
|
3551
3556
|
"data-testid": "spans-list-page",
|
|
@@ -3556,14 +3561,14 @@ var SpansListPage = () => {
|
|
|
3556
3561
|
flexGrow: 1,
|
|
3557
3562
|
width: "100%"
|
|
3558
3563
|
},
|
|
3559
|
-
children: shouldShowStatusMessage ? /* @__PURE__ */
|
|
3564
|
+
children: shouldShowStatusMessage ? /* @__PURE__ */ jsx130(
|
|
3560
3565
|
StatusMessage,
|
|
3561
3566
|
{
|
|
3562
3567
|
error: statusError,
|
|
3563
3568
|
onRetry: handleRetry,
|
|
3564
3569
|
status
|
|
3565
3570
|
}
|
|
3566
|
-
) : /* @__PURE__ */
|
|
3571
|
+
) : /* @__PURE__ */ jsx130(
|
|
3567
3572
|
SpansList,
|
|
3568
3573
|
{
|
|
3569
3574
|
filterWriteOperations,
|
|
@@ -3805,7 +3810,7 @@ var getEventGroupsByType = (events) => {
|
|
|
3805
3810
|
// src/components/event-details/event-details-header.tsx
|
|
3806
3811
|
import { Close } from "@mui/icons-material";
|
|
3807
3812
|
import { Box as Box8, IconButton, Typography as Typography4 } from "@mui/material";
|
|
3808
|
-
import { jsx as
|
|
3813
|
+
import { jsx as jsx131, jsxs as jsxs123 } from "react/jsx-runtime";
|
|
3809
3814
|
var EventDetailsHeader = ({ event, onClose }) => {
|
|
3810
3815
|
return /* @__PURE__ */ jsxs123(
|
|
3811
3816
|
Box8,
|
|
@@ -3820,7 +3825,7 @@ var EventDetailsHeader = ({ event, onClose }) => {
|
|
|
3820
3825
|
},
|
|
3821
3826
|
children: [
|
|
3822
3827
|
/* @__PURE__ */ jsxs123(Box8, { children: [
|
|
3823
|
-
/* @__PURE__ */
|
|
3828
|
+
/* @__PURE__ */ jsx131(Typography4, { sx: { fontWeight: 600 }, variant: "h6", children: "Event Details" }),
|
|
3824
3829
|
/* @__PURE__ */ jsxs123(Typography4, { color: "text.secondary", variant: "body2", children: [
|
|
3825
3830
|
event.service_name,
|
|
3826
3831
|
" ",
|
|
@@ -3828,7 +3833,7 @@ var EventDetailsHeader = ({ event, onClose }) => {
|
|
|
3828
3833
|
event.operation_name
|
|
3829
3834
|
] })
|
|
3830
3835
|
] }),
|
|
3831
|
-
onClose && /* @__PURE__ */
|
|
3836
|
+
onClose && /* @__PURE__ */ jsx131(IconButton, { onClick: onClose, size: "small", children: /* @__PURE__ */ jsx131(Close, {}) })
|
|
3832
3837
|
]
|
|
3833
3838
|
}
|
|
3834
3839
|
);
|
|
@@ -3845,23 +3850,23 @@ import { useEffect as useEffect5, useMemo as useMemo6, useRef as useRef4, useSta
|
|
|
3845
3850
|
// src/components/status-icon.tsx
|
|
3846
3851
|
import { Cancel, CheckCircle, Error as Error2, Info, RemoveCircle } from "@mui/icons-material";
|
|
3847
3852
|
import { Box as Box9 } from "@mui/material";
|
|
3848
|
-
import { jsx as
|
|
3853
|
+
import { jsx as jsx132 } from "react/jsx-runtime";
|
|
3849
3854
|
var StatusIcon = ({ errorLevel }) => {
|
|
3850
3855
|
switch (errorLevel) {
|
|
3851
3856
|
case EventLevel.LevelError: {
|
|
3852
|
-
return /* @__PURE__ */
|
|
3857
|
+
return /* @__PURE__ */ jsx132(Cancel, { sx: { color: "red" } });
|
|
3853
3858
|
}
|
|
3854
3859
|
case EventLevel.LevelInfo: {
|
|
3855
|
-
return /* @__PURE__ */
|
|
3860
|
+
return /* @__PURE__ */ jsx132(Info, { sx: { color: "gray" } });
|
|
3856
3861
|
}
|
|
3857
3862
|
case EventLevel.LevelPermission: {
|
|
3858
|
-
return /* @__PURE__ */
|
|
3863
|
+
return /* @__PURE__ */ jsx132(RemoveCircle, { sx: { color: "blue" } });
|
|
3859
3864
|
}
|
|
3860
3865
|
case EventLevel.LevelWarning: {
|
|
3861
|
-
return /* @__PURE__ */
|
|
3866
|
+
return /* @__PURE__ */ jsx132(Error2, { sx: { color: "orange" } });
|
|
3862
3867
|
}
|
|
3863
3868
|
default: {
|
|
3864
|
-
return /* @__PURE__ */
|
|
3869
|
+
return /* @__PURE__ */ jsx132(CheckCircle, { sx: { color: "lightgray" } });
|
|
3865
3870
|
}
|
|
3866
3871
|
}
|
|
3867
3872
|
};
|
|
@@ -3869,9 +3874,9 @@ var StatusIcon = ({ errorLevel }) => {
|
|
|
3869
3874
|
// src/components/event-details/iam-event-detail.tsx
|
|
3870
3875
|
import { CheckCircle as CheckCircle2, Error as ErrorIcon, Warning } from "@mui/icons-material";
|
|
3871
3876
|
import { Box as Box10, Chip, Grid as Grid2, Typography as Typography5 } from "@mui/material";
|
|
3872
|
-
import { jsx as
|
|
3877
|
+
import { jsx as jsx133, jsxs as jsxs124 } from "react/jsx-runtime";
|
|
3873
3878
|
var DetailRow = ({ content, label }) => /* @__PURE__ */ jsxs124(Grid2, { container: true, spacing: 0, sx: { mb: 1 }, children: [
|
|
3874
|
-
/* @__PURE__ */
|
|
3879
|
+
/* @__PURE__ */ jsx133(Grid2, { item: true, sx: { pr: 1 }, xs: 3, children: /* @__PURE__ */ jsx133(
|
|
3875
3880
|
Typography5,
|
|
3876
3881
|
{
|
|
3877
3882
|
sx: {
|
|
@@ -3882,7 +3887,7 @@ var DetailRow = ({ content, label }) => /* @__PURE__ */ jsxs124(Grid2, { contain
|
|
|
3882
3887
|
children: label
|
|
3883
3888
|
}
|
|
3884
3889
|
) }),
|
|
3885
|
-
/* @__PURE__ */
|
|
3890
|
+
/* @__PURE__ */ jsx133(Grid2, { item: true, xs: 9, children: typeof content === "string" ? /* @__PURE__ */ jsx133(
|
|
3886
3891
|
Typography5,
|
|
3887
3892
|
{
|
|
3888
3893
|
sx: {
|
|
@@ -3898,30 +3903,30 @@ var PermissionIcon = ({ status }) => {
|
|
|
3898
3903
|
switch (status) {
|
|
3899
3904
|
case "explicitly_allowed":
|
|
3900
3905
|
case "implicitly_allowed": {
|
|
3901
|
-
return /* @__PURE__ */
|
|
3906
|
+
return /* @__PURE__ */ jsx133(CheckCircle2, { sx: { color: "success.main", fontSize: "1rem" } });
|
|
3902
3907
|
}
|
|
3903
3908
|
case "explicitly_denied": {
|
|
3904
|
-
return /* @__PURE__ */
|
|
3909
|
+
return /* @__PURE__ */ jsx133(ErrorIcon, { sx: { color: "error.main", fontSize: "1rem" } });
|
|
3905
3910
|
}
|
|
3906
3911
|
case "implicitly_denied": {
|
|
3907
|
-
return /* @__PURE__ */
|
|
3912
|
+
return /* @__PURE__ */ jsx133(Warning, { sx: { color: "warning.main", fontSize: "1rem" } });
|
|
3908
3913
|
}
|
|
3909
3914
|
}
|
|
3910
3915
|
};
|
|
3911
3916
|
var IAMEventDetail = ({ event }) => {
|
|
3912
3917
|
const payloadString = event.attributes?.payload;
|
|
3913
3918
|
if (!payloadString) {
|
|
3914
|
-
return /* @__PURE__ */
|
|
3919
|
+
return /* @__PURE__ */ jsx133(Box10, { sx: { p: 2 }, children: /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "body2", children: "No IAM policy evaluation data available" }) });
|
|
3915
3920
|
}
|
|
3916
3921
|
const parsedIAM = parseIAMEvent(payloadString);
|
|
3917
3922
|
if (!parsedIAM) {
|
|
3918
|
-
return /* @__PURE__ */
|
|
3923
|
+
return /* @__PURE__ */ jsx133(Box10, { sx: { p: 2 }, children: /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "body2", children: "Failed to parse IAM event data" }) });
|
|
3919
3924
|
}
|
|
3920
3925
|
return /* @__PURE__ */ jsxs124(Box10, { sx: { p: 2 }, children: [
|
|
3921
|
-
/* @__PURE__ */
|
|
3926
|
+
/* @__PURE__ */ jsx133(Box10, { sx: { mb: 2 }, children: /* @__PURE__ */ jsx133(
|
|
3922
3927
|
Chip,
|
|
3923
3928
|
{
|
|
3924
|
-
icon: /* @__PURE__ */
|
|
3929
|
+
icon: /* @__PURE__ */ jsx133(PermissionIcon, { status: parsedIAM.permission }),
|
|
3925
3930
|
label: formatPermissionStatus(parsedIAM.permission),
|
|
3926
3931
|
size: "small",
|
|
3927
3932
|
sx: {
|
|
@@ -3931,12 +3936,12 @@ var IAMEventDetail = ({ event }) => {
|
|
|
3931
3936
|
variant: "outlined"
|
|
3932
3937
|
}
|
|
3933
3938
|
) }),
|
|
3934
|
-
/* @__PURE__ */
|
|
3935
|
-
/* @__PURE__ */
|
|
3936
|
-
parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */
|
|
3939
|
+
/* @__PURE__ */ jsx133(DetailRow, { content: `${parsedIAM.service}:${parsedIAM.operation}`, label: "Operation" }),
|
|
3940
|
+
/* @__PURE__ */ jsx133(DetailRow, { content: parsedIAM.principal, label: "Principal" }),
|
|
3941
|
+
parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsx133(
|
|
3937
3942
|
DetailRow,
|
|
3938
3943
|
{
|
|
3939
|
-
content: /* @__PURE__ */
|
|
3944
|
+
content: /* @__PURE__ */ jsx133(Box10, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx133(
|
|
3940
3945
|
Typography5,
|
|
3941
3946
|
{
|
|
3942
3947
|
sx: {
|
|
@@ -3950,10 +3955,10 @@ var IAMEventDetail = ({ event }) => {
|
|
|
3950
3955
|
label: "Actions"
|
|
3951
3956
|
}
|
|
3952
3957
|
),
|
|
3953
|
-
parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */
|
|
3958
|
+
parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsx133(
|
|
3954
3959
|
DetailRow,
|
|
3955
3960
|
{
|
|
3956
|
-
content: /* @__PURE__ */
|
|
3961
|
+
content: /* @__PURE__ */ jsx133(Box10, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx133(
|
|
3957
3962
|
Typography5,
|
|
3958
3963
|
{
|
|
3959
3964
|
sx: {
|
|
@@ -3969,19 +3974,19 @@ var IAMEventDetail = ({ event }) => {
|
|
|
3969
3974
|
}
|
|
3970
3975
|
),
|
|
3971
3976
|
/* @__PURE__ */ jsxs124(Box10, { sx: { mt: 2 }, children: [
|
|
3972
|
-
/* @__PURE__ */
|
|
3977
|
+
/* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600, mb: 1 }, variant: "caption", children: "Policy Evaluation" }),
|
|
3973
3978
|
/* @__PURE__ */ jsxs124(Grid2, { container: true, spacing: 2, children: [
|
|
3974
|
-
parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */
|
|
3975
|
-
/* @__PURE__ */
|
|
3976
|
-
/* @__PURE__ */
|
|
3979
|
+
parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
|
|
3980
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "success.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitAllows }),
|
|
3981
|
+
/* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Allows" })
|
|
3977
3982
|
] }) }),
|
|
3978
|
-
parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */
|
|
3979
|
-
/* @__PURE__ */
|
|
3980
|
-
/* @__PURE__ */
|
|
3983
|
+
parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
|
|
3984
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "error.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitDenies }),
|
|
3985
|
+
/* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Denies" })
|
|
3981
3986
|
] }) }),
|
|
3982
|
-
parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */
|
|
3983
|
-
/* @__PURE__ */
|
|
3984
|
-
/* @__PURE__ */
|
|
3987
|
+
parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
|
|
3988
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "warning.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.implicitDenies }),
|
|
3989
|
+
/* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Implicit Denies" })
|
|
3985
3990
|
] }) })
|
|
3986
3991
|
] })
|
|
3987
3992
|
] })
|
|
@@ -3992,7 +3997,7 @@ var IAMEventDetail = ({ event }) => {
|
|
|
3992
3997
|
import { KeyboardArrowDown, KeyboardArrowRight } from "@mui/icons-material";
|
|
3993
3998
|
import { Box as Box11, Chip as Chip2, IconButton as IconButton2, Typography as Typography6 } from "@mui/material";
|
|
3994
3999
|
import { useMemo as useMemo5, useState as useState6 } from "react";
|
|
3995
|
-
import { jsx as
|
|
4000
|
+
import { jsx as jsx134, jsxs as jsxs125 } from "react/jsx-runtime";
|
|
3996
4001
|
var getChipColors = (status) => {
|
|
3997
4002
|
const isAllowed = status === "explicitly_allowed" || status === "implicitly_allowed";
|
|
3998
4003
|
return {
|
|
@@ -4022,10 +4027,10 @@ var IAMPermissionItem = ({ event }) => {
|
|
|
4022
4027
|
const { chipColors, parsedIAM } = parsedData;
|
|
4023
4028
|
return /* @__PURE__ */ jsxs125(Box11, { sx: { mb: 1 }, children: [
|
|
4024
4029
|
/* @__PURE__ */ jsxs125(Box11, { sx: { alignItems: "center", display: "flex" }, children: [
|
|
4025
|
-
/* @__PURE__ */
|
|
4030
|
+
/* @__PURE__ */ jsx134(IconButton2, { onClick: () => {
|
|
4026
4031
|
setIsOpen(!isOpen);
|
|
4027
|
-
}, size: "small", sx: { mr: 1, p: 0 }, children: isOpen ? /* @__PURE__ */
|
|
4028
|
-
/* @__PURE__ */
|
|
4032
|
+
}, size: "small", sx: { mr: 1, p: 0 }, children: isOpen ? /* @__PURE__ */ jsx134(KeyboardArrowDown, {}) : /* @__PURE__ */ jsx134(KeyboardArrowRight, {}) }),
|
|
4033
|
+
/* @__PURE__ */ jsx134(
|
|
4029
4034
|
Chip2,
|
|
4030
4035
|
{
|
|
4031
4036
|
label: formatPermissionStatus(parsedIAM.permission),
|
|
@@ -4037,18 +4042,18 @@ var IAMPermissionItem = ({ event }) => {
|
|
|
4037
4042
|
}
|
|
4038
4043
|
)
|
|
4039
4044
|
] }),
|
|
4040
|
-
isOpen && /* @__PURE__ */
|
|
4041
|
-
/* @__PURE__ */
|
|
4042
|
-
/* @__PURE__ */
|
|
4045
|
+
isOpen && /* @__PURE__ */ jsx134(Box11, { sx: { ml: 4, mt: 1 }, children: /* @__PURE__ */ jsxs125(Box11, { children: [
|
|
4046
|
+
/* @__PURE__ */ jsx134(Typography6, { sx: { fontWeight: 600 }, variant: "caption", children: "Principal" }),
|
|
4047
|
+
/* @__PURE__ */ jsx134(Typography6, { variant: "body2", children: parsedIAM.principal })
|
|
4043
4048
|
] }) })
|
|
4044
4049
|
] });
|
|
4045
4050
|
};
|
|
4046
|
-
var IAMPermissionDetail = ({ events }) => /* @__PURE__ */
|
|
4051
|
+
var IAMPermissionDetail = ({ events }) => /* @__PURE__ */ jsx134(Box11, { sx: { mt: 2 }, children: events.map((event) => /* @__PURE__ */ jsx134(IAMPermissionItem, { event }, `${event.span_id}-${event.event_id}`)) });
|
|
4047
4052
|
|
|
4048
4053
|
// src/components/event-details/event-detail.tsx
|
|
4049
|
-
import { Fragment as Fragment5, jsx as
|
|
4054
|
+
import { Fragment as Fragment5, jsx as jsx135, jsxs as jsxs126 } from "react/jsx-runtime";
|
|
4050
4055
|
var DetailRow2 = ({ content, label }) => /* @__PURE__ */ jsxs126(Grid3, { container: true, spacing: 0, sx: { mb: 1 }, children: [
|
|
4051
|
-
/* @__PURE__ */
|
|
4056
|
+
/* @__PURE__ */ jsx135(Grid3, { item: true, sx: { pr: 1 }, xs: 3, children: /* @__PURE__ */ jsx135(
|
|
4052
4057
|
Typography7,
|
|
4053
4058
|
{
|
|
4054
4059
|
sx: {
|
|
@@ -4059,7 +4064,7 @@ var DetailRow2 = ({ content, label }) => /* @__PURE__ */ jsxs126(Grid3, { contai
|
|
|
4059
4064
|
children: label
|
|
4060
4065
|
}
|
|
4061
4066
|
) }),
|
|
4062
|
-
/* @__PURE__ */
|
|
4067
|
+
/* @__PURE__ */ jsx135(Grid3, { item: true, xs: 9, children: typeof content === "string" ? /* @__PURE__ */ jsx135(
|
|
4063
4068
|
Typography7,
|
|
4064
4069
|
{
|
|
4065
4070
|
sx: {
|
|
@@ -4078,7 +4083,7 @@ var EventMessage = ({ event }) => {
|
|
|
4078
4083
|
const parsedMessage = useMemo6(() => parseEventMessage(event), [event]);
|
|
4079
4084
|
const isIAMPolicyEvent = useMemo6(
|
|
4080
4085
|
() => event.event_type === "iam.policy_evaluation" && event.attributes?.payload && typeof event.attributes.payload === "string",
|
|
4081
|
-
[event
|
|
4086
|
+
[event]
|
|
4082
4087
|
);
|
|
4083
4088
|
useEffect5(() => {
|
|
4084
4089
|
const checkOverflow = () => {
|
|
@@ -4103,7 +4108,7 @@ var EventMessage = ({ event }) => {
|
|
|
4103
4108
|
);
|
|
4104
4109
|
return /* @__PURE__ */ jsxs126(Box12, { sx: { display: "flex", flexDirection: "column" }, children: [
|
|
4105
4110
|
/* @__PURE__ */ jsxs126(Box12, { sx: { alignItems: "flex-start", display: "flex" }, children: [
|
|
4106
|
-
Boolean(shouldShowToggle) && /* @__PURE__ */
|
|
4111
|
+
Boolean(shouldShowToggle) && /* @__PURE__ */ jsx135(
|
|
4107
4112
|
IconButton3,
|
|
4108
4113
|
{
|
|
4109
4114
|
onClick: () => {
|
|
@@ -4111,10 +4116,10 @@ var EventMessage = ({ event }) => {
|
|
|
4111
4116
|
},
|
|
4112
4117
|
size: "small",
|
|
4113
4118
|
sx: { mr: 1, mt: -0.5, p: 0 },
|
|
4114
|
-
children: isOpen ? /* @__PURE__ */
|
|
4119
|
+
children: isOpen ? /* @__PURE__ */ jsx135(KeyboardArrowDown2, {}) : /* @__PURE__ */ jsx135(KeyboardArrowRight2, {})
|
|
4115
4120
|
}
|
|
4116
4121
|
),
|
|
4117
|
-
/* @__PURE__ */
|
|
4122
|
+
/* @__PURE__ */ jsx135(
|
|
4118
4123
|
Typography7,
|
|
4119
4124
|
{
|
|
4120
4125
|
ref: textReference,
|
|
@@ -4132,9 +4137,9 @@ var EventMessage = ({ event }) => {
|
|
|
4132
4137
|
}
|
|
4133
4138
|
)
|
|
4134
4139
|
] }),
|
|
4135
|
-
isOpen && /* @__PURE__ */
|
|
4136
|
-
Boolean(parsedMessage.message) && /* @__PURE__ */
|
|
4137
|
-
Boolean(parsedMessage.details) && /* @__PURE__ */
|
|
4140
|
+
isOpen && /* @__PURE__ */ jsx135(Box12, { sx: { ml: 4, mt: 1 }, children: isIAMPolicyEvent ? /* @__PURE__ */ jsx135(IAMEventDetail, { event }) : /* @__PURE__ */ jsxs126(Fragment5, { children: [
|
|
4141
|
+
Boolean(parsedMessage.message) && /* @__PURE__ */ jsx135(DetailRow2, { content: parsedMessage.message, label: "Message:" }),
|
|
4142
|
+
Boolean(parsedMessage.details) && /* @__PURE__ */ jsx135(DetailRow2, { content: parsedMessage.details, label: "Details:" })
|
|
4138
4143
|
] }) })
|
|
4139
4144
|
] });
|
|
4140
4145
|
};
|
|
@@ -4164,7 +4169,7 @@ var EventDetail = ({
|
|
|
4164
4169
|
}) => {
|
|
4165
4170
|
if (type === "permission") {
|
|
4166
4171
|
return /* @__PURE__ */ jsxs126(Box12, { children: [
|
|
4167
|
-
/* @__PURE__ */
|
|
4172
|
+
/* @__PURE__ */ jsx135(
|
|
4168
4173
|
Box12,
|
|
4169
4174
|
{
|
|
4170
4175
|
sx: {
|
|
@@ -4172,7 +4177,7 @@ var EventDetail = ({
|
|
|
4172
4177
|
display: "flex",
|
|
4173
4178
|
mb: 1
|
|
4174
4179
|
},
|
|
4175
|
-
children: /* @__PURE__ */
|
|
4180
|
+
children: /* @__PURE__ */ jsx135(
|
|
4176
4181
|
Typography7,
|
|
4177
4182
|
{
|
|
4178
4183
|
sx: {
|
|
@@ -4187,7 +4192,7 @@ var EventDetail = ({
|
|
|
4187
4192
|
)
|
|
4188
4193
|
}
|
|
4189
4194
|
),
|
|
4190
|
-
/* @__PURE__ */
|
|
4195
|
+
/* @__PURE__ */ jsx135(IAMPermissionDetail, { events })
|
|
4191
4196
|
] });
|
|
4192
4197
|
}
|
|
4193
4198
|
const eventLevel = getEventLevelFromGroup(type);
|
|
@@ -4202,8 +4207,8 @@ var EventDetail = ({
|
|
|
4202
4207
|
mb: 1
|
|
4203
4208
|
},
|
|
4204
4209
|
children: [
|
|
4205
|
-
/* @__PURE__ */
|
|
4206
|
-
/* @__PURE__ */
|
|
4210
|
+
/* @__PURE__ */ jsx135(StatusIcon, { errorLevel: eventLevel }),
|
|
4211
|
+
/* @__PURE__ */ jsx135(
|
|
4207
4212
|
Typography7,
|
|
4208
4213
|
{
|
|
4209
4214
|
sx: {
|
|
@@ -4222,14 +4227,14 @@ var EventDetail = ({
|
|
|
4222
4227
|
]
|
|
4223
4228
|
}
|
|
4224
4229
|
),
|
|
4225
|
-
/* @__PURE__ */
|
|
4230
|
+
/* @__PURE__ */ jsx135(Box12, { sx: { mt: 2 }, children: events.map((event) => /* @__PURE__ */ jsx135(
|
|
4226
4231
|
Box12,
|
|
4227
4232
|
{
|
|
4228
4233
|
sx: {
|
|
4229
4234
|
maxWidth: "100%",
|
|
4230
4235
|
mb: 1
|
|
4231
4236
|
},
|
|
4232
|
-
children: /* @__PURE__ */
|
|
4237
|
+
children: /* @__PURE__ */ jsx135(EventMessage, { event })
|
|
4233
4238
|
},
|
|
4234
4239
|
`${event.span_id}-${event.event_id}`
|
|
4235
4240
|
)) })
|
|
@@ -4240,11 +4245,11 @@ var EventDetail = ({
|
|
|
4240
4245
|
import { KeyboardArrowDown as KeyboardArrowDown3, KeyboardArrowRight as KeyboardArrowRight3 } from "@mui/icons-material";
|
|
4241
4246
|
import { Box as Box13, Typography as Typography8 } from "@mui/material";
|
|
4242
4247
|
import { useState as useState8 } from "react";
|
|
4243
|
-
import { jsx as
|
|
4248
|
+
import { jsx as jsx136, jsxs as jsxs127 } from "react/jsx-runtime";
|
|
4244
4249
|
var ToggleSection = ({ children, headline, initialOpen = true }) => {
|
|
4245
4250
|
const [isOpen, setIsOpen] = useState8(initialOpen);
|
|
4246
4251
|
return /* @__PURE__ */ jsxs127(Box13, { sx: { mt: 4 }, children: [
|
|
4247
|
-
/* @__PURE__ */
|
|
4252
|
+
/* @__PURE__ */ jsx136(
|
|
4248
4253
|
Box13,
|
|
4249
4254
|
{
|
|
4250
4255
|
onClick: () => {
|
|
@@ -4264,24 +4269,24 @@ var ToggleSection = ({ children, headline, initialOpen = true }) => {
|
|
|
4264
4269
|
gap: 1
|
|
4265
4270
|
},
|
|
4266
4271
|
children: [
|
|
4267
|
-
/* @__PURE__ */
|
|
4268
|
-
isOpen ? /* @__PURE__ */
|
|
4272
|
+
/* @__PURE__ */ jsx136(Typography8, { sx: { fontWeight: 600 }, variant: "subtitle2", children: headline }),
|
|
4273
|
+
isOpen ? /* @__PURE__ */ jsx136(KeyboardArrowDown3, { sx: { color: "text.secondary", height: 20, width: 20 } }) : /* @__PURE__ */ jsx136(KeyboardArrowRight3, { sx: { color: "text.secondary", height: 20, width: 20 } })
|
|
4269
4274
|
]
|
|
4270
4275
|
}
|
|
4271
4276
|
)
|
|
4272
4277
|
}
|
|
4273
4278
|
),
|
|
4274
|
-
isOpen && /* @__PURE__ */
|
|
4279
|
+
isOpen && /* @__PURE__ */ jsx136(Box13, { children })
|
|
4275
4280
|
] });
|
|
4276
4281
|
};
|
|
4277
4282
|
|
|
4278
4283
|
// src/components/event-details/event-section.tsx
|
|
4279
|
-
import { jsx as
|
|
4284
|
+
import { jsx as jsx137, jsxs as jsxs128 } from "react/jsx-runtime";
|
|
4280
4285
|
var EventSection = ({
|
|
4281
4286
|
eventGroups,
|
|
4282
4287
|
headline
|
|
4283
|
-
}) => /* @__PURE__ */
|
|
4284
|
-
eventGroups.errors && /* @__PURE__ */
|
|
4288
|
+
}) => /* @__PURE__ */ jsx137(ToggleSection, { headline, children: /* @__PURE__ */ jsxs128(Box14, { children: [
|
|
4289
|
+
eventGroups.errors && /* @__PURE__ */ jsx137(
|
|
4285
4290
|
EventDetail,
|
|
4286
4291
|
{
|
|
4287
4292
|
displayText: "Error",
|
|
@@ -4289,7 +4294,7 @@ var EventSection = ({
|
|
|
4289
4294
|
type: "error"
|
|
4290
4295
|
}
|
|
4291
4296
|
),
|
|
4292
|
-
eventGroups.warnings && /* @__PURE__ */
|
|
4297
|
+
eventGroups.warnings && /* @__PURE__ */ jsx137(
|
|
4293
4298
|
EventDetail,
|
|
4294
4299
|
{
|
|
4295
4300
|
displayText: "Warning",
|
|
@@ -4297,7 +4302,7 @@ var EventSection = ({
|
|
|
4297
4302
|
type: "warning"
|
|
4298
4303
|
}
|
|
4299
4304
|
),
|
|
4300
|
-
eventGroups.permissions && /* @__PURE__ */
|
|
4305
|
+
eventGroups.permissions && /* @__PURE__ */ jsx137(
|
|
4301
4306
|
EventDetail,
|
|
4302
4307
|
{
|
|
4303
4308
|
displayText: "IAM Permission",
|
|
@@ -4305,7 +4310,7 @@ var EventSection = ({
|
|
|
4305
4310
|
type: "permission"
|
|
4306
4311
|
}
|
|
4307
4312
|
),
|
|
4308
|
-
eventGroups.info && /* @__PURE__ */
|
|
4313
|
+
eventGroups.info && /* @__PURE__ */ jsx137(
|
|
4309
4314
|
EventDetail,
|
|
4310
4315
|
{
|
|
4311
4316
|
displayText: "Info",
|
|
@@ -4316,55 +4321,55 @@ var EventSection = ({
|
|
|
4316
4321
|
] }) });
|
|
4317
4322
|
|
|
4318
4323
|
// src/components/event-details/event-details.tsx
|
|
4319
|
-
import { Fragment as Fragment6, jsx as
|
|
4324
|
+
import { Fragment as Fragment6, jsx as jsx138, jsxs as jsxs129 } from "react/jsx-runtime";
|
|
4320
4325
|
var EventDetails = ({ onClose, selectedEvent }) => {
|
|
4321
4326
|
const attributes = useMemo7(() => {
|
|
4322
4327
|
const attributes2 = Object.entries(selectedEvent?.attributes ?? {});
|
|
4323
4328
|
return attributes2.filter(([key]) => key !== "localstack.aws.account_id" && key !== "localstack.aws.service");
|
|
4324
4329
|
}, [selectedEvent?.attributes]);
|
|
4325
4330
|
if (!selectedEvent) {
|
|
4326
|
-
return /* @__PURE__ */
|
|
4331
|
+
return /* @__PURE__ */ jsx138(Box15, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx138(Typography9, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
|
|
4327
4332
|
}
|
|
4328
4333
|
return /* @__PURE__ */ jsxs129(Box15, { "data-testid": "event-details", sx: { display: "flex", flexDirection: "column", height: "100%" }, children: [
|
|
4329
|
-
/* @__PURE__ */
|
|
4330
|
-
/* @__PURE__ */
|
|
4331
|
-
/* @__PURE__ */
|
|
4334
|
+
/* @__PURE__ */ jsx138(EventDetailsHeader, { event: selectedEvent, onClose }),
|
|
4335
|
+
/* @__PURE__ */ jsx138(Box15, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 2, children: [
|
|
4336
|
+
/* @__PURE__ */ jsx138(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
|
|
4332
4337
|
/* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4333
|
-
/* @__PURE__ */
|
|
4334
|
-
/* @__PURE__ */
|
|
4338
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
|
|
4339
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.span_id })
|
|
4335
4340
|
] }),
|
|
4336
4341
|
/* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4337
|
-
/* @__PURE__ */
|
|
4338
|
-
/* @__PURE__ */
|
|
4342
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
|
|
4343
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.trace_id })
|
|
4339
4344
|
] }),
|
|
4340
4345
|
/* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4341
|
-
/* @__PURE__ */
|
|
4342
|
-
/* @__PURE__ */
|
|
4346
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
|
|
4347
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.operation_name })
|
|
4343
4348
|
] })
|
|
4344
4349
|
] }) }),
|
|
4345
|
-
/* @__PURE__ */
|
|
4346
|
-
/* @__PURE__ */
|
|
4350
|
+
/* @__PURE__ */ jsx138(Divider2, {}),
|
|
4351
|
+
/* @__PURE__ */ jsx138(ToggleSection, { headline: "Service Information", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
|
|
4347
4352
|
/* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4348
|
-
/* @__PURE__ */
|
|
4349
|
-
/* @__PURE__ */
|
|
4353
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
|
|
4354
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.service_name })
|
|
4350
4355
|
] }),
|
|
4351
4356
|
/* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4352
|
-
/* @__PURE__ */
|
|
4353
|
-
/* @__PURE__ */
|
|
4357
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
|
|
4358
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.resource_name })
|
|
4354
4359
|
] }),
|
|
4355
4360
|
Boolean(selectedEvent.region) && /* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4356
|
-
/* @__PURE__ */
|
|
4357
|
-
/* @__PURE__ */
|
|
4361
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
|
|
4362
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.region })
|
|
4358
4363
|
] })
|
|
4359
4364
|
] }) }),
|
|
4360
|
-
/* @__PURE__ */
|
|
4361
|
-
/* @__PURE__ */
|
|
4365
|
+
/* @__PURE__ */ jsx138(Divider2, {}),
|
|
4366
|
+
/* @__PURE__ */ jsx138(ToggleSection, { headline: "Timing", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
|
|
4362
4367
|
/* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4363
|
-
/* @__PURE__ */
|
|
4364
|
-
/* @__PURE__ */
|
|
4368
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
|
|
4369
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
|
|
4365
4370
|
] }),
|
|
4366
4371
|
Boolean(selectedEvent.end_time_unix_nano) && /* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4367
|
-
/* @__PURE__ */
|
|
4372
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
|
|
4368
4373
|
/* @__PURE__ */ jsxs129(Typography9, { variant: "body2", children: [
|
|
4369
4374
|
((BigInt(selectedEvent.end_time_unix_nano) - BigInt(selectedEvent.start_time_unix_nano)) / BigInt("1000000")).toString(),
|
|
4370
4375
|
" ",
|
|
@@ -4372,9 +4377,9 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
4372
4377
|
] })
|
|
4373
4378
|
] })
|
|
4374
4379
|
] }) }),
|
|
4375
|
-
/* @__PURE__ */
|
|
4376
|
-
/* @__PURE__ */
|
|
4377
|
-
/* @__PURE__ */
|
|
4380
|
+
/* @__PURE__ */ jsx138(Divider2, {}),
|
|
4381
|
+
/* @__PURE__ */ jsx138(ToggleSection, { headline: "Status", children: /* @__PURE__ */ jsxs129(Stack2, { direction: "row", spacing: 1, children: [
|
|
4382
|
+
/* @__PURE__ */ jsx138(
|
|
4378
4383
|
Chip3,
|
|
4379
4384
|
{
|
|
4380
4385
|
color: selectedEvent.status_code === 2 ? "error" : selectedEvent.status_code === 1 ? "success" : "default",
|
|
@@ -4382,11 +4387,11 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
4382
4387
|
size: "small"
|
|
4383
4388
|
}
|
|
4384
4389
|
),
|
|
4385
|
-
Boolean(selectedEvent.status_message) && /* @__PURE__ */
|
|
4390
|
+
Boolean(selectedEvent.status_message) && /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.status_message })
|
|
4386
4391
|
] }) }),
|
|
4387
4392
|
selectedEvent.events.length > 0 && /* @__PURE__ */ jsxs129(Fragment6, { children: [
|
|
4388
|
-
/* @__PURE__ */
|
|
4389
|
-
/* @__PURE__ */
|
|
4393
|
+
/* @__PURE__ */ jsx138(Divider2, {}),
|
|
4394
|
+
/* @__PURE__ */ jsx138(
|
|
4390
4395
|
EventSection,
|
|
4391
4396
|
{
|
|
4392
4397
|
eventGroups: getEventGroupsByType(selectedEvent.events),
|
|
@@ -4395,10 +4400,10 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
4395
4400
|
)
|
|
4396
4401
|
] }),
|
|
4397
4402
|
attributes.length > 0 && /* @__PURE__ */ jsxs129(Fragment6, { children: [
|
|
4398
|
-
/* @__PURE__ */
|
|
4399
|
-
/* @__PURE__ */
|
|
4400
|
-
/* @__PURE__ */
|
|
4401
|
-
/* @__PURE__ */
|
|
4403
|
+
/* @__PURE__ */ jsx138(Divider2, {}),
|
|
4404
|
+
/* @__PURE__ */ jsx138(ToggleSection, { headline: "Attributes", children: /* @__PURE__ */ jsx138(Stack2, { spacing: 1, children: attributes.map(([key, value]) => /* @__PURE__ */ jsxs129(Box15, { children: [
|
|
4405
|
+
/* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: key }),
|
|
4406
|
+
/* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: renderKeyValue(key, value) })
|
|
4402
4407
|
] }, key)) }) })
|
|
4403
4408
|
] })
|
|
4404
4409
|
] }) })
|
|
@@ -4406,12 +4411,12 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
4406
4411
|
};
|
|
4407
4412
|
function renderKeyValue(key, value) {
|
|
4408
4413
|
if (typeof value === "string" && (key === "localstack.aws.service.request" || key === "localstack.aws.service.response" || key === "localstack.aws.service.exception")) {
|
|
4409
|
-
return /* @__PURE__ */
|
|
4414
|
+
return /* @__PURE__ */ jsx138(Box15, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ jsx138("pre", { style: { margin: 0, overflow: "auto" }, children: /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: JSON.stringify(JSON.parse(value), void 0, 2) }) }) });
|
|
4410
4415
|
}
|
|
4411
4416
|
if (typeof value === "boolean") {
|
|
4412
|
-
return /* @__PURE__ */
|
|
4417
|
+
return /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: value ? "yes" : "no" });
|
|
4413
4418
|
}
|
|
4414
|
-
return /* @__PURE__ */
|
|
4419
|
+
return /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: value });
|
|
4415
4420
|
}
|
|
4416
4421
|
|
|
4417
4422
|
// src/components/trace-graph/trace-graph.tsx
|
|
@@ -4424,24 +4429,24 @@ import { useCallback as useCallback7, useEffect as useEffect6, useState as useSt
|
|
|
4424
4429
|
import { Box as Box17, Stack as Stack3, Typography as Typography10 } from "@mui/material";
|
|
4425
4430
|
import "@xyflow/react/dist/style.css";
|
|
4426
4431
|
import { Handle, Position } from "@xyflow/react";
|
|
4427
|
-
import { memo, useCallback as useCallback6 } from "react";
|
|
4432
|
+
import { memo as memo2, useCallback as useCallback6 } from "react";
|
|
4428
4433
|
|
|
4429
4434
|
// src/components/trace-graph/problem-indicator.tsx
|
|
4430
4435
|
import { Error as ErrorIcon2, Info as Info2, Warning as Warning2 } from "@mui/icons-material";
|
|
4431
4436
|
import { Box as Box16, Tooltip as Tooltip4 } from "@mui/material";
|
|
4432
4437
|
import { useMemo as useMemo8 } from "react";
|
|
4433
|
-
import { jsx as
|
|
4438
|
+
import { jsx as jsx139 } from "react/jsx-runtime";
|
|
4434
4439
|
var ProblemIndicator = ({ error }) => {
|
|
4435
4440
|
const icon = useMemo8(() => {
|
|
4436
4441
|
switch (error.level) {
|
|
4437
4442
|
case "error": {
|
|
4438
|
-
return /* @__PURE__ */
|
|
4443
|
+
return /* @__PURE__ */ jsx139(ErrorIcon2, { sx: { color: "#d32f2f", fontSize: "14px" } });
|
|
4439
4444
|
}
|
|
4440
4445
|
case "warning": {
|
|
4441
|
-
return /* @__PURE__ */
|
|
4446
|
+
return /* @__PURE__ */ jsx139(Warning2, { sx: { color: "#ff9800", fontSize: "14px" } });
|
|
4442
4447
|
}
|
|
4443
4448
|
default: {
|
|
4444
|
-
return /* @__PURE__ */
|
|
4449
|
+
return /* @__PURE__ */ jsx139(Info2, { sx: { color: "#2196f3", fontSize: "14px" } });
|
|
4445
4450
|
}
|
|
4446
4451
|
}
|
|
4447
4452
|
}, [error.level]);
|
|
@@ -4458,7 +4463,7 @@ var ProblemIndicator = ({ error }) => {
|
|
|
4458
4463
|
}
|
|
4459
4464
|
}
|
|
4460
4465
|
}, [error.level]);
|
|
4461
|
-
return /* @__PURE__ */
|
|
4466
|
+
return /* @__PURE__ */ jsx139(Tooltip4, { arrow: true, title: error.message ?? "Issue detected", children: /* @__PURE__ */ jsx139(
|
|
4462
4467
|
Box16,
|
|
4463
4468
|
{
|
|
4464
4469
|
sx: {
|
|
@@ -4478,13 +4483,13 @@ var ProblemIndicator = ({ error }) => {
|
|
|
4478
4483
|
};
|
|
4479
4484
|
|
|
4480
4485
|
// src/components/trace-graph/service-node.tsx
|
|
4481
|
-
import { jsx as
|
|
4486
|
+
import { jsx as jsx140, jsxs as jsxs130 } from "react/jsx-runtime";
|
|
4482
4487
|
var handleStyle = {
|
|
4483
4488
|
backgroundColor: "white",
|
|
4484
4489
|
borderColor: "lightgray",
|
|
4485
4490
|
opacity: 0
|
|
4486
4491
|
};
|
|
4487
|
-
var ServiceNode =
|
|
4492
|
+
var ServiceNode = memo2(function ServiceNode2({ data, selected }) {
|
|
4488
4493
|
const handleClick = useCallback6(() => {
|
|
4489
4494
|
data.onEventSelect(data.event);
|
|
4490
4495
|
}, [data]);
|
|
@@ -4521,9 +4526,9 @@ var ServiceNode = memo(function ServiceNode2({ data, selected }) {
|
|
|
4521
4526
|
},
|
|
4522
4527
|
tabIndex: 0,
|
|
4523
4528
|
children: [
|
|
4524
|
-
/* @__PURE__ */
|
|
4525
|
-
/* @__PURE__ */
|
|
4526
|
-
/* @__PURE__ */
|
|
4529
|
+
/* @__PURE__ */ jsx140(Handle, { position: Position.Left, style: handleStyle, type: "target" }),
|
|
4530
|
+
/* @__PURE__ */ jsx140(Handle, { position: Position.Right, style: handleStyle, type: "source" }),
|
|
4531
|
+
/* @__PURE__ */ jsx140(
|
|
4527
4532
|
ServiceCell,
|
|
4528
4533
|
{
|
|
4529
4534
|
borderColor: selected ? "text.primary" : void 0,
|
|
@@ -4548,7 +4553,7 @@ var ServiceNode = memo(function ServiceNode2({ data, selected }) {
|
|
|
4548
4553
|
mt: 0.5
|
|
4549
4554
|
},
|
|
4550
4555
|
children: [
|
|
4551
|
-
hasErrors && /* @__PURE__ */
|
|
4556
|
+
hasErrors && /* @__PURE__ */ jsx140(
|
|
4552
4557
|
Stack3,
|
|
4553
4558
|
{
|
|
4554
4559
|
direction: "row",
|
|
@@ -4557,10 +4562,10 @@ var ServiceNode = memo(function ServiceNode2({ data, selected }) {
|
|
|
4557
4562
|
flexWrap: "wrap",
|
|
4558
4563
|
gap: "2px"
|
|
4559
4564
|
},
|
|
4560
|
-
children: data.event.errors?.map((error) => /* @__PURE__ */
|
|
4565
|
+
children: data.event.errors?.map((error) => /* @__PURE__ */ jsx140(ProblemIndicator, { error }, error.span_id))
|
|
4561
4566
|
}
|
|
4562
4567
|
),
|
|
4563
|
-
/* @__PURE__ */
|
|
4568
|
+
/* @__PURE__ */ jsx140(
|
|
4564
4569
|
Typography10,
|
|
4565
4570
|
{
|
|
4566
4571
|
sx: {
|
|
@@ -4677,7 +4682,7 @@ var calculateCenterX = (focusNodeX, viewPortPixelWidth, minX, maxX) => {
|
|
|
4677
4682
|
import { Add, FitScreen, Remove } from "@mui/icons-material";
|
|
4678
4683
|
import { Box as Box18, IconButton as IconButton4 } from "@mui/material";
|
|
4679
4684
|
import { useReactFlow, useStore } from "@xyflow/react";
|
|
4680
|
-
import { memo as
|
|
4685
|
+
import { memo as memo3 } from "react";
|
|
4681
4686
|
|
|
4682
4687
|
// node_modules/zustand/esm/shallow.mjs
|
|
4683
4688
|
function shallow$1(objA, objB) {
|
|
@@ -4718,13 +4723,13 @@ function shallow$1(objA, objB) {
|
|
|
4718
4723
|
}
|
|
4719
4724
|
|
|
4720
4725
|
// src/components/trace-graph/xyflow/controls.tsx
|
|
4721
|
-
import { jsx as
|
|
4726
|
+
import { jsx as jsx141, jsxs as jsxs131 } from "react/jsx-runtime";
|
|
4722
4727
|
var selector = (s) => ({
|
|
4723
4728
|
isInteractive: s.nodesDraggable || s.nodesConnectable || s.elementsSelectable,
|
|
4724
4729
|
maxZoomReached: s.transform[2] >= s.maxZoom,
|
|
4725
4730
|
minZoomReached: s.transform[2] <= s.minZoom
|
|
4726
4731
|
});
|
|
4727
|
-
var Controls =
|
|
4732
|
+
var Controls = memo3(() => {
|
|
4728
4733
|
const { maxZoomReached, minZoomReached } = useStore(selector, shallow$1);
|
|
4729
4734
|
const { fitView, zoomIn, zoomOut } = useReactFlow();
|
|
4730
4735
|
const onZoomInHandler = () => {
|
|
@@ -4750,33 +4755,33 @@ var Controls = memo2(() => {
|
|
|
4750
4755
|
zIndex: 5
|
|
4751
4756
|
},
|
|
4752
4757
|
children: [
|
|
4753
|
-
/* @__PURE__ */
|
|
4758
|
+
/* @__PURE__ */ jsx141(
|
|
4754
4759
|
IconButton4,
|
|
4755
4760
|
{
|
|
4756
4761
|
className: "react-flow__controls-zoomin",
|
|
4757
4762
|
disabled: maxZoomReached,
|
|
4758
4763
|
onClick: onZoomInHandler,
|
|
4759
4764
|
size: "small",
|
|
4760
|
-
children: /* @__PURE__ */
|
|
4765
|
+
children: /* @__PURE__ */ jsx141(Add, {})
|
|
4761
4766
|
}
|
|
4762
4767
|
),
|
|
4763
|
-
/* @__PURE__ */
|
|
4768
|
+
/* @__PURE__ */ jsx141(
|
|
4764
4769
|
IconButton4,
|
|
4765
4770
|
{
|
|
4766
4771
|
className: "react-flow__controls-zoomout",
|
|
4767
4772
|
disabled: minZoomReached,
|
|
4768
4773
|
onClick: onZoomOutHandler,
|
|
4769
4774
|
size: "small",
|
|
4770
|
-
children: /* @__PURE__ */
|
|
4775
|
+
children: /* @__PURE__ */ jsx141(Remove, {})
|
|
4771
4776
|
}
|
|
4772
4777
|
),
|
|
4773
|
-
/* @__PURE__ */
|
|
4778
|
+
/* @__PURE__ */ jsx141(
|
|
4774
4779
|
IconButton4,
|
|
4775
4780
|
{
|
|
4776
4781
|
className: "react-flow__controls-fitview",
|
|
4777
4782
|
onClick: onFitViewHandler,
|
|
4778
4783
|
size: "small",
|
|
4779
|
-
children: /* @__PURE__ */
|
|
4784
|
+
children: /* @__PURE__ */ jsx141(FitScreen, {})
|
|
4780
4785
|
}
|
|
4781
4786
|
)
|
|
4782
4787
|
]
|
|
@@ -4785,7 +4790,7 @@ var Controls = memo2(() => {
|
|
|
4785
4790
|
});
|
|
4786
4791
|
|
|
4787
4792
|
// src/components/trace-graph/trace-graph.tsx
|
|
4788
|
-
import { Fragment as Fragment7, jsx as
|
|
4793
|
+
import { Fragment as Fragment7, jsx as jsx142, jsxs as jsxs132 } from "react/jsx-runtime";
|
|
4789
4794
|
var nodeTypes = {
|
|
4790
4795
|
service: ServiceNode
|
|
4791
4796
|
};
|
|
@@ -4878,7 +4883,7 @@ var TraceGraph = ({
|
|
|
4878
4883
|
spans.error && /* @__PURE__ */ jsxs132(
|
|
4879
4884
|
Alert3,
|
|
4880
4885
|
{
|
|
4881
|
-
action: /* @__PURE__ */
|
|
4886
|
+
action: /* @__PURE__ */ jsx142(Button4, { onClick: () => {
|
|
4882
4887
|
onRefresh();
|
|
4883
4888
|
}, children: "Retry" }),
|
|
4884
4889
|
severity: "error",
|
|
@@ -4903,8 +4908,8 @@ var TraceGraph = ({
|
|
|
4903
4908
|
onNodeClick,
|
|
4904
4909
|
selectNodesOnDrag: false,
|
|
4905
4910
|
children: [
|
|
4906
|
-
/* @__PURE__ */
|
|
4907
|
-
/* @__PURE__ */
|
|
4911
|
+
/* @__PURE__ */ jsx142(Controls, {}),
|
|
4912
|
+
/* @__PURE__ */ jsx142(Background, {})
|
|
4908
4913
|
]
|
|
4909
4914
|
}
|
|
4910
4915
|
)
|
|
@@ -4912,7 +4917,7 @@ var TraceGraph = ({
|
|
|
4912
4917
|
};
|
|
4913
4918
|
|
|
4914
4919
|
// src/pages/trace-graph-page.tsx
|
|
4915
|
-
import { Fragment as Fragment8, jsx as
|
|
4920
|
+
import { Fragment as Fragment8, jsx as jsx143, jsxs as jsxs133 } from "react/jsx-runtime";
|
|
4916
4921
|
var HEADER_HEIGHT = 56;
|
|
4917
4922
|
var DRAWER_WIDTH = "35%";
|
|
4918
4923
|
var Main = styled("main", { shouldForwardProp: (property) => property !== "open" })(({ open, theme }) => ({
|
|
@@ -4975,12 +4980,12 @@ var TraceGraphView = ({
|
|
|
4975
4980
|
},
|
|
4976
4981
|
children: [
|
|
4977
4982
|
/* @__PURE__ */ jsxs133(Box19, { sx: { display: "flex", width: "100%" }, children: [
|
|
4978
|
-
/* @__PURE__ */
|
|
4983
|
+
/* @__PURE__ */ jsx143(Button5, { onClick: () => {
|
|
4979
4984
|
navigateToSpansList();
|
|
4980
|
-
}, startIcon: /* @__PURE__ */
|
|
4981
|
-
/* @__PURE__ */
|
|
4985
|
+
}, startIcon: /* @__PURE__ */ jsx143(ArrowBack, {}), children: "Go back" }),
|
|
4986
|
+
/* @__PURE__ */ jsx143(Box19, { sx: { flexGrow: 1 } })
|
|
4982
4987
|
] }),
|
|
4983
|
-
/* @__PURE__ */
|
|
4988
|
+
/* @__PURE__ */ jsx143(
|
|
4984
4989
|
Paper2,
|
|
4985
4990
|
{
|
|
4986
4991
|
sx: {
|
|
@@ -4990,7 +4995,7 @@ var TraceGraphView = ({
|
|
|
4990
4995
|
position: "relative",
|
|
4991
4996
|
width: "100%"
|
|
4992
4997
|
},
|
|
4993
|
-
children: shouldShowStatusMessage ? /* @__PURE__ */
|
|
4998
|
+
children: shouldShowStatusMessage ? /* @__PURE__ */ jsx143(
|
|
4994
4999
|
StatusMessage,
|
|
4995
5000
|
{
|
|
4996
5001
|
error: statusError,
|
|
@@ -4998,14 +5003,14 @@ var TraceGraphView = ({
|
|
|
4998
5003
|
status
|
|
4999
5004
|
}
|
|
5000
5005
|
) : /* @__PURE__ */ jsxs133(Fragment8, { children: [
|
|
5001
|
-
/* @__PURE__ */
|
|
5006
|
+
/* @__PURE__ */ jsx143(Main, { open, children: /* @__PURE__ */ jsx143(
|
|
5002
5007
|
Box19,
|
|
5003
5008
|
{
|
|
5004
5009
|
sx: {
|
|
5005
5010
|
height: "100%",
|
|
5006
5011
|
overflow: "auto"
|
|
5007
5012
|
},
|
|
5008
|
-
children: traceId !== void 0 && /* @__PURE__ */
|
|
5013
|
+
children: traceId !== void 0 && /* @__PURE__ */ jsx143(ReactFlowProvider, { children: /* @__PURE__ */ jsx143(
|
|
5009
5014
|
TraceGraph,
|
|
5010
5015
|
{
|
|
5011
5016
|
initialFocusEventId: spanId,
|
|
@@ -5023,7 +5028,7 @@ var TraceGraphView = ({
|
|
|
5023
5028
|
) })
|
|
5024
5029
|
}
|
|
5025
5030
|
) }),
|
|
5026
|
-
/* @__PURE__ */
|
|
5031
|
+
/* @__PURE__ */ jsx143(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ jsx143(EventDetails, { onClose: handleClose, selectedEvent }) })
|
|
5027
5032
|
] })
|
|
5028
5033
|
}
|
|
5029
5034
|
)
|
|
@@ -5096,7 +5101,7 @@ var TraceGraphPage = () => {
|
|
|
5096
5101
|
const url = resolveLink({ to: "spans-list" });
|
|
5097
5102
|
navigate(url);
|
|
5098
5103
|
}, [navigate, resolveLink]);
|
|
5099
|
-
return /* @__PURE__ */
|
|
5104
|
+
return /* @__PURE__ */ jsx143(
|
|
5100
5105
|
TraceGraphView,
|
|
5101
5106
|
{
|
|
5102
5107
|
fetchError,
|