X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXUtil.pm;h=500a615023ebdcf3fcf22fd001d715814c9372f2;hb=0e5e5e18243b8d64bbaf6b9878fccf14a75df5f6;hp=baa041d42bce04d1c232d2e4edf7cfb79ec2e8d0;hpb=f18ba64dd93bbf7c47e6b5143bfc99af817888e8;p=spider.git diff --git a/perl/DXUtil.pm b/perl/DXUtil.pm index baa041d4..500a6150 100644 --- a/perl/DXUtil.pm +++ b/perl/DXUtil.pm @@ -27,7 +27,7 @@ require Exporter; print_all_fields cltounix unpad is_callsign is_latlong is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem is_prefix dd is_ipaddr $pi $d2r $r2d localdata localdata_mv - diffms _diffms ahour piplist mindate adate + diffms _diffms difft parraydifft ); @@ -54,24 +54,6 @@ sub atime return $buf; } -# just the hour -sub ahour -{ - my $t = shift; - my ($sec,$min,$hour,$mday,$mon,$year) = gmtime((defined $t) ? $t : time); - my $buf = sprintf "%02d:%02d:%02d", $hour, $min, $sec; - return $buf; -} - -sub adate -{ - my $t = shift; - my ($sec,$min,$hour,$mday,$mon,$year) = gmtime((defined $t) ? $t : time); - $year += 1900; - my $buf = sprintf "%02d%s%04d", $mday, $month[$mon], $year; - return $buf; -} - # get a zulu time in cluster format (2300Z) sub ztime { @@ -159,6 +141,7 @@ sub dd { my $value = shift; my $dd = new Data::Dumper([$value]); + $dd->Sortkeys(1); $dd->Indent(0); $dd->Terse(1); $dd->Quotekeys($] < 5.005 ? 1 : 0); @@ -200,7 +183,7 @@ sub ptimelist my $ref = shift; my $out; for (sort keys %$ref) { - $out .= "$_=$ref->{$_}, "; + $out .= "$_=" . atime($ref->{$_}) . ", "; } chop $out; chop $out; @@ -211,7 +194,7 @@ sub ptimelist sub parray { my $ref = shift; - return ref $ref ? join(',', @{$ref}) : $ref; + return ref $ref ? join(', ', @{$ref}) : $ref; } # take the arg as an array reference and print as a list of pairs @@ -238,58 +221,13 @@ sub phash my $out; while (my ($k,$v) = each %$ref) { - if (ref $v eq 'ARRAY') { - $out = "${k}=>[" . parray($v) . "],"; - } elsif (ref $v eq 'HASH') { - $out = "${k}=>{" . phash($v) . "},"; - } else { - $out .= "${k}=>$v,"; - } + $out .= "${k}=>$v, "; } + chop $out; # remove last space chop $out; # remove last comma return $out; } -sub mindate -{ - my $t = shift; - my $out; - - if ($main::system-$t < 86400 ) { - $out = ahour($t); - } elsif ($main::system-$t < 365*86400) { - $out = adate($t); - chop $out for (1..4); - $out .= ' ' . atime($t); - chop $out for (1..3); - } else { - $out = atime($t); - $out =~ s/\@/ /; - } - return $out; -} - -# like phash but prints dates and times -sub piplist -{ - my $ref = shift; - my $out; - - return $ref unless ref $ref; - - while (my ($k,$v) = each %$ref) { - if (ref $v eq 'HASH') { - $out .= piplist($v); - } elsif (ref $v eq 'ARRAY') { - $out .= join(',', map { sprintf "$_->[0]@%s", mindate($_->[1]) } ref $v->[0] eq 'ARRAY' ? @$v : $v); - } else { - $out .= $v; - } - } - $out =~ s/,+$//; # remove last comma - return $out; -} - sub _sort_fields { my $ref = shift; @@ -573,6 +511,7 @@ sub _diffms sub diffms { + my $pkg = shift; my $call = shift; my $line = shift; my $ta = shift; @@ -581,7 +520,46 @@ sub diffms my $msecs = _diffms($ta, $tb); $line =~ s|\s+$||; - my $s = "subprocess stats cmd: '$line' $call ${msecs}mS"; + my $s = "$pkg subprocess stats cmd: '$line' $call ${msecs}mS"; $s .= " $no lines" if $no; DXDebug::dbg($s); } + +# expects either an array reference or two times (in the correct order [start, end]) +sub difft +{ + my $b = shift; + my $t; + if (ref $b eq 'ARRAY') { + $t = $b->[1] - $b->[0]; + } else { + $t = shift() - $b; + } + return '-(ve)' if $t < 0; + my ($d,$h,$m,$s); + my $out = ''; + $d = int $t / 86400; + $out .= "${d}d" if $d; + $t -= $d * 86400; + $h = int $t / 3600; + $out .= "${h}h" if $h || $d; + $t -= $h * 3600; + $m = int $t / 60; + $out .= "${m}m" if $m || $h || $d; + $s = int $t % 60; + $out .= "${s}s"; + return $out; +} + +# print an array ref of difft refs +sub parraydifft +{ + my $r = shift; + my $out = ''; + for (@$r) { + my $s = $_->[2] ? "($_->[2])" : ''; + $out .= sprintf "%s=%s$s, ", atime($_->[0]), difft($_->[0], $_->[1]); + } + $out =~ s/,\s*$//; + return $out; +}