Skip to content

Commit

Permalink
[Synthetics] fix script_type for monitor management telemetry (#131855)
Browse files Browse the repository at this point in the history
* synthetics - fix script_type for monitor management telemetry

* adjust tests

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
  • Loading branch information
dominiqueclarke and kibanamachine authored May 12, 2022
1 parent b70b899 commit 94b894a
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import { schema } from '@kbn/config-schema';
import { SavedObject } from '@kbn/core/server';
import {
ConfigKey,
MonitorFields,
SyntheticsMonitor,
EncryptedSyntheticsMonitor,
Expand Down Expand Up @@ -57,7 +58,12 @@ export const addSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({
sendTelemetryEvents(
server.logger,
server.telemetry,
formatTelemetryEvent({ monitor: newMonitor, errors, kibanaVersion: server.kibanaVersion })
formatTelemetryEvent({
monitor: newMonitor,
errors,
isInlineScript: Boolean((monitor as MonitorFields)[ConfigKey.SOURCE_INLINE]),
kibanaVersion: server.kibanaVersion,
})
);

if (errors && errors.length > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import { schema } from '@kbn/config-schema';
import { SavedObjectsErrorHelpers } from '@kbn/core/server';
import {
ConfigKey,
MonitorFields,
EncryptedSyntheticsMonitor,
SyntheticsMonitorWithSecrets,
} from '../../../common/runtime_types';
Expand Down Expand Up @@ -66,7 +68,13 @@ export const deleteSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({
sendTelemetryEvents(
logger,
telemetry,
formatTelemetryDeleteEvent(monitor, kibanaVersion, new Date().toISOString(), errors)
formatTelemetryDeleteEvent(
monitor,
kibanaVersion,
new Date().toISOString(),
Boolean((normalizedMonitor.attributes as MonitorFields)[ConfigKey.SOURCE_INLINE]),
errors
)
);

if (errors && errors.length > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,24 +79,25 @@ export const editSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({
return response.badRequest({ body: { message, attributes: { details, ...payload } } });
}

const monitorWithRevision = formatSecrets({
const monitorWithRevision = {
...editedMonitor,
revision: (previousMonitor.attributes[ConfigKey.REVISION] || 0) + 1,
});
};
const formattedMonitor = formatSecrets(monitorWithRevision);

const editMonitor: SavedObjectsUpdateResponse<EncryptedSyntheticsMonitor> =
const updatedMonitor: SavedObjectsUpdateResponse<EncryptedSyntheticsMonitor> =
await savedObjectsClient.update<MonitorFields>(
syntheticsMonitorType,
monitorId,
monitor.type === 'browser' ? { ...monitorWithRevision, urls: '' } : monitorWithRevision
monitor.type === 'browser' ? { ...formattedMonitor, urls: '' } : formattedMonitor
);

const errors = await syntheticsService.pushConfigs([
{
...editedMonitor,
id: editMonitor.id,
id: updatedMonitor.id,
fields: {
config_id: editMonitor.id,
config_id: updatedMonitor.id,
},
fields_under_root: true,
},
Expand All @@ -105,7 +106,13 @@ export const editSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({
sendTelemetryEvents(
logger,
telemetry,
formatTelemetryUpdateEvent(editMonitor, previousMonitor, kibanaVersion, errors)
formatTelemetryUpdateEvent(
updatedMonitor,
previousMonitor,
kibanaVersion,
Boolean((monitor as MonitorFields)[ConfigKey.SOURCE_INLINE]),
errors
)
);

// Return service sync errors in OK response
Expand All @@ -115,7 +122,7 @@ export const editSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({
});
}

return editMonitor;
return updatedMonitor;
} catch (updateErr) {
if (SavedObjectsErrorHelpers.isNotFoundError(updateErr)) {
return getMonitorNotFoundResponse(response, monitorId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,40 +83,10 @@ const createTestConfig = (extraConfigs: Record<string, any>, updatedAt?: string)

describe('monitor upgrade telemetry helpers', () => {
it('formats telemetry events', () => {
const actual = formatTelemetryEvent({ monitor: testConfig, kibanaVersion, errors });
expect(actual).toEqual({
stackVersion: kibanaVersion,
configId: sha256.create().update(testConfig.id).hex(),
locations: ['us_central', 'other'],
locationsCount: 2,
monitorNameLength: testConfig.attributes[ConfigKey.NAME].length,
updatedAt: testConfig.updated_at,
type: testConfig.attributes[ConfigKey.MONITOR_TYPE],
scriptType: undefined,
monitorInterval: 180000,
lastUpdatedAt: undefined,
deletedAt: undefined,
errors,
durationSinceLastUpdated: undefined,
revision: 1,
});
});

it.each([
[ConfigKey.SOURCE_INLINE, 'recorder', true],
[ConfigKey.SOURCE_INLINE, 'inline', false],
[ConfigKey.SOURCE_ZIP_URL, 'zip', false],
])('handles formatting scriptType for browser monitors', (config, scriptType, isRecorder) => {
const actual = formatTelemetryEvent({
monitor: createTestConfig({
[config]: 'test',
[ConfigKey.METADATA]: {
script_source: {
is_generated_script: isRecorder,
},
},
}),
monitor: testConfig,
kibanaVersion,
isInlineScript: false,
errors,
});
expect(actual).toEqual({
Expand All @@ -127,7 +97,7 @@ describe('monitor upgrade telemetry helpers', () => {
monitorNameLength: testConfig.attributes[ConfigKey.NAME].length,
updatedAt: testConfig.updated_at,
type: testConfig.attributes[ConfigKey.MONITOR_TYPE],
scriptType,
scriptType: undefined,
monitorInterval: 180000,
lastUpdatedAt: undefined,
deletedAt: undefined,
Expand All @@ -137,11 +107,51 @@ describe('monitor upgrade telemetry helpers', () => {
});
});

it.each([
[ConfigKey.SOURCE_INLINE, 'recorder', true, true],
[ConfigKey.SOURCE_INLINE, 'inline', false, true],
[ConfigKey.SOURCE_ZIP_URL, 'zip', false, false],
])(
'handles formatting scriptType for browser monitors',
(config, scriptType, isRecorder, isInlineScript) => {
const actual = formatTelemetryEvent({
monitor: createTestConfig({
[config]: 'test',
[ConfigKey.METADATA]: {
script_source: {
is_generated_script: isRecorder,
},
},
}),
isInlineScript,
kibanaVersion,
errors,
});
expect(actual).toEqual({
stackVersion: kibanaVersion,
configId: sha256.create().update(testConfig.id).hex(),
locations: ['us_central', 'other'],
locationsCount: 2,
monitorNameLength: testConfig.attributes[ConfigKey.NAME].length,
updatedAt: testConfig.updated_at,
type: testConfig.attributes[ConfigKey.MONITOR_TYPE],
scriptType,
monitorInterval: 180000,
lastUpdatedAt: undefined,
deletedAt: undefined,
errors,
durationSinceLastUpdated: undefined,
revision: 1,
});
}
);

it('handles formatting update events', () => {
const actual = formatTelemetryUpdateEvent(
createTestConfig({}, '2011-10-05T16:48:00.000Z'),
testConfig,
kibanaVersion,
false,
errors
);
expect(actual).toEqual({
Expand All @@ -167,6 +177,7 @@ describe('monitor upgrade telemetry helpers', () => {
testConfig,
kibanaVersion,
'2011-10-05T16:48:00.000Z',
false,
errors
);
expect(actual).toEqual({
Expand Down Expand Up @@ -198,12 +209,13 @@ describe('sendTelemetryEvents', () => {
});

it('should queue telemetry events with generic error', () => {
const event = formatTelemetryEvent({ monitor: testConfig, kibanaVersion, errors });
sendTelemetryEvents(
loggerMock,
eventsTelemetryMock,
formatTelemetryEvent({ monitor: testConfig, kibanaVersion, errors })
);
const event = formatTelemetryEvent({
monitor: testConfig,
kibanaVersion,
isInlineScript: true,
errors,
});
sendTelemetryEvents(loggerMock, eventsTelemetryMock, event);

expect(eventsTelemetryMock.queueTelemetryEvents).toHaveBeenCalledWith(MONITOR_UPDATE_CHANNEL, [
event,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@ export function sendTelemetryEvents(
export function formatTelemetryEvent({
monitor,
kibanaVersion,
isInlineScript,
lastUpdatedAt,
durationSinceLastUpdated,
deletedAt,
errors,
}: {
monitor: SavedObject<EncryptedSyntheticsMonitor>;
kibanaVersion: string;
isInlineScript: boolean;
lastUpdatedAt?: string;
durationSinceLastUpdated?: number;
deletedAt?: string;
Expand All @@ -71,7 +73,7 @@ export function formatTelemetryEvent({
monitorNameLength: attributes[ConfigKey.NAME].length,
monitorInterval: scheduleToMilli(attributes[ConfigKey.SCHEDULE]),
stackVersion: kibanaVersion,
scriptType: getScriptType(attributes as Partial<MonitorFields>),
scriptType: getScriptType(attributes as Partial<MonitorFields>, isInlineScript),
errors:
errors && errors?.length
? errors.map((e) => ({
Expand All @@ -92,6 +94,7 @@ export function formatTelemetryUpdateEvent(
currentMonitor: SavedObjectsUpdateResponse<EncryptedSyntheticsMonitor>,
previousMonitor: SavedObject<EncryptedSyntheticsMonitor>,
kibanaVersion: string,
isInlineScript: boolean,
errors?: ServiceLocationErrors | null
) {
let durationSinceLastUpdated: number = 0;
Expand All @@ -106,6 +109,7 @@ export function formatTelemetryUpdateEvent(
kibanaVersion,
durationSinceLastUpdated,
lastUpdatedAt: previousMonitor.updated_at,
isInlineScript,
errors,
});
}
Expand All @@ -114,6 +118,7 @@ export function formatTelemetryDeleteEvent(
previousMonitor: SavedObject<EncryptedSyntheticsMonitor>,
kibanaVersion: string,
deletedAt: string,
isInlineScript: boolean,
errors?: ServiceLocationErrors | null
) {
let durationSinceLastUpdated: number = 0;
Expand All @@ -128,21 +133,20 @@ export function formatTelemetryDeleteEvent(
durationSinceLastUpdated,
lastUpdatedAt: previousMonitor.updated_at,
deletedAt,
isInlineScript,
errors,
});
}

function getScriptType(
attributes: Partial<MonitorFields>
attributes: Partial<MonitorFields>,
isInlineScript: boolean
): 'inline' | 'recorder' | 'zip' | undefined {
if (attributes[ConfigKey.SOURCE_ZIP_URL]) {
return 'zip';
} else if (
attributes[ConfigKey.SOURCE_INLINE] &&
attributes[ConfigKey.METADATA]?.script_source?.is_generated_script
) {
} else if (isInlineScript && attributes[ConfigKey.METADATA]?.script_source?.is_generated_script) {
return 'recorder';
} else if (attributes[ConfigKey.SOURCE_INLINE]) {
} else if (isInlineScript) {
return 'inline';
}

Expand Down

0 comments on commit 94b894a

Please sign in to comment.