Kompira

Menu Menu

Enterprise Technical information

Kompiraジョブフローの基礎 ジョブフローから別のジョブフローを呼び出す

メールを送信する」では、指定のURLにリクエストを送り、その結果をメールで通知するジョブフローを作成しました。

 

|url = "http://www.kompira.jp/"|

urlopen(url) =>
{ if $STATUS != 0 | 
  then: 
    mailto(to = "tantou@sample.co.jp", from = "operator@sample.co.jp",
    subject = "障害通知", body = "異常が検出されました")
  elif $RESULT.code != 200 :
    mailto(to = "tantou@sample.co.jp", from = "operator@sample.co.jp", 
    subject = "障害通知", body = "異常が検出されました。エラーコードは %{code}" % $RESULT)
  else:
    mailto(to = "tantou@sample.co.jp", from = "operator@sample.co.jp", 
    subject = "正常通知", body = "特に異常は認められませんでした。")
}

 

ここではmailto()を何度も呼び出していますが、これを別のジョブフローに切り出して、共通部品化してみます。


 

環境情報

本稿は、以下の環境で検証しています。

 

項目 バージョン
OS CentOS Linux release 7.8.2003
Kompira ver.1.5.5.post7

 


 

以下のようなジョブフロー「メール送信」を作成します。

 

| param_to      = "default@kompira.jp" |
| param_from    = "info@kompira.jp" |
| param_subject = "default subject" |
| param_body    = "default message" |

mailto(param_to, param_from, param_subject, param_body)
-> return('SENT')

 

ここではmailto()の引数を、全てパラメータとして設定します。
このジョブフローを「メールでの通知」ジョブフローから呼び出すように、以下の様に書き換えられます。

 

|url = "http://www.kompira.jp/"|
|to  = "tantou@sample.co.jp" |
|from= "operator@sample.co.jp"|

urlopen(url) =>
{ if $STATUS != 0 | 
  then: 
    [./メール送信: to, from, "障害通知", "異常が検出されました"]
  elif $RESULT.code != 200 :
    [./メール送信: to, from, "障害通知", "異常が検出されました。エラーコードは %{code}" % $RESULT]
  else:
    [./メール送信: to, from, "正常通知", "特に異常は認められませんでした。"]
}

 

呼び出すところを見てみますと、次のようになっています。

 

[./メール送信: to, from, "障害通知", "異常が検出されました"]

 

このように[ ]内にジョブフローを記載する事で、他のジョブフローを呼び出す事が出来ます。また[jobflow: パラメータ]として、呼ばれる側のパラメータを動的に指定する事が出来ます。パラメータが複数ある場合には上記のように”,(カンマ)”で区切って記載します。
呼ばれる側のジョブフロー(上記の場合は「メール送信」)でパラメータが定義されている順番で、呼ぶ側(上記の場合は「メールでの通知」)のパラメータを並べます。

では、呼ばれる側の差出人アドレス(“param_from”)はデフォルト値(“info@kompira.jp”)を使いたいような場合には、どのように呼び出したらいいでしょうか?
この場合には、呼ばれる側のパラメータ名を明示的に指定します。

 

[./メール送信: param_to = to,
 param_subject = "障害通知", param_body = "異常が検出されました"]

 

パラメータ名を付加して呼び出す場合には、順番は前後しても構いません。

 

[./メール送信: param_body = "異常が検出されました", 
param_to = to, param_subject = "障害通知" ]

 

さて、ここで応答がなかった場合にWebサーバー関連のプロセス(httpd, mysqld)の起動状況を確認して、停止していた場合には再起動するジョブフロー「プロセス再起動」を作成して追加してみましょう。このジョブフローを呼び出す際には通知メールの送信先アドレス等を引数に取るものとします。

 

|param_to   = "default@kompira.jp"|
|param_from = "info@kompira.jp"|
|param_title = "確認通知"|

[__sudo__ = true] ->
{ for procname in ['httpd', 'mysqld'] |
  print('$procnameプロセスの動作を確認します') ->
  ['ps axuw | grep $procname | grep -v grep'] =>
  { if $STATUS == 0 |
    [./メール送信: param_to, param_from, param_title, "$procnameプロセスは動作中です"] ->
    continue
  } ->
  # プロセスが停止していた場合に再起動
  print('$procnameプロセスは動作していません') ->
  ['service $procname start && sleep 5'] =>
  { if $STATUS != 0 |
    [./メール送信: param_to, param_from, param_title, "$procnameの再起動に失敗しました"] ->
    return(false)
  } ->
  # 再起動に成功した場合
  [./メール送信: param_to, param_from, param_title, "$procnameを再起動しました"]
} ->
return(true)

 

これを元の「メールでの通知」ジョブフローに追加すると、以下のようになります。

 

|url = "http://www.kompira.jp/"|
|to  = "tantou@sample.co.jp" |
|from= "operator@sample.co.jp"|

urlopen(url) =>
{ if $STATUS != 0 | 
  then: 
    [./メール送信: to, from, "障害通知", "異常が検出されました"] ->
    [./プロセス再起動: to, from]
  elif $RESULT.code != 200 :
    [./メール送信: to, from, "障害通知", "異常が検出されました。エラーコードは %{code}" % $RESULT] ->
    [./プロセス再起動: to, from]
  else:
    [./メール送信: to, from, "正常通知", "特に異常は認められませんでした。"]
}

 

上記で見てきた通り、共通する機能や処理に関しては、独立したジョブフローを作成しておくことで、繰り返し処理であったり複数のジョブフローから呼び出す事が可能になります。また、呼び出す側は実行時の条件指定が出来るため、条件に応じた対応を行う事が可能となります。

今回の記事ではmailto()を同じ機能のジョブフローで置き換えるなど、極めて単純な例で説明をいたしましたが、もちろんまとまった大規模な処理を記述する事も可能です。

1つのジョブフローで処理をすべて書くことは可能ですが、可読性・保守性を高めるためには、適切にジョブフローを分割して管理することが重要です。

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携