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 の写真

Twitter上でもお話ししましたが、公式ドキュメントからすれば型
は、

 boolean

と定義されているのですから、本来であれば、[true] / [false]
で指定できるようにするべきだと私も思います。

しかし、すでに実装に合わせて各種ラッパーやアプリケーションを
作成されている方々もいらっしゃるので、本来の形に戻すとしても、
明確にAPIのバージョンを変更するなど、呼び出し側が対応しやす
くなるような形で対応していただくことを希望しています。

ユーザー fripper の写真

TNK さん

おっしゃるとおり、既にこの実装で普及してしまっている以上、簡単には変えられないと
思います
私自身も、この実装でうまく動作するように周辺スクリプトを作成・実装する方向で
進めていますし、仕方ありませんね。
#報告した時点での私自身の実装がマズかったのかもしれません‥

まだAPIとして操作できない範囲が多数ある現場からすると、2.2以降にて
さらに柔軟なAPIが実装されることを期待する次第です

本件クローズとしたいと思います
お騒がせしました