diff --git a/internal/kibana/dashboards.go b/internal/kibana/dashboards.go index 87a7aeebb..347b97f90 100644 --- a/internal/kibana/dashboards.go +++ b/internal/kibana/dashboards.go @@ -12,6 +12,8 @@ import ( "net/http" "strings" + "github.com/Masterminds/semver/v3" + "github.com/elastic/elastic-package/internal/common" "github.com/elastic/elastic-package/internal/logger" "github.com/elastic/elastic-package/internal/multierror" @@ -21,8 +23,33 @@ type exportedType struct { Objects []common.MapStr `json:"objects"` } -// Export method exports selected dashboards using the Kibana Export API. +// Export method exports selected dashboards using the Kibana APIs. func (c *Client) Export(ctx context.Context, dashboardIDs []string) ([]common.MapStr, error) { + if c.semver.LessThan(semver.MustParse("9.0.0")) { + return c.exportWithDashboardsAPI(ctx, dashboardIDs) + } + + return c.exportWithSavedObjectsAPI(ctx, dashboardIDs) +} + +func (c *Client) exportWithSavedObjectsAPI(ctx context.Context, dashboardIDs []string) ([]common.MapStr, error) { + logger.Debug("Export dashboards using the Kibana Saved Objects Export API") + + request := ExportSavedObjectsRequest{ + ExcludeExportDetails: true, + IncludeReferencesDeep: true, + } + for _, dashboardID := range dashboardIDs { + request.Objects = append(request.Objects, ExportSavedObjectsRequestObject{ + ID: dashboardID, + Type: "dashboard", + }) + } + + return c.ExportSavedObjects(ctx, request) +} + +func (c *Client) exportWithDashboardsAPI(ctx context.Context, dashboardIDs []string) ([]common.MapStr, error) { logger.Debug("Export dashboards using the Kibana Export API") var query strings.Builder diff --git a/internal/kibana/dashboards_test.go b/internal/kibana/dashboards_test.go new file mode 100644 index 000000000..7f3b4f5eb --- /dev/null +++ b/internal/kibana/dashboards_test.go @@ -0,0 +1,56 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package kibana_test + +import ( + "context" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/elastic/elastic-package/internal/common" + kibanatest "github.com/elastic/elastic-package/internal/kibana/test" +) + +func TestExportDashboards(t *testing.T) { + cases := []struct { + record string + }{ + { + record: "kibana-8-export-dashboard", + }, + { + record: "kibana-9-export-dashboard", + }, + } + + assertValue := func(t *testing.T, dashboard common.MapStr, key string, expected any) { + t.Helper() + value, err := dashboard.GetValue(key) + if !assert.NoError(t, err) { + return + } + assert.Equal(t, expected, value) + } + + for _, c := range cases { + t.Run(c.record, func(t *testing.T) { + client := kibanatest.NewClient(t, filepath.Join("testdata", c.record)) + id := preloadDashboard(t, client) + + dashboardIDs := []string{id} + dashboards, err := client.Export(context.Background(), dashboardIDs) + require.NoError(t, err) + + assert.Len(t, dashboards, 1) + assertValue(t, dashboards[0], "type", "dashboard") + assertValue(t, dashboards[0], "attributes.title", "Empty Dashboard") + assertValue(t, dashboards[0], "id", id) + assertValue(t, dashboards[0], "managed", true) + }) + } +} diff --git a/internal/kibana/savedobjects.go b/internal/kibana/savedobjects.go index 1f243b538..82bc734e6 100644 --- a/internal/kibana/savedobjects.go +++ b/internal/kibana/savedobjects.go @@ -14,6 +14,7 @@ import ( "sort" "strings" + "github.com/elastic/elastic-package/internal/common" "github.com/elastic/elastic-package/internal/logger" ) @@ -159,7 +160,7 @@ type ExportSavedObjectsRequestObject struct { Type string `json:"type"` } -func (c *Client) ExportSavedObjects(ctx context.Context, request ExportSavedObjectsRequest) ([]map[string]any, error) { +func (c *Client) ExportSavedObjects(ctx context.Context, request ExportSavedObjectsRequest) ([]common.MapStr, error) { body, err := json.Marshal(request) if err != nil { return nil, fmt.Errorf("failed to encode request: %w", err) @@ -174,7 +175,7 @@ func (c *Client) ExportSavedObjects(ctx context.Context, request ExportSavedObje return nil, fmt.Errorf("could not export saved objects; API status code = %d; response body = %s", statusCode, string(respBody)) } - var objects []map[string]any + var objects []common.MapStr decoder := json.NewDecoder(bytes.NewReader(respBody)) for decoder.More() { var object map[string]any @@ -191,7 +192,7 @@ func (c *Client) ExportSavedObjects(ctx context.Context, request ExportSavedObje type ImportSavedObjectsRequest struct { Overwrite bool - Objects []map[string]any + Objects []common.MapStr } type ImportSavedObjectsResponse struct { diff --git a/internal/kibana/savedobjects_test.go b/internal/kibana/savedobjects_test.go index 9f7cc1de0..7e1c41a0c 100644 --- a/internal/kibana/savedobjects_test.go +++ b/internal/kibana/savedobjects_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/elastic/elastic-package/internal/common" "github.com/elastic/elastic-package/internal/kibana" kibanatest "github.com/elastic/elastic-package/internal/kibana/test" ) @@ -35,7 +36,7 @@ func preloadDashboard(t *testing.T, client *kibana.Client) string { id := "test-managed-saved-objects" importRequest := kibana.ImportSavedObjectsRequest{ Overwrite: false, // We should not need to overwrite objects. - Objects: []map[string]any{ + Objects: []common.MapStr{ { "attributes": map[string]any{ "title": "Empty Dashboard", diff --git a/internal/kibana/testdata/kibana-8-export-dashboard.yaml b/internal/kibana/testdata/kibana-8-export-dashboard.yaml new file mode 100644 index 000000000..80c52231c --- /dev/null +++ b/internal/kibana/testdata/kibana-8-export-dashboard.yaml @@ -0,0 +1,284 @@ +--- +version: 2 +interactions: + - id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - application/json + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/status + method: GET + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: + - chunked + trailer: {} + content_length: -1 + uncompressed: true + body: '{"name":"kibana","uuid":"d3484a14-f029-4e11-9778-7942e8ae87d2","version":{"number":"8.18.1","build_hash":"d095a26b905eabe7a75cb980b65aea0ad319b8fe","build_number":83090,"build_snapshot":false,"build_flavor":"traditional","build_date":"2025-04-30T11:08:16.226Z"},"status":{"overall":{"level":"available","summary":"All services and plugins are available"},"core":{"elasticsearch":{"level":"available","summary":"Elasticsearch is available","meta":{"warningNodes":[],"incompatibleNodes":[]}},"savedObjects":{"level":"available","summary":"SavedObjects service has completed migrations and is available","meta":{"migratedIndices":{"migrated":0,"skipped":0,"patched":7}}}},"plugins":{"alerting":{"level":"available","summary":"Alerting is (probably) ready","reported":true},"streams":{"level":"available","summary":"All services and plugins are available"},"triggersActionsUi":{"level":"available","summary":"All services and plugins are available"},"transform":{"level":"available","summary":"All services and plugins are available"},"stackConnectors":{"level":"available","summary":"All services and plugins are available"},"integrationAssistant":{"level":"available","summary":"All services and plugins are available"},"stackAlerts":{"level":"available","summary":"All services and plugins are available"},"ruleRegistry":{"level":"available","summary":"All services and plugins are available"},"cases":{"level":"available","summary":"All services and plugins are available"},"timelines":{"level":"available","summary":"All services and plugins are available"},"sessionView":{"level":"available","summary":"All services and plugins are available"},"kubernetesSecurity":{"level":"available","summary":"All services and plugins are available"},"threatIntelligence":{"level":"available","summary":"All services and plugins are available"},"observabilityShared":{"level":"available","summary":"All services and plugins are available"},"streamsApp":{"level":"available","summary":"All services and plugins are available"},"metricsDataAccess":{"level":"available","summary":"All services and plugins are available"},"entityManagerApp":{"level":"available","summary":"All services and plugins are available"},"aiops":{"level":"available","summary":"All services and plugins are available"},"discover":{"level":"available","summary":"All services and plugins are available"},"reporting":{"level":"available","summary":"All services and plugins are available"},"canvas":{"level":"available","summary":"All services and plugins are available"},"ml":{"level":"available","summary":"All services and plugins are available"},"searchPlayground":{"level":"available","summary":"All services and plugins are available"},"searchInferenceEndpoints":{"level":"available","summary":"All services and plugins are available"},"searchAssistant":{"level":"available","summary":"All services and plugins are available"},"observabilityAiAssistantManagement":{"level":"available","summary":"All services and plugins are available"},"elasticAssistant":{"level":"available","summary":"All services and plugins are available"},"logsExplorer":{"level":"available","summary":"All services and plugins are available"},"inventory":{"level":"available","summary":"All services and plugins are available"},"osquery":{"level":"available","summary":"All services and plugins are available"},"monitoring":{"level":"available","summary":"All services and plugins are available"},"logstash":{"level":"available","summary":"All services and plugins are available"},"indexManagement":{"level":"available","summary":"All services and plugins are available"},"rollup":{"level":"available","summary":"All services and plugins are available"},"remoteClusters":{"level":"available","summary":"All services and plugins are available"},"crossClusterReplication":{"level":"available","summary":"All services and plugins are available"},"indexLifecycleManagement":{"level":"available","summary":"All services and plugins are available"},"esql":{"level":"available","summary":"All services and plugins are available"},"datasetQuality":{"level":"available","summary":"All services and plugins are available"},"dataQuality":{"level":"available","summary":"All services and plugins are available"},"cloudSecurityPosture":{"level":"available","summary":"All services and plugins are available"},"cloudDefend":{"level":"available","summary":"All services and plugins are available"},"securitySolution":{"level":"available","summary":"All services and plugins are available"},"securitySolutionEss":{"level":"available","summary":"All services and plugins are available"},"exploratoryView":{"level":"available","summary":"All services and plugins are available"},"discoverEnhanced":{"level":"available","summary":"All services and plugins are available"},"links":{"level":"available","summary":"All services and plugins are available"},"observability":{"level":"available","summary":"All services and plugins are available"},"uptime":{"level":"available","summary":"All services and plugins are available"},"slo":{"level":"available","summary":"All services and plugins are available"},"synthetics":{"level":"available","summary":"All services and plugins are available"},"observabilityLogsExplorer":{"level":"available","summary":"All services and plugins are available"},"observabilityAIAssistantApp":{"level":"available","summary":"All services and plugins are available"},"observabilityOnboarding":{"level":"available","summary":"All services and plugins are available"},"enterpriseSearch":{"level":"available","summary":"All services and plugins are available"},"infra":{"level":"available","summary":"All services and plugins are available"},"apm":{"level":"available","summary":"All services and plugins are available"},"ux":{"level":"available","summary":"All services and plugins are available"},"fleet":{"level":"available","summary":"Fleet is available","reported":true},"urlForwarding":{"level":"available","summary":"All services are available"},"unifiedHistogram":{"level":"available","summary":"All services are available"},"uiActions":{"level":"available","summary":"All services are available"},"translations":{"level":"available","summary":"All services are available"},"share":{"level":"available","summary":"All services are available"},"searchNavigation":{"level":"available","summary":"All services are available"},"searchConnectors":{"level":"available","summary":"All services are available"},"screenshotMode":{"level":"available","summary":"All services are available"},"savedObjectsFinder":{"level":"available","summary":"All services are available"},"runtimeFields":{"level":"available","summary":"All services are available"},"noDataPage":{"level":"available","summary":"All services are available"},"monitoringCollection":{"level":"available","summary":"All services are available"},"licenseApiGuard":{"level":"available","summary":"All services are available"},"kibanaUtils":{"level":"available","summary":"All services are available"},"kibanaReact":{"level":"available","summary":"All services are available"},"ftrApis":{"level":"available","summary":"All services are available"},"fieldsMetadata":{"level":"available","summary":"All services are available"},"fieldFormats":{"level":"available","summary":"All services are available"},"expressions":{"level":"available","summary":"All services are available"},"esUiShared":{"level":"available","summary":"All services are available"},"entitiesDataAccess":{"level":"available","summary":"All services are available"},"discoverShared":{"level":"available","summary":"All services are available"},"customIntegrations":{"level":"available","summary":"All services are available"},"bfetch":{"level":"available","summary":"All services are available"},"devTools":{"level":"available","summary":"All services and plugins are available"},"inspector":{"level":"available","summary":"All services and plugins are available"},"usageCollection":{"level":"available","summary":"All services and plugins are available"},"telemetryCollectionManager":{"level":"available","summary":"All services and plugins are available"},"telemetryCollectionXpack":{"level":"available","summary":"All services and plugins are available"},"kibanaUsageCollection":{"level":"available","summary":"All services and plugins are available"},"contentManagement":{"level":"available","summary":"All services and plugins are available"},"cloud":{"level":"available","summary":"All services and plugins are available"},"newsfeed":{"level":"available","summary":"All services and plugins are available"},"productDocBase":{"level":"available","summary":"All services and plugins are available"},"mapsEms":{"level":"available","summary":"All services and plugins are available"},"globalSearch":{"level":"available","summary":"All services and plugins are available"},"globalSearchProviders":{"level":"available","summary":"All services and plugins are available"},"features":{"level":"available","summary":"All services and plugins are available"},"guidedOnboarding":{"level":"available","summary":"All services and plugins are available"},"banners":{"level":"available","summary":"All services and plugins are available"},"customBranding":{"level":"available","summary":"All services and plugins are available"},"screenshotting":{"level":"available","summary":"All services and plugins are available"},"dataViews":{"level":"available","summary":"All services and plugins are available"},"home":{"level":"available","summary":"All services and plugins are available"},"searchprofiler":{"level":"available","summary":"All services and plugins are available"},"painlessLab":{"level":"available","summary":"All services and plugins are available"},"management":{"level":"available","summary":"All services and plugins are available"},"spaces":{"level":"available","summary":"All services and plugins are available"},"security":{"level":"available","summary":"All services and plugins are available"},"telemetry":{"level":"available","summary":"All services and plugins are available"},"licenseManagement":{"level":"available","summary":"All services and plugins are available"},"snapshotRestore":{"level":"available","summary":"All services and plugins are available"},"lists":{"level":"available","summary":"All services and plugins are available"},"files":{"level":"available","summary":"All services and plugins are available"},"filesManagement":{"level":"available","summary":"All services and plugins are available"},"encryptedSavedObjects":{"level":"available","summary":"All services and plugins are available"},"entityManager":{"level":"available","summary":"All services and plugins are available"},"cloudLinks":{"level":"available","summary":"All services and plugins are available"},"eventLog":{"level":"available","summary":"All services and plugins are available"},"actions":{"level":"available","summary":"All services and plugins are available"},"notifications":{"level":"available","summary":"All services and plugins are available"},"inference":{"level":"available","summary":"All services and plugins are available"},"observabilityAIAssistant":{"level":"available","summary":"All services and plugins are available"},"llmTasks":{"level":"available","summary":"All services and plugins are available"},"cloudDataMigration":{"level":"available","summary":"All services and plugins are available"},"aiAssistantManagementSelection":{"level":"available","summary":"All services and plugins are available"},"advancedSettings":{"level":"available","summary":"All services and plugins are available"},"telemetryManagementSection":{"level":"available","summary":"All services and plugins are available"},"grokdebugger":{"level":"available","summary":"All services and plugins are available"},"console":{"level":"available","summary":"All services and plugins are available"},"searchSynonyms":{"level":"available","summary":"All services and plugins are available"},"searchNotebooks":{"level":"available","summary":"All services and plugins are available"},"data":{"level":"available","summary":"All services and plugins are available"},"unifiedDocViewer":{"level":"available","summary":"All services and plugins are available"},"savedObjects":{"level":"available","summary":"All services and plugins are available"},"savedObjectsTaggingOss":{"level":"available","summary":"All services and plugins are available"},"savedObjectsTagging":{"level":"available","summary":"All services and plugins are available"},"globalSearchBar":{"level":"available","summary":"All services and plugins are available"},"savedObjectsManagement":{"level":"available","summary":"All services and plugins are available"},"unifiedSearch":{"level":"available","summary":"All services and plugins are available"},"navigation":{"level":"available","summary":"All services and plugins are available"},"inferenceEndpoint":{"level":"available","summary":"All services and plugins are available"},"graph":{"level":"available","summary":"All services and plugins are available"},"presentationPanel":{"level":"available","summary":"All services and plugins are available"},"embeddable":{"level":"available","summary":"All services and plugins are available"},"uiActionsEnhanced":{"level":"available","summary":"All services and plugins are available"},"urlDrilldown":{"level":"available","summary":"All services and plugins are available"},"embeddableEnhanced":{"level":"available","summary":"All services and plugins are available"},"imageEmbeddable":{"level":"available","summary":"All services and plugins are available"},"savedSearch":{"level":"available","summary":"All services and plugins are available"},"presentationUtil":{"level":"available","summary":"All services and plugins are available"},"expressionShape":{"level":"available","summary":"All services and plugins are available"},"expressionRevealImage":{"level":"available","summary":"All services and plugins are available"},"expressionRepeatImage":{"level":"available","summary":"All services and plugins are available"},"expressionMetric":{"level":"available","summary":"All services and plugins are available"},"expressionImage":{"level":"available","summary":"All services and plugins are available"},"expressionError":{"level":"available","summary":"All services and plugins are available"},"controls":{"level":"available","summary":"All services and plugins are available"},"logsDataAccess":{"level":"available","summary":"All services and plugins are available"},"fileUpload":{"level":"available","summary":"All services and plugins are available"},"ingestPipelines":{"level":"available","summary":"All services and plugins are available"},"esqlDataGrid":{"level":"available","summary":"All services and plugins are available"},"ecsDataQualityDashboard":{"level":"available","summary":"All services and plugins are available"},"dataViewFieldEditor":{"level":"available","summary":"All services and plugins are available"},"dataViewEditor":{"level":"available","summary":"All services and plugins are available"},"kibanaOverview":{"level":"available","summary":"All services and plugins are available"},"dataViewManagement":{"level":"available","summary":"All services and plugins are available"},"charts":{"level":"available","summary":"All services and plugins are available"},"watcher":{"level":"available","summary":"All services and plugins are available"},"visualizations":{"level":"available","summary":"All services and plugins are available"},"visTypeXy":{"level":"available","summary":"All services and plugins are available"},"visTypeVislib":{"level":"available","summary":"All services and plugins are available"},"visTypeVega":{"level":"available","summary":"All services and plugins are available"},"visTypeTimeseries":{"level":"available","summary":"All services and plugins are available"},"visTypeTimelion":{"level":"available","summary":"All services and plugins are available"},"visTypeTagcloud":{"level":"available","summary":"All services and plugins are available"},"visTypeTable":{"level":"available","summary":"All services and plugins are available"},"visTypeMetric":{"level":"available","summary":"All services and plugins are available"},"visTypeMarkdown":{"level":"available","summary":"All services and plugins are available"},"visTypeHeatmap":{"level":"available","summary":"All services and plugins are available"},"visDefaultEditor":{"level":"available","summary":"All services and plugins are available"},"inputControlVis":{"level":"available","summary":"All services and plugins are available"},"expressionTagcloud":{"level":"available","summary":"All services and plugins are available"},"expressionPartitionVis":{"level":"available","summary":"All services and plugins are available"},"visTypePie":{"level":"available","summary":"All services and plugins are available"},"expressionMetricVis":{"level":"available","summary":"All services and plugins are available"},"expressionLegacyMetricVis":{"level":"available","summary":"All services and plugins are available"},"expressionHeatmap":{"level":"available","summary":"All services and plugins are available"},"expressionGauge":{"level":"available","summary":"All services and plugins are available"},"visTypeGauge":{"level":"available","summary":"All services and plugins are available"},"eventAnnotation":{"level":"available","summary":"All services and plugins are available"},"expressionXY":{"level":"available","summary":"All services and plugins are available"},"lens":{"level":"available","summary":"All services and plugins are available"},"maps":{"level":"available","summary":"All services and plugins are available"},"dataVisualizer":{"level":"available","summary":"All services and plugins are available"},"eventAnnotationListing":{"level":"available","summary":"All services and plugins are available"},"dashboard":{"level":"available","summary":"All services and plugins are available"},"dashboardEnhanced":{"level":"available","summary":"All services and plugins are available"},"logsShared":{"level":"available","summary":"All services and plugins are available"},"upgradeAssistant":{"level":"available","summary":"All services and plugins are available"},"apmDataAccess":{"level":"available","summary":"All services and plugins are available"},"licensing":{"level":"available","summary":"License fetched","reported":true},"taskManager":{"level":"available","summary":"Task Manager is healthy","reported":true}}},"metrics":{"last_updated":"2025-05-21T14:18:00.912Z","collection_interval_in_millis":5000,"os":{"platform":"linux","platformRelease":"linux-6.8.0-59-generic","load":{"1m":6.9,"5m":8.09,"15m":6.24},"memory":{"total_in_bytes":33362878464,"free_in_bytes":15809531904,"used_in_bytes":17553346560},"uptime_in_millis":96831590,"distro":"Ubuntu","distroRelease":"Ubuntu-20.04","cpu":{"cfs_quota_micros":-1,"cfs_period_micros":100000,"control_group":"/","stat":{"number_of_elapsed_periods":0,"number_of_times_throttled":0,"time_throttled_nanos":0}},"cpuacct":{"control_group":"/","usage_nanos":157155785},"cgroup_memory":{"current_in_bytes":782802944,"swap_current_in_bytes":0}},"process":{"memory":{"heap":{"total_in_bytes":489099264,"used_in_bytes":381457904,"size_limit":4345298944},"resident_set_size_in_bytes":626921472,"array_buffers_in_bytes":1657930,"external_in_bytes":5318606},"pid":7,"event_loop_delay":24.018943,"event_loop_delay_histogram":{"min":9.109504,"max":24.018943,"mean":10.282699744329898,"exceeds":0,"stddev":0.921330863412732,"fromTimestamp":"2025-05-21T14:17:55.910Z","lastUpdatedAt":"2025-05-21T14:18:00.907Z","percentiles":{"50":10.133503,"75":10.199039,"95":11.190271,"99":13.099007}},"event_loop_utilization":{"active":302.25887600012356,"idle":4696.050650000048,"utilization":0.06047222054333279},"uptime_in_millis":616168.860118},"processes":[{"memory":{"heap":{"total_in_bytes":489099264,"used_in_bytes":381457904,"size_limit":4345298944},"resident_set_size_in_bytes":626921472,"array_buffers_in_bytes":1657930,"external_in_bytes":5318606},"pid":7,"event_loop_delay":24.018943,"event_loop_delay_histogram":{"min":9.109504,"max":24.018943,"mean":10.282699744329898,"exceeds":0,"stddev":0.921330863412732,"fromTimestamp":"2025-05-21T14:17:55.910Z","lastUpdatedAt":"2025-05-21T14:18:00.907Z","percentiles":{"50":10.133503,"75":10.199039,"95":11.190271,"99":13.099007}},"event_loop_utilization":{"active":302.25887600012356,"idle":4696.050650000048,"utilization":0.06047222054333279},"uptime_in_millis":616168.860118}],"response_times":{"avg_in_millis":39,"max_in_millis":39},"concurrent_connections":0,"requests":{"disconnects":0,"total":1,"statusCodes":{"200":1},"status_codes":{"200":1}},"elasticsearch_client":{"totalActiveSockets":0,"totalIdleSockets":3,"totalQueuedRequests":0}}}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:18:00 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 199ba9f3e1b601f6df0b6d2ef5c8ca4a2e7fc9818ccc13d5d23b74e76c2ea0e6 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - accept-encoding + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 60.814497ms + - id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 354 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "--2091dd7bc743f21b90963cdcd05816dcf6c02878fccdc693b92df4de98b1\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file.ndjson\"\r\nContent-Type: application/octet-stream\r\n\r\n{\"attributes\":{\"title\":\"Empty Dashboard\"},\"id\":\"test-managed-saved-objects\",\"managed\":true,\"type\":\"dashboard\"}\n\r\n--2091dd7bc743f21b90963cdcd05816dcf6c02878fccdc693b92df4de98b1--\r\n" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - multipart/form-data; boundary=2091dd7bc743f21b90963cdcd05816dcf6c02878fccdc693b92df4de98b1 + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/saved_objects/_import + method: POST + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 193 + uncompressed: false + body: '{"successCount":1,"success":true,"warnings":[],"successResults":[{"type":"dashboard","id":"test-managed-saved-objects","meta":{"title":"Empty Dashboard","icon":"dashboardApp"},"managed":true}]}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - "193" + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:18:01 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 199ba9f3e1b601f6df0b6d2ef5c8ca4a2e7fc9818ccc13d5d23b74e76c2ea0e6 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 911.505283ms + - id: 2 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - application/json + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/kibana/dashboards/export?dashboard=test-managed-saved-objects& + method: GET + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 549 + uncompressed: false + body: |- + { + "version": "8.18.1", + "objects": [ + { + "id": "test-managed-saved-objects", + "type": "dashboard", + "namespaces": [ + "default" + ], + "updated_at": "2025-05-21T14:18:01.141Z", + "created_at": "2025-05-21T14:18:01.141Z", + "version": "WzQxLDFd", + "attributes": { + "timeRestore": false, + "title": "Empty Dashboard", + "panelsJSON": "[]" + }, + "references": [], + "managed": true, + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "10.2.0" + } + ] + } + headers: + Accept-Ranges: + - bytes + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Disposition: + - attachment; filename="kibana-dashboards.2025-05-21-14-18-01.json" + Content-Length: + - "549" + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:18:01 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 199ba9f3e1b601f6df0b6d2ef5c8ca4a2e7fc9818ccc13d5d23b74e76c2ea0e6 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 43.87294ms + - id: 3 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - application/json + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/saved_objects/dashboard/test-managed-saved-objects + method: DELETE + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 2 + uncompressed: false + body: '{}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - "2" + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:18:02 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 199ba9f3e1b601f6df0b6d2ef5c8ca4a2e7fc9818ccc13d5d23b74e76c2ea0e6 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 1.028141112s diff --git a/internal/kibana/testdata/kibana-9-export-dashboard.yaml b/internal/kibana/testdata/kibana-9-export-dashboard.yaml new file mode 100644 index 000000000..a9f36cb0f --- /dev/null +++ b/internal/kibana/testdata/kibana-9-export-dashboard.yaml @@ -0,0 +1,260 @@ +--- +version: 2 +interactions: + - id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - application/json + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/status + method: GET + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: + - chunked + trailer: {} + content_length: -1 + uncompressed: true + body: '{"name":"kibana","uuid":"5bcbae52-16d9-48c9-935c-b365758e7875","version":{"number":"9.0.1","build_hash":"0df588b1a307954a3103991180df23c70184d34c","build_number":84599,"build_snapshot":false,"build_flavor":"traditional","build_date":"2025-04-30T11:08:02.678Z"},"status":{"overall":{"level":"available","summary":"All services and plugins are available"},"core":{"elasticsearch":{"level":"available","summary":"Elasticsearch is available","meta":{"warningNodes":[],"incompatibleNodes":[]}},"savedObjects":{"level":"available","summary":"SavedObjects service has completed migrations and is available","meta":{"migratedIndices":{"migrated":0,"skipped":0,"patched":7}}}},"plugins":{"alerting":{"level":"available","summary":"Alerting is (probably) ready","reported":true},"streams":{"level":"available","summary":"All services and plugins are available"},"triggersActionsUi":{"level":"available","summary":"All services and plugins are available"},"transform":{"level":"available","summary":"All services and plugins are available"},"stackConnectors":{"level":"available","summary":"All services and plugins are available"},"automaticImport":{"level":"available","summary":"All services and plugins are available"},"stackAlerts":{"level":"available","summary":"All services and plugins are available"},"ruleRegistry":{"level":"available","summary":"All services and plugins are available"},"cases":{"level":"available","summary":"All services and plugins are available"},"timelines":{"level":"available","summary":"All services and plugins are available"},"sessionView":{"level":"available","summary":"All services and plugins are available"},"threatIntelligence":{"level":"available","summary":"All services and plugins are available"},"observabilityShared":{"level":"available","summary":"All services and plugins are available"},"streamsApp":{"level":"available","summary":"All services and plugins are available"},"metricsDataAccess":{"level":"available","summary":"All services and plugins are available"},"entityManagerApp":{"level":"available","summary":"All services and plugins are available"},"aiops":{"level":"available","summary":"All services and plugins are available"},"discover":{"level":"available","summary":"All services and plugins are available"},"reporting":{"level":"available","summary":"All services and plugins are available"},"canvas":{"level":"available","summary":"All services and plugins are available"},"ml":{"level":"available","summary":"All services and plugins are available"},"searchAssistant":{"level":"available","summary":"All services and plugins are available"},"observabilityAiAssistantManagement":{"level":"available","summary":"All services and plugins are available"},"elasticAssistant":{"level":"available","summary":"All services and plugins are available"},"logsExplorer":{"level":"available","summary":"All services and plugins are available"},"inventory":{"level":"available","summary":"All services and plugins are available"},"exploratoryView":{"level":"available","summary":"All services and plugins are available"},"discoverEnhanced":{"level":"available","summary":"All services and plugins are available"},"links":{"level":"available","summary":"All services and plugins are available"},"observability":{"level":"available","summary":"All services and plugins are available"},"slo":{"level":"available","summary":"All services and plugins are available"},"observabilityAIAssistantApp":{"level":"available","summary":"All services and plugins are available"},"searchPlayground":{"level":"available","summary":"All services and plugins are available"},"searchInferenceEndpoints":{"level":"available","summary":"All services and plugins are available"},"uptime":{"level":"available","summary":"All services and plugins are available"},"synthetics":{"level":"available","summary":"All services and plugins are available"},"searchConnectors":{"level":"available","summary":"All services and plugins are available"},"osquery":{"level":"available","summary":"All services and plugins are available"},"infra":{"level":"available","summary":"All services and plugins are available"},"observabilityOnboarding":{"level":"available","summary":"All services and plugins are available"},"monitoring":{"level":"available","summary":"All services and plugins are available"},"logstash":{"level":"available","summary":"All services and plugins are available"},"indexManagement":{"level":"available","summary":"All services and plugins are available"},"searchIndices":{"level":"available","summary":"All services and plugins are available"},"enterpriseSearch":{"level":"available","summary":"All services and plugins are available"},"rollup":{"level":"available","summary":"All services and plugins are available"},"remoteClusters":{"level":"available","summary":"All services and plugins are available"},"crossClusterReplication":{"level":"available","summary":"All services and plugins are available"},"indexLifecycleManagement":{"level":"available","summary":"All services and plugins are available"},"esql":{"level":"available","summary":"All services and plugins are available"},"datasetQuality":{"level":"available","summary":"All services and plugins are available"},"dataQuality":{"level":"available","summary":"All services and plugins are available"},"observabilityLogsExplorer":{"level":"available","summary":"All services and plugins are available"},"cloudSecurityPosture":{"level":"available","summary":"All services and plugins are available"},"cloudDefend":{"level":"available","summary":"All services and plugins are available"},"securitySolution":{"level":"available","summary":"All services and plugins are available"},"securitySolutionEss":{"level":"available","summary":"All services and plugins are available"},"apm":{"level":"available","summary":"All services and plugins are available"},"ux":{"level":"available","summary":"All services and plugins are available"},"fleet":{"level":"available","summary":"Fleet is available","reported":true},"urlForwarding":{"level":"available","summary":"All services are available"},"unifiedHistogram":{"level":"available","summary":"All services are available"},"uiActions":{"level":"available","summary":"All services are available"},"translations":{"level":"available","summary":"All services are available"},"share":{"level":"available","summary":"All services are available"},"searchNavigation":{"level":"available","summary":"All services are available"},"screenshotMode":{"level":"available","summary":"All services are available"},"savedObjectsFinder":{"level":"available","summary":"All services are available"},"runtimeFields":{"level":"available","summary":"All services are available"},"noDataPage":{"level":"available","summary":"All services are available"},"monitoringCollection":{"level":"available","summary":"All services are available"},"licenseApiGuard":{"level":"available","summary":"All services are available"},"kibanaUtils":{"level":"available","summary":"All services are available"},"kibanaReact":{"level":"available","summary":"All services are available"},"ftrApis":{"level":"available","summary":"All services are available"},"fieldsMetadata":{"level":"available","summary":"All services are available"},"fieldFormats":{"level":"available","summary":"All services are available"},"expressions":{"level":"available","summary":"All services are available"},"esUiShared":{"level":"available","summary":"All services are available"},"entitiesDataAccess":{"level":"available","summary":"All services are available"},"discoverShared":{"level":"available","summary":"All services are available"},"customIntegrations":{"level":"available","summary":"All services are available"},"devTools":{"level":"available","summary":"All services and plugins are available"},"inspector":{"level":"available","summary":"All services and plugins are available"},"usageCollection":{"level":"available","summary":"All services and plugins are available"},"telemetryCollectionManager":{"level":"available","summary":"All services and plugins are available"},"telemetryCollectionXpack":{"level":"available","summary":"All services and plugins are available"},"kibanaUsageCollection":{"level":"available","summary":"All services and plugins are available"},"contentManagement":{"level":"available","summary":"All services and plugins are available"},"cloud":{"level":"available","summary":"All services and plugins are available"},"newsfeed":{"level":"available","summary":"All services and plugins are available"},"productDocBase":{"level":"available","summary":"All services and plugins are available"},"mapsEms":{"level":"available","summary":"All services and plugins are available"},"globalSearch":{"level":"available","summary":"All services and plugins are available"},"globalSearchProviders":{"level":"available","summary":"All services and plugins are available"},"features":{"level":"available","summary":"All services and plugins are available"},"guidedOnboarding":{"level":"available","summary":"All services and plugins are available"},"banners":{"level":"available","summary":"All services and plugins are available"},"customBranding":{"level":"available","summary":"All services and plugins are available"},"screenshotting":{"level":"available","summary":"All services and plugins are available"},"dataViews":{"level":"available","summary":"All services and plugins are available"},"home":{"level":"available","summary":"All services and plugins are available"},"searchprofiler":{"level":"available","summary":"All services and plugins are available"},"painlessLab":{"level":"available","summary":"All services and plugins are available"},"management":{"level":"available","summary":"All services and plugins are available"},"spaces":{"level":"available","summary":"All services and plugins are available"},"security":{"level":"available","summary":"All services and plugins are available"},"telemetry":{"level":"available","summary":"All services and plugins are available"},"licenseManagement":{"level":"available","summary":"All services and plugins are available"},"snapshotRestore":{"level":"available","summary":"All services and plugins are available"},"lists":{"level":"available","summary":"All services and plugins are available"},"files":{"level":"available","summary":"All services and plugins are available"},"filesManagement":{"level":"available","summary":"All services and plugins are available"},"encryptedSavedObjects":{"level":"available","summary":"All services and plugins are available"},"entityManager":{"level":"available","summary":"All services and plugins are available"},"cloudLinks":{"level":"available","summary":"All services and plugins are available"},"eventLog":{"level":"available","summary":"All services and plugins are available"},"actions":{"level":"available","summary":"All services and plugins are available"},"notifications":{"level":"available","summary":"All services and plugins are available"},"inference":{"level":"available","summary":"All services and plugins are available"},"observabilityAIAssistant":{"level":"available","summary":"All services and plugins are available"},"llmTasks":{"level":"available","summary":"All services and plugins are available"},"advancedSettings":{"level":"available","summary":"All services and plugins are available"},"telemetryManagementSection":{"level":"available","summary":"All services and plugins are available"},"data":{"level":"available","summary":"All services and plugins are available"},"unifiedDocViewer":{"level":"available","summary":"All services and plugins are available"},"savedObjects":{"level":"available","summary":"All services and plugins are available"},"savedObjectsTaggingOss":{"level":"available","summary":"All services and plugins are available"},"savedObjectsTagging":{"level":"available","summary":"All services and plugins are available"},"globalSearchBar":{"level":"available","summary":"All services and plugins are available"},"savedObjectsManagement":{"level":"available","summary":"All services and plugins are available"},"unifiedSearch":{"level":"available","summary":"All services and plugins are available"},"navigation":{"level":"available","summary":"All services and plugins are available"},"inferenceEndpoint":{"level":"available","summary":"All services and plugins are available"},"graph":{"level":"available","summary":"All services and plugins are available"},"presentationPanel":{"level":"available","summary":"All services and plugins are available"},"embeddable":{"level":"available","summary":"All services and plugins are available"},"uiActionsEnhanced":{"level":"available","summary":"All services and plugins are available"},"urlDrilldown":{"level":"available","summary":"All services and plugins are available"},"embeddableEnhanced":{"level":"available","summary":"All services and plugins are available"},"imageEmbeddable":{"level":"available","summary":"All services and plugins are available"},"savedSearch":{"level":"available","summary":"All services and plugins are available"},"presentationUtil":{"level":"available","summary":"All services and plugins are available"},"expressionShape":{"level":"available","summary":"All services and plugins are available"},"expressionRevealImage":{"level":"available","summary":"All services and plugins are available"},"expressionRepeatImage":{"level":"available","summary":"All services and plugins are available"},"expressionMetric":{"level":"available","summary":"All services and plugins are available"},"expressionImage":{"level":"available","summary":"All services and plugins are available"},"expressionError":{"level":"available","summary":"All services and plugins are available"},"controls":{"level":"available","summary":"All services and plugins are available"},"logsDataAccess":{"level":"available","summary":"All services and plugins are available"},"fileUpload":{"level":"available","summary":"All services and plugins are available"},"esqlDataGrid":{"level":"available","summary":"All services and plugins are available"},"ecsDataQualityDashboard":{"level":"available","summary":"All services and plugins are available"},"dataViewFieldEditor":{"level":"available","summary":"All services and plugins are available"},"dataViewEditor":{"level":"available","summary":"All services and plugins are available"},"kibanaOverview":{"level":"available","summary":"All services and plugins are available"},"dataViewManagement":{"level":"available","summary":"All services and plugins are available"},"charts":{"level":"available","summary":"All services and plugins are available"},"watcher":{"level":"available","summary":"All services and plugins are available"},"visualizations":{"level":"available","summary":"All services and plugins are available"},"visTypeXy":{"level":"available","summary":"All services and plugins are available"},"visTypeVislib":{"level":"available","summary":"All services and plugins are available"},"visTypeVega":{"level":"available","summary":"All services and plugins are available"},"visTypeTimeseries":{"level":"available","summary":"All services and plugins are available"},"visTypeTimelion":{"level":"available","summary":"All services and plugins are available"},"visTypeTagcloud":{"level":"available","summary":"All services and plugins are available"},"visTypeTable":{"level":"available","summary":"All services and plugins are available"},"visTypeMetric":{"level":"available","summary":"All services and plugins are available"},"visTypeMarkdown":{"level":"available","summary":"All services and plugins are available"},"visTypeHeatmap":{"level":"available","summary":"All services and plugins are available"},"visDefaultEditor":{"level":"available","summary":"All services and plugins are available"},"inputControlVis":{"level":"available","summary":"All services and plugins are available"},"expressionTagcloud":{"level":"available","summary":"All services and plugins are available"},"expressionPartitionVis":{"level":"available","summary":"All services and plugins are available"},"visTypePie":{"level":"available","summary":"All services and plugins are available"},"expressionMetricVis":{"level":"available","summary":"All services and plugins are available"},"expressionLegacyMetricVis":{"level":"available","summary":"All services and plugins are available"},"expressionHeatmap":{"level":"available","summary":"All services and plugins are available"},"expressionGauge":{"level":"available","summary":"All services and plugins are available"},"visTypeGauge":{"level":"available","summary":"All services and plugins are available"},"eventAnnotation":{"level":"available","summary":"All services and plugins are available"},"expressionXY":{"level":"available","summary":"All services and plugins are available"},"lens":{"level":"available","summary":"All services and plugins are available"},"maps":{"level":"available","summary":"All services and plugins are available"},"dataVisualizer":{"level":"available","summary":"All services and plugins are available"},"eventAnnotationListing":{"level":"available","summary":"All services and plugins are available"},"dashboard":{"level":"available","summary":"All services and plugins are available"},"dashboardEnhanced":{"level":"available","summary":"All services and plugins are available"},"logsShared":{"level":"available","summary":"All services and plugins are available"},"upgradeAssistant":{"level":"available","summary":"All services and plugins are available"},"apmDataAccess":{"level":"available","summary":"All services and plugins are available"},"cloudDataMigration":{"level":"available","summary":"All services and plugins are available"},"aiAssistantManagementSelection":{"level":"available","summary":"All services and plugins are available"},"grokdebugger":{"level":"available","summary":"All services and plugins are available"},"console":{"level":"available","summary":"All services and plugins are available"},"searchSynonyms":{"level":"available","summary":"All services and plugins are available"},"searchNotebooks":{"level":"available","summary":"All services and plugins are available"},"ingestPipelines":{"level":"available","summary":"All services and plugins are available"},"licensing":{"level":"available","summary":"License fetched","reported":true},"taskManager":{"level":"available","summary":"Task Manager is healthy","reported":true}}},"metrics":{"last_updated":"2025-05-21T14:35:14.668Z","collection_interval_in_millis":5000,"os":{"platform":"linux","platformRelease":"linux-6.8.0-59-generic","load":{"1m":3.75,"5m":4.88,"15m":4.7},"memory":{"total_in_bytes":33362878464,"free_in_bytes":16996888576,"used_in_bytes":16365989888},"uptime_in_millis":97865350,"distro":"Red Hat Linux","distroRelease":"Red Hat Linux-9.5","cpu":{"cfs_quota_micros":-1,"cfs_period_micros":100000,"control_group":"/","stat":{"number_of_elapsed_periods":0,"number_of_times_throttled":0,"time_throttled_nanos":0}},"cpuacct":{"control_group":"/","usage_nanos":76459104},"cgroup_memory":{"current_in_bytes":838516736,"swap_current_in_bytes":0}},"process":{"memory":{"heap":{"total_in_bytes":466038784,"used_in_bytes":387022224,"size_limit":4345298944},"resident_set_size_in_bytes":591101952,"array_buffers_in_bytes":1052160,"external_in_bytes":4713074},"pid":7,"event_loop_delay":16.670719,"event_loop_delay_histogram":{"min":9.125888,"max":16.670719,"mean":10.119005987829615,"exceeds":0,"stddev":0.3437285602449361,"fromTimestamp":"2025-05-21T14:35:09.668Z","lastUpdatedAt":"2025-05-21T14:35:14.667Z","percentiles":{"50":10.108927,"75":10.158079,"95":10.264575,"99":10.731519}},"event_loop_utilization":{"active":69.44511200033594,"idle":4930.153542999993,"utilization":0.01389013734750102},"uptime_in_millis":160428.682487},"processes":[{"memory":{"heap":{"total_in_bytes":466038784,"used_in_bytes":387022224,"size_limit":4345298944},"resident_set_size_in_bytes":591101952,"array_buffers_in_bytes":1052160,"external_in_bytes":4713074},"pid":7,"event_loop_delay":16.670719,"event_loop_delay_histogram":{"min":9.125888,"max":16.670719,"mean":10.119005987829615,"exceeds":0,"stddev":0.3437285602449361,"fromTimestamp":"2025-05-21T14:35:09.668Z","lastUpdatedAt":"2025-05-21T14:35:14.667Z","percentiles":{"50":10.108927,"75":10.158079,"95":10.264575,"99":10.731519}},"event_loop_utilization":{"active":69.44511200033594,"idle":4930.153542999993,"utilization":0.01389013734750102},"uptime_in_millis":160428.682487}],"response_times":{"avg_in_millis":12,"max_in_millis":12},"concurrent_connections":0,"requests":{"disconnects":0,"total":1,"statusCodes":{"200":1},"status_codes":{"200":1}},"elasticsearch_client":{"totalActiveSockets":0,"totalIdleSockets":3,"totalQueuedRequests":0}}}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self'; object-src 'report-sample' 'none' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:35:18 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 59b539ac93437721640b16bb4556e9540adfb4afc454ef6a12d1a207d2a301c1 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - accept-encoding + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 44.513659ms + - id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 354 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "--05258aadb6e35aad4c11322ba721bae7584310a38503a28cc08b8b32e031\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file.ndjson\"\r\nContent-Type: application/octet-stream\r\n\r\n{\"attributes\":{\"title\":\"Empty Dashboard\"},\"id\":\"test-managed-saved-objects\",\"managed\":true,\"type\":\"dashboard\"}\n\r\n--05258aadb6e35aad4c11322ba721bae7584310a38503a28cc08b8b32e031--\r\n" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - multipart/form-data; boundary=05258aadb6e35aad4c11322ba721bae7584310a38503a28cc08b8b32e031 + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/saved_objects/_import + method: POST + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 193 + uncompressed: false + body: '{"successCount":1,"success":true,"warnings":[],"successResults":[{"type":"dashboard","id":"test-managed-saved-objects","meta":{"title":"Empty Dashboard","icon":"dashboardApp"},"managed":true}]}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - "193" + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self'; object-src 'report-sample' 'none' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:35:19 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 59b539ac93437721640b16bb4556e9540adfb4afc454ef6a12d1a207d2a301c1 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 215.811947ms + - id: 2 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 125 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: '{"excludeExportDetails":true,"includeReferencesDeep":true,"objects":[{"id":"test-managed-saved-objects","type":"dashboard"}]}' + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - application/json + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/saved_objects/_export + method: POST + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 328 + uncompressed: false + body: '{"attributes":{"panelsJSON":"[]","timeRestore":false,"title":"Empty Dashboard"},"coreMigrationVersion":"8.8.0","created_at":"2025-05-21T14:35:18.940Z","id":"test-managed-saved-objects","managed":true,"references":[],"type":"dashboard","typeMigrationVersion":"10.2.0","updated_at":"2025-05-21T14:35:18.940Z","version":"WzQxLDFd"}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Disposition: + - attachment; filename="export.ndjson" + Content-Length: + - "328" + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self'; object-src 'report-sample' 'none' + Content-Type: + - application/ndjson + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:35:19 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 59b539ac93437721640b16bb4556e9540adfb4afc454ef6a12d1a207d2a301c1 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 36.558076ms + - id: 3 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: 127.0.0.1:5601 + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Authorization: + - Basic ZWxhc3RpYzpjaGFuZ2VtZQ== + Content-Type: + - application/json + Kbn-Xsrf: + - 8.18.1 + url: https://127.0.0.1:5601/api/saved_objects/dashboard/test-managed-saved-objects + method: DELETE + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 2 + uncompressed: false + body: '{}' + headers: + Cache-Control: + - private, no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - "2" + Content-Security-Policy: + - script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline' + Content-Security-Policy-Report-Only: + - form-action 'report-sample' 'self'; object-src 'report-sample' 'none' + Content-Type: + - application/json; charset=utf-8 + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 21 May 2025 14:35:20 GMT + Elastic-Api-Version: + - "2023-10-31" + Kbn-License-Sig: + - 59b539ac93437721640b16bb4556e9540adfb4afc454ef6a12d1a207d2a301c1 + Kbn-Name: + - kibana + Permissions-Policy: + - camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=() + Referrer-Policy: + - strict-origin-when-cross-origin + Warning: + - 299 Kibana-9.0.1 "This endpoint is deprecated" + X-Content-Type-Options: + - nosniff + status: 200 OK + code: 200 + duration: 1.001920449s