(List (= scope= flags=0 words=[] bindings=[('LOGFILE', {[DQ [LIT_CHARS /srv/debsources/batch.log]]})]) (= scope= flags=0 words=[] bindings=[('HOST', {[DQ [LIT_CHARS tytso.inria.fr]]})]) (= scope= flags=0 words=[] bindings=[('TOTAL', {[LIT_CHARS 40003]})]) (FunctionDef calc [] (Pipeline (Com {[LIT_CHARS echo]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "scale=2"][\ LIT_ESCAPED_CHAR "\\n"][VarSub *]]} ) (Com {[LIT_CHARS bc]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Retrieving data from "][VarSub HOST][LIT_CHARS ...]]} ) (= scope= flags=0 words=[] bindings=[('started_at', {[ComSub (Pipeline (Com {[LIT_CHARS ssh]} {[VarSub HOST]} {[DQ [LIT_CHARS "head -n 1 "][VarSub LOGFILE]]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f]} {[LIT_CHARS 1-2]} {[LIT_CHARS -d] [SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('pkg_count', {[ComSub (Pipeline (Com {[LIT_CHARS ssh]} {[VarSub HOST]} {[DQ [LIT_CHARS "grep ':DEBUG package' "][VarSub LOGFILE]]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]})]) (= scope= flags=0 words=[] bindings=[('last_line', {[ComSub (Com {[LIT_CHARS ssh]} {[VarSub HOST]} {[DQ [LIT_CHARS "tail -n 1 "][VarSub LOGFILE]]})]})]) (= scope= flags=0 words=[] bindings=[('last_time', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub last_line]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f]} {[LIT_CHARS 1-2]} {[LIT_CHARS -d] [SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('last_log', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub last_line]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -f]} {[LIT_CHARS 5-]} {[LIT_CHARS -d] [SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('now', {[ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -u]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS s]})]})]) (= scope= flags=0 words=[] bindings=[('percent_done', {[ComSub (Com {[LIT_CHARS calc]} {[VarSub pkg_count]} {[\ LIT_ESCAPED_CHAR "\\*"]} {[LIT_CHARS 100]} {[LIT_CHARS /]} {[VarSub TOTAL]})]})]) (= scope= flags=0 words=[] bindings=[('starttime_s', {[ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -u]} {[LIT_CHARS -d]} {[DQ [VarSub started_at]]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS s]})]})]) (= scope= flags=0 words=[] bindings=[('elapsed_s', {[ComSub (Com {[LIT_CHARS calc]} {[ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -u]} {[LIT_CHARS -d]} {[DQ [VarSub last_time]]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS s]})]} {[LIT_CHARS -]} {[VarSub starttime_s]})]})]) (= scope= flags=0 words=[] bindings=[('elapsed_h', {[ComSub (Com {[LIT_CHARS calc]} {[VarSub elapsed_s]} {[LIT_CHARS /]} {[LIT_CHARS 60]} {[LIT_CHARS /]} {[LIT_CHARS 60]})]})]) (= scope= flags=0 words=[] bindings=[('speed_avg', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "scale=2"][\ LIT_ESCAPED_CHAR "\\n"][VarSub pkg_count][LIT_CHARS " / "][VarSub elapsed_s]]}) (Com {[LIT_CHARS bc]}) )]})]) (= scope= flags=0 words=[] bindings=[('est_duration_s', {[ComSub (Com {[LIT_CHARS calc]} {[VarSub elapsed_s]} {[\ LIT_ESCAPED_CHAR "\\*"]} {[LIT_CHARS 100]} {[LIT_CHARS /]} {[VarSub percent_done]})]})]) (= scope= flags=0 words=[] bindings=[('est_duration_h', {[ComSub (Com {[LIT_CHARS calc]} {[VarSub est_duration_s]} {[LIT_CHARS /]} {[LIT_CHARS 60]} {[LIT_CHARS /]} {[LIT_CHARS 60]})]})]) (= scope= flags=0 words=[] bindings=[('eta_s', {[ComSub (Com {[LIT_CHARS calc]} {[VarSub starttime_s]} {[LIT_OTHER "+"]} {[VarSub est_duration_s]})]})]) (= scope= flags=0 words=[] bindings=[('eta', {[ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -d]} {[LIT_OTHER "@"] [VarSub eta_s]})]})]) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Current status: "][VarSub last_log]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Status: "][VarSub percent_done][LIT_CHARS "% completed ("][VarSub pkg_count][LIT_CHARS " packages) in "][VarSub elapsed_s][LIT_CHARS " s (~"][VarSub elapsed_h][LIT_CHARS " hours)"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Speed average: "][VarSub speed_avg][LIT_CHARS " pkg/s"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Estimated duration: "][VarSub est_duration_s][LIT_CHARS " s (~"][VarSub est_duration_h][LIT_CHARS " hours)"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "ETA: "][VarSub eta]]} ) )