scripts/update-stats-count.pl |  103 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

New commits:
commit dad537aececb62e7ed76c68aa41b163188530d24
Author: Michael Meeks <michael.me...@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";
+
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to