import * as mongoose from 'mongoose';
import * as redis from 'redis';
import * as factory from '../factory';
import { MongoRepository as TaskRepo } from '../repo/task';
export interface IConnectionSettings {
    /**
     * MongoDBコネクション
     */
    connection: mongoose.Connection;
    /**
     * Redisクライアント
     */
    redisClient?: redis.RedisClient;
}
export interface ISettings extends IConnectionSettings {
    /**
     * タスクリポジトリー
     */
    taskRepo: TaskRepo;
}
export declare type TaskOperation<T> = (repos: {
    task: TaskRepo;
}) => Promise<T>;
export declare type IExecuteOperation<T> = (settings: ISettings) => Promise<T>;
export declare type IOperation<T> = (settings: IConnectionSettings) => Promise<T>;
export declare const ABORT_REPORT_SUBJECT = "Task aborted !!!";
/**
 * execute a task by taskName
 * タスク名でタスクをひとつ実行する
 * @param taskName タスク名
 */
export declare function executeByName(taskName: factory.taskName): IExecuteOperation<void>;
/**
 * execute a task
 * タスクを実行する
 * @param task タスクオブジェクト
 */
export declare function execute(task: factory.task.ITask): IExecuteOperation<void>;
/**
 * retry tasks in running status
 * 実行中ステータスのままになっているタスクをリトライする
 * @param intervalInMinutes 最終トライ日時から何分経過したタスクをリトライするか
 */
export declare function retry(intervalInMinutes: number): TaskOperation<void>;
/**
 * abort a task
 * トライ可能回数が0に達したタスクを実行中止する
 * @param intervalInMinutes 最終トライ日時から何分経過したタスクを中止するか
 */
export declare function abort(intervalInMinutes: number): TaskOperation<void>;
