22
33import logging
44import functools
5- import math
5+ import math , sys
66from os import environ
77from time import sleep
88from typing import Any , Generator , Tuple
@@ -51,6 +51,10 @@ def bootstrap(
5151 return (meta , ingest_config , client_info )
5252
5353
54+ def move_up (lines : int = 1 ):
55+ sys .stdout .write (f"\033 [{ lines } A" )
56+
57+
5458def postprocess_edge_data (im , edge_dict ):
5559 data_version = im .cg_meta .data_source .DATA_VERSION
5660 if data_version == 2 :
@@ -125,13 +129,16 @@ def get_chunks_not_done(
125129 return [coord for coord , c in zip (coords , completed ) if not c ]
126130
127131
128- def print_completion_rate (imanager : IngestionManager , layer : int , span : int = 10 ):
129- counts = []
130- for _ in range (span + 1 ):
131- counts .append (imanager .redis .scard (f"{ layer } c" ))
132- sleep (1 )
133- rate = np .diff (counts ).sum () / span
134- print (f"{ rate } chunks per second." )
132+ def print_completion_rate (imanager : IngestionManager , layer : int , span : int = 30 ):
133+ rate = 0.0
134+ while True :
135+ counts = []
136+ print (f"{ rate } chunks per second." )
137+ for _ in range (span + 1 ):
138+ counts .append (imanager .redis .scard (f"{ layer } c" ))
139+ sleep (1 )
140+ rate = np .diff (counts ).sum () / span
141+ move_up ()
135142
136143
137144def print_status (imanager : IngestionManager , redis , upgrade : bool = False ):
@@ -143,32 +150,38 @@ def print_status(imanager: IngestionManager, redis, upgrade: bool = False):
143150 layers = range (2 , imanager .cg_meta .layer_count + 1 )
144151 if upgrade :
145152 layers = range (2 , imanager .cg_meta .layer_count )
146- layer_counts = imanager .cg_meta .layer_chunk_counts
147153
148- pipeline = redis .pipeline ()
149- pipeline .get (r_keys .JOB_TYPE )
150- worker_busy = []
151- for layer in layers :
152- pipeline .scard (f"{ layer } c" )
153- queue = Queue (f"l{ layer } " , connection = redis )
154- pipeline .llen (queue .key )
155- pipeline .zcard (queue .failed_job_registry .key )
156- workers = Worker .all (queue = queue )
157- worker_busy .append (sum ([w .get_state () == WorkerStatus .BUSY for w in workers ]))
158-
159- results = pipeline .execute ()
160- job_type = "not_available"
161- if results [0 ] is not None :
162- job_type = results [0 ].decode ()
163- completed = []
164- queued = []
165- failed = []
166- for i in range (1 , len (results ), 3 ):
167- result = results [i : i + 3 ]
168- completed .append (result [0 ])
169- queued .append (result [1 ])
170- failed .append (result [2 ])
154+ def _refresh_status ():
155+ pipeline = redis .pipeline ()
156+ pipeline .get (r_keys .JOB_TYPE )
157+ worker_busy = []
158+ for layer in layers :
159+ pipeline .scard (f"{ layer } c" )
160+ queue = Queue (f"l{ layer } " , connection = redis )
161+ pipeline .llen (queue .key )
162+ pipeline .zcard (queue .failed_job_registry .key )
163+ workers = Worker .all (queue = queue )
164+ worker_busy .append (
165+ sum ([w .get_state () == WorkerStatus .BUSY for w in workers ])
166+ )
167+
168+ results = pipeline .execute ()
169+ job_type = "not_available"
170+ if results [0 ] is not None :
171+ job_type = results [0 ].decode ()
172+ completed = []
173+ queued = []
174+ failed = []
175+ for i in range (1 , len (results ), 3 ):
176+ result = results [i : i + 3 ]
177+ completed .append (result [0 ])
178+ queued .append (result [1 ])
179+ failed .append (result [2 ])
180+ return job_type , completed , queued , failed , worker_busy
181+
182+ job_type , completed , queued , failed , worker_busy = _refresh_status ()
171183
184+ layer_counts = imanager .cg_meta .layer_chunk_counts
172185 header = (
173186 f"\n job_type: \t { job_type } "
174187 f"\n version: \t { imanager .cg .version } "
@@ -177,12 +190,19 @@ def print_status(imanager: IngestionManager, redis, upgrade: bool = False):
177190 "\n \n layer status:"
178191 )
179192 print (header )
180- for layer , done , count in zip (layers , completed , layer_counts ):
181- print (f"{ layer } \t | { done :9} / { count } \t | { math .floor ((done / count )* 100 ):6} %" )
193+ while True :
194+ for layer , done , count in zip (layers , completed , layer_counts ):
195+ print (
196+ f"{ layer } \t | { done :9} / { count } \t | { math .floor ((done / count )* 100 ):6} %"
197+ )
182198
183- print ("\n \n queue status:" )
184- for layer , q , f , wb in zip (layers , queued , failed , worker_busy ):
185- print (f"l{ layer } \t | queued: { q :<10} failed: { f :<10} busy: { wb } " )
199+ print ("\n \n queue status:" )
200+ for layer , q , f , wb in zip (layers , queued , failed , worker_busy ):
201+ print (f"l{ layer } \t | queued: { q :<10} failed: { f :<10} busy: { wb } " )
202+
203+ sleep (1 )
204+ _ , completed , queued , failed , worker_busy = _refresh_status ()
205+ move_up (lines = 2 * len (layers ) + 3 )
186206
187207
188208def queue_layer_helper (
0 commit comments