watchdog
Version:
An Timer used to Detect and Recover from Malfunctions
92 lines (91 loc) • 2.52 kB
TypeScript
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Brolog } from 'brolog';
export declare const log: Brolog;
export declare const VERSION: any;
export declare type WatchdogEvent = 'feed' | 'reset' | 'sleep';
export declare type WatchdogListener<T, D> = (food: WatchdogFood<T, D>, time: number) => void;
export interface WatchdogFood<T = any, D = any> {
data: D;
timeout?: number;
type?: T;
}
export declare class Watchdog<T = any, D = any> extends EventEmitter {
defaultTimeout: number;
name: string;
private timer;
private lastFeed?;
private lastFood?;
/**
* A Timer used to detect and recover from malfunctions
*
* @class Watchdog
* @param {number} [defaultTimeout=60 * 1000]
* @param {string} [name='Bark']
* @example
* const TIMEOUT = 1 * 1000 // 1 second
* const dog = new watchdog(TIMEOUT)
*
* const food = { data: 'delicious' }
*
* dog.on('reset', () => console.log('reset-ed'))
* dog.on('feed', () => console.log('feed-ed'))
*
* dog.feed(food)
* // Output: feed-ed
*
* setTimeout(function() {
* dog.sleep()
* console.log('dog sleep-ed. Demo over.')
* }, TIMEOUT + 1)
* // Output: reset-ed.
* // Output: dog sleep-ed. Demo over.
*
*/
constructor(defaultTimeout?: number, name?: string);
version(): string;
on(event: 'feed', listener: WatchdogListener<T, D>): this;
on(event: 'reset', listener: WatchdogListener<T, D>): this;
on(event: 'sleep', listener: WatchdogListener<T, D>): this;
on(event: never, listener: never): never;
private startTimer;
private stopTimer;
/**
* Get the left time
* @returns {number}
*/
left(): number;
/**
* Dog Feed content
*
* @typedef WatchdogFood
* @property {D} data - feed content.
* @property {number} timeout - option, set timeout.
* @property {T} type - option.
*/
/**
* feed the dog
* @param {WatchdogFood} food
* @returns {number}
* @example
* const food = {
* data: 'delicious',
* timeout: 1 * 1000,
* }
* const dog = new Watchdog()
* dog.feed(food)
*/
feed(food: WatchdogFood<T, D>): number;
/**
* Clear timer.
* @example
* const dog = new Watchdog()
* dog.sleep()
*/
sleep(): void;
/**
*
*/
unref(): void;
}
export default Watchdog;