はじめに
JP1/AJSを利用してバッチの管理をしてますが、サーバがWindowsで不便なのでslackでジョブの情報を参照したりできたら便利?と思って作ってみました。
WindowsサーバにApache+PHPをインストール
普通にXAMPPでインストールして、Apache起動
ジョブ情報を返すAPIを作る
ジョブの情報を他のLinuxサーバから取得できればなんでもできるので、
先ほどのapache上にAPIを作りました。
ajsprint.php
if(isset($_GET['format']) && $_GET['format']!="") {
$param = $_GET['format'];
} else {
$param = 'JN,cm,sc,pm,Ed,ud,fd';
}
$format_list = explode(",", $param);
$tmp = array();
foreach ($format_list as $key => $val) {
// ajsprintコマンドのフォーマットは半角英字のみ
if(! preg_match("/[A-z][A-z]/", $val)) {
die("parameter error");
}
$tmp[] = "%".$val;
}
$format = implode("|", $tmp);
// ajsprintコマンドを実行する
$ret = `ajsprint -F AJSROOT1 -f "{$format}" -R (ジョブのルートの名前)`;
$list = explode("\n", $ret);
$json_array = array();
foreach ( $list as $key => $val ) {
$tmp = explode("|", $val);
if(count($tmp) !== count($format_list)){
continue;
}
$row = array();
for($i = 0; $i < count($format_list) ; $i++) {
// WindowsサーバなのでSJISからUTF8に文字コードを変換
$row[$format_list[$i]] = mb_convert_encoding($tmp[$i], "UTF-8", "SJIS");
}
$json_array[] = $row;
}
echo json_encode($json_array);
実行してみる
[
{
"JN": "/テスト/テストジョブネット/テストジョブ",
"cm": "",
"sc": "",
"pm": "",
"Ed": "2017/04/14 18:02:20",
"ud": "2017/04/14 18:02:20",
"fd": ""
}
]
ajsprintのフォーマット指示子
詳しくはこの辺に書いてあります。
http://itdoc.hitachi.co.jp/manuals/3020/30203K2543/AJSO0064.HTM#ID00130
よく使いそうなのを抜粋。
フォーマット指示子 | 出力情報 |
---|---|
%JN | ジョブネットワーク要素の完全名 |
%cm | コメント |
%sc | スクリプトファイル名 |
%pm | パラメーター |
%Ed | 作成日時 |
%ud | 最終更新日時 |
%fd | 終了遅延(分) |
%TY | ジョブネットワーク要素の種別 |
%rg | 保存世代数 |
%ms | スケジューリング方式 skip:スケジュールスキップ方式 multi:多重スケジュール方式 |
%mp | 多重起動属性 yes:許可する no:許可しない。 |
%rh | 実行ホスト名 |
%jd | 終了判定 normal:常に正常 abnorm:常に異常 code:終了コード exist:ファイルが作成されている場合,正常 modify:ファイルが更新されている場合,正常 |
%wt | 警告終了しきい値 |
%Th | 異常終了しきい値 |
%FC | 監視条件 c:ファイルの作成を監視する。 |
%FF | 監視対象ファイル名 |
%Ud | 配下ユニットを含めた最終更新日時 |
hubotから参照する
ここまでできればhubot経由でcurlしたり、データをDBに一時的に入れといて参照するだけ