@@ -33,7 +33,7 @@ def get(self):
3333 time .sleep (1 )
3434 # Set timestamp immediately for manual tests so indicator shows
3535 if dispatcher :
36- dispatcher .timestamp = datetime . datetime . utcnow (). timestamp ()
36+ dispatcher .timestamp = time . time () # time.time() always returns UTC timestamp
3737
3838 if dispatcher :
3939 dispatcher .manual = True
@@ -75,8 +75,15 @@ def get(self):
7575 # Add survey running status
7676 if dispatcher :
7777 config ["survey_running" ] = dispatcher .timestamp is not None
78+ # Calculate total data used across all modems
79+ total_data_mb = 0.0
80+ if dispatcher .total_bytes :
81+ total_bytes_sum = sum (dispatcher .total_bytes .values ())
82+ total_data_mb = round (total_bytes_sum / 1000 / 1000 , 2 )
83+ config ["total_data_used_mb" ] = total_data_mb
7884 else :
7985 config ["survey_running" ] = False
86+ config ["total_data_used_mb" ] = 0.0
8087
8188 self .write (json .dumps (config ))
8289 return
@@ -264,7 +271,7 @@ def _start_survey(self, latlong):
264271 cp .log ('---> Starting Survey <---' )
265272 self ._initialize_modems ()
266273 if self .timestamp is None : # If not triggered remotely
267- self .timestamp = datetime . datetime . utcnow (). timestamp ()
274+ self .timestamp = time . time () # time.time() always returns UTC timestamp
268275 self ._start_surveyors ()
269276 self ._run_tests_on_modems ()
270277 cp .log ('---> Survey Complete <---' )
@@ -287,10 +294,8 @@ def _run_tests_on_modems(self):
287294 routing_tables = cp .get ('config/routing/tables' )
288295 with concurrent .futures .ThreadPoolExecutor (len (self .modems )) as executor :
289296 executor .map (run_tests , self .modems )
290- # Convert UTC timestamp to local time for display
291- utc_time = datetime .datetime .utcfromtimestamp (self .timestamp )
292- local_time = utc_time .replace (tzinfo = datetime .timezone .utc ).astimezone ()
293- pretty_timestamp = local_time .strftime ('%H:%M:%S %m/%d/%Y' )
297+ # Format UTC timestamp for display
298+ pretty_timestamp = time .strftime ('%H:%M:%S %m/%d/%Y' , time .gmtime (self .timestamp ))
294299 pretty_lat = '{:.6f}' .format (float (self .lat )) if self .lat is not None else '0.000000'
295300 pretty_lon = '{:.6f}' .format (float (self .long )) if self .long is not None else '0.000000'
296301 # Title will be added with the detailed results in run_tests function
@@ -469,10 +474,10 @@ def debug_log(msg):
469474
470475def log_all (msg , logs ):
471476 """Write consistent messages across all logs"""
472- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
477+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
473478 cp .log (msg )
474479 logs .append (f'{ logstamp } { msg } ' )
475- dispatcher .results = f'{ msg } \n \n ' + dispatcher .results
480+ dispatcher .results = f'{ msg } \n \n ' + dispatcher .results [: 32000 ]
476481
477482
478483def ping (host , iface ):
@@ -707,12 +712,7 @@ def run_tests(modem):
707712 product = modem
708713 cur_plmn = None
709714
710- # Latency test:
711- pong = ping ('8.8.8.8' , iface )
712- if pong .get ('loss' ) == 100.0 :
713- latency = 'FAIL'
714- else :
715- latency = round (pong .get ('avg' ))
715+ latency = None
716716
717717 # Calculate packet loss
718718 try :
@@ -755,17 +755,17 @@ def run_tests(modem):
755755 retries += 1
756756 cp .log (f'Attempt { retries } of 3 to get_best_server() failed: { e } ' )
757757
758- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
758+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
759759 logs .append (f'{ logstamp } Starting Download Test on { product } { carrier } .' )
760760 cp .log (f'Starting Download Test on { product } { carrier } .' )
761761 ookla .download () # Ookla Download Test
762762 if wan_type == 'mdm' : # Capture CA Bands for modems
763763 diagnostics = cp .get (f'status/wan/devices/{ modem } /diagnostics' )
764- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
764+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
765765 logs .append (f'{ logstamp } Starting Upload Test on { product } { carrier } .' )
766766 cp .log (f'Starting Upload Test on { product } { carrier } .' )
767767 ookla .upload (pre_allocate = False ) # Ookla upload test
768- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
768+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
769769 logs .append (f'{ logstamp } Speedtest Complete on { product } { carrier } .' )
770770 cp .log (f'Speedtest Complete on { product } { carrier } .' )
771771
@@ -789,8 +789,9 @@ def run_tests(modem):
789789 log_all (msg , logs )
790790
791791 # SEND TO SERVER:
792- pretty_timestamp = datetime .datetime .utcfromtimestamp (dispatcher .timestamp ).strftime ('%Y-%m-%d %H:%M:%S' )
793- post_success = ''
792+ # Use time.gmtime() to ensure UTC time regardless of system timezone
793+ pretty_timestamp = time .strftime ('%Y-%m-%d %H:%M:%S' , time .gmtime (dispatcher .timestamp ))
794+ post_success = '✓ Done'
794795 if dispatcher .config .get ("send_to_server" ):
795796 try :
796797 post_success = '⇪ 5g-ready:❌ '
@@ -924,15 +925,13 @@ def run_tests(modem):
924925 serdis , rfband , rfband_5g , scell0 , scell1 , scell2 , scell3 ]
925926 debug_log (f'ROW: { row } ' )
926927 text = ',' .join (str (x ) for x in row ) + '\n '
927- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
928+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
928929 logs .append (f'{ logstamp } Results: { text } ' )
929930 cp .log (f'Results: { text } ' )
930931 # cp.put('config/system/desc', text[:1000])
931932 # Get timestamp and coordinates for the title
932933 if dispatcher :
933- utc_time = datetime .datetime .utcfromtimestamp (dispatcher .timestamp )
934- local_time = utc_time .replace (tzinfo = datetime .timezone .utc ).astimezone ()
935- pretty_timestamp = local_time .strftime ('%H:%M:%S %m/%d/%Y' )
934+ pretty_timestamp = time .strftime ('%H:%M:%S %m/%d/%Y' , time .gmtime (dispatcher .timestamp ))
936935 pretty_lat = '{:.6f}' .format (float (dispatcher .lat )) if dispatcher .lat is not None else '0.000000'
937936 pretty_lon = '{:.6f}' .format (float (dispatcher .long )) if dispatcher .long is not None else '0.000000'
938937
@@ -944,7 +943,7 @@ def run_tests(modem):
944943 pretty_results = title + f' ┣┅┅┅ ☏{ carrier } { cur_plmn } ⇄ { packet_loss_percent } % loss ({ tx - rx } of { tx } )\n ' \
945944 f' ┣┅┅┅ ↓{ download } Mbps ↑{ upload } Mbps ⏱{ latency } ms\n ' \
946945 f' ┣┅┅┅ ⛁ { server } \n ' \
947- f' ┗┅┅┅ { post_success } ⛗ { total_mb_used } MB total used. '
946+ f' ┗┅┅┅ { post_success } '
948947 log_all (pretty_results , logs )
949948 except Exception as e :
950949 msg = f'Exception formatting results: { e } '
@@ -965,7 +964,7 @@ def run_tests(modem):
965964 # CREATE CSV IF IT DOESN'T EXIST:
966965 debug_log (' ' .join (os .listdir (results_dir )))
967966 if not os .path .isfile (f'{ results_dir } /{ filename } ' ):
968- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
967+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
969968 logs .append (f'{ logstamp } { filename } not found.' )
970969 cp .log (f'{ filename } not found.' )
971970 with open (f'{ results_dir } /{ filename } ' , 'wt' ) as f :
@@ -980,7 +979,7 @@ def run_tests(modem):
980979 'RF Band 5G' , 'SCELL0' , 'SCELL1' , 'SCELL2' , 'SCELL3' ]
981980 line = ',' .join (header ) + '\n '
982981 f .write (line )
983- logstamp = datetime . datetime . utcnow (). strftime ('%Y-%m-%d %H:%M:%S' )
982+ logstamp = time . strftime ('%Y-%m-%d %H:%M:%S' , time . gmtime () )
984983 logs .append (f'{ logstamp } Created new { filename } file.' )
985984 cp .log (f'Created new { filename } file.' )
986985
0 commit comments