public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Robin H. Johnson" <robbat2@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/elections:master commit in: /
Date: Sat, 18 Jun 2016 17:28:57 +0000 (UTC)	[thread overview]
Message-ID: <1435469615.4aa542e6634b127ae3c3a9f28719bc070006a39c.robbat2@gentoo> (raw)

commit:     4aa542e6634b127ae3c3a9f28719bc070006a39c
Author:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 28 05:33:17 2015 +0000
Commit:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Sun Jun 28 05:33:35 2015 +0000
URL:        https://gitweb.gentoo.org/proj/elections.git/commit/?id=4aa542e6

Rewrite old bash election-stats-count in perl, using the new election code.

Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

 election-stats-count |  26 +----------
 statify              | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 122 insertions(+), 25 deletions(-)

diff --git a/election-stats-count b/election-stats-count
deleted file mode 100755
index 7c39015..0000000
--- a/election-stats-count
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# TODO:
-# - this should NOT produce any output when the election is closed.
-# - should work with concurrent elections
-HOMEDIR=/etc/elections/
-NAME=$(awk '/^name/{print $2}' $HOMEDIR/current/election-details)
-OFFICIALS=$(cat ${HOMEDIR}/current/officials-$NAME)
-COUNT_VOTERS=$(wc -l <${HOMEDIR}/current/voters-$NAME)
-
-COUNT_SUBMIT=$(ls /home/*/.ballot-${NAME}-submitted 2>/dev/null | wc -l)
-COUNT_PENDING=$(ls /home/*/.ballot-${NAME} 2>/dev/null | wc -l)
-
-
-umask 057
-for u in ${OFFICIALS} ; do
-OUTFILE="/home/$u/voter-turnout-${NAME}"
-#cat <<-EOF
-cat >${OUTFILE} <<-EOF
-Eligable voters: $COUNT_VOTERS
-Submitted votes: ${COUNT_SUBMIT}
-Pending votes: ${COUNT_PENDING}
-Turnout: $(echo "scale=10; ${COUNT_SUBMIT}/${COUNT_VOTERS}*100" | bc | xargs printf '%02.3f' )%
-EOF
-chown ${u}:root ${OUTFILE}
-done

diff --git a/election-stats-count b/election-stats-count
new file mode 120000
index 0000000..fad4dda
--- /dev/null
+++ b/election-stats-count
@@ -0,0 +1 @@
+statify
\ No newline at end of file

diff --git a/statify b/statify
new file mode 100755
index 0000000..c424696
--- /dev/null
+++ b/statify
@@ -0,0 +1,121 @@
+#!/usr/bin/perl -w
+# $Id$
+#
+# Copyright 2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# Author: Robin H Johnson <robbat2@gentoo.org>
+#
+# statify: Produce early election statistics
+#
+
+BEGIN { 
+    if(-f '/etc/elections/Votify.pm') {
+        push @INC, '/etc/elections';
+    } else {
+        push @INC, '.' if -f 'Votify.pm'; 
+    }
+}
+
+use POSIX;
+use Getopt::Long;
+use List::Util;
+use Cwd qw(abs_path);
+use File::Spec::Functions;
+use Votify 'official';
+use strict;
+
+######################################################################
+# Global vars
+######################################################################
+
+(my $zero = $0) =~ s,.*/,,;
+(my $version = $Votify::version) =~ s/.*?(\d.*\d).*/$zero version $1\n/;
+my %opt;
+
+# Collect the open elections
+my (%open_elections, $usage_elections);
+%open_elections = Votify::get_open_elections_hash();
+if (scalar keys %open_elections) {
+    $usage_elections = join("\n        ", keys %open_elections);
+} else {
+    $usage_elections = "(no elections currently open)";
+}
+
+# rest of usage
+my $usage = <<EOT;
+
+usage: 
+    $zero [OPTS] <election>
+    $zero [OPTS] --all
+
+where options are:
+
+    --all       Run on all open elections	
+	--write-to-officials	Write statistics to officials homedirs
+
+and <election> is one of the elections currently in-progress.  The following
+elections are currently open:
+
+    $usage_elections
+
+EOT
+
+######################################################################
+# Main
+######################################################################
+for my $election_name (keys %open_elections) {
+	my (@officials, @voters);
+	open(F, '<', $open_elections{$election_name}{'officialsfile'})
+        or die("failed to open officials file");
+    chomp(@officials = <F>);
+	close(F);
+
+	$open_elections{$election_name}{'officials'} = @officials;
+
+	open(F, '<', $open_elections{$election_name}{'votersfile'})
+        or die("failed to open voters file");
+    chomp(@voters = <F>);
+	close(F);
+
+	$open_elections{$election_name}{'voters'} = @voters;
+
+	my ($count_voters, $count_submit, $count_pending) = (0, 0,0);
+	for my $votername (@voters) {
+		$count_voters++;
+		if(-f catfile('/home', $votername, ".ballot-${election_name}-submitted")) {
+			$count_submit++;
+		} elsif (-f catfile('/home', $votername, ".ballot-${election_name}")) {
+			$count_pending++;
+		}
+	}
+	die "Mismatched voter count" unless $count_voters == scalar(@voters);
+	$open_elections{$election_name}{'count'} = {
+		voters => $count_voters,
+		submitted => $count_submit,
+		pending => $count_pending,
+	};
+	my $results_buffer =  ''
+	.sprintf("Election: %s\n", $election_name)
+	.sprintf("Timestamp: %s\n", POSIX::strftime($Votify::datefmt, gmtime))
+	.sprintf("Eligable voters: %d\n", $count_voters)
+	.sprintf("Submitted votes: %d\n", $count_submit)
+	.sprintf("Pending votes: %d\n", $count_pending)
+	.sprintf("Turnout: %02.3f%%\n", $count_submit*100.0/$count_voters) 
+	.sprintf("Pending Turnout: %02.3f%%\n", ($count_submit+$count_pending)*100.0/$count_voters);
+	print "$results_buffer\n";
+
+	umask 057;
+	for my $officialname (@officials) {
+		my $fn = catfile('/home', $officialname, 'voter-turnout-'.$election_name);
+		open(F, '>', $fn) or
+			die("failed to open voter turnout file ($fn): $!");
+		print F $results_buffer;
+		close F;
+		chown ((getpwnam($officialname))[2]), 0, ($fn) or
+			die("failed to chown voter turnout file ($fn): $!");
+	}
+}
+
+
+__END__
+# vim:sw=4 et


             reply	other threads:[~2016-06-18 17:29 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-18 17:28 Robin H. Johnson [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-06-02  0:13 [gentoo-commits] proj/elections:master commit in: / Robin H. Johnson
2024-05-25 17:14 Robin H. Johnson
2023-04-19 22:28 Robin H. Johnson
2022-07-01 19:12 Robin H. Johnson
2022-07-01 15:50 Robin H. Johnson
2022-06-30 22:36 Robin H. Johnson
2022-06-25 16:31 Robin H. Johnson
2022-06-25 13:58 Jorge Manuel B. S. Vicetto
2021-06-18  6:57 Robin H. Johnson
2021-06-18  6:57 Robin H. Johnson
2020-07-06  5:10 Robin H. Johnson
2020-06-20  5:17 Robin H. Johnson
2020-06-20  5:17 Robin H. Johnson
2017-06-25  0:04 Robin H. Johnson
2017-06-24 23:54 Robin H. Johnson
2016-07-21 18:07 Robin H. Johnson
2016-07-21 18:07 Robin H. Johnson
2016-07-03 15:01 Robin H. Johnson
2016-07-03 11:04 Jorge Manuel B. S. Vicetto
2016-06-19 12:13 Jorge Manuel B. S. Vicetto
2016-06-19 12:13 Jorge Manuel B. S. Vicetto
2016-06-18 17:28 Robin H. Johnson
2016-06-18 17:28 Robin H. Johnson
2016-06-18 17:28 Robin H. Johnson
2015-06-28  0:12 Jorge Manuel B. S. Vicetto
2015-06-27 16:18 Robin H. Johnson
2013-06-30  6:32 Jorge Manuel B. S. Vicetto
2013-02-06  0:09 Jorge Manuel B. S. Vicetto
2012-07-16 19:01 Christian Ruppert
2012-06-18 21:08 Christian Ruppert
2012-02-15  2:07 Robin H. Johnson
2011-06-20  6:14 Robin H. Johnson
2011-06-20  6:13 Robin H. Johnson
2011-06-20  6:13 Robin H. Johnson
2011-06-20  6:13 Robin H. Johnson
2011-06-20  6:13 Robin H. Johnson
2011-06-20  6:08 Robin H. Johnson
2011-06-09  7:46 Robin H. Johnson
2011-04-09  0:09 Robin H. Johnson
2011-03-12 18:41 Robin H. Johnson
2011-03-12 10:57 Robin H. Johnson
2011-03-12 10:56 Robin H. Johnson
2011-02-13  2:21 Robin H. Johnson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1435469615.4aa542e6634b127ae3c3a9f28719bc070006a39c.robbat2@gentoo \
    --to=robbat2@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox