From 7a497319a990f80368b4ac56d3bad400d5b4837d Mon Sep 17 00:00:00 2001
From: CJ Cenizal
Date: Wed, 13 Oct 2021 06:36:37 -0700
Subject: [PATCH 1/5] Revert "Revert "[Upgrade Assistant] Refactor telemetry
(#112177)" (#113665)"
This reverts commit c385d498874d4ca34f454e3cb9ad9e4c0e3219ae.
---
.../schema/xpack_plugins.json | 38 ----
x-pack/plugins/upgrade_assistant/README.md | 27 ++-
.../plugins/upgrade_assistant/common/types.ts | 29 ---
.../index_settings/flyout.tsx | 16 +-
.../deprecation_types/ml_snapshots/flyout.tsx | 8 +
.../checklist_step.test.tsx.snap | 4 +-
.../reindex/flyout/checklist_step.tsx | 22 ++-
.../deprecation_types/reindex/table_row.tsx | 21 +-
.../reindex/use_reindex_state.tsx | 4 -
.../es_deprecations/es_deprecations.tsx | 22 +--
.../deprecation_details_flyout.tsx | 11 +-
.../kibana_deprecations.tsx | 13 +-
.../overview/backup_step/cloud_backup.tsx | 8 +-
.../overview/backup_step/on_prem_backup.tsx | 11 +-
.../deprecations_count_checkpoint.tsx | 5 +-
.../overview/fix_logs_step/external_links.tsx | 27 ++-
.../components/overview/overview.tsx | 13 +-
.../public/application/lib/api.ts | 16 --
.../public/application/lib/ui_metric.ts | 49 +++++
.../upgrade_assistant/public/plugin.ts | 10 +-
.../plugins/upgrade_assistant/public/types.ts | 3 +-
.../lib/telemetry/es_ui_open_apis.test.ts | 48 -----
.../server/lib/telemetry/es_ui_open_apis.ts | 57 ------
.../lib/telemetry/es_ui_reindex_apis.test.ts | 52 -----
.../lib/telemetry/es_ui_reindex_apis.ts | 63 ------
.../lib/telemetry/usage_collector.test.ts | 31 ---
.../server/lib/telemetry/usage_collector.ts | 113 +----------
.../upgrade_assistant/server/plugin.ts | 3 +-
.../server/routes/register_routes.ts | 2 -
.../server/routes/telemetry.test.ts | 187 ------------------
.../server/routes/telemetry.ts | 64 ------
.../telemetry_saved_object_type.ts | 36 ----
32 files changed, 207 insertions(+), 806 deletions(-)
create mode 100644 x-pack/plugins/upgrade_assistant/public/application/lib/ui_metric.ts
delete mode 100644 x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.test.ts
delete mode 100644 x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.ts
delete mode 100644 x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.test.ts
delete mode 100644 x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.ts
delete mode 100644 x-pack/plugins/upgrade_assistant/server/routes/telemetry.test.ts
delete mode 100644 x-pack/plugins/upgrade_assistant/server/routes/telemetry.ts
diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json
index 882ff0257e27d..708885d43d78d 100644
--- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json
+++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json
@@ -7330,44 +7330,6 @@
}
}
}
- },
- "ui_open": {
- "properties": {
- "elasticsearch": {
- "type": "long",
- "_meta": {
- "description": "Number of times a user viewed the list of Elasticsearch deprecations."
- }
- },
- "overview": {
- "type": "long",
- "_meta": {
- "description": "Number of times a user viewed the Overview page."
- }
- },
- "kibana": {
- "type": "long",
- "_meta": {
- "description": "Number of times a user viewed the list of Kibana deprecations"
- }
- }
- }
- },
- "ui_reindex": {
- "properties": {
- "close": {
- "type": "long"
- },
- "open": {
- "type": "long"
- },
- "start": {
- "type": "long"
- },
- "stop": {
- "type": "long"
- }
- }
}
}
},
diff --git a/x-pack/plugins/upgrade_assistant/README.md b/x-pack/plugins/upgrade_assistant/README.md
index 255eb94a0318c..6570e7f8d7617 100644
--- a/x-pack/plugins/upgrade_assistant/README.md
+++ b/x-pack/plugins/upgrade_assistant/README.md
@@ -226,4 +226,29 @@ This is a non-exhaustive list of different error scenarios in Upgrade Assistant.
- **Error updating deprecation logging status.** Mock a `404` status code to `PUT /api/upgrade_assistant/deprecation_logging`. Alternatively, edit [this line](https://github.com/elastic/kibana/blob/545c1420c285af8f5eee56f414bd6eca735aea11/x-pack/plugins/upgrade_assistant/public/application/lib/api.ts#L77) locally and replace `deprecation_logging` with `fake_deprecation_logging`.
- **Unauthorized error fetching ES deprecations.** Mock a `403` status code to `GET /api/upgrade_assistant/es_deprecations` with the response payload: `{ "statusCode": 403 }`
- **Partially upgraded error fetching ES deprecations.** Mock a `426` status code to `GET /api/upgrade_assistant/es_deprecations` with the response payload: `{ "statusCode": 426, "attributes": { "allNodesUpgraded": false } }`
-- **Upgraded error fetching ES deprecations.** Mock a `426` status code to `GET /api/upgrade_assistant/es_deprecations` with the response payload: `{ "statusCode": 426, "attributes": { "allNodesUpgraded": true } }`
\ No newline at end of file
+- **Upgraded error fetching ES deprecations.** Mock a `426` status code to `GET /api/upgrade_assistant/es_deprecations` with the response payload: `{ "statusCode": 426, "attributes": { "allNodesUpgraded": true } }`
+
+### Telemetry
+
+The Upgrade Assistant tracks several triggered events in the UI, using Kibana Usage Collection service's [UI counters](https://github.com/elastic/kibana/blob/master/src/plugins/usage_collection/README.mdx#ui-counters).
+
+**Overview page**
+- Component loaded
+- Click event for "Create snapshot" button
+- Click event for "View deprecation logs in Observability" link
+- Click event for "Analyze logs in Discover" link
+- Click event for "Reset counter" button
+
+**ES deprecations page**
+- Component loaded
+- Click events for starting and stopping reindex tasks
+- Click events for upgrading or deleting a Machine Learning snapshot
+- Click event for deleting a deprecated index setting
+
+**Kibana deprecations page**
+- Component loaded
+- Click event for "Quick resolve" button
+
+In addition to UI counters, the Upgrade Assistant has a [custom usage collector](https://github.com/elastic/kibana/blob/master/src/plugins/usage_collection/README.mdx#custom-collector). It currently is only responsible for tracking whether the user has deprecation logging enabled or not.
+
+For testing instructions, refer to the [Kibana Usage Collection service README](https://github.com/elastic/kibana/blob/master/src/plugins/usage_collection/README.mdx#testing).
\ No newline at end of file
diff --git a/x-pack/plugins/upgrade_assistant/common/types.ts b/x-pack/plugins/upgrade_assistant/common/types.ts
index 9752fa326082a..a4d34a0268713 100644
--- a/x-pack/plugins/upgrade_assistant/common/types.ts
+++ b/x-pack/plugins/upgrade_assistant/common/types.ts
@@ -144,32 +144,7 @@ export interface UIReindex {
stop: boolean;
}
-export interface UpgradeAssistantTelemetrySavedObject {
- ui_open: {
- overview: number;
- elasticsearch: number;
- kibana: number;
- };
- ui_reindex: {
- close: number;
- open: number;
- start: number;
- stop: number;
- };
-}
-
export interface UpgradeAssistantTelemetry {
- ui_open: {
- overview: number;
- elasticsearch: number;
- kibana: number;
- };
- ui_reindex: {
- close: number;
- open: number;
- start: number;
- stop: number;
- };
features: {
deprecation_logging: {
enabled: boolean;
@@ -177,10 +152,6 @@ export interface UpgradeAssistantTelemetry {
};
}
-export interface UpgradeAssistantTelemetrySavedObjectAttributes {
- [key: string]: any;
-}
-
export type MIGRATION_DEPRECATION_LEVEL = 'none' | 'info' | 'warning' | 'critical';
export interface DeprecationInfo {
level: MIGRATION_DEPRECATION_LEVEL;
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/index_settings/flyout.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/index_settings/flyout.tsx
index 3c19268a293f0..8c27395561564 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/index_settings/flyout.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/index_settings/flyout.tsx
@@ -5,8 +5,9 @@
* 2.0.
*/
-import React from 'react';
+import React, { useCallback } from 'react';
import { i18n } from '@kbn/i18n';
+import { METRIC_TYPE } from '@kbn/analytics';
import {
EuiButton,
EuiButtonEmpty,
@@ -29,6 +30,7 @@ import {
IndexSettingAction,
ResponseError,
} from '../../../../../../common/types';
+import { uiMetricService, UIM_INDEX_SETTINGS_DELETE_CLICK } from '../../../../lib/ui_metric';
import type { Status } from '../../../types';
import { DeprecationBadge } from '../../../shared';
@@ -111,6 +113,11 @@ export const RemoveIndexSettingsFlyout = ({
// Flag used to hide certain parts of the UI if the deprecation has been resolved or is in progress
const isResolvable = ['idle', 'error'].includes(statusType);
+ const onRemoveSettings = useCallback(() => {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_INDEX_SETTINGS_DELETE_CLICK);
+ removeIndexSettings(index!, (correctiveAction as IndexSettingAction).deprecatedSettings);
+ }, [correctiveAction, index, removeIndexSettings]);
+
return (
<>
@@ -194,12 +201,7 @@ export const RemoveIndexSettingsFlyout = ({
fill
data-test-subj="deleteSettingsButton"
color="danger"
- onClick={() =>
- removeIndexSettings(
- index!,
- (correctiveAction as IndexSettingAction).deprecatedSettings
- )
- }
+ onClick={onRemoveSettings}
>
{statusType === 'error'
? i18nTexts.retryRemoveButtonLabel
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/ml_snapshots/flyout.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/ml_snapshots/flyout.tsx
index 4e3d77ba72ae8..2a36f3e33e83c 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/ml_snapshots/flyout.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/ml_snapshots/flyout.tsx
@@ -8,6 +8,7 @@
import React from 'react';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
+import { METRIC_TYPE } from '@kbn/analytics';
import {
EuiButton,
@@ -25,6 +26,11 @@ import {
} from '@elastic/eui';
import { EnrichedDeprecationInfo } from '../../../../../../common/types';
+import {
+ uiMetricService,
+ UIM_ML_SNAPSHOT_UPGRADE_CLICK,
+ UIM_ML_SNAPSHOT_DELETE_CLICK,
+} from '../../../../lib/ui_metric';
import { DeprecationBadge } from '../../../shared';
import { MlSnapshotContext } from './context';
import { useAppContext } from '../../../../app_context';
@@ -173,11 +179,13 @@ export const FixSnapshotsFlyout = ({
const isResolved = snapshotState.status === 'complete';
const onUpgradeSnapshot = () => {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_ML_SNAPSHOT_UPGRADE_CLICK);
upgradeSnapshot();
closeFlyout();
};
const onDeleteSnapshot = () => {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_ML_SNAPSHOT_DELETE_CLICK);
deleteSnapshot();
closeFlyout();
};
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap
index be84bbf143ab3..ff2559ecd8302 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap
@@ -31,7 +31,7 @@ exports[`ChecklistFlyout renders 1`] = `
{
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_REINDEX_START_CLICK);
+ startReindex();
+ }, [startReindex]);
+
+ const onStopReindex = useCallback(() => {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_REINDEX_STOP_CLICK);
+ cancelReindex();
+ }, [cancelReindex]);
+
return (
@@ -141,7 +157,7 @@ export const ChecklistFlyoutStep: React.FunctionComponent<{
-
+
@@ -159,7 +175,7 @@ export const ChecklistFlyoutStep: React.FunctionComponent<{
fill
color={status === ReindexStatus.paused ? 'warning' : 'primary'}
iconType={status === ReindexStatus.paused ? 'play' : undefined}
- onClick={startReindex}
+ onClick={onStartReindex}
isLoading={loading}
disabled={loading || !hasRequiredPrivileges}
data-test-subj="startReindexingButton"
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/table_row.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/table_row.tsx
index c2a14ca5be858..1059720e66a59 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/table_row.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/table_row.tsx
@@ -7,9 +7,15 @@
import React, { useState, useEffect, useCallback } from 'react';
import { EuiTableRowCell } from '@elastic/eui';
+import { METRIC_TYPE } from '@kbn/analytics';
import { EnrichedDeprecationInfo } from '../../../../../../common/types';
import { GlobalFlyout } from '../../../../../shared_imports';
import { useAppContext } from '../../../../app_context';
+import {
+ uiMetricService,
+ UIM_REINDEX_CLOSE_FLYOUT_CLICK,
+ UIM_REINDEX_OPEN_FLYOUT_CLICK,
+} from '../../../../lib/ui_metric';
import { DeprecationTableColumns } from '../../../types';
import { EsDeprecationsTableCells } from '../../es_deprecations_table_cells';
import { ReindexResolutionCell } from './resolution_table_cell';
@@ -29,9 +35,6 @@ const ReindexTableRowCells: React.FunctionComponent = ({
}) => {
const [showFlyout, setShowFlyout] = useState(false);
const reindexState = useReindexContext();
- const {
- services: { api },
- } = useAppContext();
const { addContent: addContentToGlobalFlyout, removeContent: removeContentFromGlobalFlyout } =
useGlobalFlyout();
@@ -39,8 +42,8 @@ const ReindexTableRowCells: React.FunctionComponent = ({
const closeFlyout = useCallback(async () => {
removeContentFromGlobalFlyout('reindexFlyout');
setShowFlyout(false);
- await api.sendReindexTelemetryData({ close: true });
- }, [api, removeContentFromGlobalFlyout]);
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_REINDEX_CLOSE_FLYOUT_CLICK);
+ }, [removeContentFromGlobalFlyout]);
useEffect(() => {
if (showFlyout) {
@@ -64,13 +67,9 @@ const ReindexTableRowCells: React.FunctionComponent = ({
useEffect(() => {
if (showFlyout) {
- async function sendTelemetry() {
- await api.sendReindexTelemetryData({ open: true });
- }
-
- sendTelemetry();
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_REINDEX_OPEN_FLYOUT_CLICK);
}
- }, [showFlyout, api]);
+ }, [showFlyout]);
return (
<>
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/use_reindex_state.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/use_reindex_state.tsx
index cbeebd00f2bb8..304f8555aa67b 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/use_reindex_state.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/deprecation_types/reindex/use_reindex_state.tsx
@@ -125,8 +125,6 @@ export const useReindexStatus = ({ indexName, api }: { indexName: string; api: A
cancelLoadingState: undefined,
});
- api.sendReindexTelemetryData({ start: true });
-
const { data: reindexOp, error } = await api.startReindexTask(indexName);
if (error) {
@@ -144,8 +142,6 @@ export const useReindexStatus = ({ indexName, api }: { indexName: string; api: A
}, [api, indexName, reindexState, updateStatus]);
const cancelReindex = useCallback(async () => {
- api.sendReindexTelemetryData({ stop: true });
-
const { error } = await api.cancelReindexTask(indexName);
setReindexState({
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/es_deprecations.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/es_deprecations.tsx
index c7d157c342c77..7c3394d5a9c0f 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/es_deprecations.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/es_deprecations/es_deprecations.tsx
@@ -12,10 +12,12 @@ import { EuiPageHeader, EuiSpacer, EuiPageContent, EuiLink } from '@elastic/eui'
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
import { DocLinksStart } from 'kibana/public';
+import { METRIC_TYPE } from '@kbn/analytics';
import { EnrichedDeprecationInfo } from '../../../../common/types';
import { SectionLoading } from '../../../shared_imports';
import { useAppContext } from '../../app_context';
+import { uiMetricService, UIM_ES_DEPRECATIONS_PAGE_LOAD } from '../../lib/ui_metric';
import { getEsDeprecationError } from '../../lib/get_es_deprecation_error';
import { DeprecationsPageLoadingError, NoDeprecationsPrompt, DeprecationCount } from '../shared';
import { EsDeprecationsTable } from './es_deprecations_table';
@@ -82,13 +84,7 @@ export const EsDeprecations = withRouter(({ history }: RouteComponentProps) => {
},
} = useAppContext();
- const {
- data: esDeprecations,
- isLoading,
- error,
- resendRequest,
- isInitialRequest,
- } = api.useLoadEsDeprecations();
+ const { data: esDeprecations, isLoading, error, resendRequest } = api.useLoadEsDeprecations();
const deprecationsCountByLevel: {
warningDeprecations: number;
@@ -103,16 +99,8 @@ export const EsDeprecations = withRouter(({ history }: RouteComponentProps) => {
}, [breadcrumbs]);
useEffect(() => {
- if (isLoading === false && isInitialRequest) {
- async function sendTelemetryData() {
- await api.sendPageTelemetryData({
- elasticsearch: true,
- });
- }
-
- sendTelemetryData();
- }
- }, [api, isLoading, isInitialRequest]);
+ uiMetricService.trackUiMetric(METRIC_TYPE.LOADED, UIM_ES_DEPRECATIONS_PAGE_LOAD);
+ }, []);
if (error) {
return (
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx
index 577354b35fa4e..0caaa107911bd 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx
@@ -5,9 +5,10 @@
* 2.0.
*/
-import React from 'react';
+import React, { useCallback } from 'react';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
+import { METRIC_TYPE } from '@kbn/analytics';
import {
EuiButtonEmpty,
@@ -24,6 +25,7 @@ import {
EuiSpacer,
} from '@elastic/eui';
+import { uiMetricService, UIM_KIBANA_QUICK_RESOLVE_CLICK } from '../../lib/ui_metric';
import type { DeprecationResolutionState, KibanaDeprecationDetails } from './kibana_deprecations';
import { DeprecationBadge } from '../shared';
@@ -134,6 +136,11 @@ export const DeprecationDetailsFlyout = ({
const isCurrent = deprecationResolutionState?.id === deprecation.id;
const isResolved = isCurrent && deprecationResolutionState?.resolveDeprecationStatus === 'ok';
+ const onResolveDeprecation = useCallback(() => {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_KIBANA_QUICK_RESOLVE_CLICK);
+ resolveDeprecation(deprecation);
+ }, [deprecation, resolveDeprecation]);
+
return (
<>
@@ -237,7 +244,7 @@ export const DeprecationDetailsFlyout = ({
resolveDeprecation(deprecation)}
+ onClick={onResolveDeprecation}
isLoading={Boolean(
deprecationResolutionState?.resolveDeprecationStatus === 'in_progress'
)}
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/kibana_deprecations.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/kibana_deprecations.tsx
index 23697b00923c8..b488c84f255cc 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/kibana_deprecations.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/kibana_deprecations.tsx
@@ -11,10 +11,12 @@ import { withRouter, RouteComponentProps } from 'react-router-dom';
import { EuiPageContent, EuiPageHeader, EuiSpacer, EuiCallOut } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
+import { METRIC_TYPE } from '@kbn/analytics';
import type { DomainDeprecationDetails } from 'kibana/public';
import { SectionLoading, GlobalFlyout } from '../../../shared_imports';
import { useAppContext } from '../../app_context';
+import { uiMetricService, UIM_KIBANA_DEPRECATIONS_PAGE_LOAD } from '../../lib/ui_metric';
import { DeprecationsPageLoadingError, NoDeprecationsPrompt, DeprecationCount } from '../shared';
import { KibanaDeprecationsTable } from './kibana_deprecations_table';
import {
@@ -116,7 +118,6 @@ export const KibanaDeprecations = withRouter(({ history }: RouteComponentProps)
services: {
core: { deprecations },
breadcrumbs,
- api,
},
} = useAppContext();
@@ -225,14 +226,8 @@ export const KibanaDeprecations = withRouter(({ history }: RouteComponentProps)
]);
useEffect(() => {
- async function sendTelemetryData() {
- await api.sendPageTelemetryData({
- kibana: true,
- });
- }
-
- sendTelemetryData();
- }, [api]);
+ uiMetricService.trackUiMetric(METRIC_TYPE.LOADED, UIM_KIBANA_DEPRECATIONS_PAGE_LOAD);
+ }, []);
useEffect(() => {
breadcrumbs.setBreadcrumbs('kibanaDeprecations');
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/cloud_backup.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/cloud_backup.tsx
index 55a6ee8e5c73f..4ab860a0bf6a7 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/cloud_backup.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/cloud_backup.tsx
@@ -9,6 +9,7 @@ import React, { useEffect } from 'react';
import moment from 'moment-timezone';
import { FormattedDate, FormattedTime, FormattedMessage } from '@kbn/i18n/react';
import { i18n } from '@kbn/i18n';
+import { METRIC_TYPE } from '@kbn/analytics';
import {
EuiLoadingContent,
EuiFlexGroup,
@@ -21,6 +22,7 @@ import {
} from '@elastic/eui';
import { useAppContext } from '../../../app_context';
+import { uiMetricService, UIM_BACKUP_DATA_CLOUD_CLICK } from '../../../lib/ui_metric';
interface Props {
cloudSnapshotsUrl: string;
@@ -128,11 +130,13 @@ export const CloudBackup: React.FunctionComponent = ({
return (
<>
{statusMessage}
-
-
+ {/* eslint-disable-next-line @elastic/eui/href-or-on-click */}
{
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_BACKUP_DATA_CLOUD_CLICK);
+ }}
data-test-subj="cloudSnapshotsLink"
target="_blank"
iconType="popout"
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/on_prem_backup.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/on_prem_backup.tsx
index 2e2e2bd5ce48e..69100b36db7eb 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/on_prem_backup.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/overview/backup_step/on_prem_backup.tsx
@@ -8,9 +8,11 @@
import React from 'react';
import { FormattedMessage } from '@kbn/i18n/react';
import { i18n } from '@kbn/i18n';
+import { METRIC_TYPE } from '@kbn/analytics';
import { EuiText, EuiButton, EuiSpacer } from '@elastic/eui';
import { useAppContext } from '../../../app_context';
+import { uiMetricService, UIM_BACKUP_DATA_ON_PREM_CLICK } from '../../../lib/ui_metric';
const SnapshotRestoreAppLink: React.FunctionComponent = () => {
const {
@@ -22,7 +24,14 @@ const SnapshotRestoreAppLink: React.FunctionComponent = () => {
?.useUrl({ page: 'snapshots' });
return (
-
+ // eslint-disable-next-line @elastic/eui/href-or-on-click
+ {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_BACKUP_DATA_ON_PREM_CLICK);
+ }}
+ data-test-subj="snapshotRestoreLink"
+ >
(
@@ -90,6 +92,7 @@ export const DeprecationsCountCheckpoint: FunctionComponent = ({
}
const now = moment().toISOString();
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_RESET_LOGS_COUNTER_CLICK);
setCheckpoint(now);
};
diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/overview/fix_logs_step/external_links.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/overview/fix_logs_step/external_links.tsx
index 7d26e4db69713..dec43145ef966 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/components/overview/fix_logs_step/external_links.tsx
+++ b/x-pack/plugins/upgrade_assistant/public/application/components/overview/fix_logs_step/external_links.tsx
@@ -9,10 +9,17 @@ import { encode } from 'rison-node';
import React, { FunctionComponent, useState, useEffect } from 'react';
import { FormattedMessage } from '@kbn/i18n/react';
+import { METRIC_TYPE } from '@kbn/analytics';
import { EuiLink, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiPanel, EuiText } from '@elastic/eui';
-import { useAppContext } from '../../../app_context';
import { DataPublicPluginStart } from '../../../../shared_imports';
+import { useAppContext } from '../../../app_context';
+import {
+ uiMetricService,
+ UIM_OBSERVABILITY_CLICK,
+ UIM_DISCOVER_CLICK,
+} from '../../../lib/ui_metric';
+
import {
DEPRECATION_LOGS_INDEX_PATTERN,
DEPRECATION_LOGS_SOURCE_ID,
@@ -83,7 +90,14 @@ const DiscoverAppLink: FunctionComponent = ({ checkpoint }) => {
}, [dataService, checkpoint, share.url.locators]);
return (
-
+ // eslint-disable-next-line @elastic/eui/href-or-on-click
+ {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_DISCOVER_CLICK);
+ }}
+ data-test-subj="viewDiscoverLogs"
+ >
= ({ checkpoint }) => {
);
return (
-
+ // eslint-disable-next-line @elastic/eui/href-or-on-click
+ {
+ uiMetricService.trackUiMetric(METRIC_TYPE.CLICK, UIM_OBSERVABILITY_CLICK);
+ }}
+ data-test-subj="viewObserveLogs"
+ >
{
kibanaVersionInfo: { nextMajor },
services: {
breadcrumbs,
- api,
core: { docLinks },
},
plugins: { cloud },
} = useAppContext();
useEffect(() => {
- async function sendTelemetryData() {
- await api.sendPageTelemetryData({
- overview: true,
- });
- }
-
- sendTelemetryData();
- }, [api]);
+ uiMetricService.trackUiMetric(METRIC_TYPE.LOADED, UIM_OVERVIEW_PAGE_LOAD);
+ }, []);
useEffect(() => {
breadcrumbs.setBreadcrumbs('overview');
diff --git a/x-pack/plugins/upgrade_assistant/public/application/lib/api.ts b/x-pack/plugins/upgrade_assistant/public/application/lib/api.ts
index 3342435a6d46e..8b967d994af9b 100644
--- a/x-pack/plugins/upgrade_assistant/public/application/lib/api.ts
+++ b/x-pack/plugins/upgrade_assistant/public/application/lib/api.ts
@@ -125,14 +125,6 @@ export class ApiService {
});
}
- public async sendPageTelemetryData(telemetryData: { [tabName: string]: boolean }) {
- return await this.sendRequest({
- path: `${API_BASE_PATH}/stats/ui_open`,
- method: 'put',
- body: JSON.stringify(telemetryData),
- });
- }
-
public useLoadDeprecationLogging() {
return this.useRequest<{
isDeprecationLogIndexingEnabled: boolean;
@@ -216,14 +208,6 @@ export class ApiService {
});
}
- public async sendReindexTelemetryData(telemetryData: { [key: string]: boolean }) {
- return await this.sendRequest({
- path: `${API_BASE_PATH}/stats/ui_reindex`,
- method: 'put',
- body: JSON.stringify(telemetryData),
- });
- }
-
public async getReindexStatus(indexName: string) {
return await this.sendRequest({
path: `${API_BASE_PATH}/reindex/${indexName}`,
diff --git a/x-pack/plugins/upgrade_assistant/public/application/lib/ui_metric.ts b/x-pack/plugins/upgrade_assistant/public/application/lib/ui_metric.ts
new file mode 100644
index 0000000000000..394f046a8bafe
--- /dev/null
+++ b/x-pack/plugins/upgrade_assistant/public/application/lib/ui_metric.ts
@@ -0,0 +1,49 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { UiCounterMetricType } from '@kbn/analytics';
+import { UsageCollectionSetup } from 'src/plugins/usage_collection/public';
+
+export const UIM_APP_NAME = 'upgrade_assistant';
+export const UIM_ES_DEPRECATIONS_PAGE_LOAD = 'es_deprecations_page_load';
+export const UIM_KIBANA_DEPRECATIONS_PAGE_LOAD = 'kibana_deprecations_page_load';
+export const UIM_OVERVIEW_PAGE_LOAD = 'overview_page_load';
+export const UIM_REINDEX_OPEN_FLYOUT_CLICK = 'reindex_open_flyout_click';
+export const UIM_REINDEX_CLOSE_FLYOUT_CLICK = 'reindex_close_flyout_click';
+export const UIM_REINDEX_START_CLICK = 'reindex_start_click';
+export const UIM_REINDEX_STOP_CLICK = 'reindex_stop_click';
+export const UIM_BACKUP_DATA_CLOUD_CLICK = 'backup_data_cloud_click';
+export const UIM_BACKUP_DATA_ON_PREM_CLICK = 'backup_data_on_prem_click';
+export const UIM_RESET_LOGS_COUNTER_CLICK = 'reset_logs_counter_click';
+export const UIM_OBSERVABILITY_CLICK = 'observability_click';
+export const UIM_DISCOVER_CLICK = 'discover_click';
+export const UIM_ML_SNAPSHOT_UPGRADE_CLICK = 'ml_snapshot_upgrade_click';
+export const UIM_ML_SNAPSHOT_DELETE_CLICK = 'ml_snapshot_delete_click';
+export const UIM_INDEX_SETTINGS_DELETE_CLICK = 'index_settings_delete_click';
+export const UIM_KIBANA_QUICK_RESOLVE_CLICK = 'kibana_quick_resolve_click';
+
+export class UiMetricService {
+ private usageCollection: UsageCollectionSetup | undefined;
+
+ public setup(usageCollection: UsageCollectionSetup) {
+ this.usageCollection = usageCollection;
+ }
+
+ private track(metricType: UiCounterMetricType, eventName: string | string[]) {
+ if (!this.usageCollection) {
+ // Usage collection might be disabled in Kibana config.
+ return;
+ }
+ return this.usageCollection.reportUiCounter(UIM_APP_NAME, metricType, eventName);
+ }
+
+ public trackUiMetric(metricType: UiCounterMetricType, eventName: string | string[]) {
+ return this.track(metricType, eventName);
+ }
+}
+
+export const uiMetricService = new UiMetricService();
diff --git a/x-pack/plugins/upgrade_assistant/public/plugin.ts b/x-pack/plugins/upgrade_assistant/public/plugin.ts
index 64c21997b12c4..d688ee510ce1f 100644
--- a/x-pack/plugins/upgrade_assistant/public/plugin.ts
+++ b/x-pack/plugins/upgrade_assistant/public/plugin.ts
@@ -11,6 +11,7 @@ import { Plugin, CoreSetup, PluginInitializerContext } from 'src/core/public';
import { apiService } from './application/lib/api';
import { breadcrumbService } from './application/lib/breadcrumbs';
+import { uiMetricService } from './application/lib/ui_metric';
import { SetupDependencies, StartDependencies, AppDependencies } from './types';
import { Config } from '../common/config';
@@ -18,7 +19,10 @@ export class UpgradeAssistantUIPlugin
implements Plugin
{
constructor(private ctx: PluginInitializerContext) {}
- setup(coreSetup: CoreSetup, { management, cloud, share }: SetupDependencies) {
+ setup(
+ coreSetup: CoreSetup,
+ { management, cloud, share, usageCollection }: SetupDependencies
+ ) {
const { readonly } = this.ctx.config.get();
const appRegistrar = management.sections.section.stack;
@@ -34,6 +38,10 @@ export class UpgradeAssistantUIPlugin
defaultMessage: 'Upgrade Assistant',
});
+ if (usageCollection) {
+ uiMetricService.setup(usageCollection);
+ }
+
appRegistrar.registerApp({
id: 'upgrade_assistant',
title: pluginName,
diff --git a/x-pack/plugins/upgrade_assistant/public/types.ts b/x-pack/plugins/upgrade_assistant/public/types.ts
index 7bb3e0869fdaa..e58c90336d856 100644
--- a/x-pack/plugins/upgrade_assistant/public/types.ts
+++ b/x-pack/plugins/upgrade_assistant/public/types.ts
@@ -10,7 +10,7 @@ import { ManagementSetup } from 'src/plugins/management/public';
import { DataPublicPluginStart } from 'src/plugins/data/public';
import { SharePluginSetup } from 'src/plugins/share/public';
import { CoreStart } from 'src/core/public';
-
+import { UsageCollectionSetup } from 'src/plugins/usage_collection/public';
import { CloudSetup } from '../../cloud/public';
import { LicensingPluginStart } from '../../licensing/public';
import { BreadcrumbService } from './application/lib/breadcrumbs';
@@ -26,6 +26,7 @@ export interface SetupDependencies {
management: ManagementSetup;
share: SharePluginSetup;
cloud?: CloudSetup;
+ usageCollection?: UsageCollectionSetup;
}
export interface StartDependencies {
diff --git a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.test.ts
deleted file mode 100644
index caff78390b9d1..0000000000000
--- a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.test.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { savedObjectsRepositoryMock } from 'src/core/server/mocks';
-import { UPGRADE_ASSISTANT_DOC_ID, UPGRADE_ASSISTANT_TYPE } from '../../../common/types';
-
-import { upsertUIOpenOption } from './es_ui_open_apis';
-
-/**
- * Since these route callbacks are so thin, these serve simply as integration tests
- * to ensure they're wired up to the lib functions correctly. Business logic is tested
- * more thoroughly in the lib/telemetry tests.
- */
-describe('Upgrade Assistant Telemetry SavedObject UIOpen', () => {
- describe('Upsert UIOpen Option', () => {
- it('call saved objects internal repository with the correct info', async () => {
- const internalRepo = savedObjectsRepositoryMock.create();
-
- await upsertUIOpenOption({
- overview: true,
- elasticsearch: true,
- kibana: true,
- savedObjects: { createInternalRepository: () => internalRepo } as any,
- });
-
- expect(internalRepo.incrementCounter).toHaveBeenCalledTimes(3);
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- ['ui_open.overview']
- );
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- ['ui_open.elasticsearch']
- );
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- ['ui_open.kibana']
- );
- });
- });
-});
diff --git a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.ts b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.ts
deleted file mode 100644
index 3d463fe4b03ed..0000000000000
--- a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_open_apis.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { SavedObjectsServiceStart } from 'src/core/server';
-import {
- UIOpen,
- UIOpenOption,
- UPGRADE_ASSISTANT_DOC_ID,
- UPGRADE_ASSISTANT_TYPE,
-} from '../../../common/types';
-
-interface IncrementUIOpenDependencies {
- uiOpenOptionCounter: UIOpenOption;
- savedObjects: SavedObjectsServiceStart;
-}
-
-async function incrementUIOpenOptionCounter({
- savedObjects,
- uiOpenOptionCounter,
-}: IncrementUIOpenDependencies) {
- const internalRepository = savedObjects.createInternalRepository();
-
- await internalRepository.incrementCounter(UPGRADE_ASSISTANT_TYPE, UPGRADE_ASSISTANT_DOC_ID, [
- `ui_open.${uiOpenOptionCounter}`,
- ]);
-}
-
-type UpsertUIOpenOptionDependencies = UIOpen & { savedObjects: SavedObjectsServiceStart };
-
-export async function upsertUIOpenOption({
- overview,
- elasticsearch,
- savedObjects,
- kibana,
-}: UpsertUIOpenOptionDependencies): Promise {
- if (overview) {
- await incrementUIOpenOptionCounter({ savedObjects, uiOpenOptionCounter: 'overview' });
- }
-
- if (elasticsearch) {
- await incrementUIOpenOptionCounter({ savedObjects, uiOpenOptionCounter: 'elasticsearch' });
- }
-
- if (kibana) {
- await incrementUIOpenOptionCounter({ savedObjects, uiOpenOptionCounter: 'kibana' });
- }
-
- return {
- overview,
- elasticsearch,
- kibana,
- };
-}
diff --git a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.test.ts
deleted file mode 100644
index 6a05e8a697bb8..0000000000000
--- a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.test.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { savedObjectsRepositoryMock } from 'src/core/server/mocks';
-import { UPGRADE_ASSISTANT_DOC_ID, UPGRADE_ASSISTANT_TYPE } from '../../../common/types';
-import { upsertUIReindexOption } from './es_ui_reindex_apis';
-
-/**
- * Since these route callbacks are so thin, these serve simply as integration tests
- * to ensure they're wired up to the lib functions correctly. Business logic is tested
- * more thoroughly in the lib/telemetry tests.
- */
-describe('Upgrade Assistant Telemetry SavedObject UIReindex', () => {
- describe('Upsert UIReindex Option', () => {
- it('call saved objects internal repository with the correct info', async () => {
- const internalRepo = savedObjectsRepositoryMock.create();
- await upsertUIReindexOption({
- close: true,
- open: true,
- start: true,
- stop: true,
- savedObjects: { createInternalRepository: () => internalRepo } as any,
- });
-
- expect(internalRepo.incrementCounter).toHaveBeenCalledTimes(4);
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- [`ui_reindex.close`]
- );
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- [`ui_reindex.open`]
- );
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- [`ui_reindex.start`]
- );
- expect(internalRepo.incrementCounter).toHaveBeenCalledWith(
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID,
- [`ui_reindex.stop`]
- );
- });
- });
-});
diff --git a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.ts b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.ts
deleted file mode 100644
index caee1a58a4006..0000000000000
--- a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/es_ui_reindex_apis.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { SavedObjectsServiceStart } from 'src/core/server';
-import {
- UIReindex,
- UIReindexOption,
- UPGRADE_ASSISTANT_DOC_ID,
- UPGRADE_ASSISTANT_TYPE,
-} from '../../../common/types';
-
-interface IncrementUIReindexOptionDependencies {
- uiReindexOptionCounter: UIReindexOption;
- savedObjects: SavedObjectsServiceStart;
-}
-
-async function incrementUIReindexOptionCounter({
- savedObjects,
- uiReindexOptionCounter,
-}: IncrementUIReindexOptionDependencies) {
- const internalRepository = savedObjects.createInternalRepository();
-
- await internalRepository.incrementCounter(UPGRADE_ASSISTANT_TYPE, UPGRADE_ASSISTANT_DOC_ID, [
- `ui_reindex.${uiReindexOptionCounter}`,
- ]);
-}
-
-type UpsertUIReindexOptionDepencies = UIReindex & { savedObjects: SavedObjectsServiceStart };
-
-export async function upsertUIReindexOption({
- start,
- close,
- open,
- stop,
- savedObjects,
-}: UpsertUIReindexOptionDepencies): Promise {
- if (close) {
- await incrementUIReindexOptionCounter({ savedObjects, uiReindexOptionCounter: 'close' });
- }
-
- if (open) {
- await incrementUIReindexOptionCounter({ savedObjects, uiReindexOptionCounter: 'open' });
- }
-
- if (start) {
- await incrementUIReindexOptionCounter({ savedObjects, uiReindexOptionCounter: 'start' });
- }
-
- if (stop) {
- await incrementUIReindexOptionCounter({ savedObjects, uiReindexOptionCounter: 'stop' });
- }
-
- return {
- close,
- open,
- start,
- stop,
- };
-}
diff --git a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.test.ts b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.test.ts
index 50c5b358aa5cb..34d329557f11e 100644
--- a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.test.ts
+++ b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.test.ts
@@ -47,26 +47,6 @@ describe('Upgrade Assistant Usage Collector', () => {
};
dependencies = {
usageCollection,
- savedObjects: {
- createInternalRepository: jest.fn().mockImplementation(() => {
- return {
- get: () => {
- return {
- attributes: {
- 'ui_open.overview': 10,
- 'ui_open.elasticsearch': 20,
- 'ui_open.kibana': 15,
- 'ui_reindex.close': 1,
- 'ui_reindex.open': 4,
- 'ui_reindex.start': 2,
- 'ui_reindex.stop': 1,
- 'ui_reindex.not_defined': 1,
- },
- };
- },
- };
- }),
- },
elasticsearch: {
client: clusterClient,
},
@@ -91,17 +71,6 @@ describe('Upgrade Assistant Usage Collector', () => {
callClusterStub
);
expect(upgradeAssistantStats).toEqual({
- ui_open: {
- overview: 10,
- elasticsearch: 20,
- kibana: 15,
- },
- ui_reindex: {
- close: 1,
- open: 4,
- start: 2,
- stop: 1,
- },
features: {
deprecation_logging: {
enabled: true,
diff --git a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.ts b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.ts
index 56932f5e54b06..c535cd14f104d 100644
--- a/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.ts
+++ b/x-pack/plugins/upgrade_assistant/server/lib/telemetry/usage_collector.ts
@@ -5,43 +5,14 @@
* 2.0.
*/
-import { get } from 'lodash';
-import {
- ElasticsearchClient,
- ElasticsearchServiceStart,
- ISavedObjectsRepository,
- SavedObjectsServiceStart,
-} from 'src/core/server';
+import { ElasticsearchClient, ElasticsearchServiceStart } from 'src/core/server';
import { UsageCollectionSetup } from 'src/plugins/usage_collection/server';
-import {
- UPGRADE_ASSISTANT_DOC_ID,
- UPGRADE_ASSISTANT_TYPE,
- UpgradeAssistantTelemetry,
- UpgradeAssistantTelemetrySavedObject,
- UpgradeAssistantTelemetrySavedObjectAttributes,
-} from '../../../common/types';
+import { UpgradeAssistantTelemetry } from '../../../common/types';
import {
isDeprecationLogIndexingEnabled,
isDeprecationLoggingEnabled,
} from '../es_deprecation_logging_apis';
-async function getSavedObjectAttributesFromRepo(
- savedObjectsRepository: ISavedObjectsRepository,
- docType: string,
- docID: string
-) {
- try {
- return (
- await savedObjectsRepository.get(
- docType,
- docID
- )
- ).attributes;
- } catch (e) {
- return null;
- }
-}
-
async function getDeprecationLoggingStatusValue(esClient: ElasticsearchClient): Promise {
try {
const { body: loggerDeprecationCallResult } = await esClient.cluster.getSettings({
@@ -57,58 +28,14 @@ async function getDeprecationLoggingStatusValue(esClient: ElasticsearchClient):
}
}
-export async function fetchUpgradeAssistantMetrics(
- { client: esClient }: ElasticsearchServiceStart,
- savedObjects: SavedObjectsServiceStart
-): Promise {
- const savedObjectsRepository = savedObjects.createInternalRepository();
- const upgradeAssistantSOAttributes = await getSavedObjectAttributesFromRepo(
- savedObjectsRepository,
- UPGRADE_ASSISTANT_TYPE,
- UPGRADE_ASSISTANT_DOC_ID
- );
+export async function fetchUpgradeAssistantMetrics({
+ client: esClient,
+}: ElasticsearchServiceStart): Promise {
const deprecationLoggingStatusValue = await getDeprecationLoggingStatusValue(
esClient.asInternalUser
);
- const getTelemetrySavedObject = (
- upgradeAssistantTelemetrySavedObjectAttrs: UpgradeAssistantTelemetrySavedObjectAttributes | null
- ): UpgradeAssistantTelemetrySavedObject => {
- const defaultTelemetrySavedObject = {
- ui_open: {
- overview: 0,
- elasticsearch: 0,
- kibana: 0,
- },
- ui_reindex: {
- close: 0,
- open: 0,
- start: 0,
- stop: 0,
- },
- };
-
- if (!upgradeAssistantTelemetrySavedObjectAttrs) {
- return defaultTelemetrySavedObject;
- }
-
- return {
- ui_open: {
- overview: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_open.overview', 0),
- elasticsearch: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_open.elasticsearch', 0),
- kibana: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_open.kibana', 0),
- },
- ui_reindex: {
- close: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_reindex.close', 0),
- open: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_reindex.open', 0),
- start: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_reindex.start', 0),
- stop: get(upgradeAssistantTelemetrySavedObjectAttrs, 'ui_reindex.stop', 0),
- },
- } as UpgradeAssistantTelemetrySavedObject;
- };
-
return {
- ...getTelemetrySavedObject(upgradeAssistantSOAttributes),
features: {
deprecation_logging: {
enabled: deprecationLoggingStatusValue,
@@ -119,14 +46,12 @@ export async function fetchUpgradeAssistantMetrics(
interface Dependencies {
elasticsearch: ElasticsearchServiceStart;
- savedObjects: SavedObjectsServiceStart;
usageCollection: UsageCollectionSetup;
}
export function registerUpgradeAssistantUsageCollector({
elasticsearch,
usageCollection,
- savedObjects,
}: Dependencies) {
const upgradeAssistantUsageCollector =
usageCollection.makeUsageCollector({
@@ -143,34 +68,8 @@ export function registerUpgradeAssistantUsageCollector({
},
},
},
- ui_open: {
- elasticsearch: {
- type: 'long',
- _meta: {
- description: 'Number of times a user viewed the list of Elasticsearch deprecations.',
- },
- },
- overview: {
- type: 'long',
- _meta: {
- description: 'Number of times a user viewed the Overview page.',
- },
- },
- kibana: {
- type: 'long',
- _meta: {
- description: 'Number of times a user viewed the list of Kibana deprecations',
- },
- },
- },
- ui_reindex: {
- close: { type: 'long' },
- open: { type: 'long' },
- start: { type: 'long' },
- stop: { type: 'long' },
- },
},
- fetch: async () => fetchUpgradeAssistantMetrics(elasticsearch, savedObjects),
+ fetch: async () => fetchUpgradeAssistantMetrics(elasticsearch),
});
usageCollection.registerCollector(upgradeAssistantUsageCollector);
diff --git a/x-pack/plugins/upgrade_assistant/server/plugin.ts b/x-pack/plugins/upgrade_assistant/server/plugin.ts
index 2062cf982d15f..717f03758f825 100644
--- a/x-pack/plugins/upgrade_assistant/server/plugin.ts
+++ b/x-pack/plugins/upgrade_assistant/server/plugin.ts
@@ -142,11 +142,10 @@ export class UpgradeAssistantServerPlugin implements Plugin {
registerRoutes(dependencies, this.getWorker.bind(this));
if (usageCollection) {
- getStartServices().then(([{ savedObjects: savedObjectsService, elasticsearch }]) => {
+ getStartServices().then(([{ elasticsearch }]) => {
registerUpgradeAssistantUsageCollector({
elasticsearch,
usageCollection,
- savedObjects: savedObjectsService,
});
});
}
diff --git a/x-pack/plugins/upgrade_assistant/server/routes/register_routes.ts b/x-pack/plugins/upgrade_assistant/server/routes/register_routes.ts
index e6a92af53b143..b6c8850376684 100644
--- a/x-pack/plugins/upgrade_assistant/server/routes/register_routes.ts
+++ b/x-pack/plugins/upgrade_assistant/server/routes/register_routes.ts
@@ -14,7 +14,6 @@ import { registerSystemIndicesMigrationRoutes } from './system_indices_migration
import { registerESDeprecationRoutes } from './es_deprecations';
import { registerDeprecationLoggingRoutes } from './deprecation_logging';
import { registerReindexIndicesRoutes, registerBatchReindexIndicesRoutes } from './reindex_indices';
-import { registerTelemetryRoutes } from './telemetry';
import { registerUpdateSettingsRoute } from './update_index_settings';
import { registerMlSnapshotRoutes } from './ml_snapshots';
import { ReindexWorker } from '../lib/reindexing';
@@ -29,7 +28,6 @@ export function registerRoutes(dependencies: RouteDependencies, getWorker: () =>
registerDeprecationLoggingRoutes(dependencies);
registerReindexIndicesRoutes(dependencies, getWorker);
registerBatchReindexIndicesRoutes(dependencies, getWorker);
- registerTelemetryRoutes(dependencies);
registerUpdateSettingsRoute(dependencies);
registerMlSnapshotRoutes(dependencies);
// Route for cloud to retrieve the upgrade status for ES and Kibana
diff --git a/x-pack/plugins/upgrade_assistant/server/routes/telemetry.test.ts b/x-pack/plugins/upgrade_assistant/server/routes/telemetry.test.ts
deleted file mode 100644
index 578cceb702751..0000000000000
--- a/x-pack/plugins/upgrade_assistant/server/routes/telemetry.test.ts
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { kibanaResponseFactory } from 'src/core/server';
-import { savedObjectsServiceMock } from 'src/core/server/mocks';
-import { createMockRouter, MockRouter, routeHandlerContextMock } from './__mocks__/routes.mock';
-import { createRequestMock } from './__mocks__/request.mock';
-
-jest.mock('../lib/telemetry/es_ui_open_apis', () => ({
- upsertUIOpenOption: jest.fn(),
-}));
-
-jest.mock('../lib/telemetry/es_ui_reindex_apis', () => ({
- upsertUIReindexOption: jest.fn(),
-}));
-
-import { upsertUIOpenOption } from '../lib/telemetry/es_ui_open_apis';
-import { upsertUIReindexOption } from '../lib/telemetry/es_ui_reindex_apis';
-import { registerTelemetryRoutes } from './telemetry';
-
-/**
- * Since these route callbacks are so thin, these serve simply as integration tests
- * to ensure they're wired up to the lib functions correctly. Business logic is tested
- * more thoroughly in the lib/telemetry tests.
- */
-describe('Upgrade Assistant Telemetry API', () => {
- let routeDependencies: any;
- let mockRouter: MockRouter;
- beforeEach(() => {
- mockRouter = createMockRouter();
- routeDependencies = {
- getSavedObjectsService: () => savedObjectsServiceMock.create(),
- router: mockRouter,
- };
- registerTelemetryRoutes(routeDependencies);
- });
- afterEach(() => jest.clearAllMocks());
-
- describe('PUT /api/upgrade_assistant/stats/ui_open', () => {
- it('returns correct payload with single option', async () => {
- const returnPayload = {
- overview: true,
- elasticsearch: false,
- kibana: false,
- };
-
- (upsertUIOpenOption as jest.Mock).mockResolvedValue(returnPayload);
-
- const resp = await routeDependencies.router.getHandler({
- method: 'put',
- pathPattern: '/api/upgrade_assistant/stats/ui_open',
- })(
- routeHandlerContextMock,
- createRequestMock({ body: returnPayload }),
- kibanaResponseFactory
- );
-
- expect(resp.payload).toEqual(returnPayload);
- });
-
- it('returns correct payload with multiple option', async () => {
- const returnPayload = {
- overview: true,
- elasticsearch: true,
- kibana: true,
- };
-
- (upsertUIOpenOption as jest.Mock).mockResolvedValue(returnPayload);
-
- const resp = await routeDependencies.router.getHandler({
- method: 'put',
- pathPattern: '/api/upgrade_assistant/stats/ui_open',
- })(
- routeHandlerContextMock,
- createRequestMock({
- body: {
- overview: true,
- elasticsearch: true,
- kibana: true,
- },
- }),
- kibanaResponseFactory
- );
-
- expect(resp.payload).toEqual(returnPayload);
- });
-
- it('returns an error if it throws', async () => {
- (upsertUIOpenOption as jest.Mock).mockRejectedValue(new Error(`scary error!`));
-
- await expect(
- routeDependencies.router.getHandler({
- method: 'put',
- pathPattern: '/api/upgrade_assistant/stats/ui_open',
- })(
- routeHandlerContextMock,
- createRequestMock({
- body: {
- overview: false,
- },
- }),
- kibanaResponseFactory
- )
- ).rejects.toThrowError('scary error!');
- });
- });
-
- describe('PUT /api/upgrade_assistant/stats/ui_reindex', () => {
- it('returns correct payload with single option', async () => {
- const returnPayload = {
- close: false,
- open: false,
- start: true,
- stop: false,
- };
-
- (upsertUIReindexOption as jest.Mock).mockResolvedValue(returnPayload);
-
- const resp = await routeDependencies.router.getHandler({
- method: 'put',
- pathPattern: '/api/upgrade_assistant/stats/ui_reindex',
- })(
- routeHandlerContextMock,
- createRequestMock({
- body: {
- overview: false,
- },
- }),
- kibanaResponseFactory
- );
-
- expect(resp.payload).toEqual(returnPayload);
- });
-
- it('returns correct payload with multiple option', async () => {
- const returnPayload = {
- close: true,
- open: true,
- start: true,
- stop: true,
- };
-
- (upsertUIReindexOption as jest.Mock).mockResolvedValue(returnPayload);
-
- const resp = await routeDependencies.router.getHandler({
- method: 'put',
- pathPattern: '/api/upgrade_assistant/stats/ui_reindex',
- })(
- routeHandlerContextMock,
- createRequestMock({
- body: {
- close: true,
- open: true,
- start: true,
- stop: true,
- },
- }),
- kibanaResponseFactory
- );
-
- expect(resp.payload).toEqual(returnPayload);
- });
-
- it('returns an error if it throws', async () => {
- (upsertUIReindexOption as jest.Mock).mockRejectedValue(new Error(`scary error!`));
-
- await expect(
- routeDependencies.router.getHandler({
- method: 'put',
- pathPattern: '/api/upgrade_assistant/stats/ui_reindex',
- })(
- routeHandlerContextMock,
- createRequestMock({
- body: {
- start: false,
- },
- }),
- kibanaResponseFactory
- )
- ).rejects.toThrowError('scary error!');
- });
- });
-});
diff --git a/x-pack/plugins/upgrade_assistant/server/routes/telemetry.ts b/x-pack/plugins/upgrade_assistant/server/routes/telemetry.ts
deleted file mode 100644
index d083b38c7c240..0000000000000
--- a/x-pack/plugins/upgrade_assistant/server/routes/telemetry.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { schema } from '@kbn/config-schema';
-import { API_BASE_PATH } from '../../common/constants';
-import { upsertUIOpenOption } from '../lib/telemetry/es_ui_open_apis';
-import { upsertUIReindexOption } from '../lib/telemetry/es_ui_reindex_apis';
-import { RouteDependencies } from '../types';
-
-export function registerTelemetryRoutes({ router, getSavedObjectsService }: RouteDependencies) {
- router.put(
- {
- path: `${API_BASE_PATH}/stats/ui_open`,
- validate: {
- body: schema.object({
- overview: schema.boolean({ defaultValue: false }),
- elasticsearch: schema.boolean({ defaultValue: false }),
- kibana: schema.boolean({ defaultValue: false }),
- }),
- },
- },
- async (ctx, request, response) => {
- const { elasticsearch, overview, kibana } = request.body;
- return response.ok({
- body: await upsertUIOpenOption({
- savedObjects: getSavedObjectsService(),
- elasticsearch,
- overview,
- kibana,
- }),
- });
- }
- );
-
- router.put(
- {
- path: `${API_BASE_PATH}/stats/ui_reindex`,
- validate: {
- body: schema.object({
- close: schema.boolean({ defaultValue: false }),
- open: schema.boolean({ defaultValue: false }),
- start: schema.boolean({ defaultValue: false }),
- stop: schema.boolean({ defaultValue: false }),
- }),
- },
- },
- async (ctx, request, response) => {
- const { close, open, start, stop } = request.body;
- return response.ok({
- body: await upsertUIReindexOption({
- savedObjects: getSavedObjectsService(),
- close,
- open,
- start,
- stop,
- }),
- });
- }
- );
-}
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
index 42d5d339dd050..cb3fbcaef59b7 100644
--- a/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
@@ -15,42 +15,6 @@ export const telemetrySavedObjectType: SavedObjectsType = {
namespaceType: 'agnostic',
mappings: {
properties: {
- ui_open: {
- properties: {
- overview: {
- type: 'long',
- null_value: 0,
- },
- elasticsearch: {
- type: 'long',
- null_value: 0,
- },
- kibana: {
- type: 'long',
- null_value: 0,
- },
- },
- },
- ui_reindex: {
- properties: {
- close: {
- type: 'long',
- null_value: 0,
- },
- open: {
- type: 'long',
- null_value: 0,
- },
- start: {
- type: 'long',
- null_value: 0,
- },
- stop: {
- type: 'long',
- null_value: 0,
- },
- },
- },
features: {
properties: {
deprecation_logging: {
From b77716bd4451a24bb25feea8a26a8730bc7d595e Mon Sep 17 00:00:00 2001
From: CJ Cenizal
Date: Wed, 13 Oct 2021 11:52:30 -0700
Subject: [PATCH 2/5] Add migration to remove obsolete attributes from
telemetry saved object.
---
.../saved_object_types/migrations/index.ts | 8 ++++
.../telemetry_saved_object_migrations.test.ts | 41 +++++++++++++++++++
.../telemetry_saved_object_migrations.ts | 39 ++++++++++++++++++
.../telemetry_saved_object_type.ts | 2 +
4 files changed, 90 insertions(+)
create mode 100644 x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/index.ts
create mode 100644 x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.test.ts
create mode 100644 x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/index.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/index.ts
new file mode 100644
index 0000000000000..5e6e379bd9b2b
--- /dev/null
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/index.ts
@@ -0,0 +1,8 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+export { telemetrySavedObjectMigrations } from './telemetry_saved_object_migrations';
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.test.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.test.ts
new file mode 100644
index 0000000000000..e1250ee0ebfe0
--- /dev/null
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.test.ts
@@ -0,0 +1,41 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { telemetrySavedObjectMigrations } from './telemetry_saved_object_migrations';
+
+describe('Telemetry saved object migration', () => {
+ describe('7.16.0', () => {
+ test('removes ui_open and ui_reindex attributes while preserving other attributes', () => {
+ const doc = {
+ type: 'upgrade-assistant-telemetry',
+ id: 'upgrade-assistant-telemetry',
+ attributes: {
+ 'test.property': 5,
+ 'ui_open.cluster': 1,
+ 'ui_open.indices': 1,
+ 'ui_open.overview': 1,
+ 'ui_reindex.close': 1,
+ 'ui_reindex.open': 1,
+ 'ui_reindex.start': 1,
+ 'ui_reindex.stop': 1,
+ },
+ references: [],
+ updated_at: '2021-09-29T21:17:17.410Z',
+ migrationVersion: {},
+ };
+
+ expect(telemetrySavedObjectMigrations['7.16.0'](doc)).toStrictEqual({
+ type: 'upgrade-assistant-telemetry',
+ id: 'upgrade-assistant-telemetry',
+ attributes: { 'test.property': 5 },
+ references: [],
+ updated_at: '2021-09-29T21:17:17.410Z',
+ migrationVersion: {},
+ });
+ });
+ });
+});
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
new file mode 100644
index 0000000000000..dd6e8b22e93e9
--- /dev/null
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
@@ -0,0 +1,39 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { omit, flow } from 'lodash';
+import type { SavedObjectMigrationFn } from 'kibana/server';
+
+const v716RemoveUnusedTelemetry: SavedObjectMigrationFn = (doc) => {
+ // Dynamically defined in 6.7 (https://github.com/elastic/kibana/pull/28878)
+ // and then statically defined in 7.8 (https://github.com/elastic/kibana/pull/64332).
+ const attributesBlocklist = [
+ 'ui_open.overview',
+ 'ui_open.cluster',
+ 'ui_open.indices',
+ 'ui_reindex.close',
+ 'ui_reindex.open',
+ 'ui_reindex.start',
+ 'ui_reindex.stop',
+ ];
+
+ try {
+ return {
+ ...doc,
+ attributes: {
+ ...omit(doc.attributes, attributesBlocklist),
+ },
+ };
+ } catch (e) {
+ // Let it go, the data is invalid and we'll leave it as is
+ }
+ return doc;
+};
+
+export const telemetrySavedObjectMigrations = {
+ '7.16.0': flow(v716RemoveUnusedTelemetry),
+};
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
index cb3fbcaef59b7..6e2a2acb86eff 100644
--- a/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
@@ -8,6 +8,7 @@
import { SavedObjectsType } from 'src/core/server';
import { UPGRADE_ASSISTANT_TYPE } from '../../common/types';
+import { telemetrySavedObjectMigrations } from './migrations';
export const telemetrySavedObjectType: SavedObjectsType = {
name: UPGRADE_ASSISTANT_TYPE,
@@ -29,4 +30,5 @@ export const telemetrySavedObjectType: SavedObjectsType = {
},
},
},
+ migrations: telemetrySavedObjectMigrations,
};
From 981e21b79d24d5bdbeb8ac71182f998dfbc9e56a Mon Sep 17 00:00:00 2001
From: CJ Cenizal
Date: Thu, 14 Oct 2021 04:55:21 -0700
Subject: [PATCH 3/5] Refactor UA telemetry constants by extracting it from
common/types.
---
x-pack/plugins/upgrade_assistant/common/constants.ts | 3 +++
x-pack/plugins/upgrade_assistant/common/types.ts | 2 --
.../server/saved_object_types/telemetry_saved_object_type.ts | 4 ++--
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/x-pack/plugins/upgrade_assistant/common/constants.ts b/x-pack/plugins/upgrade_assistant/common/constants.ts
index c656df77e461f..11d81d99017d7 100644
--- a/x-pack/plugins/upgrade_assistant/common/constants.ts
+++ b/x-pack/plugins/upgrade_assistant/common/constants.ts
@@ -28,6 +28,9 @@ export const indexSettingDeprecations = {
export const API_BASE_PATH = '/api/upgrade_assistant';
+// Telemetry constants
+export const UPGRADE_ASSISTANT_TELEMETRY = 'upgrade-assistant-telemetry';
+
/**
* This is the repository where Cloud stores its backup snapshots.
*/
diff --git a/x-pack/plugins/upgrade_assistant/common/types.ts b/x-pack/plugins/upgrade_assistant/common/types.ts
index a4d34a0268713..e13af1f94d9c2 100644
--- a/x-pack/plugins/upgrade_assistant/common/types.ts
+++ b/x-pack/plugins/upgrade_assistant/common/types.ts
@@ -126,8 +126,6 @@ export interface ReindexWarning {
}
// Telemetry types
-export const UPGRADE_ASSISTANT_TYPE = 'upgrade-assistant-telemetry';
-export const UPGRADE_ASSISTANT_DOC_ID = 'upgrade-assistant-telemetry';
export type UIOpenOption = 'overview' | 'elasticsearch' | 'kibana';
export type UIReindexOption = 'close' | 'open' | 'start' | 'stop';
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
index 6e2a2acb86eff..43cf6c30fccab 100644
--- a/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/telemetry_saved_object_type.ts
@@ -7,11 +7,11 @@
import { SavedObjectsType } from 'src/core/server';
-import { UPGRADE_ASSISTANT_TYPE } from '../../common/types';
+import { UPGRADE_ASSISTANT_TELEMETRY } from '../../common/constants';
import { telemetrySavedObjectMigrations } from './migrations';
export const telemetrySavedObjectType: SavedObjectsType = {
- name: UPGRADE_ASSISTANT_TYPE,
+ name: UPGRADE_ASSISTANT_TELEMETRY,
hidden: false,
namespaceType: 'agnostic',
mappings: {
From b405eec51aab7559bd9da1c8ec9e61f3b4c1aaad Mon Sep 17 00:00:00 2001
From: CJ Cenizal
Date: Mon, 18 Oct 2021 11:46:22 -0700
Subject: [PATCH 4/5] Add condition to avoid sanitizing every doc.
---
.../telemetry_saved_object_migrations.ts | 29 ++++++++++++-------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
index dd6e8b22e93e9..aebf50e6f8738 100644
--- a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
@@ -5,32 +5,39 @@
* 2.0.
*/
-import { omit, flow } from 'lodash';
+import { get, omit, flow, some } from 'lodash';
import type { SavedObjectMigrationFn } from 'kibana/server';
const v716RemoveUnusedTelemetry: SavedObjectMigrationFn = (doc) => {
// Dynamically defined in 6.7 (https://github.com/elastic/kibana/pull/28878)
// and then statically defined in 7.8 (https://github.com/elastic/kibana/pull/64332).
const attributesBlocklist = [
- 'ui_open.overview',
'ui_open.cluster',
'ui_open.indices',
+ 'ui_open.overview',
'ui_reindex.close',
'ui_reindex.open',
'ui_reindex.start',
'ui_reindex.stop',
];
- try {
- return {
- ...doc,
- attributes: {
- ...omit(doc.attributes, attributesBlocklist),
- },
- };
- } catch (e) {
- // Let it go, the data is invalid and we'll leave it as is
+ const isDocEligible = some(attributesBlocklist, (attribute: string) => {
+ return get(doc, 'attributes', attribute);
+ });
+
+ if (isDocEligible) {
+ try {
+ return {
+ ...doc,
+ attributes: {
+ ...omit(doc.attributes, attributesBlocklist),
+ },
+ };
+ } catch (e) {
+ // Let it go, the data is invalid and we'll leave it as is
+ }
}
+
return doc;
};
From 7cfdd88aaa0ecc0685b9548573aa61b91101041b Mon Sep 17 00:00:00 2001
From: CJ Cenizal
Date: Mon, 18 Oct 2021 12:33:30 -0700
Subject: [PATCH 5/5] Remove unnecessary try/catch.
---
.../telemetry_saved_object_migrations.ts | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
index aebf50e6f8738..88540d67b13df 100644
--- a/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
+++ b/x-pack/plugins/upgrade_assistant/server/saved_object_types/migrations/telemetry_saved_object_migrations.ts
@@ -26,16 +26,10 @@ const v716RemoveUnusedTelemetry: SavedObjectMigrationFn = (doc) => {
});
if (isDocEligible) {
- try {
- return {
- ...doc,
- attributes: {
- ...omit(doc.attributes, attributesBlocklist),
- },
- };
- } catch (e) {
- // Let it go, the data is invalid and we'll leave it as is
- }
+ return {
+ ...doc,
+ attributes: omit(doc.attributes, attributesBlocklist),
+ };
}
return doc;