]>
iEval git - plack-app-gruntmaster.git/blob - Data.pm
9504cf849b7220c6e658fc16c33a283cc5f2fd57
1 package Gruntmaster
::Data
;
4 use parent qw
/Exporter/;
6 use JSON qw
/encode_json decode_json/;
11 my $redis = Redis
->new;
12 my $pubsub = Redis
->new;
20 for my $cmd (qw
/multi exec smembers get hget hset sadd srem incr hmset hsetnx/) {
21 dynsub
uc $cmd, sub { say "Arguments to \U$cmd: ", join ', ', @_; $redis->$cmd(@_) };
24 for my $cmd (qw
/publish subscribe wait_for_messages/) {
25 dynsub
uc $cmd, sub { say "Arguments to \U$cmd: ", join ', ', @_; $pubsub->$cmd(@_) };
29 sub cp
{ defined $contest ?
"contest.$contest." : '' }
31 sub multi
() { MULTI
}
34 sub problems
() { SMEMBERS cp
. 'problem' }
35 sub contests
() { SMEMBERS cp
. 'contest' }
36 sub jobcard
() { GET cp
. 'job' }
38 sub job_results
(_
) { decode_json HGET cp
. "job.$_[0]", 'results' }
39 sub set_job_results
($+) { HSET cp
. "job.$_[0]", 'results', encode_json
$_[1] }
40 sub job_inmeta
(_
) { decode_json HGET cp
. "job.$_[0]", 'inmeta' }
41 sub set_job_inmeta
($+) { HSET cp
. "job.$_[0]", 'inmeta', encode_json
$_[1] }
42 sub problem_meta
(_
) { decode_json HGET cp
. "problem.$_[0]", 'meta' }
43 sub set_problem_meta
($+) { HSET cp
. "problem.$_[0]", 'meta', encode_json
$_[1] }
44 sub job_daemon
(_
) { HGET cp
. "job.$_[0]", 'daemon' }
45 sub set_job_daemon
($$) { HSETNX cp
. "job.$_[0]", 'daemon', $_[1] };
48 my ($name, @keys) = @_;
50 dynsub
"${name}_$key", sub (_
) { HGET cp
. "$name.$_[0]", $key };
51 dynsub
"set_${name}_$key", sub ($$) { HSET cp
. "$name.$_[0]", $key, $_[1] };
54 dynsub
"insert_$name", sub {
55 my ($key, %values) = @_;
56 SADD cp
. $name, $key or return;
57 HMSET cp
. "$name.$key", %values;
59 dynsub
"remove_$name", sub (_
) {
61 SREM cp
. $name, $key;
64 dynsub
"push_$name", sub {
65 my $nr = INCR cp
. $name;
66 HMSET cp
. "$name.$nr", @_;
71 defhash problem
=> qw
/name level statement/;
72 defhash contest
=> qw
/start end name owner/;
73 defhash job
=> qw
/date extension filesize private problem result result_text user/;
74 defhash user
=> qw
/name email town university/;
78 grep { $_ =~ /^[a-zA-Z]/ and exists &$_ } keys %{__PACKAGE__
. '::'};
This page took 0.052935 seconds and 3 git commands to generate.