From 283dafda1cc7762bfd5052e80bee5e99bb9d9780 Mon Sep 17 00:00:00 2001 From: Lee Spottiswood Date: Mon, 22 Mar 2021 15:39:58 +0000 Subject: [PATCH] add UKFast PSS transport (#12624) * add UKFast PSS transport * rename var * use correct class signature * fix styleci * styleci * styleci --- LibreNMS/Alert/Transport/Ukfastpss.php | 115 +++++++++++++++++++++++++ doc/Alerting/Transports.md | 13 +++ 2 files changed, 128 insertions(+) create mode 100644 LibreNMS/Alert/Transport/Ukfastpss.php diff --git a/LibreNMS/Alert/Transport/Ukfastpss.php b/LibreNMS/Alert/Transport/Ukfastpss.php new file mode 100644 index 0000000000..3d57ccd771 --- /dev/null +++ b/LibreNMS/Alert/Transport/Ukfastpss.php @@ -0,0 +1,115 @@ + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * UKFastPSS Transport + * @author Lee Spottiswood (github.com/0x4c6565) + * @copyright 2021, LibreNMS + * @license GPL + */ + +namespace LibreNMS\Alert\Transport; + +use LibreNMS\Alert\Transport; + +class Ukfastpss extends Transport +{ + public function deliverAlert($obj, $opts) + { + return $this->contactUkfastpss($obj, $opts); + } + + public function contactUkfastpss($obj, $opts) + { + $apiKey = $this->config['api-key']; + $author = $this->config['author']; + $secure = $this->config['secure']; + $priority = $this->config['priority']; + + $body = [ + 'author' => [ + 'id' => $author, + ], + 'secure' => ($secure == 'on'), + 'subject' => $obj['title'], + 'details' => $obj['msg'], + 'priority' => $priority, + ]; + + $request_opts = []; + $request_headers = []; + + $request_headers['Authorization'] = $apiKey; + $request_headers['Content-Type'] = 'application/json'; + $request_headers['Accept'] = 'application/json'; + + $client = new \GuzzleHttp\Client(); + $request_opts['proxy'] = get_guzzle_proxy(); + $request_opts['headers'] = $request_headers; + $request_opts['body'] = json_encode($body); + + $res = $client->request('POST', 'https://api.ukfast.io/pss/v1/requests', $request_opts); + + $code = $res->getStatusCode(); + if ($code != 200) { + return 'HTTP Status code ' . $code; + } + + return true; + } + + public static function configTemplate() + { + return [ + 'config' => [ + [ + 'title' => 'API Key', + 'name' => 'api-key', + 'descr' => 'API key to use for authentication', + 'type' => 'text', + ], + [ + 'title' => 'Author', + 'name' => 'author', + 'descr' => 'Author ID for new PSS request', + 'type' => 'text', + ], + [ + 'title' => 'Priority', + 'name' => 'priority', + 'descr' => 'Priority of request. Defaults to "Normal"', + 'type' => 'select', + 'options' => [ + 'Normal' => 'Normal', + 'High' => 'High', + 'Critical' => 'Critical', + ], + 'default' => 'Normal', + ], + [ + 'title' => 'Secure', + 'name' => 'secure', + 'descr' => 'Specifies whether created request should be secure', + 'type' => 'checkbox', + 'default' => true, + ], + ], + 'validation' => [ + 'api-key' => 'required', + 'author' => 'required', + ], + ]; + } +} diff --git a/doc/Alerting/Transports.md b/doc/Alerting/Transports.md index d849a5a0e9..a3d91687ed 100644 --- a/doc/Alerting/Transports.md +++ b/doc/Alerting/Transports.md @@ -773,6 +773,19 @@ located at: [https://www.twilio.com/docs/api?filter-product=sms](https://www.twi | Token | 7xxxx573acxxxbc2xxx308d6xxx652d32 | | Twilio SMS Number | 8888778660 | +## UKFast PSS + +UKFast PSS tickets can be raised from alerts using the UKFastPSS transport. This required an [API key](https://my.ukfast.co.uk/applications) with PSS `write` permissions + +**Example:** + +| Config | Example | +| ------ | ------- | +| API Key | ABCDefgfg12 | +| Author | 5423 | +| Priority | Critical | +| Secure | true | + ## VictorOps VictorOps provide a webHook url to make integration extremely