[Uptime] [Synthetics Service] Scheduled task to sync saved monitor objects (#119359) (#120068)

Co-authored-by: Abdul Wahab Zahid <awahab07@yahoo.com>
This commit is contained in:
Kibana Machine 2021-12-01 05:17:26 -05:00 committed by GitHub
parent 8efc4b36c2
commit 76b9cd891c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 5 deletions

View file

@ -23,7 +23,8 @@
"ruleRegistry",
"security",
"triggersActionsUi",
"usageCollection"
"usageCollection",
"taskManager"
],
"server": true,
"ui": true,

View file

@ -12,6 +12,10 @@ import {
EncryptedSavedObjectsPluginSetup,
EncryptedSavedObjectsPluginStart,
} from '../../../../../encrypted_saved_objects/server';
import {
TaskManagerSetupContract,
TaskManagerStartContract,
} from '../../../../../task_manager/server';
import { UMKibanaRoute } from '../../../rest_api';
import { PluginSetupContract } from '../../../../../features/server';
import { MlPluginSetup as MlSetup } from '../../../../../ml/server';
@ -54,12 +58,14 @@ export interface UptimeCorePluginsSetup {
cloud?: CloudSetup;
ruleRegistry: RuleRegistryPluginSetupContract;
encryptedSavedObjects: EncryptedSavedObjectsPluginSetup;
taskManager: TaskManagerSetupContract;
}
export interface UptimeCorePluginsStart {
security: SecurityPluginStart;
fleet: FleetStartContract;
encryptedSavedObjects: EncryptedSavedObjectsPluginStart;
taskManager: TaskManagerStartContract;
}
export interface UMBackendFrameworkAdapter {

View file

@ -14,6 +14,11 @@ import {
Logger,
SavedObjectsClient,
} from '../../../../../../src/core/server';
import {
ConcreteTaskInstance,
TaskManagerSetupContract,
TaskManagerStartContract,
} from '../../../../task_manager/server';
import { UptimeServerSetup } from '../adapters';
import { installSyntheticsIndexTemplates } from '../../rest_api/synthetics_service/install_index_templates';
import { SyntheticsServiceApiKey } from '../../../common/runtime_types/synthetics_service_api_key';
@ -23,6 +28,10 @@ import { syntheticsMonitorType } from '../saved_objects/synthetics_monitor';
import { getEsHosts } from './get_es_hosts';
import { UptimeConfig } from '../../../common/config';
const SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_TYPE =
'UPTIME:SyntheticsService:Sync-Saved-Monitor-Objects';
const SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_ID = 'UPTIME:SyntheticsService:sync-task';
export class SyntheticsService {
private logger: Logger;
private readonly server: UptimeServerSetup;
@ -75,12 +84,57 @@ export class SyntheticsService {
);
}
public registerSyncTask() {
// handler for registering kibana task manager task
public registerSyncTask(taskManager: TaskManagerSetupContract) {
const service = this;
taskManager.registerTaskDefinitions({
[SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_TYPE]: {
title: 'Synthetics Service - Sync Saved Monitors',
description: 'This task periodically pushes saved monitors to Synthetics Service.',
timeout: '1m',
maxAttempts: 3,
maxConcurrency: 1,
createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => {
return {
// Perform the work of the task. The return value should fit the TaskResult interface.
async run() {
const { state } = taskInstance;
// TODO: Push API Key and Monitor Configs to service here
return { state };
},
async cancel() {
service.logger?.warn(`Task ${SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_ID} timed out`);
},
};
},
},
});
}
public scheduleSyncTask() {
// handler for scheduling task
public scheduleSyncTask(taskManager: TaskManagerStartContract) {
taskManager
.ensureScheduled({
id: SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_ID,
taskType: SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_TYPE,
schedule: {
interval: '5m',
},
params: {},
state: {},
scope: ['uptime'],
})
.then((_result) => {
this.logger?.info(`Task ${SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_ID} scheduled. `);
})
.catch((e) => {
this.logger?.error(
`Error running task: ${SYNTHETICS_SERVICE_SYNC_MONITORS_TASK_ID}, `,
e?.message() ?? e
);
});
}
async pushConfigs(request: KibanaRequest) {

View file

@ -71,6 +71,7 @@ export class Plugin implements PluginType {
if (this.server?.config?.unsafe?.service.enabled) {
this.syntheticService = new SyntheticsService(this.logger, this.server);
this.syntheticService.registerSyncTask(plugins.taskManager);
}
initServerWithKibana(this.server, plugins, ruleDataClient, this.logger);
@ -100,6 +101,7 @@ export class Plugin implements PluginType {
if (this.server?.config?.unsafe?.service.enabled) {
this.syntheticService?.init(coreStart);
this.syntheticService?.scheduleSyncTask(plugins.taskManager);
}
}