diff options
| author | Paul Buetow <paul@buetow.org> | 2023-02-03 02:53:41 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2023-02-03 02:53:41 +0200 |
| commit | 3c5a965d26ed820bb4d1a522fc2fa115edd98223 (patch) | |
| tree | 6ac0e3fb2d313241dc070c9cdca39d73acd617d9 | |
| parent | 5015c0abf19de316b9691968ff76c7e3eb78660f (diff) | |
fix
| -rw-r--r-- | src/guprecords.raku | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/guprecords.raku b/src/guprecords.raku index f0fade2..21e13db 100644 --- a/src/guprecords.raku +++ b/src/guprecords.raku @@ -6,14 +6,16 @@ class Aggregate { has Int $.total-uptime = 0; has Int $.first-boot; has Int $.last-seen; + has Int $.elems; method aggregate(Str :$uptime is readonly, Str :$boot-time is readonly) { $!total-uptime += $uptime; $!first-boot = +$boot-time if not defined $!first-boot - or $!first-boot > +$boot-time; + or $!first-boot > $boot-time; my Int $last-seen = $uptime + $boot-time; $!last-seen = $last-seen if not defined $!last-seen or $!last-seen < $last-seen; + $!elems++; } method total-downtime { $.last-seen - $.first-boot - $.total-uptime } @@ -21,7 +23,7 @@ class Aggregate { } class Aggregator { - has %.aggregates = { hostname => {}, os => {}, os-kernel => {} } + has %.aggregates = { hostname => {}, os => {}, uname => {} } method aggregate(IO::Path :$file is readonly) { my Str $hostname = $file.IO.basename.split('.').first; @@ -29,20 +31,20 @@ class Aggregator { for $file.IO.lines { my Str ($uptime, $boot-time, $os) = .trim.split(':'); - my Str $os-kernel = $os.split(' ').first; + my Str $uname = $os.split(' ').first; %!aggregates<os>{$os} //= Aggregate.new; - %!aggregates<os-kernel>{$os-kernel} //= Aggregate.new; + %!aggregates<uname>{$uname} //= Aggregate.new; - for %!aggregates.values.flatmap( { .values } ) { + for %!aggregates<hostname>{$hostname}, + %!aggregates<os>{$os}, + %!aggregates<uname>{$uname} { .aggregate(:$uptime, :$boot-time); } } } } - - sub MAIN( Str $in-dir = './stats', ) { @@ -54,8 +56,9 @@ sub MAIN( for $aggregator.aggregates.kv -> $category, $aggregates { say "Categoty $category"; - for $aggregates.kv -> $name, $aggregate { - say "\t$name $aggregate"; + for $aggregates.kv -> $name, $agg { + my Str $plural = $agg.elems > 1 ?? 's' !! ''; + say "\t$name (" ~ $agg.elems ~ " record$plural)"; } } } |
