summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Buetow (mars.fritz.box) <paul@buetow.org>2014-03-02 13:31:56 +0100
committerPaul Buetow (mars.fritz.box) <paul@buetow.org>2014-03-02 13:31:56 +0100
commita647d21b81115ef6a81b5644936b725a9aa3bb8e (patch)
treeeef72bbae11fc3fad70dad004ccbabfb134921d2 /src
parentda03c49e263ad9562253a01217e2fe5166c97d98 (diff)
initial working release
Diffstat (limited to 'src')
-rwxr-xr-xsrc/guprecords158
1 files changed, 156 insertions, 2 deletions
diff --git a/src/guprecords b/src/guprecords
index eabe0de..1a1d81a 100755
--- a/src/guprecords
+++ b/src/guprecords
@@ -1,3 +1,157 @@
-#!/bin/bash
+#!/usr/bin/env perl
+# guprecords (c) 2014, Paul Buetow
+# E-Mail: guprecords@mx.buetow.org WWW: http://guprecords.buetow.org
+
+use strict;
+use warnings;
+use v5.14;
+
+use Getopt::Long;
+use POSIX qw(strftime);
+
+my $VERSION = 'VERSION_DEVEL';
+my $FLAG = 0;
+
+my %ARGS = (
+ all => 0,
+ total => 0,
+ reverse => 0,
+ help => 0,
+ 'count=i' => 23,
+ 'indir=s' => '.',
+);
+
+my %OPTS = map { $_ => \$ARGS{$_} } keys %ARGS;
+GetOptions %OPTS or die "Error in command line arguments. Try --help";
+
+sub help() {
+ say "Ths is guprecords Version $VERSION";
+ print "Usage: $0\n";
+ say "\t--$_" for sort keys %ARGS;
+ say 'Please also consult the guprecords manual page.'
+}
+
+sub uptime($) {
+ my $uptime = shift;
+
+ my ($s,$m,$h,undef,undef,$y,undef,$d) = localtime($uptime);
+
+ $y -= 70;
+ $d += $y * 365;
+
+ sprintf "%3dd %02d:%02d:%02d", $d, $h, $m, $s;
+}
+
+sub trimlen($$) {
+ my ($string,$len) = @_;
+
+ if (length $string > $len) {
+ substr($string, 0, ($len-2)).'..';
+ } else {
+ $string;
+ }
+}
+
+sub out(\@;$) {
+ my ($records,$show_bt) = @_;
+
+ my $count = 0;
+
+ printf "%3s | %17s | %20s | %13s | %24s\n",
+ 'Pos',
+ 'System',
+ 'Kernel',
+ 'Uptime',
+ (defined $show_bt ? 'Boot time' : '');
+
+ map {
+ return if $count++ == $ARGS{'count=i'};
+
+ printf "%3d | %17s | %20s | %13s | %24s\n",
+ $count,
+ trimlen($_->{fqdn},17),
+ trimlen($_->{kernel},20),
+ uptime($_->{uptime}),
+ (defined $show_bt ? ''.localtime($_->{bootime}) : '');
+ }
+ do {
+ unless ($ARGS{reverse}) {
+ sort { $b->{uptime} <=> $a->{uptime} } @$records
+ } else {
+ sort { $a->{uptime} <=> $b->{uptime} } @$records
+ }
+ };
+
+ $FLAG = 1;
+}
+
+sub all() {
+ my @records;
+
+ for my $file (<$ARGS{'indir=s'}/*.records>) {
+ my ($fqdn) = $file =~ m#.*/(.*)\.records#;
+
+ my $uptime_total = 0;
+
+ open my $fh, $file or die "$file: $!\n";
+ while (<$fh>) {
+ chomp;
+ my ($uptime,$boot,$kernel) = split ':';
+
+ push @records, {
+ uptime => $uptime,
+ bootime => $boot,
+ kernel => $kernel,
+ fqdn => $fqdn,
+ };
+
+ }
+ close $file;
+
+ }
+
+ out @records, 'show_bt';
+}
+
+sub total() {
+ my @records;
+
+ for my $file (<$ARGS{'indir=s'}/*.records>) {
+ my ($fqdn) = $file =~ m#.*/(.*)\.records#;
+
+ my $uptime_ = 0;
+ my $kernel_;
+
+ my $highest = 0;
+
+ open my $fh, $file or die "$file: $!\n";
+ while (<$fh>) {
+ chomp;
+ my ($uptime,$boot,$kernel) = split ':';
+
+ $uptime_ += $uptime;
+
+ if ($highest < $uptime) {
+ $highest = $uptime;
+ $kernel_ = $kernel;
+ }
+ }
+ close $file;
+
+ push @records, {
+ uptime => $uptime_,
+ kernel => $kernel_,
+ fqdn => $fqdn,
+ };
+
+ }
+
+ out @records;
+}
+
+help if $ARGS{help};
+all if $ARGS{all};
+total if $ARGS{total};
+
+help unless $FLAG;
-echo "Hello World, I am a fake project"