2011年7月28日木曜日

Zabbix API用のjQueryプラグインを公開しました

MozabyはPhoneGap + JavaScriptで開発しているのですが、そのソースコードのうちZabbix APIにアクセスする部分のソースをjQueryのプラグインとして公開しました。

ソースはGitHubで公開しています。

プラグインだけだとイメージが湧きにくいですし、サンプルコードとしても利用できるので、一緒に簡単なデモアプリもつけてみました。デモアプリはブラウザからZabbix APIのリクエストを投げて、結果をそのまま表形式で画面上に表示します。

もともとはこのプラグインとは関係なく、Zabbix APIで何ができて、どんなデータが返ってくるのかを調べるために作ったのですが、このプラグイン公開にあたって書き直してみました。

デモアプリの使い方

まずはデモアプリの使い方です。githubからダウンロードしたtar.gzもしくはzipファイルを解凍して、できたディレクトリをそのままZabbixのWebインターフェースと同じサーバ上にアップロードしてください。(ZabbixのWebインターフェースと同じサーバ上でないと、ブラウザのSame Originポリシーに引っかかって動作しません。)

ブラウザからApache経由でアクセスできる必要があるので、RedHat系のサーバではデフォルトの/var/www/html以下にまるごと置いてしまうのが早いと思います。

アップロードしたら、必要に応じてdemo/main.jsに書いてあるZabbix APIのURLを変更します。

// Zabbix server API url
var url = 'http://localhost/zabbix/api_jsonrpc.php';

設定は以上です。あとはブラウザからdemo/index.htmlにアクセスしてください。

トップはログイン画面になっているので、APIアクセス権のあるユーザでログインしてください。Zabbix側の設定で"APIアクセス"にチェックがついているユーザグループに所属しているユーザでしかAPIにはアクセスできないので注意が必要です。

ログインが成功したら、ドロップダウンから実行できるAPIコマンドが選べますので、試しにhostとgetを選択して"Send Request"ボタンを押すと、

このように下に結果が表示されるようになっています。

JSON形式で返されたデータを1回だけループで回してテーブル表示にしているので、ネストしたデータはJSONデータがそのまま表示されますが、とりあえずどのようなデータが返ってきているかは分かると思います。

また、メソッドのドロップダウンの下にある"Parameters"をクリックすると、詳細なパラメータを設定することができます。

現時点ではcreateやupdate系のメソッドはリストには出てくるのですが中身は実装していません。今後少しずつ追加していくと思います。

jQueryプラグインの使い方

jQueryプラグインとして利用するときは、htmlファイルにダウンロードしたファイルのjqzabbixディレクトリ以下にあるjquery-1.4.2.jsとjqzabbix.jsを読み込むように指定します。

<script type="text/javascript" charset="utf-8" src="jquery-1.4.2.js"></script>
<script type="text/javascript" charset="utf-8" src="jqzabbix.js"></script>

まずはオプションを指定してオブジェクトを生成します。オプションには以下のものが指定できます。指定しない場合は以下のデフォルト値が利用されます。

server = new $.jqzabbix({
    url: 'http://localhost/zabbix/api_jsonrpc.php',  // Zabbix APIのURL
    username: 'Admin',  // ログインユーザ名
    password: 'zabbix',  // ログインパスワード
    basicauth: false,  // Basic認証を利用するかどうか
    busername: '',  // Basic認証のユーザ名
    bpassword: '',  // Basic認証のパスワード
    timeout: 5000,  // リクエストのタイムアウト時間(ミリ秒)
    limit: 1000,  // 一度に取得するデータの上限値(個々のリクエストのオプションで上書き可能)
})

host.getなどのリクエストを行う前に認証を行う必要があり、認証の前にAPIのバージョンを取得する必要があります。これらのメソッドはあらかじめ用意してありますので、以下のように実行してください。

server.getApiVersion();
server.userLogin();

これでserverオブジェクトのプロパティにAPIのバージョンと認証idが保存されますので、あとは通常のAPIリクエストを実行できるようになります。

このプラグインは内部でjQueryの$.ajax()を非同期で実行するようになっていますので、メソッド実行の返り値ではリクエストが成功したかどうかは分かりません。上記のメソッドは引数としてZabbix APIのオプションパラメータ、成功時の関数、失敗時のコールバック関数を指定することができます。例えば、

var success = function() { alert('success!'); }
var error = function() { alert('error!'); }

server.userLogin(null, success, error)

とすれば、成功時には"success!"のポップアップが、失敗時には"error!"のポップアップが出るようになります。これらのsuccess, errorコールバック関数は$.ajax()関数で指定するsuccess, errorコールバック関数と同様、引数にdataとtextStatusを受け取ることができます。

ここまでくれば、以下のようにAPIのリクエストを実行できます。

server.sendAjaxRequest(method, params, success, error)

methodはhost.getのようなZabbix APIで決められているメソッドを、paramsは同じく決められたパラメータを、successとerrorは上で説明したのと同じ成功時と失敗時に実行されるコールバック関数です。Zabbix APIのメソッドとパラメータの詳細はZabbix APIのドキュメントを参照してください。

最初にMozabyのソースの一部だと書きましたが、実は今のバージョンのMozabyはこのプラグインを使っていません。もともとMozabyを開発し始めたときはJavaScriptを勉強し始めたときだったので、あまりオブジェクト指向っぽい書き方はできていませんでした。今後こちらのプラグインを使うように移行しようと考えつつ開発を行っています。

現状はとりあえず動くものができたので公開します、という段階なので、まだ大きな修正を行う可能性があります。ある程度仕様が固まったら1.0のタグを打って、Mozabyのサイトに掲載しようと思っています。

意見や要望があればコメント、もしくはTwitterで@kodai74までお願いします。

0 件のコメント: