[Libreoffice-commits] online.git: scripts/logparse.pl
Michael Meeks
michael.meeks at collabora.com
Wed Mar 16 20:48:28 UTC 2016
scripts/logparse.pl | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 110 insertions(+)
New commits:
commit fb3e19896efbb968fc20e9012260ece043cb8583
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Wed Mar 16 20:39:03 2016 +0000
Simple log cruncher to CSV.
diff --git a/scripts/logparse.pl b/scripts/logparse.pl
new file mode 100755
index 0000000..204d0c1
--- /dev/null
+++ b/scripts/logparse.pl
@@ -0,0 +1,110 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+sub check_sessions($)
+{
+ my $sessions = shift;
+ my @names = keys %{$sessions};
+ if (@names > 0) {
+ print "Leaked sessions:\n\t";
+ for my $s (@names) {
+ print "$s, ";
+ }
+ print "\n";
+ }
+}
+
+my @input = <STDIN>;
+
+my $total_blocks = 0;
+
+# live state:
+my $inodes = 0;
+my $blocks = 0;
+my $running = 0;
+my $mem_used = 0;
+my $load_avg = 0;
+my $cpu_user = 0;
+my $cpu_sys = 0;
+my %sessions;
+my $printed_header = 0;
+
+while (my $line = shift @input) {
+ my ($pevent, $pdetail);
+
+ $line =~ s/\r*\n*//g;
+
+ # df -i /dev/sda1 | logger
+ # df /dev/sda1 | logger
+ # root: /dev/sda1 655360 77457 577903 12% /
+ if ($line =~ /root: \S+\s+(\d+)\s+(\d+)/) {
+ my ($total, $used) = ($1, $2);
+ $total_blocks = $total if ($total_blocks < $total);
+ if ($total == $total_blocks) {
+ $blocks = $used;
+ } else {
+ $inodes = $used;
+ }
+ }
+
+ # top -b -n1 | head -4 | logger
+ # root: top - 15:38:01 up 5 days, 1:56, 1 user, load average: 0.00, 0.05, 0.06
+ # root: Tasks: 82 total, 1 running, 81 sleeping, 0 stopped, 0 zombie
+ # root: %Cpu(s): 0.2 us, 0.1 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
+ # root: KiB Mem: 7870968 total, 3202484 used, 4668484 free, 181104 buffers
+ $load_avg = $1 if ($line =~ m/top.*load average: (\d+\.\d+)/);
+ $mem_used = $1 if ($line =~ m/KiB Mem:.*\s(\d+)\s+used,/);
+ if ($line =~ m/%Cpu(s):\s+(\d+\.\d+) us,\s+(\d+\.\d+) sy,/) {
+ $cpu_user = $1;
+ $cpu_sys = $2;
+ }
+ $running = $1 if ($line =~ m/Tasks:.*\s+(\d+) running,/);
+ $mem_used = $1 if ($line =~ m/KiB Mem:.*\s(\d+)\s+used,/);
+ $mem_used = $1 if ($line =~ m/KiB Mem:.*\s(\d+)\s+used,/);
+
+# Session 000d is loading. 0 views loaded.
+# Session 000e is unloading. 0 views will remain.
+ if ($line =~ m/Session (\S+) is (\S*)loading. (\d+) views/) {
+ my ($skey, $type, $count) = ($1, $2, $3);
+ if ($type eq 'un') {
+ $pevent = "unload\t$skey";
+ if (defined $sessions{$skey}) {
+ $pdetail = $sessions{$skey};
+ } else {
+ # setup - somewhere earlier in the logs.
+ $pdetail = 'pre-existing';
+ }
+ delete $sessions{$skey};
+ } else {
+ $sessions{$skey} = 1;
+ }
+ }
+
+ if ($line =~/Initializing wsd/) {
+ print "Re-started\n";
+ check_sessions(\%sessions);
+ }
+
+ # loolwsd:
+ if ($line =~ m/Loading new document from URI: \[([^\]]+)\].*for session \[([^\]]+)\]/) {
+ my ($doc_uri, $session) = ($1, $2);
+ $sessions{$session} = $doc_uri;
+ $pevent = "load\t$session";
+ $pdetail = $doc_uri;
+ }
+
+ if (defined $pevent)
+ {
+ my $session_count = keys %sessions;
+ if ($printed_header++ == 0) {
+ print "event\tsession\tinodes\tfs_blk\trun\tloadavg\tmem/Kb\tsess\tfile\t\n";
+ }
+ print "$pevent\t$inodes\t$blocks\t$running\t";
+ print "$load_avg\t$mem_used\t";
+ print "$session_count\t$pdetail\n";
+ }
+}
+
+check_sessions(\%sessions);
+
More information about the Libreoffice-commits
mailing list