zabbix api item.get で不具合?
お世話になっております。ふりっぱぁです
zabbix : 2.0.6
API を使って、アイテムに関する情報を取得しようとしています
https://www.zabbix.com/documentation/2.0/manual/appendix/api/item/get
item.get API を用いて、以下のようなパラメータを指定した場合には、意図どおり、
タイプが SNMPTrap (17) の、なおかつ、有効なアイテム(status=0)が列挙できます
"params": {
"output": "extend",
"filter": {
"type": "17",
"status": "0"},
"monitored": "true",
"selectHosts": "extend",
"selectInterfaces": "extend",
"selectTriggers": "extend"}
ここで、追加の条件として、トリガーに関連付けられているものだけに絞りこみたいのですが、
"params": {
"output": "extend",
"filter": {
"type": "17",
"status": "0"},
"monitored": "true",
"with_triggers": "true",
"selectHosts": "extend",
"selectInterfaces": "extend",
"selectTriggers": "extend"}
のようにしても、うまくフィルタされませんでした。
ソースコードを追いかけてみたところ、
CItem.php の line:362 付近
if (!is_null($options['with_triggers'])) {
if ($options['with_triggers'] == 1) {
$sqlParts['where'][] = ' EXISTS (SELECT NULL FROM functions ff WHERE ff.itemid=i.itemid)';
} else {
$sqlParts['where'][] = 'NOT EXISTS (SELECT NULL FROM functions ff WHERE ff.itemid=i.itemid)';
}
}
となっているようで、数値の「1」と比較されているようです
https://www.zabbix.com/documentation/2.0/manual/appendix/api/item/get
API 解説ページによると、[with_triggers] は[boolean] と既定されていますので、[true] / [false] で
制御できるべきではないでしょうか?
実際に、呼び出し側を
"params": {
"output": "extend",
"filter": {
"type": "17",
"status": "0"},
"monitored": "true",
"with_triggers": "1",
"selectHosts": "extend",
"selectInterfaces": "extend",
"selectTriggers": "extend"}
としてみたところ、それっぽくフィルタされているようです
TNK - 投稿数: 4671
Twitter上でもお話ししましたが、公式ドキュメントからすれば型
は、
boolean
と定義されているのですから、本来であれば、[true] / [false]
で指定できるようにするべきだと私も思います。
しかし、すでに実装に合わせて各種ラッパーやアプリケーションを
作成されている方々もいらっしゃるので、本来の形に戻すとしても、
明確にAPIのバージョンを変更するなど、呼び出し側が対応しやす
くなるような形で対応していただくことを希望しています。
fripper - 投稿数: 495
TNK さん
おっしゃるとおり、既にこの実装で普及してしまっている以上、簡単には変えられないと
思います
私自身も、この実装でうまく動作するように周辺スクリプトを作成・実装する方向で
進めていますし、仕方ありませんね。
#報告した時点での私自身の実装がマズかったのかもしれません‥
まだAPIとして操作できない範囲が多数ある現場からすると、2.2以降にて
さらに柔軟なAPIが実装されることを期待する次第です
本件クローズとしたいと思います
お騒がせしました