[Libreoffice-commits] dev-tools.git: scripts/update-stats-count.pl
Michael Meeks
michael.meeks at collabora.com
Tue Mar 31 08:41:56 PDT 2015
scripts/update-stats-count.pl | 103 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 103 insertions(+)
New commits:
commit dad537aececb62e7ed76c68aa41b163188530d24
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Tue Mar 31 16:47:26 2015 +0100
A simpler update traffic analysis / counter.
diff --git a/scripts/update-stats-count.pl b/scripts/update-stats-count.pl
new file mode 100755
index 0000000..2dda967
--- /dev/null
+++ b/scripts/update-stats-count.pl
@@ -0,0 +1,103 @@
+#!/usr/bin/perl -w
+
+#
+# A simpler approach
+#
+
+use strict;
+use POSIX;
+
+my %month_to_num = (
+ 'Jan' => '01',
+ 'Feb' => '02',
+ 'Mar' => '03',
+ 'Apr' => '04',
+ 'May' => '05',
+ 'Jun' => '06',
+ 'Jul' => '07',
+ 'Aug' => '08',
+ 'Sep' => '09',
+ 'Oct' => '10',
+ 'Nov' => '11',
+ 'Dec' => '12',
+);
+
+# A single monster hash by unique IP address of all update requests.
+my %unique_ips;
+# how many update requests we saw in each iso week
+my %count_per_week;
+# how many new unique IP addresses we saw in each iso week
+my %unique_per_week;
+# total update counts by OS.
+my %os_breakdown;
+
+my %global_date_to_epoch;
+
+sub ymd_to_epoch($$$)
+{
+ my ($year, $month, $day) = @_;
+
+ my $key = "$year-$month-$day";
+
+ if ( ! defined $global_date_to_epoch{$key} ) {
+ # 1970-01-01 is Thursday, add 3 days (259200 seconds), and divide
+ my $seconds = POSIX::strftime( "%s", 0, 0, 12, $day, $month - 1, $year - 1900 ); # see the manual
+
+ # remember the ISO week
+ my $week = POSIX::strftime( "%G-%V", 0, 0, 12, $day, $month - 1, $year - 1900 ); # see the manual
+ $global_date_to_epoch{$key} = $week;
+ }
+ return $global_date_to_epoch{$key};
+}
+
+open LOG, "( bzcat logs/update.libreoffice.org-access_log-*.bz2 ; cat logs/update.libreoffice.org-access_log ) |" or die "Cannot open the log: $!";
+while (<LOG>) {
+ if ( /^([^ ]+) - - \[([^\/]+)\/([^\/]+)\/([^:]+):([0-9][0-9])[^\]]*\] "[^"]*" [^ ]+ [^ ]+ "[^"]*" "[^(]*\(([^-;]+)[^;]*; ([^;]*);/ ) {
+ #print "$1, $2, $3, $4, $5, $6, $7\n";
+ my ( $ip, $day, $month, $year, $hour, $version, $os ) =
+ ( $1, $2, $month_to_num{$3}, $4, $5, $6, $7 );
+
+ my $year_week = ymd_to_epoch($year, $month, $day);
+
+ # count of upate pings per iso week
+# $count_per_week{$year_week} = 0 if (!defined $count_per_week{$year_week});
+ $count_per_week{$year_week}++;
+
+ # count of new unique IPs
+ if (!defined $unique_ips{$ip}) {
+# $unique_per_week{$year_week} = 0 if (!defined $unique_per_week{$year_week});
+ $unique_ips{$ip} = 1;
+ $unique_per_week{$year_week}++;
+ }
+
+ # how many of what OS do we have ?
+ $os_breakdown{$os}++;
+ }
+}
+close LOG;
+
+print "Generated on: " . qx(date --rfc-3339=seconds) . "\n";
+print "Unique IP addresses (from where LO asked for updates up to now): " . scalar( keys( %unique_ips ) ) . "\n\n";
+
+print "Update pings by ISO week:\n";
+foreach my $yw ( sort( keys %count_per_week ) ) {
+ print "$yw," . $count_per_week{$yw} . "\n";
+}
+print "\n\n";
+
+print "New Unique IPs by ISO week:\n";
+foreach my $yw ( sort( keys %unique_per_week ) ) {
+ print "$yw," . $unique_per_week{$yw} . "\n";
+}
+print "\n\n";
+
+print "Breakdown by OS:\n";
+my $total = 0;
+foreach my $os ( sort { $os_breakdown{$b} <=> $os_breakdown{$a} } ( keys %os_breakdown ) ) {
+ print "$os," . $os_breakdown{$os} . "\n";
+ $total += $os_breakdown{$os};
+}
+print "\n\n";
+
+print "Total update pings: $total\n";
+
More information about the Libreoffice-commits
mailing list