Go言語製 Digdag Client (mog) をリリースしました #digdag

こんばんは!久しぶりの更新となりましたが… またしてもDigdagネタです。

以前 Workflow Engines Night という名の勉強会で登壇させてただく機会があり、 社内におけるDigdagの導入事例を紹介させていただきました!

その時の資料がこちら↓


こちらのセッションの中でスライドの48枚目~出ています mog というGo言語製のツールを事例紹介させていただいたのですが、 意外と好評だったこともありまして、本日Githubにてリリースをいたしました!

mogのリポジトリはこちらです。

特徴

  • Go言語製でJavaがなくても動かすことができるクライアントです
    • ただし、Digdagはサーバ / クライアント構成を前提としています
  • ビルド済みのバイナリを配布しているので、Goがなくても動きます!
  • 2017-06-25 現在できることとして…
    • 既にpushされたプロジェクトのワークフローをスタート・リトライすることができます
    • 特定のプロジェクト / ワークフローのタスクステータスが取得できます
    • タスクのステータスポーリングする機能もあります

使い方

使い方の詳細に関しては、READMEも合わせてご覧ください。

下記の1コマンドでインストールができます。 ダウンロードされるバイナリは /usr/local/bin にダウンロードされます。 お好みでインストール先はご変更ください。

$ curl -L https://github.com/szyn/mog/releases/download/v0.1.6/mog_linux_amd64.tar.gz | tar zx -C /usr/local/bin

Mac / Linux / Windowsに対応しています (※ 64bitのみ)

mogのデモ

紹介がてら、 mog のデモをやってみることとします。

  • demo プロジェクトの sample ワークフロー
  • サーバ=localhost、PORT=65432 で稼働中

    # sample ワークフローを作成
    $ digdag init -t ruby sample
    2017-06-25 23:35:08 +0900: Digdag v0.9.9
    Creating sample/scripts/myclass.rb
    Creating sample/sample.dig
    Creating sample/.gitignore
    Done. Type `cd sample` and then `digdag run sample.dig` to run the workflow. Enjoy!
    
    # 作成したsampleディレクトリにcd
    $ cd sample
    
    # Digdagをサーバモードで起動し、demo ワークフローとしpush
    $ digdag push demo
    2017-06-25 14:41:30 +0000: Digdag v0.9.12
    Creating /src/.digdag/tmp/archive-4893107422066944587.tar.gz...
    Archiving sample.dig
    Archiving scripts/myclass.rb
    Workflows:
    sample.dig
    Uploaded:
    id: 1
    name: demo
    revision: 41db9056-80bd-4716-8245-611ec02fd95b
    archive type: db
    project created at: 2017-06-25T14:41:33Z
    revision updated at: 2017-06-25T14:41:33Z
    
    Use `digdag workflows` to show all workflows.

ここまでで、WEB UI上からはこうなっているはずです。 digdag-webui

ワークフローの定義はこんな感じ。 digdag-webui

ワークフローをスタートしてみる

それでは、mogを利用してワークフローをスタートしてみます。

$ mog start --project demo --workflow sample
{
    "id": "1",
    "index": 1,
    "project": {
        "id": "1",
        "name": "demo"
    },
    "workflow": {
        "name": "sample",
        "id": "1"
    },
    "sessionId": "1",
    "sessionUuid": "bcb6fb0c-1268-44e8-8af5-2ff5aefed861",
    "done": false,
    "success": false,
    "cancelRequested": false,
    "createdAt": "2017-06-25T14:42:34Z",
    "finishedAt": "",
    "workflowId": "1",
    "sessionTime": "2017-06-25T00:00:00+00:00",
    "params": {}
}

すると、mog経由でワークフローが実行されます。 digdag-webui

ステータスを取得してみる
# 試しに先程実行したタスクのステータスを確認
$ mog status --project demo --workflow sample +sample+teardown
{
   "id": "4",
   "fullName": "+sample+teardown",
   "parentId": "1",
   "config": {
       "label": "finish",
       "rb>": "MyClass.print_time",
       "time": "${session_time}"
   },
   "upstreams": [
       "3"
   ],
   "state": "success", # stateがsuccessになっている
   "exportParams": {},
   "storeParams": {},
   "stateParams": {},
   "updatedAt": "2017-06-25T14:42:42Z",
   "retryAt": null,
   "startedAt": "2017-06-25T14:42:41Z",
   "isGroup": false
}

現状はsuccessになると終了ステータスが0になります。 jqなどで、ゴニョゴニョすることも可能です。

基本的にはこんな感じになります。

また会社のチームの方に polling status を実装していただきましたので、 特定のタスクをpollingすることもできます(๑•̀ㅂ•́)و✧ (この場を借りまして…本当に感謝です!)

一言

まだまだ機能が少なかったり、物足りない部分があるのが事実です。 …が!そこは Gopherの皆さまやDigdagのコミュニティー皆さまのお力添えを受けつつ、 どんどん良いものとしていきたいなと考えています(๑•̀ㅂ•́)و✧

今後の展望とか

直近やりたいこととしてはCLI周りのテスト改善・機能追加を継続してやっていきたいな〜と考えています。

ぜひ検証目的でも良いので、使っていただいてフィードバックがもらえたら嬉しいです。 何か気がついたことがあれば、Issue・PRをよろしくお願いします!