LINE Notify + Digdag Treasure Data의 OSS 워크 플로우 엔진을 시도했습니다.

LINE Notify + Digdag Treasure Data의 OSS 워크 플로우 엔진을 시도했습니다.



0. 소개



조금 전부터 신경이 쓰여있었습니다.

LINE Notify + Digdag를 시도했습니다.

용도로서는 처리 시간이 긴 워크 플로우나 스케줄에서의 정기 실행의 결과 통지 등으로 사용할 수 있을 것 같습니다.
별도로 LINE이 아니어도 그 밖에 Chat 툴은 있습니다만...

참고 : LINE Engineers 'Blog 명령줄에서 LINE으로 메시지를 보낼 수 있는 LINE Notify

덧붙여 이번에 소개하는 샘플 코드는, Digdag의 init시에 작성되는 샘플의 dig 파일을 베이스로
워크플로의 시작시, 정상 종료시 or 에러 종료시에 이하 포맷으로 LINE Notify 로서 통지합니다.
YYYY-MM-DD HH:mm:ss digdag ワークフロー名 [start|end|error]


1. 환경



CentOS release 6.8 (Final)
Digdag v0.8.17

2.사용법



Digdag가 설치된 환경에서 다음을 수행합니다.
Digdag 설치에 대한 자세한 내용은 Digdag 공식 사이트 Getting started을 참조하십시오.

덧붙여 코드 세트에 대해서는 github상의 여기 repo에 올리고 있으므로,
아래와 같이 git clone 하거나, 후술하는 샘플 코드를 참조해 주세요.
또, 어느 경우에서도 tasks하하의 쉘에 실행 권한 부여 chmod -R +x tasks/ 를 하지 않으면 에러가 되므로 주의해 주세요.
git clone https://github.com/tbuchi888/digdag_line_notify.git
cd digdag_line_notify
chmod -R +x tasks/

여러 번 rerun 할 수 있도록 -a 옵션과 -p 옵션으로 토큰을 지정하여 실행합니다.
digdag run test.dig -a -p accese_token=YOUR_LINES_ACCESE_TOKEN

또, 토큰을 -p 옵션이 아니고, dig 파일에 직접 정의하는 경우는 이하가 됩니다.
digdag run test.dig -a

3. 샘플 코드



파일 구성
./tasks/line_notify.sh
./test.dig

테스트를 위한 워크플로 dig 파일
런타임 (digdag run)에 -p 옵션으로 토큰을 지정하지 않으면,
아래 _export: # accese_token: "YOUR_LINES_ACCESE_TOKEN" 의 코멘트를 제거하고 토큰으로 다시 작성하십시오.

덧붙여 이 샘플은 어디까지나 테스트용으로 의미는 없습니다만, 메세지의 변수 정의(_export:)나, 사이의 태스크의 내용을 조금 바꾸면 응용할 수 있는 것은이라고 생각합니다.

test.dig
timezone: Asia/Tokyo

_export:
# When you do not want to use the -p option at the run, you exclude the following comment out, and please rewrite the your token
#  accese_token: "YOUR_LINES_ACCESE_TOKEN"
  workflow_name: "test"
  start_msg:     "digdag ${workflow_name} start"
  end_msg:       "digdag ${workflow_name} finish"
  error_msg:     "digdag ${workflow_name} error"

+strat:
  sh>: tasks/line_notify.sh ${accese_token} "${moment().format("YYYY-MM-DD HH:mm:ss Z")}:${start_msg}"

+repeat:
  for_each>:
    order: [1st, 2nd, 3rd, 4th, 5th]
    animal: [dog, cat, mouse]
  _do:
    echo>: ${order} ${animal}
  _parallel: true

# This is for _error confirmation.
#+fail:
#  fail>: "fail!"

+end:
  sh>: tasks/line_notify.sh ${accese_token} "${moment().format("YYYY-MM-DD HH:mm:ss Z")}:${end_msg}"

_error:
  sh>: tasks/line_notify.sh ${accese_token} "${moment().format("YYYY-MM-DD HH:mm:ss Z")}:${error_msg}"

LINE Notify를 호출하는 간단한 쉘 스크립트
여기 에서 투고한 것과 같은 것입니다

tasks/line_notify.sh
#!/bin/sh

ACCESS_TOKEN=$1
MSG=$2

curl -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -F "message=$MSG" https://notify-api.line.me/api/notify

4. 참고 실행 결과



LINE측


Digdag 측의 표준 출력
# digdag run test.dig -a -p accese_token=YOUR_LINES_ACCESE_TOKEN
2016-10-14 15:38:15 +0900: Digdag v0.8.17
2016-10-14 15:38:17 +0900 [WARN] (main): Reusing the last session time 2016-10-14T00:00:00+09:00.
2016-10-14 15:38:17 +0900 [INFO] (main): Using session /CURRENT_DIR/.digdag/status/20161014T000000+0900.
2016-10-14 15:38:17 +0900 [INFO] (main): Starting a new session project id=1 workflow name=test session_time=2016-10-14T00:00:00+09:00
2016-10-14 15:38:20 +0900 [INFO] (0016@+test+strat): sh>: tasks/line_notify.sh YOUR_LINES_ACCESE_TOKEN "2016-10-14 15:38:19 +09:00:digdag test start"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
107   215    0    29  186   186     49    315 --:--:-- --:--:-- --:--:--  5636
{"status":200,"message":"ok"}2016-10-14 15:38:21 +0900 [INFO] (0016@+test+repeat): for_each>: {order=[1st, 2nd, 3rd, 4th, 5th], animal=[dog, cat, mouse]}
2016-10-14 15:38:26 +0900 [INFO] (0021@+test+repeat^sub+for-order=2nd&animal=dog): echo>: 2nd dog
2nd dog
2016-10-14 15:38:26 +0900 [INFO] (0020@+test+repeat^sub+for-order=1st&animal=mouse): echo>: 1st mouse
1st mouse
2016-10-14 15:38:26 +0900 [INFO] (0022@+test+repeat^sub+for-order=2nd&animal=cat): echo>: 2nd cat
2nd cat
2016-10-14 15:38:26 +0900 [INFO] (0019@+test+repeat^sub+for-order=1st&animal=cat): echo>: 1st cat
1st cat
2016-10-14 15:38:26 +0900 [INFO] (0016@+test+repeat^sub+for-order=1st&animal=dog): echo>: 1st dog
1st dog
2016-10-14 15:38:27 +0900 [INFO] (0023@+test+repeat^sub+for-order=2nd&animal=mouse): echo>: 2nd mouse
2nd mouse
2016-10-14 15:38:27 +0900 [INFO] (0029@+test+repeat^sub+for-order=4th&animal=mouse): echo>: 4th mouse
4th mouse
2016-10-14 15:38:27 +0900 [INFO] (0024@+test+repeat^sub+for-order=3rd&animal=dog): echo>: 3rd dog
3rd dog
2016-10-14 15:38:27 +0900 [INFO] (0026@+test+repeat^sub+for-order=3rd&animal=mouse): echo>: 3rd mouse
3rd mouse
2016-10-14 15:38:27 +0900 [INFO] (0031@+test+repeat^sub+for-order=5th&animal=cat): echo>: 5th cat
5th cat
2016-10-14 15:38:27 +0900 [INFO] (0032@+test+repeat^sub+for-order=5th&animal=mouse): echo>: 5th mouse
5th mouse
2016-10-14 15:38:27 +0900 [INFO] (0025@+test+repeat^sub+for-order=3rd&animal=cat): echo>: 3rd cat
3rd cat
2016-10-14 15:38:27 +0900 [INFO] (0030@+test+repeat^sub+for-order=5th&animal=dog): echo>: 5th dog
5th dog
2016-10-14 15:38:27 +0900 [INFO] (0027@+test+repeat^sub+for-order=4th&animal=dog): echo>: 4th dog
4th dog
2016-10-14 15:38:27 +0900 [INFO] (0028@+test+repeat^sub+for-order=4th&animal=cat): echo>: 4th cat
4th cat
2016-10-14 15:38:27 +0900 [INFO] (0028@+test+end): sh>: tasks/line_notify.sh YOUR_LINES_ACCESE_TOKEN "2016-10-14 15:38:27 +09:00:digdag test finish"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
108   216    0    29  187   187    180   1163 --:--:-- --:--:-- --:--:--  5194
{"status":200,"message":"ok"}Success. Task state is saved at /CURRENT_DIR/.digdag/status/20161014T000000+0900 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.
#

좋은 웹페이지 즐겨찾기