2020import threading
2121import logging
2222import copy
23+ import csv
2324
2425import netaddr
2526import boto3
@@ -136,6 +137,12 @@ def str2bool(v):
136137parser .add_argument (
137138 '--master_server_ip' , type = str , default = "" , help = "master server private ip" )
138139
140+ parser .add_argument (
141+ '--metric_data_identifier' ,
142+ type = str ,
143+ default = "**metrics_data: " ,
144+ help = "key string to identify metrics data" )
145+
139146parser .add_argument (
140147 '--no_clean_up' ,
141148 type = str2bool ,
@@ -155,6 +162,11 @@ def str2bool(v):
155162
156163log_files = ["master.log" ]
157164
165+ metrics = {}
166+
167+ metrics_csv_file_name = "metrics.csv"
168+ is_metrics_file_created = False
169+
158170
159171def create_subnet ():
160172 # if no vpc id provided, list vpcs
@@ -329,12 +341,42 @@ def create_pservers():
329341 cleanup (args .task_name )
330342
331343
344+ def save_metrics_data (str_msg ):
345+ #parse msg
346+ logging .info ("found metrics data, saving it to csv file" )
347+ global is_metrics_file_created
348+ metrics_raw = str_msg .split ("," )
349+ with open (args .log_path + metrics_csv_file_name , 'a' ) as csvfile :
350+ csv_fieldnames = []
351+ csv_write_data = {}
352+ for metric in metrics_raw :
353+ metric_data = metric .split ("=" )
354+ metric_key = metric_data [0 ].strip ()
355+ metric_val = float (metric_data [1 ].strip ())
356+ if not metric_key in metrics :
357+ metrics [metric_key ] = []
358+ metric_repo = metrics [metric_key ]
359+ metric_repo .append (metric_val )
360+ csv_fieldnames .append (metric_key )
361+ csv_write_data [metric_key ] = metric_val
362+ writer = csv .DictWriter (csvfile , fieldnames = csv_fieldnames )
363+ if not is_metrics_file_created :
364+ writer .writeheader ()
365+ is_metrics_file_created = True
366+ writer .writerow (csv_write_data )
367+ logging .info ("csv file appended" )
368+
369+
332370def log_to_file (source , filename ):
333371 if not filename in log_files :
334372 log_files .append (filename )
335373 with open (args .log_path + filename , "a" ) as log_file :
336374 for line in iter (source .readline , "" ):
337375 log_file .write (line )
376+ if (line .startswith (args .metric_data_identifier )):
377+ #found key data, trying to add to csv
378+ line = line .replace (args .metric_data_identifier , "" )
379+ save_metrics_data (line )
338380
339381
340382def parse_command (command_raw , defaults = {}):
0 commit comments