Skip to content

Commit

Permalink
simplified middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
gmmorris committed Oct 16, 2020
1 parent 77d4450 commit 4e08766
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 44 deletions.
54 changes: 17 additions & 37 deletions x-pack/plugins/task_manager/server/lib/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,56 +6,36 @@

import { RunContext, TaskInstance } from '../task';

/*
* BeforeSaveMiddlewareParams is nearly identical to RunContext, but
* taskInstance is before save (no _id property)
*
* taskInstance property is guaranteed to exist. The params can optionally
* include fields from an "options" object passed as the 2nd parameter to
* taskManager.schedule()
*/
export interface BeforeSaveMiddlewareParams {
type Mapper<T> = (params: T) => Promise<T>;
interface BeforeSaveContext {
taskInstance: TaskInstance;
}

export type BeforeSaveFunction = (
params: BeforeSaveMiddlewareParams
) => Promise<BeforeSaveMiddlewareParams>;

export type BeforeRunFunction = (params: RunContext) => Promise<RunContext>;
export type BeforeMarkRunningFunction = (params: RunContext) => Promise<RunContext>;
export type BeforeSaveContextFunction = Mapper<BeforeSaveContext>;
export type BeforeRunContextFunction = Mapper<RunContext>;

export interface Middleware {
beforeSave: BeforeSaveFunction;
beforeRun: BeforeRunFunction;
beforeMarkRunning: BeforeMarkRunningFunction;
beforeSave: BeforeSaveContextFunction;
beforeRun: BeforeRunContextFunction;
beforeMarkRunning: BeforeRunContextFunction;
}

export function addMiddlewareToChain(prevMiddleware: Middleware, middleware: Middleware) {
const beforeSave = middleware.beforeSave
? (params: BeforeSaveMiddlewareParams) =>
middleware.beforeSave(params).then(prevMiddleware.beforeSave)
: prevMiddleware.beforeSave;

const beforeRun = middleware.beforeRun
? (params: RunContext) => middleware.beforeRun(params).then(prevMiddleware.beforeRun)
: prevMiddleware.beforeRun;

const beforeMarkRunning = middleware.beforeMarkRunning
? (params: RunContext) =>
middleware.beforeMarkRunning(params).then(prevMiddleware.beforeMarkRunning)
: prevMiddleware.beforeMarkRunning;

export function addMiddlewareToChain(prev: Middleware, next: Partial<Middleware>) {
return {
beforeSave,
beforeRun,
beforeMarkRunning,
beforeSave: next.beforeSave ? chain(prev.beforeSave, next.beforeSave) : prev.beforeSave,
beforeRun: next.beforeRun ? chain(prev.beforeRun, next.beforeRun) : prev.beforeRun,
beforeMarkRunning: next.beforeMarkRunning
? chain(prev.beforeMarkRunning, next.beforeMarkRunning)
: prev.beforeMarkRunning,
};
}

const chain = <T>(prev: Mapper<T>, next: Mapper<T>): Mapper<T> => (params) =>
next(params).then(prev);

export function createInitialMiddleware(): Middleware {
return {
beforeSave: async (saveOpts: BeforeSaveMiddlewareParams) => saveOpts,
beforeSave: async (saveOpts: BeforeSaveContext) => saveOpts,
beforeRun: async (runOpts: RunContext) => runOpts,
beforeMarkRunning: async (runOpts: RunContext) => runOpts,
};
Expand Down
12 changes: 5 additions & 7 deletions x-pack/plugins/task_manager/server/task_runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { Logger } from '../../../../src/core/server';
import { asOk, asErr, mapErr, eitherAsync, unwrap, mapOk, Result } from './lib/result_type';
import { TaskRun, TaskMarkRunning, asTaskRunEvent, asTaskMarkRunningEvent } from './task_events';
import { intervalFromDate, intervalFromNow } from './lib/intervals';
import { BeforeRunFunction, BeforeMarkRunningFunction } from './lib/middleware';
import { Middleware } from './lib/middleware';
import {
CancelFunction,
CancellableTask,
Expand Down Expand Up @@ -55,15 +55,13 @@ export interface Updatable {
remove(id: string): Promise<void>;
}

interface Opts {
type Opts = {
logger: Logger;
definitions: TaskTypeDictionary;
instance: ConcreteTaskInstance;
store: Updatable;
beforeRun: BeforeRunFunction;
beforeMarkRunning: BeforeMarkRunningFunction;
onTaskEvent?: (event: TaskRun | TaskMarkRunning) => void;
}
} & Pick<Middleware, 'beforeRun' | 'beforeMarkRunning'>;

/**
* Runs a background task, ensures that errors are properly handled,
Expand All @@ -79,8 +77,8 @@ export class TaskManagerRunner implements TaskRunner {
private definitions: TaskTypeDictionary;
private logger: Logger;
private bufferedTaskStore: Updatable;
private beforeRun: BeforeRunFunction;
private beforeMarkRunning: BeforeMarkRunningFunction;
private beforeRun: Middleware['beforeRun'];
private beforeMarkRunning: Middleware['beforeMarkRunning'];
private onTaskEvent: (event: TaskRun | TaskMarkRunning) => void;

/**
Expand Down

0 comments on commit 4e08766

Please sign in to comment.