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