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