mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
Co-authored-by: Abdul Wahab Zahid <awahab07@yahoo.com>
This commit is contained in:
parent
8efc4b36c2
commit
76b9cd891c
4 changed files with 68 additions and 5 deletions
|
@ -23,7 +23,8 @@
|
|||
"ruleRegistry",
|
||||
"security",
|
||||
"triggersActionsUi",
|
||||
"usageCollection"
|
||||
"usageCollection",
|
||||
"taskManager"
|
||||
],
|
||||
"server": true,
|
||||
"ui": true,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue