Zabbix. Task. Getting JSON with ONE variable: различия между версиями

Материал из Wiki
Перейти к навигации Перейти к поиску
 
Строка 2: Строка 2:
[[Категория:Python]]
[[Категория:Python]]
[[Категория:Bash]]
[[Категория:Bash]]
= Description =
Getting JSON with ONE variable ('''{#MIKROTIKIP}''') for putting it to autodiscoverable Items and Triggers.
= Configuring =
=== Bash ===
==== Input data ====
We have array '''${arrayHostIps[]}''', which contains: '''"192.168.14.8 192.168.4.8 192.168.59.8"'''
It's necassary to convert it to JSON and to put it to zabbix for Items and Triggers creating.
==== Script ====
hostIps=$(for i in "${arrayHostIps[@]}"; do echo $i; done)
echo "$hostIps" | /usr/bin/awk 'BEGIN { printf "{\"data\": ["; } { if (NR != 1) printf ","; printf "{\"{#MIKROTIKIP}\": \"%s\"}", $1; } END { printf "]}"; }'
==== Output ====
     ...
     {"data": [{"{#MIKROTIKIP}": "192.168.14.8"},{"{#MIKROTIKIP}": "192.168.4.8"},{"{#MIKROTIKIP}": "192.168.59.8"}]}
     ...    
=== Python ===
==== Source JSON ====
[{'TYPE': 'cloud', 'CONFIG_ID': '2', 'REG_ID': '77300', 'SERVER': 'sip.novofon.com', 'LOGIN': '111111', 'PASSWORD': 'PassWord#1', 'AUTH_USER': '111111', 'OUTBOUND_PROXY': <nowiki>''</nowiki>, 'DETECT_LINE_NUMBER': 'N', 'LINE_DETECT_HEADER_ORDER': 'diversion;to', 'REGISTRATION_STATUS_CODE': '200', 'REGISTRATION_ERROR_MESSAGE': <nowiki>''</nowiki>, 'TITLE': 'zadarma-74732000274'}, {'TYPE': 'cloud', 'CONFIG_ID': '4', 'REG_ID': '77481', 'SERVER': 'vpbx400170172.mangosip.ru', 'LOGIN': '222222', 'PASSWORD': 'PassWord#2', 'AUTH_USER': '222222', 'OUTBOUND_PROXY': <nowiki>''</nowiki>, 'DETECT_LINE_NUMBER': 'N', 'LINE_DETECT_HEADER_ORDER': 'diversion;to', 'REGISTRATION_STATUS_CODE': '200', 'REGISTRATION_ERROR_MESSAGE': <nowiki>''</nowiki>, 'TITLE': 'mango-78005003377'},'''<...>''']
==== Script ====
<syntaxhighlight lang="python3">
from bitrix24 import *
import json
# base bxApi request with url
bxApi = Bitrix24('https://alefstudio.bitrix24.ru/rest/140/3dn54rm3n2d08bu4/')
sipResponse = bxApi.callMethod('voximplant.sip.get')
# create raw empty list of ips
trunksNamesListRaw = []
# debug
#print(sipResponse)
# for each trunk full info
for a in range(len(sipResponse)):
    trunkFull = (sipResponse[a])
    # debug
    #print(json.dumps(trunkFull['TITLE']).strip('"'))
    trunkName = (json.dumps(trunkFull['TITLE']).strip('"'))
    # put ip to raw list
    trunksNamesListRaw.append(trunkName)
# null string list of ips
trunksNamesListJsonForZabbix = ""
# add str data to str json
trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + "{\"data\":[")
for x in range(len(trunksNamesListRaw)):
    trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + "{\"{#TRUNKNAME}\"" + ":" + "\"" + trunksNamesListRaw[
        x] + "\"" + "}")
    if not x == len(trunksNamesListRaw) - 1:
        trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + ",")
trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + "]}")
# json of ips to output
print(trunksNamesListJsonForZabbix)
</syntaxhighlight>
==== Output ====
{"data":[{"{#TRUNKNAME}":"zadarma-74732000274"},{"{#TRUNKNAME}":"mango-78005003377"},'''<...>''']}

Текущая версия на 16:56, 5 октября 2023


Description

Getting JSON with ONE variable ({#MIKROTIKIP}) for putting it to autodiscoverable Items and Triggers.

Configuring

Bash

Input data

We have array ${arrayHostIps[]}, which contains: "192.168.14.8 192.168.4.8 192.168.59.8"

It's necassary to convert it to JSON and to put it to zabbix for Items and Triggers creating.

Script

hostIps=$(for i in "${arrayHostIps[@]}"; do echo $i; done)
echo "$hostIps" | /usr/bin/awk 'BEGIN { printf "{\"data\": ["; } { if (NR != 1) printf ","; printf "{\"{#MIKROTIKIP}\": \"%s\"}", $1; } END { printf "]}"; }'

Output

    ...
    {"data": [{"{#MIKROTIKIP}": "192.168.14.8"},{"{#MIKROTIKIP}": "192.168.4.8"},{"{#MIKROTIKIP}": "192.168.59.8"}]}
    ...    

Python

Source JSON

[{'TYPE': 'cloud', 'CONFIG_ID': '2', 'REG_ID': '77300', 'SERVER': 'sip.novofon.com', 'LOGIN': '111111', 'PASSWORD': 'PassWord#1', 'AUTH_USER': '111111', 'OUTBOUND_PROXY': '', 'DETECT_LINE_NUMBER': 'N', 'LINE_DETECT_HEADER_ORDER': 'diversion;to', 'REGISTRATION_STATUS_CODE': '200', 'REGISTRATION_ERROR_MESSAGE': '', 'TITLE': 'zadarma-74732000274'}, {'TYPE': 'cloud', 'CONFIG_ID': '4', 'REG_ID': '77481', 'SERVER': 'vpbx400170172.mangosip.ru', 'LOGIN': '222222', 'PASSWORD': 'PassWord#2', 'AUTH_USER': '222222', 'OUTBOUND_PROXY': '', 'DETECT_LINE_NUMBER': 'N', 'LINE_DETECT_HEADER_ORDER': 'diversion;to', 'REGISTRATION_STATUS_CODE': '200', 'REGISTRATION_ERROR_MESSAGE': '', 'TITLE': 'mango-78005003377'},<...>]

Script

from bitrix24 import *
import json

# base bxApi request with url
bxApi = Bitrix24('https://alefstudio.bitrix24.ru/rest/140/3dn54rm3n2d08bu4/')

sipResponse = bxApi.callMethod('voximplant.sip.get')

# create raw empty list of ips
trunksNamesListRaw = []

# debug
#print(sipResponse)

# for each trunk full info
for a in range(len(sipResponse)):
    trunkFull = (sipResponse[a])

    # debug
    #print(json.dumps(trunkFull['TITLE']).strip('"'))

    trunkName = (json.dumps(trunkFull['TITLE']).strip('"'))

    # put ip to raw list
    trunksNamesListRaw.append(trunkName)

# null string list of ips
trunksNamesListJsonForZabbix = ""

# add str data to str json

trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + "{\"data\":[")

for x in range(len(trunksNamesListRaw)):
    trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + "{\"{#TRUNKNAME}\"" + ":" + "\"" + trunksNamesListRaw[
        x] + "\"" + "}")

    if not x == len(trunksNamesListRaw) - 1:
        trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + ",")

trunksNamesListJsonForZabbix = (trunksNamesListJsonForZabbix + "]}")

# json of ips to output
print(trunksNamesListJsonForZabbix)

Output

{"data":[{"{#TRUNKNAME}":"zadarma-74732000274"},{"{#TRUNKNAME}":"mango-78005003377"},<...>]}