jQuery を使って JavaScript から Zabbix API を使ってみる。
あけましておめでとうございます。こんな適当なブログですが、今年もよろしくお願いします。
さて、全く新年らしいネタではないのですが、正月休みに jQuery を勉強してみたので、その中で書いた Zabbix API を叩くスクリプトを晒してみます。
hbstudy#15 では Zabbix API の使用例として寺島さんが jQuery を使ったものを紹介してくれたのですが、僕は jQuery を使ったことがなかったので、そのときはさっぱりわからず。なので、それの復習を兼ねてつくってみました。
動作確認用程度のものですが、休みも今日で終わってしまうのでとりあえず。
今回 jQuery は 1.3.2 を使っています。ファイルは http://jquery.com/ からダウンロードして下さい。
jquery-1.3.2.min.js と以下の2つのファイルを Zabbix サーバ 上の Web サーバから見られるディレクトリ(/var/www/html など)に配置してHTMLファイルを読み込んでください。
読み込むとテキストボックスとボタンが出てくるはずなので、テキストボックスに Zabbix API のメソッド(host.get, template.get など)を入力して、ボタンを押すとその結果をその下に表示します。
実行結果は、こんな感じです。↓
本当はいろいろネタを仕込みたかったのですが、ネタはまた今度に^^
zabbix-api-demo.html
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Zabbix API Demo</title> <script src="jquery-1.3.2.min.js" type="text/javascript"> </script> <script src="zabbix-api.js" type="text/javascript"> </script> </head> <body> <form name="method_form" onSubmit="return false;"> <input type="text" name="method_text" value="host.get"> <input type="button" onClick="main(method_text.value)"> </form> <div id="datatable"></div> </body> </html>
zabbix-api.js
// main function main(method){ var auth = getAuth("Admin", "zabbix"); var rpcid = auth.id + 1; var filter = new Object(); // 未使用。 var params = new Object(); params.output = "extend"; params.limit = 100; params.filter = filter; getZabbixData(rpcid, auth.result, method, params); } //API Access Authentication function getAuth(user, password) { var params = {"user":user, "password":password}; var authRequest = new Object(); authRequest.params = params; authRequest.auth = null; authRequest.jsonrpc = '2.0'; authRequest.id = 0; authRequest.method = 'user.authenticate'; var authJsonRequest = JSON.stringify(authRequest); var authResult = new Object(); $.ajax({ url: '/zabbix/api_jsonrpc.php', contentType: 'application/json-rpc', dataType: 'json', type: 'POST', processData: false, async: false, // 認証が終わらないと次の処理ができないので、ここは同期通信に。 data: authJsonRequest, success: function(response){ authResult = response; }, error: function(){ alert("failed"); }, }); return(authResult); // 認証結果をObjectとして返して"auth.id", "auth.result"で取り出す。 } // Access Zabbix API and Get Data function getZabbixData(rpcid, authid, method, params) { // "params"はJSON形式の文字列リテラルかJSONに変換可能なオブジェクト var dataRequest = new Object(); dataRequest.params = params; dataRequest.auth = authid; dataRequest.jsonrpc = '2.0'; dataRequest.id = rpcid; dataRequest.method = method; var dataJsonRequest = JSON.stringify(dataRequest); $.ajax({ type: 'POST', url: '/zabbix/api_jsonrpc.php', contentType: 'application/json-rpc', dataType: 'json', processData: false, data: dataJsonRequest, success: function(response){ showResult(response); }, error: function(response){ alert("failed"); }, }); //return dataResult; } // 取り出したデータをテーブルとして出力 function showResult(response){ var strTable = ""; strTable += "<table>"; for(var index in response.result) { strTable += "<tr><th>"; strTable += "host"; // "host"欄をテーブルのタイトル行に。 strTable += "</th><th>"; strTable += response.result[index].host; strTable += "</th></tr>"; for ( var itemname in response.result[index]){ if (itemname == "host") { continue }; strTable += "<tr><td>"; strTable += itemname; strTable += "</td><td>"; if (typeof(response.result[index][itemname]) == "object"){ strTable += JSON.stringify(response.result[index][itemname]); } else { strTable += response.result[index][itemname]; } strTable += "</td></tr>"; } } strTable += "</table><br>"; document.getElementById("datatable").innerHTML = strTable; }