#!/usr/bin/env python2 import os import random import sys import bottle current_log = '' previous_log = '' triggered = 0 @bottle.route('/') def root(): log('GET /') return 'This is the root' @bottle.route('/version') def version(): log('GET /version') return { 'version': '1.0' } @bottle.route('/projects') def projects(): return {'projects': ['foo']} @bottle.route('/worker/bar') def worker(): log('GET /worker/bar') if triggered == 1: return { 'project': 'foo', 'shell': 'ikiwiki --build', } elif triggered == 2: return { 'project': 'foo', 'shell': 'rsync', } @bottle.route('/projects/foo/logs/current') def current(): log('GET current log') return current_log @bottle.route('/projects/foo/logs/previous') def previous(): log('GET previous log') return previous_log @bottle.route('/projects/foo/+trigger') def current(): log('GET +trigger') global triggered triggered = True return @bottle.post('/worker/bar/snippet') def snippet(): global current_log, previous_log, triggered log('POST snippet') obj = bottle.request.json log('body: {}'.format(obj)) current_log += obj['stdout'] + obj['stderr'] if obj['exit-code'] is not None: log('exit-code is {}, not None, rotating logs'.format(obj['exit-code'])) previous_log = current_log current_log = '' triggered += 1 # Command line args. pid_file = sys.argv[1] port_file = sys.argv[2] log_file = open('log', 'a') def log(msg): log_file.write('{} {}\n'.format(os.getpid(), msg)) log_file.flush() # Write pid to named file. with open(pid_file, 'w') as f: f.write('{}\n'.format(os.getpid())) # Pick a random port and write it to named file. port = random.randint(1025, 32767) with open(port_file, 'w') as f: f.write('{}\n'.format(port)) log('starting daemon on port {}'.format(port)) bottle.run(port=port, quiet=True)