]>
iEval git - plack-app-gruntmaster.git/blob - Data.pm
aac9ad1f77e3932adc23c7d1ee9e384f1a2ad5ee
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 hdel hset sadd srem incr hmset hsetnx publish/) {
21 dynsub
uc $cmd, sub { $redis->$cmd(@_) };
24 for my $cmd (qw
/subscribe wait_for_messages/) {
25 dynsub
uc $cmd, sub { $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 users
() { SMEMBERS cp
. 'user' }
37 sub jobcard
() { GET cp
. 'job' }
39 sub job_results
(_
) { decode_json HGET cp
. "job.$_[0]", 'results' }
40 sub set_job_results
($+) { HSET cp
. "job.$_[0]", 'results', encode_json
$_[1] }
41 sub job_inmeta
(_
) { decode_json HGET cp
. "job.$_[0]", 'inmeta' }
42 sub set_job_inmeta
($+) { HSET cp
. "job.$_[0]", 'inmeta', encode_json
$_[1] }
43 sub problem_meta
(_
) { decode_json HGET cp
. "problem.$_[0]", 'meta' }
44 sub set_problem_meta
($+) { HSET cp
. "problem.$_[0]", 'meta', encode_json
$_[1] }
45 sub job_daemon
(_
) { HGET cp
. "job.$_[0]", 'daemon' }
46 sub set_job_daemon
($$) { HSETNX cp
. "job.$_[0]", 'daemon', $_[1] };
49 my ($name, @keys) = @_;
51 dynsub
"${name}_$key", sub (_
) { HGET cp
. "$name.$_[0]", $key };
52 dynsub
"set_${name}_$key", sub ($$) { HSET cp
. "$name.$_[0]", $key, $_[1] };
55 dynsub
"insert_$name", sub {
56 my ($key, %values) = @_;
57 SADD cp
. $name, $key or return;
58 HMSET cp
. "$name.$key", %values;
60 dynsub
"remove_$name", sub (_
) {
62 SREM cp
. $name, $key;
65 dynsub
"push_$name", sub {
66 my $nr = INCR cp
. $name;
67 HMSET cp
. "$name.$nr", @_;
72 defhash problem
=> qw
/name level statement owner author/;
73 defhash contest
=> qw
/start end name owner/;
74 defhash job
=> qw
/date extension filesize private problem result result_text user/;
75 defhash user
=> qw
/name email town university level/;
78 HDEL cp
. "job.$_[0]", qw
/result result_text results daemon/
83 grep { $_ =~ /^[a-zA-Z]/ and exists &$_ } keys %{__PACKAGE__
. '::'};
This page took 0.054693 seconds and 3 git commands to generate.