Digdag schedulerで定期実行するプロジェクトを作ってみた。


## はじめに

[Digdag](http://www.digdag.io)で定期実行するプロジェクトを作ってみました。

(表記ゆれというか用語間違いがあるかもしれませんのでお気づきの際はご指摘ください)

## 疑問

誰か教えてください。

* セッションとアテンプトの違い？
* 1回のセッションで実行されたそれぞれのタスクの実行結果は確認できるのか？
* 現在はスケジューラを停止すると結果が消えてしまうが、結果を永続化するにはどうすれば良いか？(PostgreSQLを使う？H2でも永続化可能)
* スケジューラはスケジューラだけさせて別プロセス(別ホスト)でタスクを実行するには？

## プロジェクトの作成

foo.digを作成します。1分毎に現在時刻を表示します。その後"Hello"と出力します。



```yaml
timezone: "Asia/Tokyo"

schedule:
  minutes_interval>: 1

+current_date:
  sh>: echo `date`

+echo_hello:
  sh>: echo "hello"


```

## スケジューラの起動

foo.digのあるディレクトリで、~~``digdag scheduler --project .``~~``digdag scheduler``を実行します。(0.8.2から--project未指定の場合、カレントディレクトリを参照するようになりました)

## 実行結果

```
digdag scheduler
2016-06-18 11:09:36 +0900: Digdag v0.8.2
2016-06-18 11:09:38 +0900 [INFO] (main): Added new revision 1
2016-06-18 11:09:38 +0900 [INFO] (main): Starting server on 127.0.0.1:65432
2016-06-18 11:09:38 +0900 [INFO] (main): XNIO version 3.3.3.Final
2016-06-18 11:09:38 +0900 [INFO] (main): XNIO NIO Implementation Version 3.3.3.Final
2016-06-18 11:10:00 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=foo session_time=2016-06-18T11:10:00+09:00
2016-06-18 11:10:00 +0900 [INFO] (0027@+foo+current_date): sh>: echo `date`
2016年 6月18日 土曜日 11時10分00秒 JST
2016-06-18 11:10:00 +0900 [INFO] (0027@+foo+echo_hello): sh>: echo "hello"
hello
2016-06-18 11:11:00 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=foo session_time=2016-06-18T11:11:00+09:00
2016-06-18 11:11:00 +0900 [INFO] (0027@+foo+current_date): sh>: echo `date`
2016年 6月18日 土曜日 11時11分00秒 JST
2016-06-18 11:11:00 +0900 [INFO] (0027@+foo+echo_hello): sh>: echo "hello"
hello
2016-06-18 11:12:00 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=foo session_time=2016-06-18T11:12:00+09:00
2016-06-18 11:12:00 +0900 [INFO] (0027@+foo+current_date): sh>: echo `date`
2016年 6月18日 土曜日 11時12分00秒 JST
2016-06-18 11:12:00 +0900 [INFO] (0027@+foo+echo_hello): sh>: echo "hello"
hello
```


## タスクの確認

```
digdag task 1
2016-06-18 11:19:59 +0900: Digdag v0.8.1
   id: 1
   name: +foo
   state: success
   config: {"schedule":{"minutes_interval>":1}}
   parent: null
   upstreams: []
   export params: {}
   store params: {}
   state params: {}

   id: 2
   name: +foo+current_date
   state: success
   config: {"sh>":"echo `date`"}
   parent: 1
   upstreams: []
   export params: {}
   store params: {}
   state params: {}

   id: 3
   name: +foo+echo_hello
   state: success
   config: {"sh>":"echo \"hello\""}
   parent: 1
   upstreams: [2]
   export params: {}
   store params: {}
   state params: {}

3 entries.
```

## 結果の確認(sessions)

``digdag sessions``で確認できるようです。

```
2016-06-18 11:14:34 +0900: Digdag v0.8.1
Sessions:
  session id: 1
  attempt id: 1
  uuid: 6ca0ad52-0315-40be-b8d6-fc866c23be0e
  project: default
  workflow: foo
  session time: 2016-06-18 11:10:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:09:00+09:00","next_session_time":"2016-06-18T11:11:00+09:00"}
  created at: 2016-06-18 11:10:00 +0900
  kill requested: false
  status: success

  session id: 2
  attempt id: 2
  uuid: a836e331-ba44-4d5c-8149-1dbefc34ec03
  project: default
  workflow: foo
  session time: 2016-06-18 11:11:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:10:00+09:00","next_session_time":"2016-06-18T11:12:00+09:00"}
  created at: 2016-06-18 11:11:00 +0900
  kill requested: false
  status: success

```

### 単一セッションを確認

``digdag sessions <sessions-id>``で確認できるようです。

```
digdag sessions 1
2016-06-18 11:15:23 +0900: Digdag v0.8.1
  session id: 1
  attempt id: 1
  uuid: 6ca0ad52-0315-40be-b8d6-fc866c23be0e
  project: default
  workflow: foo
  session time: 2016-06-18 11:10:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:09:00+09:00","next_session_time":"2016-06-18T11:11:00+09:00"}
  created at: 2016-06-18 11:10:00 +0900
  kill requested: false
  status: success
```

### attemptsの確認

sessionとの違いがよくわかりませんがattemptsというコマンドもあるようです。
出力はsessionに似ています。

```
digdag attempts
2016-06-18 11:16:34 +0900: Digdag v0.8.1
Session attempts:
  session id: 1
  attempt id: 1
  uuid: 6ca0ad52-0315-40be-b8d6-fc866c23be0e
  project: default
  workflow: foo
  session time: 2016-06-18 11:10:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:09:00+09:00","next_session_time":"2016-06-18T11:11:00+09:00"}
  created at: 2016-06-18 11:10:00 +0900
  kill requested: false
  status: success

  session id: 2
  attempt id: 2
  uuid: a836e331-ba44-4d5c-8149-1dbefc34ec03
  project: default
  workflow: foo
  session time: 2016-06-18 11:11:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:10:00+09:00","next_session_time":"2016-06-18T11:12:00+09:00"}
  created at: 2016-06-18 11:11:00 +0900
  kill requested: false
  status: success

```

### 単一のattemptsの確認

digdag attempts <attempt-id>でいけるようです。

```
digdag attempts 1
2016-06-18 11:18:05 +0900: Digdag v0.8.1
Session attempts:
  session id: 1
  attempt id: 1
  uuid: 6ca0ad52-0315-40be-b8d6-fc866c23be0e
  project: default
  workflow: foo
  session time: 2016-06-18 11:10:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:09:00+09:00","next_session_time":"2016-06-18T11:11:00+09:00"}
  created at: 2016-06-18 11:10:00 +0900
  kill requested: false
  status: success
```

### 単一のattemptの確認

出力がほとんど同じに見えますが、``digdag attempt <attempt-id>``でattempt?の結果が見られるようです。

```
digdag attempt 1
2016-06-18 11:18:53 +0900: Digdag v0.8.1
  session id: 1
  attempt id: 1
  uuid: 6ca0ad52-0315-40be-b8d6-fc866c23be0e
  project: default
  workflow: foo
  session time: 2016-06-18 11:10:00 +0900
  retry attempt name: 
  params: {"last_session_time":"2016-06-18T11:09:00+09:00","next_session_time":"2016-06-18T11:11:00+09:00"}
  created at: 2016-06-18 11:10:00 +0900
  kill requested: false
  status: success

```


## お礼

こちらを参考にさせていただきました。
ありがとうございます。


<blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hiroysato">@hiroysato</a> デフォルトはメモリ上にDB作るモードっぽいです。その後なぜか--project .で回避できました。</p>&mdash; DATE Ken (@nuna) <a href="https://twitter.com/nuna/status/743739213573611524">2016年6月17日</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>