Внешние отчеты

Если в настройках политики указан URL для внешний отчетов, okerr автоматически сразу же будет отправлят HTTP POST запрос на указанный HTTP/HTTPS адрес.

Это позволяет автоматическую выполнять некоторые действия на стороне пользователя, например:

  • Сообщать о проблеме в любое средство коммуникации (отправить сообщение во внутрикорпоративный чат)
  • Для некоторых проблем автоматически пробовать какое-то решение, например, рестартовать сервис
  • Автоматически заводить тикет в какой-либо системе управления задач
  • Просто вести собственный лог изменения статуса индикаторов
  • Можно даже сделать собственный dashboard, который будет динамически отображать индикаторы

Формат запроса

Используется обычный HTTP POST запрос, с единственным полем 'data'. Значение поля является структура в формате JSON:

{
    "old": "OK", 
    "name": "test:1", 
    "unixtime": 1516268387, 
    "textid": "9eub8giqfp", 
    "new": "ERR", 
    "time": "2018-01-18 09:39:47 UTC (+0000)", 
    "type": "status_change", 
    "details": "testing reporting"
}

Поле type всегда равно status_change, но в будущем могут быть и другие типы. При написании скриптов реагирующих на смену состояния индикаторов, необходимо проверять значение type и игнорировать неизвестные типы. Время события передается два раза, как текстовая строка (поле time) и как количество секунд с 1970 (поле unixtime).

Доставка и надежность

Предпринимается несколько попыток отправки сообщения подряд, но если они все не удались (например, принимающий сервер недоступен в течение минуты), то сообщение будет сброшено.

Если нужно надежное представление о состоянии индикаторов на стороне клиента, то рекомендуется кобинировать метод внешних отчетов для получения оперативных данных, но при этом периодически перепроверять их через API (функцией indicator). В этом случае, большую часть времени локальное представление об индикаторах будет верным, но если все таки произойдет временная ошибка, то периодическая проверка через API сможет ее исправить.

Пример скрипта

Простой скрипт, принимает сообщения и ведет лог:

<?php

$data = json_decode($_POST['data'], true);

if($data['type'] == 'status_change'){

    $name = $data['name'];
    $textid = $data['textid'];
    $details = $data['details'];
    $old = $data['old'];
    $new = $data['new'];
    $time = $data['time'];

    $line = "$time $name@textid $old > $new\n";

    $fh = fopen('/tmp/post.log','a');    
    fwrite($fh, $line);
    fclose($fh);
}

?>

Пример лога:

2018-01-18 09:53:12 UTC (+0000) test:1@textid OK > ERR
2018-01-18 09:53:26 UTC (+0000) test:1@textid ERR > OK