-
Notifications
You must be signed in to change notification settings - Fork 0
/
nag_json.php
82 lines (60 loc) · 3.28 KB
/
nag_json.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
function get_services($s_arr)
# Функция парсинга массива сервисов и выборка из него необходимых нам.
{
$service_name = array();
$i=0;
foreach($s_arr as $value) {
// Создаем массив из строки сервиса
$parts = explode ("|",$value);
// Отладочный параметр для просмотра содержимого массива
// print_r($parts);
// Так как файл стандартный то в нем все переметры идут в строго порядке
// Например Имя хоста - 1 элемент, Описание - 2, Текущее состояние - 15, Вывод плагина - 30
// Весь список можно посмотреть раскоментировав отладочный параметр print_r($parts); выше.
// Собственно получаем имя хоста к которому относится проверка
$h = explode ("=",$parts[1]);
$service_name [$i]["name"] = $h[1];
// Описание проверки
$h = explode ("=",$parts[2]);
$service_name [$i]["desc"] = $h[1];
// Текущее состояние (цифра 0 - Ок, 1 - Warning, 2- Critical)
$h = explode ("=",$parts[15]);
$service_name [$i]["state"] = $h[1];
// Вывод плагина/
// Так как в качесве разделителя используется = а в выводе может присутствовать этот знак то может возникнуть ситуация,
// когда мы отрежем из вывода кусок нужной нам информации, что бы такого избежать далее присутствует процедура склейки
// кусков вывода если они не поместились в один элемент массива
$h = explode ("=",$parts[30]);
// Собираем вместе вывод плагина
if (count($h)>2) {
$k=2;
while($k < count($h)) {
$h[1].= " " .$h[$k];
$k++;
}
}
$service_name [$i]["output"] = $h[1];
// Переходим к следущему сервису в массиве
$i++;
}
return $service_name;
}
$lines = file("status.dat");
$line_of_text = "";
// Перегоняем содержимое файла в строку попутно вырезая лишнее и добавляя свои разделители "|"
//while ($file) {
// $line_of_text .= trim(fgets($file))."|";
//}
foreach ($lines as $line_num => $line) {
$line_of_text .= trim($line)."|";
}
# Парсим файл в массивы
$s = preg_match_all('/servicestatus\s+\{(.*)\}/sU',$line_of_text,$s_match);
// Получаем список сервисов
$services = get_services($s_match[0]);
header("Content-type: application/json;charset=utf-8");
echo "{ \"nagios\": ";
echo json_encode($services);
echo "}";
?>