1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#!/usr/bin/env python 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoimport sys 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaofrom socket import * 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaofrom time import strftime 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoimport datetime 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef main(): 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if len(sys.argv) < 4: 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print "completion_logger_server.py <listen address> <listen port> <log file>" 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao exit(1) 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao host = sys.argv[1] 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao port = int(sys.argv[2]) 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao buf = 1024 * 8 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao addr = (host,port) 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Create socket and bind to address 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao UDPSock = socket(AF_INET,SOCK_DGRAM) 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao UDPSock.bind(addr) 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print "Listing on {0}:{1} and logging to '{2}'".format(host, port, sys.argv[3]) 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Open the logging file. 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f = open(sys.argv[3], "a") 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Receive messages 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao while 1: 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao data,addr = UDPSock.recvfrom(buf) 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if not data: 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao break 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.write("{ "); 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.write("\"time\": \"{0}\"".format(datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'))) 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.write(", \"sender\": \"{0}\" ".format(addr[0])) 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.write(", \"data\": ") 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.write(data) 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.write(" }\n") 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.flush() 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Close socket 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao UDPSock.close() 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoif __name__ == '__main__': 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao main() 45