. */ /** * Alertmanager Transport * @copyright 2019 LibreNMS * @license GPL * @package LibreNMS * @subpackage Alerts */ namespace LibreNMS\Alert\Transport; use LibreNMS\Alert\Transport; use LibreNMS\Config; class Alertmanager extends Transport { public function deliverAlert($obj, $opts) { $alertmanager_opts = []; $alertmanager_opts['url'] = $this->config['alertmanager-url']; foreach (explode(PHP_EOL, $this->config['alertmanager-options']) as $option) { list($k,$v) = explode('=', $option); $alertmanager_opts[$k] = $v; } return $this->contactAlertmanager($obj, $alertmanager_opts); } public static function contactAlertmanager($obj, $api) { if ($obj['state'] == 0) { $alertmanager_status = 'resolved'; } else { $alertmanager_status = 'firing'; } $gen_url = (Config::get('base_url') . 'device/device=' . $obj['device_id']); $host = ($api['url'] . '/api/v1/alerts'); $curl = curl_init(); $alertmanager_msg = strip_tags($obj['msg']); $data = [[ 'status' => $alertmanager_status, 'generatorURL' => $gen_url, 'annotations' => [ 'summary' => $obj['name'], 'title' => $obj['title'], 'description' => $alertmanager_msg, ], 'labels' => [ 'alertname' => $obj['name'], 'severity' => $obj['severity'], 'instance' => $obj['hostname'], 'source' => $api['source'], ], ]]; $alert_message = json_encode($data); curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); set_curl_proxy($curl); curl_setopt($curl, CURLOPT_URL, $host); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message); $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { return 'HTTP Status code ' . $code; } return true; } public static function configTemplate() { return [ 'config' => [ [ 'title' => 'Alertmanager URL', 'name' => 'alertmanager-url', 'descr' => 'Alertmanager Webhook URL', 'type' => 'text', ], [ 'title' => 'Alertmanager Options', 'name' => 'alertmanager-options', 'descr' => 'Alertmanager Options', 'type' => 'textarea', ] ], 'validation' => [ 'alertmanager-url' => 'required|url', ] ]; } }