Skip to content

Commit

Permalink
synthetics - adjust monitor status rule location logic
Browse files Browse the repository at this point in the history
  • Loading branch information
dominiqueclarke committed May 2, 2023
1 parent c6b6e28 commit 94c7acd
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,37 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { StatusRuleExecutor } from './status_rule_executor';
import moment from 'moment';
import { loggerMock } from '@kbn/logging-mocks';
import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks';
import { StatusRuleExecutor } from './status_rule_executor';
import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters';
import { mockEncryptedSO } from '../../synthetics_service/utils/mocks';
import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks';
import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client';
import { SyntheticsService } from '../../synthetics_service/synthetics_service';
import moment from 'moment';
import * as monitorUtils from '../../saved_objects/synthetics_monitor/get_all_monitors';
import * as locationsUtils from '../../synthetics_service/get_all_locations';
import type { PublicLocation } from '../../../common/runtime_types';

describe('StatusRuleExecutor', () => {
const mockEsClient = elasticsearchClientMock.createElasticsearchClient();
const logger = loggerMock.create();
const soClient = savedObjectsClientMock.create();
jest.spyOn(locationsUtils, 'getAllLocations').mockResolvedValue({
// @ts-ignore
publicLocations: [
{
id: 'us_central_qa',
label: 'US Central QA',
},
{
id: 'us_central_dev',
label: 'US Central DEV',
},
] as unknown as PublicLocation,
privateLocations: [],
});

const serverMock: UptimeServerSetup = {
logger,
Expand Down Expand Up @@ -64,6 +79,7 @@ describe('StatusRuleExecutor', () => {
soClient,
});
});

it('marks deleted configs as expected', async () => {
jest.spyOn(monitorUtils, 'getAllMonitors').mockResolvedValue(testMonitors);
const statusRule = new StatusRuleExecutor(
Expand Down Expand Up @@ -127,6 +143,84 @@ describe('StatusRuleExecutor', () => {
},
});
});

it('does not mark deleted config when monitor does not contain location label', async () => {
jest.spyOn(monitorUtils, 'getAllMonitors').mockResolvedValue([
{
...testMonitors[0],
attributes: {
...testMonitors[0].attributes,
locations: [
{
geo: { lon: -95.86, lat: 41.25 },
isServiceManaged: true,
id: 'us_central_qa',
},
],
},
},
]);
const statusRule = new StatusRuleExecutor(
moment().toDate(),
{},
soClient,
mockEsClient,
serverMock,
monitorClient
);

const { downConfigs } = await statusRule.getDownChecks({});

expect(downConfigs).toEqual({});

const staleDownConfigs = await statusRule.markDeletedConfigs({
id1: {
location: 'us-east-1',
configId: 'id1',
status: 'down',
timestamp: '2021-06-01T00:00:00.000Z',
monitorQueryId: 'test',
ping: {} as any,
},
'2548dab3-4752-4b4d-89a2-ae3402b6fb04-us_central_dev': {
location: 'US Central DEV',
configId: '2548dab3-4752-4b4d-89a2-ae3402b6fb04',
status: 'down',
timestamp: '2021-06-01T00:00:00.000Z',
monitorQueryId: 'test',
ping: {} as any,
},
'2548dab3-4752-4b4d-89a2-ae3402b6fb04-us_central_qa': {
location: 'US Central QA',
configId: '2548dab3-4752-4b4d-89a2-ae3402b6fb04',
status: 'down',
timestamp: '2021-06-01T00:00:00.000Z',
monitorQueryId: 'test',
ping: {} as any,
},
});

expect(staleDownConfigs).toEqual({
id1: {
configId: 'id1',
isDeleted: true,
location: 'us-east-1',
monitorQueryId: 'test',
ping: {},
status: 'down',
timestamp: '2021-06-01T00:00:00.000Z',
},
'2548dab3-4752-4b4d-89a2-ae3402b6fb04-us_central_dev': {
configId: '2548dab3-4752-4b4d-89a2-ae3402b6fb04',
isLocationRemoved: true,
location: 'US Central DEV',
monitorQueryId: 'test',
ping: {},
status: 'down',
timestamp: '2021-06-01T00:00:00.000Z',
},
});
});
});

const testMonitors = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export class StatusRuleExecutor {
monitors: Array<SavedObjectsFindResult<EncryptedSyntheticsMonitor>> = [];

public locationIdNameMap: Record<string, string> = {};
public locationNameIdMap: Record<string, string> = {};

constructor(
previousStartedAt: Date | null,
Expand All @@ -75,10 +76,12 @@ export class StatusRuleExecutor {

publicLocations.forEach((loc) => {
this.locationIdNameMap[loc.label] = loc.id;
this.locationNameIdMap[loc.id] = loc.label;
});

privateLocations.forEach((loc) => {
this.locationIdNameMap[loc.label] = loc.id;
this.locationIdNameMap[loc.id] = loc.label;
});
}

Expand Down Expand Up @@ -195,7 +198,13 @@ export class StatusRuleExecutor {
delete downConfigs[locPlusId];
} else {
const { locations } = monitor.attributes;
if (!locations.some((l) => l.label === downConfig.location)) {
if (
!locations.some(
(l) =>
l.label === downConfig.location ||
this.locationNameIdMap[l.id] === downConfig.location
)
) {
staleDownConfigs[locPlusId] = { ...downConfig, isLocationRemoved: true };
delete downConfigs[locPlusId];
}
Expand Down

0 comments on commit 94c7acd

Please sign in to comment.