monitoring/yna-summary.pl (33 lines of code) (raw):

#!/usr/bin/perl # ============================================================ # # SCRIPT NAME: yna-summary # # This script takes in files in the form sent by the # voter tool final summary Email # # e.g # Issue members200606-20060613-foobar is now closed. The summary is not yet implemented. # # Here are the raw collected results -- remember to remove old votes from # those with duplicate entries before counting them. # # [2006/06/13 18:22:30] 0422f389874d7a8ecfd2fabea0a152ed yes # [2006/06/13 18:23:15] 9c58d57506a17c83b9d4cc8c0ed4a31e abstain # [2006/06/13 18:28:27] 9db55691a072f88d79968eed8297dc90 no # [2006/06/13 19:01:13] a6d1332887e40af1dd2405cd2abf1e77 yes # [2006/06/13 19:22:45] a9472aa4f7df905173acd8fe2d8edcb2 yes # [2006/06/13 20:42:33] adc9914bb9112d8da4cddd6353e09ef1 abstain # # ... # # And produces a summary of total votes, the number of # dups and the vote summaries themselves. # # It is very dependent on the format of the Final Tally # Email that comes from the voter tool and is # designed to work on the full email message. # # This means you can concat all the final tallies # together in one big file and this tool will # correctly parse the whole shebang for you. # open(INPUT, "$ARGV[0]"); while(<INPUT>) { chomp; # Assumes standard format of closed email if (/Issue ([^-]*)-[^-]*-(\w*) is now closed/) { $issuename = "$1 - $2"; %votes = (); $dups{$issuename} = 0; $yes = 0; $no = 0; $abstain = 0; $total = 0; next; } # [2006/06/13 17:54:23] 4db08a9e058fa8e4742f1f05cd32e409 yes if (/\[.{19}\]\s([\w\d]{32})\s([a-z]{1,12})/) { if ($votes{$1} ne "") { $dups{$issuename}++; } $votes{$1} = $2; next; } if (/Current file digests:/) { foreach $id (keys %votes) { $total++; #print "$id, $votes{$id} \n"; if ($votes{$id} eq 'yes') { $yes++; } if ($votes{$id} eq 'no') { $no++; } if ($votes{$id} eq 'abstain') { $abstain++; } } if ($yes > $no) { $elected = "(elected)"; } else { $elected = "(NOT ELECTED)"; } print "Issue: $issuename: Total: $total ($dups{$issuename}), Yes: $yes, No: $no, Abstain: $abstain $elected\n"; next; } } # ============================================================