忍者ブログ

IT-Note

インフラ屋さんのメモ書き

ZabbixのAPIを使うVBAを作り直していく_04

今回は、(4)「グラフ画像の保存」について書いていきます。


まだ書いている最中です。

このサイトを大分参考にさせていただきました。
■外部サイト Zabbix APIを利用してアプリケーションを作ってみよう

http://<zabbix_ip_or_fqdn>/zabbix/chart2.php?graphid=グラフIDその他パラメータ

オプション 内容 備考
graphid 【必須】対象のグラフまたはアイテムのID 画像のURLのプロパティで調べるか、APIで調査する
width 画像の幅 画像のX軸の部分の幅なので、実際には横の余白分も含めてもう少し幅が大きくなります。
period グラフ画像の間隔(単位:秒) stimeからの時間。1日単位なら86400。
stime 画像の開始時間
YYYYMMDDhhmmss形式で指定
普通のAPIはUNIXTIME形式なのにこれはstime形式なのはなぜだろう…

大体こんな感じ↓でやっていたんですが、VBSだけだとByte型が使えないので現在別の方法を考え中です。
もともとの目的自体はVBAで作り直す、なので目的自体は以下のようなコードで満たすことができます。

Function GET_IMAGE(ByVal TARGET_ID As String, ByVal WIDTH As String, ByVal STIME As String, ByVal PERIOD As Long, ByVal OUTPUT_FILENAME As String)

CHART_URL = CHART_URL & TARGET_ID & "&width=" & WIDTH & "&period=" & PERIOD & "&stime=" & STIME

objweb As Object

Set objweb = CreateObject("MSXML2.ServerXMLHTTP.6.0")
Call objweb.Open("GET", CHART_URL, False)
Call objweb.setRequestHeader("Cookie", "zbx_sessionid=" & SESSION_ID)
Call objweb.send

'---画像のバイナリデータがresponseBodyに格納されるので、それをpng形式で外部保存する。
Dim temByte() As Byte
Open OUTPUT_FILENAME For Binary Access Write As #1
tempByte() = objweb.responseBody
Put #1, , tempByte()
Close #1
Set objweb = Nothing