Skip to content
Snippets Groups Projects
Commit 2740a853 authored by Matthew Pickering's avatar Matthew Pickering
Browse files

Add alert forwarding server

parent 5c421b75
No related branches found
No related tags found
No related merge requests found
"""
A simple server which receieves and forwards POST requests with an authentication
header
Usage::
./server.py [<port>]
"""
from http.server import BaseHTTPRequestHandler, HTTPServer
import logging
from sys import argv
import requests
from urllib.parse import urlencode
from urllib.request import Request, urlopen
class S(BaseHTTPRequestHandler):
def _set_response(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
logging.info("POST request,\nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n",
str(self.path), str(self.headers), post_data.decode('utf-8'))
auth_header = {'Content-Type': 'application/json'
, 'Authorization': f'Bearer {authToken}' }
r = requests.post(endpoint, data=post_data, headers=auth_header)
logging.info("Resp " + str(r.status_code))
self._set_response()
def run(server_class=HTTPServer, handler_class=S):
logging.basicConfig(level=logging.INFO)
server_address = ('', port)
httpd = server_class(server_address, handler_class)
logging.info('Starting httpd...\n')
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
logging.info('Stopping httpd...\n')
def main():
global port, authToken, endpoint
port = int(argv[3])
authToken = argv[2]
endpoint = argv[1]
run()
{ pkgs, config, ... }:
let
service = pkgs.python3Packages.callPackage ./package.nix {};
webhookUrl = "https://gitlab.haskell.org/ghc/ghc/alerts/notify/grafana/c723e1f68627a214.json";
authToken = "7615690ee936a99f5cd66c99e73838c0";
alert-forward-server = {
systemd.services.alert-forward-server = {
description = "Alert forwarding server";
script = ''
${service}/bin/alert-forward-server \
${webhookUrl} \
${authToken} \
8050
'';
wantedBy = [ "multi-user.target" ];
};
};
in {
imports = [ alert-forward-server ];
}
{ buildPythonApplication, isPy3k, requests}:
buildPythonApplication rec {
pname = "alert-forward-server";
version = "0.1";
src = ./.;
propagatedBuildInputs = [ requests ];
disabled = !isPy3k;
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setuptools import setup
setup(
name='alert-forward-server',
version='0.1',
packages=['alert_forward_server'],
install_requires=['requests'],
entry_points = {
'console_scripts': [
'alert-forward-server=alert_forward_server:main'
]
}
)
# for testing with nixos-shell
{ pkgs, ... }: {
boot.kernelPackages = pkgs.linuxPackages_latest;
imports = [./nixos.nix];
}
......@@ -55,6 +55,9 @@ let
'';
in {
imports = [ ./alerts/nixos.nix ];
users.users.ghc_perf = {
description = "User for ghc-perf import script";
isSystemUser = true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment