Skip to content

Commit ee7f104

Browse files
authored
[Monitoring] Usage collection (#75878) (#78537)
* First stab at some internal telemetry * Add missing files * mbCount telemetry * Include more data * Remove unused field * This file isn't used * Mock in tests * Add schema * Store schema * Use sample cluster instead * Fix telemetry schema * Fix type issues * Updates * Fix schema and tests * Add tests * Add tests * Go back to using an array * Fix schema * Add page view data * Remove debug * Handle loading scenario here * Add delay tracking too * Add clicks for setup mode * Add clicks for setup mode * Fix beats/apm page views * Fix typings # Conflicts: # x-pack/plugins/monitoring/common/constants.ts
1 parent bc3e3e7 commit ee7f104

File tree

48 files changed

+1287
-119
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1287
-119
lines changed

x-pack/plugins/monitoring/common/constants.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,3 +276,10 @@ export const ALERT_EMAIL_SERVICES = ['gmail', 'hotmail', 'icloud', 'outlook365',
276276

277277
export const MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS = 'monitoring:alertingEmailAddress';
278278
export const XPACK_DEFAULT_ADMIN_EMAIL_UI_SETTING = 'xPack:defaultAdminEmail';
279+
280+
/**
281+
* The saved object type for various monitoring data
282+
*/
283+
export const SAVED_OBJECT_TELEMETRY = 'monitoring-telemetry';
284+
285+
export const TELEMETRY_METRIC_BUTTON_CLICK = 'btnclick__';

x-pack/plugins/monitoring/kibana.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"triggers_actions_ui",
1313
"alerts",
1414
"actions",
15-
"encryptedSavedObjects"
15+
"encryptedSavedObjects",
16+
"observability"
1617
],
1718
"optionalPlugins": ["infra", "telemetryCollectionManager", "usageCollection", "home", "cloud"],
1819
"server": true,

x-pack/plugins/monitoring/public/angular/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export class AngularApp {
2626
pluginInitializerContext,
2727
externalConfig,
2828
triggersActionsUi,
29+
usageCollection,
2930
kibanaLegacy,
3031
} = deps;
3132
const app: IModule = localAppModule(deps);
@@ -42,6 +43,7 @@ export class AngularApp {
4243
externalConfig,
4344
kibanaLegacy,
4445
triggersActionsUi,
46+
usageCollection,
4547
},
4648
this.injector
4749
);

x-pack/plugins/monitoring/public/components/page_loading/index.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ import {
1515
} from '@elastic/eui';
1616
import { FormattedMessage } from '@kbn/i18n/react';
1717
import './page_loading.scss';
18+
import { useTrackPageview } from '../../../../observability/public';
1819

19-
export function PageLoading() {
20+
function PageLoadingUI() {
2021
return (
2122
<EuiPage style={{ height: 'calc(100vh - 50px)' }}>
2223
<EuiPageBody>
@@ -45,3 +46,18 @@ export function PageLoading() {
4546
</EuiPage>
4647
);
4748
}
49+
50+
function PageLoadingTracking({ pageViewTitle }) {
51+
const path = pageViewTitle.toLowerCase().replace(/-/g, '').replace(/\s+/g, '_');
52+
useTrackPageview({ app: 'stack_monitoring', path });
53+
useTrackPageview({ app: 'stack_monitoring', path, delay: 15000 });
54+
return <PageLoadingUI />;
55+
}
56+
57+
export function PageLoading({ pageViewTitle }) {
58+
if (pageViewTitle) {
59+
return <PageLoadingTracking pageViewTitle={pageViewTitle} />;
60+
}
61+
62+
return <PageLoadingUI />;
63+
}

x-pack/plugins/monitoring/public/components/setup_mode/enter_button.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import React from 'react';
88
import { EuiButton } from '@elastic/eui';
99
import { i18n } from '@kbn/i18n';
1010
import './enter_button.scss';
11+
import { METRIC_TYPE, useUiTracker } from '../../../../observability/public';
12+
import { TELEMETRY_METRIC_BUTTON_CLICK } from '../../../common/constants';
1113

1214
export interface SetupModeEnterButtonProps {
1315
enabled: boolean;
@@ -18,6 +20,7 @@ export const SetupModeEnterButton: React.FC<SetupModeEnterButtonProps> = (
1820
props: SetupModeEnterButtonProps
1921
) => {
2022
const [isLoading, setIsLoading] = React.useState(false);
23+
const trackStat = useUiTracker({ app: 'stack_monitoring' });
2124

2225
if (!props.enabled) {
2326
return null;
@@ -26,6 +29,10 @@ export const SetupModeEnterButton: React.FC<SetupModeEnterButtonProps> = (
2629
async function enterSetupMode() {
2730
setIsLoading(true);
2831
await props.toggleSetupMode(true);
32+
trackStat({
33+
metric: `${TELEMETRY_METRIC_BUTTON_CLICK}setupmode_enter`,
34+
metricType: METRIC_TYPE.CLICK,
35+
});
2936
setIsLoading(false);
3037
}
3138

x-pack/plugins/monitoring/public/legacy_shims.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { TriggersAndActionsUIPublicPluginSetup } from '../../triggers_actions_ui
1414
import { TypeRegistry } from '../../triggers_actions_ui/public/application/type_registry';
1515
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
1616
import { ActionTypeModel, AlertTypeModel } from '../../triggers_actions_ui/public/types';
17+
import { UsageCollectionSetup } from '../../../../src/plugins/usage_collection/public';
1718

1819
interface BreadcrumbItem {
1920
['data-test-subj']?: string;
@@ -59,13 +60,14 @@ export interface IShims {
5960
) => Promise<any>;
6061
isCloud: boolean;
6162
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
63+
usageCollection: UsageCollectionSetup;
6264
}
6365

6466
export class Legacy {
6567
private static _shims: IShims;
6668

6769
public static init(
68-
{ core, data, isCloud, triggersActionsUi }: MonitoringStartPluginDependencies,
70+
{ core, data, isCloud, triggersActionsUi, usageCollection }: MonitoringStartPluginDependencies,
6971
ngInjector: angular.auto.IInjectorService
7072
) {
7173
this._shims = {
@@ -119,6 +121,7 @@ export class Legacy {
119121
}),
120122
isCloud,
121123
triggersActionsUi,
124+
usageCollection,
122125
};
123126
}
124127

x-pack/plugins/monitoring/public/lib/setup_mode.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import React from 'react';
88
import { render } from 'react-dom';
99
import { get, includes } from 'lodash';
1010
import { i18n } from '@kbn/i18n';
11+
import { KibanaContextProvider } from '../../../../../src/plugins/kibana_react/public';
1112
import { Legacy } from '../legacy_shims';
1213
import { ajaxErrorHandlersProvider } from './ajax_error_handler';
1314
import { SetupModeEnterButton } from '../components/setup_mode/enter_button';
@@ -179,8 +180,17 @@ export const setSetupModeMenuItem = () => {
179180
const globalState = angularState.injector.get('globalState');
180181
const enabled = !globalState.inSetupMode;
181182

183+
const services = {
184+
usageCollection: Legacy.shims.usageCollection,
185+
};
186+
const I18nContext = Legacy.shims.I18nContext;
187+
182188
render(
183-
<SetupModeEnterButton enabled={enabled} toggleSetupMode={toggleSetupMode} />,
189+
<KibanaContextProvider services={services}>
190+
<I18nContext>
191+
<SetupModeEnterButton enabled={enabled} toggleSetupMode={toggleSetupMode} />
192+
</I18nContext>
193+
</KibanaContextProvider>,
184194
document.getElementById('setupModeNav')
185195
);
186196
};

x-pack/plugins/monitoring/public/plugin.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
Plugin,
1414
PluginInitializerContext,
1515
} from 'kibana/public';
16+
import { UsageCollectionSetup } from '../../../../src/plugins/usage_collection/public';
1617
import {
1718
FeatureCatalogueCategory,
1819
HomePublicPluginSetup,
@@ -28,6 +29,7 @@ interface MonitoringSetupPluginDependencies {
2829
home?: HomePublicPluginSetup;
2930
cloud?: { isCloudEnabled: boolean };
3031
triggers_actions_ui: TriggersAndActionsUIPublicPluginSetup;
32+
usageCollection: UsageCollectionSetup;
3133
}
3234

3335
export class MonitoringPlugin
@@ -93,6 +95,7 @@ export class MonitoringPlugin
9395
pluginInitializerContext: this.initializerContext,
9496
externalConfig: this.getExternalConfig(),
9597
triggersActionsUi: plugins.triggers_actions_ui,
98+
usageCollection: plugins.usageCollection,
9699
};
97100

98101
pluginsStart.kibanaLegacy.loadFontAwesome();

x-pack/plugins/monitoring/public/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { NavigationPublicPluginStart as NavigationStart } from '../../../../src/
99
import { DataPublicPluginStart } from '../../../../src/plugins/data/public';
1010
import { TriggersAndActionsUIPublicPluginSetup } from '../../triggers_actions_ui/public';
1111
import { KibanaLegacyStart } from '../../../../src/plugins/kibana_legacy/public';
12+
import { UsageCollectionSetup } from '../../../../src/plugins/usage_collection/public';
1213

1314
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
1415
export { MonitoringConfig } from '../server';
@@ -23,4 +24,5 @@ export interface MonitoringStartPluginDependencies {
2324
pluginInitializerContext: PluginInitializerContext;
2425
externalConfig: Array<Array<string | number> | Array<string | boolean>>;
2526
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
27+
usageCollection: UsageCollectionSetup;
2628
}

x-pack/plugins/monitoring/public/views/apm/instance/index.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ uiRoutes.when('/apm/instances/:uuid', {
4444
apm: 'APM server',
4545
},
4646
}),
47+
telemetryPageViewTitle: 'apm_server_instance',
4748
api: `../api/monitoring/v1/clusters/${globalState.cluster_uuid}/apm/${$route.current.params.uuid}`,
4849
defaultData: {},
4950
reactNodeId: 'apmInstanceReact',
@@ -63,21 +64,16 @@ uiRoutes.when('/apm/instances/:uuid', {
6364
})
6465
);
6566
title($scope.cluster, `APM server - ${get(data, 'apmSummary.name')}`);
66-
this.renderReact(data);
67+
this.renderReact(
68+
<ApmServerInstance
69+
summary={data.apmSummary || {}}
70+
metrics={data.metrics || {}}
71+
onBrush={this.onBrush}
72+
zoomInfo={this.zoomInfo}
73+
/>
74+
);
6775
}
6876
);
6977
}
70-
71-
renderReact(data) {
72-
const component = (
73-
<ApmServerInstance
74-
summary={data.apmSummary || {}}
75-
metrics={data.metrics || {}}
76-
onBrush={this.onBrush}
77-
zoomInfo={this.zoomInfo}
78-
/>
79-
);
80-
super.renderReact(component);
81-
}
8278
},
8379
});

0 commit comments

Comments
 (0)