1.1.32
by Scott Moser
Import upstream version 0.1.0~bzr314 |
1 |
#!/usr/bin/python3
|
2 |
try: |
|
3 |
# python2
|
|
4 |
import SimpleHTTPServer as http_server |
|
5 |
import SocketServer as socketserver |
|
6 |
except ImportError: |
|
7 |
import http.server as http_server |
|
8 |
import socketserver |
|
9 |
||
1.1.30
by Scott Moser
Import upstream version 0.1.0~bzr275 |
10 |
import json |
11 |
import sys |
|
12 |
||
13 |
EXAMPLE_CONFIG = """\ |
|
14 |
# example config
|
|
15 |
reporting:
|
|
16 |
mypost:
|
|
17 |
type: webhook
|
|
18 |
endpoint: %(endpoint)s |
|
19 |
install:
|
|
20 |
log_file: /tmp/foo
|
|
1.1.32
by Scott Moser
Import upstream version 0.1.0~bzr314 |
21 |
post_files: [/tmp/foo]
|
22 |
||
23 |
# example python:
|
|
24 |
from curtin.reporter import events, update_configuration
|
|
25 |
cfg = {'mypost': {'type': 'webhook', 'endpoint': '%(endpoint)s'}} |
|
26 |
update_configuration(cfg)
|
|
27 |
with events.ReportEventStack(name="myname", description="mydesc",
|
|
28 |
reporting_enabled=True):
|
|
29 |
print("do something")
|
|
30 |
"""
|
|
1.1.30
by Scott Moser
Import upstream version 0.1.0~bzr275 |
31 |
|
32 |
if len(sys.argv) > 2: |
|
33 |
PORT = int(sys.argv[2]) |
|
34 |
addr = sys.argv[1] |
|
35 |
elif len(sys.argv) > 1: |
|
36 |
PORT = int(sys.argv[1]) |
|
37 |
addr = "" |
|
38 |
else: |
|
39 |
PORT = 8000 |
|
40 |
addr = "" |
|
41 |
||
42 |
||
43 |
def render_event_string(event_str): |
|
44 |
return json.dumps(json.loads(event_str), indent=1) |
|
45 |
||
46 |
||
1.1.32
by Scott Moser
Import upstream version 0.1.0~bzr314 |
47 |
class ServerHandler(http_server.SimpleHTTPRequestHandler): |
1.1.30
by Scott Moser
Import upstream version 0.1.0~bzr275 |
48 |
|
49 |
def log_request(self, code, size=None): |
|
50 |
lines = [ |
|
51 |
"== %s %s ==" % (self.command, self.path), |
|
52 |
str(self.headers).replace('\r', '')] |
|
53 |
if self._message: |
|
54 |
lines.append(self._message) |
|
55 |
sys.stdout.write('\n'.join(lines) + '\n') |
|
56 |
sys.stdout.flush() |
|
57 |
||
58 |
def do_GET(self): |
|
59 |
self._message = None |
|
60 |
self.send_response(200) |
|
61 |
self.end_headers() |
|
62 |
self.wfile.write("content of %s\n" % self.path) |
|
63 |
||
64 |
def do_POST(self): |
|
65 |
length = int(self.headers['Content-Length']) |
|
66 |
post_data = self.rfile.read(length).decode('utf-8') |
|
67 |
try: |
|
68 |
self._message = render_event_string(post_data) |
|
69 |
except Exception as e: |
|
70 |
self._message = '\n'.join( |
|
71 |
["failed printing event: %s" % e, post_data]) |
|
72 |
||
1.1.32
by Scott Moser
Import upstream version 0.1.0~bzr314 |
73 |
msg = "received post to %s" % self.path |
74 |
self.send_response(200) |
|
75 |
self.send_header("Content-type", "text/plain") |
|
76 |
self.end_headers() |
|
77 |
self.wfile.write(msg.encode('utf-8')) |
|
1.1.30
by Scott Moser
Import upstream version 0.1.0~bzr275 |
78 |
|
79 |
# avoid 'Address already in use' after ctrl-c
|
|
1.1.32
by Scott Moser
Import upstream version 0.1.0~bzr314 |
80 |
socketserver.TCPServer.allow_reuse_address = True |
1.1.30
by Scott Moser
Import upstream version 0.1.0~bzr275 |
81 |
|
82 |
Handler = ServerHandler |
|
1.1.32
by Scott Moser
Import upstream version 0.1.0~bzr314 |
83 |
httpd = socketserver.TCPServer(("", PORT), Handler) |
1.1.30
by Scott Moser
Import upstream version 0.1.0~bzr275 |
84 |
httpd.allow_reuse_address = True |
85 |
||
86 |
info = { |
|
87 |
'interface': addr or "localhost", |
|
88 |
'port': PORT, |
|
89 |
'endpoint': "http://" + (addr or "localhost") + ":%s" % PORT |
|
90 |
}
|
|
91 |
print("Serving at: %(endpoint)s" % info) |
|
92 |
print("Post to this with:\n%s\n" % (EXAMPLE_CONFIG % info)) |
|
93 |
||
94 |
try: |
|
95 |
httpd.serve_forever() |
|
96 |
except KeyboardInterrupt: |
|
97 |
sys.stdout.flush() |
|
98 |
pass
|
|
99 |
httpd.server_close() |
|
100 |
sys.exit(0) |