summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2023-02-03 02:53:41 +0200
committerPaul Buetow <paul@buetow.org>2023-02-03 02:53:41 +0200
commit3c5a965d26ed820bb4d1a522fc2fa115edd98223 (patch)
tree6ac0e3fb2d313241dc070c9cdca39d73acd617d9
parent5015c0abf19de316b9691968ff76c7e3eb78660f (diff)
fix
-rw-r--r--src/guprecords.raku21
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)";
}
}
}