# Task Pool

Used to execute tasks. all tasks should be seperated to instances.

## 任务类型

- 定时任务

    接受即执行 fx，之后每隔 m(s) 就执行 fx

- 时间点执行

    指定的时间点执行

- 条件定时

    接受即执行 fx, 之后每隔 m(s) 执行 fx, 直到 return=(val)

- 多次任务

    接受后在延时 m(s) 后执行 fx n 次
    
## 接口

### 添加任务

POST <root>/pool/add

参数: 见 *任务描述*
    
返回:
```json
{
    "ec": 0,
    "id": 18343   // 任务 id
}
```
> id : new task id

### 查询

POST <root>/pool/query

参数
```json

```
2019-11-15 v1: 当前返回所有任务

### 停止并删除

POST <root>/pool/remove
    
参数
```json
{
    "ids": [18343]
}
```

### 暂停某任务

POST <root>/pool/pause

参数
```json
{
    "ids": [18343]
}
```

### 恢复执行某任务

POST <root>/pool/resume

```json
{
    "ids": [18343]
}
```

## 任务描述
```json
{
  "name": "s1",
  "group": "ticker",
  "time": [0,0,0,0,0,0,0],
  "interval": 0,
  "condition": 0,
  "delay": 0,
  "times": 0,
  "fn": "",
  "params": {}
}
```
> name 用于指定任务名字; 
>
> group 任务组;
>
> time 指定执行时间，空数组表示忽略;
>
> 下标 0-6 表示 year mon day weekday hour min sec
> year mon day weekday 为0 表示忽略。正值表示对应的年，月，日，周
>
> hour min sec 取值 >= 0 表示对应的值
> 
> 示例：
>
> - 每日零点执行: [0,0,0,0,0,0,0]
> - 每周日零点执行: [0,0,0,7,0,0,0]
> - 每月1号零点执行: [0,0,1,0,0,0,0]
> - 每日凌晨5点执行: [0,0,0,0,5,0,0]
> - 忽略 time 参数: []
>
> interval 指定间隔秒数,0表示忽略; 
>
> condition 表示停止执行条件,9999表示忽略;
>
> delay 表示延迟秒数(), 0 表示忽略; 
>
> times 最大执行次数，达到此次数，任务记录为完成
>
> fn 表示任务执行函数,不可缺少;
>
> params 表示 fn 参数;
>
> 当配置了 time，fn 会在指定的时间才执行
>
> 当配置了 interval，fn 会在第一次执行之后间隔执行
>
> 当配置了 condition，必须配置 time/interval/times,单独不起作用。fn 在返回该值后 任务结束
>
> 当配置了 delay, fn 首次执行延时指定秒数，对 time 参数无效

## 任务状态

- IDLE 已添加，未调度
- ACTIVE 正在执行
- DONE 已完成 (触发 condition / times)

## 应用

见 executor_sample.go