parser.print_help() sys.exit(2) log_path = options.log_path expected_msg_count = options.expected_msg_count print "zmq client log analyser initiated..." print "Sifting the log directory..." all_files = ["%s/%s" % (log_path, f) for f in listdir(log_path) if isfile(join(log_path, f))] print "Analysing %d zmq client files" % len(all_files) #print all_files # extract message info from each client file client_perf_info = {} log_file = "/tmp/py_analyser" sys_cmd = PySysCommand("rm -rf %s" % log_file) sys_cmd.run(no_assert=True) log = init_logger(log_file) print "Dumping stats to %s" % log_file for zmq_file in all_files: with open(zmq_file) as f: content = f.read().splitlines() index_list = [] for msg_info in content: msg_info = msg_info.split(",") # msg_info format: # ['client_id=7fe65cb21c18', 'latency=0.0101451873779', 'total_runtime=22.126667', 'index=999', 'messagedata=msg999'] if len(msg_info) < 5: print "Malformed message... (this is the most useless message ever printed by this program)" client_id = msg_info[0].split("=")[1] t_time = msg_info[2].split("=")[1] index = msg_info[3].split("=")[1]
# NOTE: currently works with only one SUB server for ip_port in server_ip_port_list: server_ip = ip_port.split(":")[0] port = int(ip_port.split(":")[1]) print "SUB client connecting to PUB server at [%s:%s]" % (server_ip, port) socket.connect ("tcp://%s:%s" % (server_ip, port)) print "SUB client succesfully connected to PUB server at [%s:%s]" % (server_ip, port) socket.setsockopt(zmq.SUBSCRIBE, topicfilter) # Ideally socket will have a method to return client id, skimming through # /usr/lib/python2.7/dist-packages/zmq/sugar/socket.py didnt yield a quick soln.. hacking... client_id = str(socket) client_id = client_id[client_id.rfind("0x") + 2:len(client_id) - 1] print "Client id [%s] " % client_id # init perf logger sys_cmd = PySysCommand("mkdir -p /tmp/zmq_client_logs") sys_cmd.run() perf_log_file = "/tmp/zmq_client_logs/%s.log" % client_id log = init_logger(perf_log_file) runtime = 0 print "Client iniating recv" while True: st_time = time.time() string = socket.recv() end_time = time.time() latency = end_time - st_time runtime += latency index, messagedata = string.split() print index, messagedata log.info("client_id=%s,latency=%s,total_runtime=%f,index=%s,messagedata=%s", client_id, latency, runtime, index, messagedata)