]> jfr.im git - rewrite-logs.git/commitdiff
rewrite-logs main
authorJohn Runyon <redacted>
Mon, 25 Mar 2024 12:11:02 +0000 (06:11 -0600)
committerJohn Runyon <redacted>
Mon, 25 Mar 2024 12:11:02 +0000 (06:11 -0600)
rewrite-logs.pl [new file with mode: 0644]

diff --git a/rewrite-logs.pl b/rewrite-logs.pl
new file mode 100644 (file)
index 0000000..7bcee89
--- /dev/null
@@ -0,0 +1,62 @@
+#find irclogs -type f -execdir perl -i.orig rewrite-logs.pl {} +
+
+# Rewrite irssi's log files to have all lines in the same (timestamp) format
+
+use strict;
+use warnings;
+use POSIX qw/strftime/;
+use constant FMT => "%s [%m/%d/%y %H:%M:%S]";
+
+$ENV{TZ} = 'America/Chicago';
+
+my %months = reverse builtin::indexed qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
+
+#strftime(fmt, sec, min, hour, mday, mon, year)
+# all 0-based except mday (1+) and year = real_year-1900.
+
+my ($sm, $sd, $sy);
+while (<>) {
+       chomp;
+       if (/^--- (?:Log opened|Day changed) \w\w\w (?<b>\w\w\w) (?<d>\d\d) (?:(?<H>\d\d):\d\d:\d\d )?(?<Y>\d\d\d\d)/) {
+               # Timezone changed at:
+               # --- Log closed Wed May 17 20:23:54 2023
+               # --- Log opened Wed May 17 19:24:29 2023
+               if ($+{Y} eq '2023' && (($+{d} >= 17 && $months{$+{b}} == 4 && defined $+{H} && $+{H} >= 19) || $months{$+{b}} > 4)) {
+                       $ENV{TZ} = 'America/Denver';
+               }
+
+               $sm = $months{$+{b}};
+               $sd = $+{d};
+               $sy = $+{Y}-1900; # year = %Y - 1900
+
+       } elsif (/^--- Log closed/) { # ignore
+
+       } elsif ($sd && s/^(?<H>\d\d):(?<M>\d\d) //) { # starts with HH:MM
+               my $newts = strftime(FMT, 0, $+{M}, $+{H}, $sd, $sm, $sy);
+               $_ = "$newts$_";
+
+       } elsif (s@^\[(?<m>\d\d)/(?<d>\d\d)/(?<y>\d\d) (?<H>\d\d):(?<M>\d\d):(?<S>\d\d)\]@@) { # starts with [mm/dd/yy HH:MM:SS]
+               my $newts = strftime(FMT, $+{S}, $+{M}, $+{H}, $+{d}, $+{m}-1, (100+$+{y})); # year = 2000 + %y - 1900
+               $_ = "$newts$_";
+
+       } elsif (/^1\d{9} \[/) { # starts with unixts
+               next; # leave it alone
+
+       } elsif (/^--- /) {
+               print STDERR "Unknown --- line: $ARGV:$. $_\n";
+       } elsif ($sd) {
+               print STDERR "Unknown other line: $ARGV:$. $_\n";
+       } else {
+               print STDERR "No date for line: $sm $sd $sy $ARGV:$. $_\n";
+       }
+
+} continue {
+       print "$_\n";
+       if (eof) { # if we're about to move on to another file
+               $ENV{TZ} = 'America/Chicago'; # reset the timezone for the start of next file (it'll get switched back to Denver again as appropriate)
+               close ARGV;
+               undef $sm;
+               undef $sd;
+               undef $sy;
+       }
+}