При переходе по ссылке http://IP_OPENVOX/service?action=get_gsminfo, или http://IP_OPENVOX/X/service?action=get_gsminfo (где X — номер модуля, больше 1), можно увидеть в json-формате статус портов (span-нов). Если Web-сервер на Openvox, для авторизации использует метод Authorization: Basic, то мониторить статус портов (span-нов), можно средствами zabbix. Но на некоторых (более новых) Openvox-шлюзах используется Authorization: Digest метод авторизации, который не поддерживается системой zabbix, но поддерживается CURL на php. Для реализации поставленной задачи, нужно написать внешний php-скрипт.

Пишем php-скрипт sim_control_signal.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
//задаем логин и пароль для входа в Openvox
$login='login:password';
 
//дальше не редактируем
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
if(isset($_GET["ip"])&&isset($_GET["board"])&&isset($_GET["port"])&&isset($_GET["obj"])) {
    //подключаю библиотеки для удобной работы с json форматом
    require_once('json/json.php');
    require_once('json/jsonpath-0.8.1.php');
    $ip=$_GET["ip"];
    $board=$_GET["board"];
    $port=$_GET["port"];
    $obj=$_GET["obj"];
    if($board=='1') $url='http://'.$ip.'/service?action=get_gsminfo';
    else $url='http://'.$ip.'/'.$board.'/service?action=get_gsminfo';
    $headers_auth=array(CURLAUTH_BASIC,CURLAUTH_DIGEST);
    $h=0;
    $parser = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
    while($httpCode!=200){
        $options = array(
            CURLOPT_URL            => $url,
            CURLOPT_USERPWD        => $login,
            CURLOPT_HTTPAUTH       => $headers_auth[$h],
            CURLINFO_HEADER_OUT => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER => false
        );
        $ch = curl_init();
        curl_setopt_array($ch, $options);
        $resp = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $h++;
        if($h>100){
            echo "Error to edit parameters";
            break;
        }
    }
    $json_object = $parser->decode($resp);
    $result = $parser->encode(jsonPath($json_object, "$.".$port."[0].".$obj));
    preg_match('/\[\"(.*)\"\]/', $result, $match);
    echo $match[1];
}
else echo "error parameters";
?>

Примеры использования.
Строка запроса:
1. http://AddressToWebServer/sim_control_signal.php?ip=192.168.0.9&board=2&port=4&obj=operator
2. http://AddressToWebServer/sim_control_signal.php?ip=192.168.0.9&board=1&port=2&obj=signal
3. http://AddressToWebServer/sim_control_signal.php?ip=192.168.0.9&board=3&port=1&obj=status
Вывод:
1. MTS UKR
2. 27
3. Power on, Provisioned, Up, Active, Standard
где:
AddressToWebServer — адрес web-сервера, где хранится скрипт sim_control_signal.php;
192.168.0.9 — IP адрес Openvox;
board — номер модуля;
port — номер порта (span-а), куда вставлена SIM-карта;
obj — название объекта, значение которого нужно вывести.
Далее нужно создать шаблон в zabbix, и наслаждаться 🙂 .

Готовый шаблон для zabbix, качаем тут.

Для работы шаблона, каждую SIM-карту нужно создавать как новый узел сети. В «Интерфейсы агента» → «IP адрес», указываем IP адрес Openvox. Во вкладке «Макросы», создаем 2 переменные: {$BOARD}, где указываем значение номер модуля, и переменная {$PORT}, где указываем номер порта (span-а), куда вставлена SIM-карта.

Библиотеку JSON качаем тут.