#!/usr/bin/perl # pks_log.pl - PKS log analyzer # Dinko Korunic #$VERBOSE = 1; #$PKS_HOME = "/serv/pgpkeys/pks-tree/pks-install"; $PKS_HOME = "."; #$HTML_HOME = "/home/httpd/htdocs/pks/stats"; $HTML_HOME = "."; $HTML_OUTPUT = 1; sub gmkb($) { $x = shift; $onekil = 1024; $onemeg = $onekil * 1024; $onegig = $onemeg * 1024; $oneter = $onegig * 1024; $text = ($x >= $oneter) ? "TB" : ($x >= $onegig) ? "GB" : ($x >= $onemeg) ? "MB" : ($x >= $onekil) ? "KB" : "B"; $value = ($x >= $oneter) ? ($x/$oneter) : ($x >= $onegig) ? ($x/$onegig) : ($x >= $onemeg) ? ($x/$onemeg) : ($x >= $onekil) ? ($x/$onekil) : ($x); $value = sprintf("%.1f", $value); return "$value $text"; } # get last month @long_mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); @long_mon_hr = ('Siječanj', 'Veljača', 'Ožujak', 'Travanj', 'Svibanj', 'Lipanj', 'Srpanj', 'Kolovoz', 'Rujan', 'Listopad', 'Studeni', 'Prosinac'); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); if ($ENV{MONTH}) { $mon = $ENV{MONTH}; } $year += 1900; $last_mon = $long_mon[$mon - 1]; $sizez_db = $sum_size_db = $new_keys = $new_sigs = $revocated = 0; $total_www_hit = $www_connects = $mail_user = $incr_posted = 0; $incr_received = $incr_hosts = 0; while (<>) { chop (); if (/$last_mon .+ pksd: display_new_key: new keyid (\d+) (.+)/) { ($VERBOSE) && print "New key: key 0x$2, subkey no. $1\n"; $new_keys++; } elsif (/$last_mon .+ pksd: display_new_sig: new sig (\d+) by (.+) added to (.+)/) { ($VERBOSE) && print "New sig: no. $1 from 0x$2 to 0x$3\n"; $new_sigs++; } elsif (/$last_mon .+ pksd: display_new_revocation: keyid (\d+) revoked/) { ($VERBOSE) && print "New revocation: 0x$1\n"; $revocated++; } elsif (/$last_mon .+ pksd: pks_post_incr: posted incremental to (.+)/) { @tmparray = split(/,/, $1); $count = $#tmparray + 1; ($VERBOSE) && print "Posted incremental to $1 - total of $count hosts\n"; $incr_posted += $count; } elsif (/$last_mon .+ pksd: mail_req: request received from .*@([^ >:]+).*ncremental$/) { ($VERBOSE) && print "Received incremental from $1\n"; $sync_host = lc($1); $mail_req{$sync_host}++; $incr_received++; } elsif (/$last_mon .+ pksd: listener \[www\]: new www connection from (.+)/) { $last_connection = $1; $www_connects++; } elsif (/$last_mon .+ pksd: reader \[www\]: request received: GET \/pks\/lookup.+&search=(.+)/) { ($VERBOSE) && printf "[WWW]: Request for $1 from $last_connection\n"; $total_www_hit++; } elsif (/$last_mon .+ pksd: mail_req: request received from (.+): (.*)/) { ($VERBOSE) && printf "[SMTP]: Request $2 from $1\n"; $mail_user++; } } # Process increments by hosts foreach $i (sort keys(%mail_req)) { $incr_hosts .= "$i \[$mail_req{$i} poruka\]
"; } chop($incr_hosts); # Process size of databases foreach $i (split(' ', "keydb000 timedb worddb")) { @fstat = stat("$PKS_HOME/var/db/$i"); $size = $fstat[7]; $sizez_db .= "$i \[" . gmkb($size) . "\]
"; $sum_size_db += $size; } chop($sizez_db); $sum_size_db = gmkb($sum_size_db); if (!$HTML_OUTPUT) { print " -- Statistics for $last_mon, $year --\n"; print "Individual database size: $sizez_db\n"; print "Total database size: $sum_size_db\n"; print "Received new keys: $new_keys\n"; print "Received new signatures: $new_sigs\n"; print "Received new revocations: $revocated\n"; print "Total WWW requests: $total_www_hit\n"; print "Total WWW connects: $www_connects\n"; print "Total mail requests: $mail_user\n"; print "Total incremental postings: $incr_posted\n"; print "Total incremental requests: $incr_received\n"; print "Incremental sending hosts: $incr_hosts\n"; } else { $realmon = $mon + 1; $mymon = sprintf("%02d", $mon); $LOGFILE = "$HTML_HOME/$year\_$mymon.html"; $TEMPFILE = "$LOGFILE\_temp.html"; open(LOG, '>', $TEMPFILE); select(LOG); print < CARNet PKS interne statistike

CARNet PGP PKS statistike

$long_mon_hr[$mon - 1], $year.

Nadnevak generiran: $hour:$min $mday.$realmon.$year.


Veličina baze podataka ključeva $sizez_db
Ukupna veličina baze $sum_size_db
Primljeno novih ključeva $new_keys
Primljeno novih potpisa $new_sigs
Primljeno novih opoziva $revocated
Ukupno WWW zahtjeva $total_www_hit
Ukupno zasebnih WWW spajanja $www_connects
Ukupno E-mail zahtjeva $mail_user
Ukupno poslanih inkrementalnih E-mailova $incr_posted
Ukupno primljenih inkrementalnih E-mailova $incr_received
Poslužitelji inkrementalnih E-mailova $incr_hosts

Napomena: inkrementalni E-mailovi se izmjenjuju između samih PKS poslužitelja u svrhu sinkronizacije javnih ključeva. Baza podataka javnih ključeva koju ima PKS je podjeljena na tri dijela - stoga su i podaci o njima dostupni i zasebno i skupno.
EOF close(LOG); rename($TEMPFILE, $LOGFILE); $LOGFILE = "$HTML_HOME/$year-pks.txt"; open(LOG, '>>', $LOGFILE); print(LOG "$mon/$year $new_keys $new_sigs $revocated $total_www_hit $www_connects\n"); close(LOG); }