We are developing a script to reflect registered hosts in the map using the zabbix API as described in the title.
I coded it in python referring to the documentation, but the message *“Host added to map with ID:
{result[‘sysmapids’][0]}
”* which is displayed when a correct API response is returned, is displayed, but the host is not added to the map.
I am trying to add an element using the map.update method. Or should I use another method to add the element?
Here is the python code.
I coded it in python referring to the documentation, but the message *“Host added to map with ID:
{result[‘sysmapids’][0]}
”* which is displayed when a correct API response is returned, is displayed, but the host is not added to the map.
I am trying to add an element using the map.update method. Or should I use another method to add the element?
Here is the python code.
Code:
import requests
import json
class ZabbixAPI:
def __init__(self, url, token):
self.url = url
self.token = token
self.registered_hosts = set() # 既に登録されたホストのIDを追跡するセット
def get_host_info(self):
headers = {
'Content-Type': 'application/json-rpc'
}
data = {
'jsonrpc': '2.0',
'method': 'host.get',
'params': {
'output': 'extend'
},
'id': 1,
'auth': self.token
}
response = requests.post(self.url, data=json.dumps(data), headers=headers, verify=False)
if response.status_code == 200:
return response.json()['result']
else:
print(f"Error: {response.status_code}")
def add_host_to_map(self, map_id):
# ホストIDを取得
hosts = self.get_host_info()
if hosts:
for host in hosts:
host_id = host['hostid']
if host_id not in self.registered_hosts:
# マップにホストを追加
self.update_map_with_host(map_id, host_id)
self.registered_hosts.add(host_id)
else:
print(f"Host with ID {host_id} is already registered.")
else:
print("No hosts found.")
def update_map_with_host(self, map_id, host_id):
headers = {
'Content-Type': 'application/json-rpc'
}
data = {
'jsonrpc': '2.0',
'method': 'map.update',
'params': {
'sysmapid': map_id,
'elements': [
{
'elementtype':0, # ホストを表す要素
'elementid': host_id, # ホストのID
'iconid_off': 2, # ホストのアイコン (オフ) のID
}
]
},
'auth': self.token,
'id': 1
}
response = requests.post(self.url, data=json.dumps(data), headers=headers, verify=False)
if response.status_code == 200:
result = response.json().get('result')
if result and result['sysmapids']:
print(f"Host added to map with ID: {result['sysmapids'][0]}")
else:
print("Error updating map with host.")
else:
print(f"Error: {response.status_code}")
def generate_random_coordinate(self, min_value=0, max_value=500):
import random
return random.randint(min_value, max_value)
if __name__ == "__main__":
# Zabbix サーバーの URL
url = 'http://127.0.0.1/zabbix/api_jsonrpc.php'
# Zabbix API での認証トークン
token = ''
# 追加するホストのマップID
map_id = '5'
zabbix_api = ZabbixAPI(url, token)
zabbix_api.add_host_to_map(map_id)