[task manager] Kibana should start without task manager (#48568)

* [task manager] Kibana should not fail to start without task manager

* Check for task manager in maps

* Lower log level

* Update task registration
This commit is contained in:
Wylie Conlon 2019-10-25 12:42:31 -04:00 committed by GitHub
parent c7a1c895b4
commit 58dbb130dc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 54 additions and 10 deletions

View file

@ -18,6 +18,7 @@ export const lens: LegacyPluginInitializer = kibana => {
return new kibana.Plugin({
id: PLUGIN_ID,
configPrefix: `xpack.${PLUGIN_ID}`,
// task_manager could be required, but is only used for telemetry
require: ['kibana', 'elasticsearch', 'xpack_main', 'interpreter', 'data'],
publicDir: resolve(__dirname, 'public'),

View file

@ -89,7 +89,11 @@ async function isTaskManagerReady(server: Server) {
}
async function getLatestTaskState(server: Server) {
const taskManager = server.plugins.task_manager!;
const taskManager = server.plugins.task_manager;
if (!taskManager) {
return null;
}
try {
const result = await taskManager.fetch({

View file

@ -45,7 +45,13 @@ export function initializeLensTelemetry(core: CoreSetup, { server }: { server: S
}
function registerLensTelemetryTask(core: CoreSetup, { server }: { server: Server }) {
const taskManager = server.plugins.task_manager!;
const taskManager = server.plugins.task_manager;
if (!taskManager) {
server.log(['debug', 'telemetry'], `Task manager is not available`);
return;
}
taskManager.registerTaskDefinitions({
[TELEMETRY_TASK_TYPE]: {
title: 'Lens telemetry fetch task',
@ -62,6 +68,11 @@ function scheduleTasks(server: Server) {
status: { plugin: { kbnServer: KbnServer } };
}).status.plugin;
if (!taskManager) {
server.log(['debug', 'telemetry'], `Task manager is not available`);
return;
}
kbnServer.afterPluginsInit(() => {
// The code block below can't await directly within "afterPluginsInit"
// callback due to circular dependency The server isn't "ready" until
@ -71,14 +82,14 @@ function scheduleTasks(server: Server) {
// function block.
(async () => {
try {
await taskManager!.schedule({
await taskManager.schedule({
id: TASK_ID,
taskType: TELEMETRY_TASK_TYPE,
state: { byDate: {}, suggestionsByDate: {}, saved: {}, runs: 0 },
params: {},
});
} catch (e) {
server.log(['warning', 'telemetry'], `Error scheduling task, received ${e.message}`);
server.log(['debug', 'telemetry'], `Error scheduling task, received ${e.message}`);
}
})();
});

View file

@ -23,7 +23,8 @@ import _ from 'lodash';
export function maps(kibana) {
return new kibana.Plugin({
require: ['kibana', 'elasticsearch', 'xpack_main', 'tile_map', 'task_manager'],
// task_manager could be required, but is only used for telemetry
require: ['kibana', 'elasticsearch', 'xpack_main', 'tile_map'],
id: APP_ID,
configPrefix: 'xpack.maps',
publicDir: resolve(__dirname, 'public'),

View file

@ -9,7 +9,7 @@ import { TASK_ID, scheduleTask, registerMapsTelemetryTask } from './telemetry_ta
export function initTelemetryCollection(server) {
registerMapsTelemetryTask(server);
scheduleTask(server, server.plugins.task_manager);
scheduleTask(server);
registerMapsUsageCollector(server);
}
@ -21,6 +21,11 @@ async function isTaskManagerReady(server) {
async function fetch(server) {
let docs;
const taskManager = server.plugins.task_manager;
if (!taskManager) {
return null;
}
try {
({ docs } = await taskManager.fetch({
query: {

View file

@ -10,7 +10,14 @@ const TELEMETRY_TASK_TYPE = 'maps_telemetry';
export const TASK_ID = `Maps-${TELEMETRY_TASK_TYPE}`;
export function scheduleTask(server, taskManager) {
export function scheduleTask(server) {
const taskManager = server.plugins.task_manager;
if (!taskManager) {
server.log(['debug', 'telemetry'], `Task manager is not available`);
return;
}
const { kbnServer } = server.plugins.xpack_main.status.plugin;
kbnServer.afterPluginsInit(() => {
@ -36,6 +43,12 @@ export function scheduleTask(server, taskManager) {
export function registerMapsTelemetryTask(server) {
const taskManager = server.plugins.task_manager;
if (!taskManager) {
server.log(['debug', 'telemetry'], `Task manager is not available`);
return;
}
taskManager.registerTaskDefinitions({
[TELEMETRY_TASK_TYPE]: {
title: 'Maps telemetry fetch task',

View file

@ -11,7 +11,7 @@ import { PLUGIN_ID } from './constants';
export const ossTelemetry = (kibana) => {
return new kibana.Plugin({
id: PLUGIN_ID,
require: ['elasticsearch', 'xpack_main', 'task_manager'],
require: ['elasticsearch', 'xpack_main'],
configPrefix: 'xpack.oss_telemetry',
init(server) {

View file

@ -14,7 +14,11 @@ async function isTaskManagerReady(server: HapiServer) {
}
async function fetch(server: HapiServer) {
const taskManager = server.plugins.task_manager!;
const taskManager = server.plugins.task_manager;
if (!taskManager) {
return null;
}
let docs;
try {

View file

@ -11,6 +11,11 @@ import { visualizationsTaskRunner } from './visualizations/task_runner';
export function registerTasks(server: HapiServer) {
const taskManager = server.plugins.task_manager;
if (!taskManager) {
server.log(['debug', 'telemetry'], `Task manager is not available`);
return;
}
taskManager.registerTaskDefinitions({
[VIS_TELEMETRY_TASK]: {
title: 'X-Pack telemetry calculator for Visualizations',
@ -43,7 +48,7 @@ export function scheduleTasks(server: HapiServer) {
state: { stats: {}, runs: 0 },
});
} catch (e) {
server.log(['warning', 'telemetry'], `Error scheduling task, received ${e.message}`);
server.log(['debug', 'telemetry'], `Error scheduling task, received ${e.message}`);
}
})();
});