PHP
JP1

JP1/AJSの情報をslackのhubotから参照したい話

More than 1 year has passed since last update.


はじめに

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に一時的に入れといて参照するだけ