a90149aea9097e00625338c73953d0d6908372fa
1 package Gruntmaster
::Data
;
4 use parent qw
/Exporter/;
6 use JSON qw
/encode_json decode_json/;
8 use Sub
::Name qw
/subname/;
11 my $redis = Redis
->new;
12 my $pubsub = Redis
->new;
15 our ($name, $sub) = @_;
17 *$name = subname
$name => $sub
21 for my $cmd (qw
/multi exec smembers get hget hdel hset sadd srem incr hmset hsetnx publish del/) {
22 dynsub
uc $cmd, sub { $redis->$cmd(@_) };
25 for my $cmd (qw
/subscribe wait_for_messages/) {
26 dynsub
uc $cmd, sub { $pubsub->$cmd(@_) };
30 sub cp
{ defined $contest ?
"contest.$contest." : '' }
32 sub multi
() { MULTI
}
35 sub problems
() { SMEMBERS cp
. 'problem' }
36 sub contests
() { SMEMBERS cp
. 'contest' }
37 sub users
() { SMEMBERS cp
. 'user' }
38 sub jobcard
() { GET cp
. 'job' }
40 sub job_results
(_
) { decode_json HGET cp
. "job.$_[0]", 'results' }
41 sub set_job_results
($+) { HSET cp
. "job.$_[0]", 'results', encode_json
$_[1] }
42 sub job_inmeta
(_
) { decode_json HGET cp
. "job.$_[0]", 'inmeta' }
43 sub set_job_inmeta
($+) { HSET cp
. "job.$_[0]", 'inmeta', encode_json
$_[1] }
44 sub problem_meta
(_
) { decode_json HGET cp
. "problem.$_[0]", 'meta' }
45 sub set_problem_meta
($+) { HSET cp
. "problem.$_[0]", 'meta', encode_json
$_[1] }
46 sub job_daemon
(_
) { HGET cp
. "job.$_[0]", 'daemon' }
47 sub set_job_daemon
($$) { HSETNX cp
. "job.$_[0]", 'daemon', $_[1] };
50 my ($name, @keys) = @_;
52 dynsub
"${name}_$key", sub (_
) { HGET cp
. "$name.$_[0]", $key };
53 dynsub
"set_${name}_$key", sub ($$) { HSET cp
. "$name.$_[0]", $key, $_[1] };
56 dynsub
"edit_$name", sub {
57 my ($key, %values) = @_;
58 HMSET cp
. "$name.$key", %values;
61 dynsub
"insert_$name", sub {
62 my ($key, %values) = @_;
63 SADD cp
. $name, $key or return;
64 HMSET cp
. "$name.$key", %values;
66 dynsub
"remove_$name", sub (_
) {
68 SREM cp
. $name, $key;
69 DEL cp
. "$name.$key";
72 dynsub
"push_$name", sub {
73 my $nr = INCR cp
. $name;
74 HMSET cp
. "$name.$nr", @_;
79 defhash problem
=> qw
/name level statement owner author/;
80 defhash contest
=> qw
/start end name owner/;
81 defhash job
=> qw
/date errors extension filesize private problem result result_text user/;
82 defhash user
=> qw
/name email town university level/;
85 HDEL cp
. "job.$_[0]", qw
/result result_text results daemon/
89 my ($problem, $user) = @_;
90 HSETNX cp
. 'open', "$problem.$user", time;
94 my ($problem, $user) = @_;
95 HGET cp
. 'open', "$problem.$user";
100 grep { $_ =~ /^[a-zA-Z]/ and exists &$_ } keys %{__PACKAGE__
. '::'};
This page took 0.02683 seconds and 3 git commands to generate.