line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Zonemaster::Backend::DB; |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
our $VERSION = '1.2.0'; |
4
|
|
|
|
|
|
|
|
5
|
2
|
|
|
2
|
|
1428
|
use Moose::Role; |
|
2
|
|
|
|
|
8009
|
|
|
2
|
|
|
|
|
7
|
|
6
|
|
|
|
|
|
|
|
7
|
2
|
|
|
2
|
|
9206
|
use 5.14.2; |
|
2
|
|
|
|
|
6
|
|
8
|
|
|
|
|
|
|
|
9
|
2
|
|
|
2
|
|
851
|
use Data::Dumper; |
|
2
|
|
|
|
|
9010
|
|
|
2
|
|
|
|
|
849
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
requires 'add_api_user_to_db', 'user_exists_in_db', 'user_authorized', 'test_progress', 'test_results', |
12
|
|
|
|
|
|
|
'create_new_batch_job', 'create_new_test', 'get_test_params', 'get_test_history', 'add_batch_job'; |
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
sub user_exists { |
15
|
1
|
|
|
1
|
0
|
3
|
my ( $self, $user ) = @_; |
16
|
|
|
|
|
|
|
|
17
|
1
|
50
|
|
|
|
5
|
die "username not provided to the method user_exists\n" unless ( $user ); |
18
|
|
|
|
|
|
|
|
19
|
1
|
|
|
|
|
4
|
return $self->user_exists_in_db( $user ); |
20
|
|
|
|
|
|
|
} |
21
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
sub add_api_user { |
23
|
1
|
|
|
1
|
0
|
3
|
my ( $self, $username, $api_key ) = @_; |
24
|
|
|
|
|
|
|
|
25
|
1
|
50
|
33
|
|
|
7
|
die "username or api_key not provided to the method add_api_user\n" |
26
|
|
|
|
|
|
|
unless ( $username && $api_key ); |
27
|
|
|
|
|
|
|
|
28
|
1
|
50
|
|
|
|
5
|
die "User already exists\n" if ( $self->user_exists( $username ) ); |
29
|
|
|
|
|
|
|
|
30
|
1
|
|
|
|
|
7
|
my $result = $self->add_api_user_to_db( $username, $api_key ); |
31
|
|
|
|
|
|
|
|
32
|
1
|
50
|
|
|
|
6
|
die "add_api_user_to_db not successfull" unless ( $result ); |
33
|
|
|
|
|
|
|
|
34
|
1
|
|
|
|
|
11
|
return $result; |
35
|
|
|
|
|
|
|
} |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
sub _get_allowed_id_field_name { |
38
|
0
|
|
|
0
|
|
|
my ( $self, $test_id ) = @_; |
39
|
|
|
|
|
|
|
|
40
|
0
|
|
|
|
|
|
my $id_field; |
41
|
0
|
0
|
|
|
|
|
if (length($test_id) == 16) { |
42
|
0
|
|
|
|
|
|
$id_field = 'hash_id'; |
43
|
|
|
|
|
|
|
} |
44
|
|
|
|
|
|
|
else { |
45
|
0
|
0
|
|
|
|
|
if ($test_id <= Zonemaster::Backend::Config->force_hash_id_use_in_API_starting_from_id()) { |
46
|
0
|
|
|
|
|
|
$id_field = 'id'; |
47
|
|
|
|
|
|
|
} |
48
|
|
|
|
|
|
|
else { |
49
|
0
|
|
|
|
|
|
die "Querying test results with the [id] field is dissallowed by the current configuration values"; |
50
|
|
|
|
|
|
|
} |
51
|
|
|
|
|
|
|
} |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
# Standatd SQL, can be here |
55
|
|
|
|
|
|
|
sub get_test_request { |
56
|
0
|
|
|
0
|
0
|
|
my ( $self ) = @_; |
57
|
|
|
|
|
|
|
|
58
|
0
|
|
|
|
|
|
my $result_id; |
59
|
0
|
|
|
|
|
|
my $dbh = $self->dbh; |
60
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
|
62
|
0
|
|
|
|
|
|
my ( $id, $hash_id ); |
63
|
0
|
|
|
|
|
|
my $lock_on_queue = Zonemaster::Backend::Config->lock_on_queue(); |
64
|
0
|
0
|
|
|
|
|
if ( defined $lock_on_queue ) { |
65
|
0
|
|
|
|
|
|
( $id, $hash_id ) = $dbh->selectrow_array( qq[ SELECT id, hash_id FROM test_results WHERE progress=0 AND queue=? ORDER BY priority DESC, id ASC LIMIT 1 ], undef, $lock_on_queue ); |
66
|
|
|
|
|
|
|
} |
67
|
|
|
|
|
|
|
else { |
68
|
0
|
|
|
|
|
|
( $id, $hash_id ) = $dbh->selectrow_array( q[ SELECT id, hash_id FROM test_results WHERE progress=0 ORDER BY priority DESC, id ASC LIMIT 1 ] ); |
69
|
|
|
|
|
|
|
} |
70
|
|
|
|
|
|
|
|
71
|
0
|
0
|
|
|
|
|
if ($id) { |
72
|
0
|
|
|
|
|
|
$dbh->do( q[UPDATE test_results SET progress=1 WHERE id=?], undef, $id ); |
73
|
|
|
|
|
|
|
|
74
|
0
|
0
|
|
|
|
|
if ( $id > Zonemaster::Backend::Config->force_hash_id_use_in_API_starting_from_id() ) { |
75
|
0
|
|
|
|
|
|
$result_id = $hash_id; |
76
|
|
|
|
|
|
|
} |
77
|
|
|
|
|
|
|
else { |
78
|
0
|
|
|
|
|
|
$result_id = $id; |
79
|
|
|
|
|
|
|
} |
80
|
|
|
|
|
|
|
} |
81
|
|
|
|
|
|
|
|
82
|
0
|
|
|
|
|
|
return $result_id; |
83
|
|
|
|
|
|
|
} |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
# Standatd SQL, can be here |
86
|
|
|
|
|
|
|
sub get_batch_job_result { |
87
|
0
|
|
|
0
|
0
|
|
my ( $self, $batch_id ) = @_; |
88
|
|
|
|
|
|
|
|
89
|
0
|
|
|
|
|
|
my $dbh = $self->dbh; |
90
|
|
|
|
|
|
|
|
91
|
0
|
|
|
|
|
|
my %result; |
92
|
0
|
|
|
|
|
|
$result{nb_running} = 0; |
93
|
0
|
|
|
|
|
|
$result{nb_finished} = 0; |
94
|
|
|
|
|
|
|
|
95
|
0
|
|
|
|
|
|
my $query = " |
96
|
|
|
|
|
|
|
SELECT hash_id, progress |
97
|
|
|
|
|
|
|
FROM test_results |
98
|
|
|
|
|
|
|
WHERE batch_id=?"; |
99
|
|
|
|
|
|
|
|
100
|
0
|
|
|
|
|
|
my $sth1 = $dbh->prepare( $query ); |
101
|
0
|
|
|
|
|
|
$sth1->execute( $batch_id ); |
102
|
0
|
|
|
|
|
|
while ( my $h = $sth1->fetchrow_hashref ) { |
103
|
0
|
0
|
|
|
|
|
if ( $h->{progress} eq '100' ) { |
104
|
0
|
|
|
|
|
|
$result{nb_finished}++; |
105
|
0
|
|
|
|
|
|
push(@{$result{finished_test_ids}}, $h->{hash_id}); |
|
0
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
} |
107
|
|
|
|
|
|
|
else { |
108
|
0
|
|
|
|
|
|
$result{nb_running}++; |
109
|
|
|
|
|
|
|
} |
110
|
|
|
|
|
|
|
} |
111
|
|
|
|
|
|
|
|
112
|
0
|
|
|
|
|
|
return \%result; |
113
|
|
|
|
|
|
|
} |
114
|
|
|
|
|
|
|
|
115
|
2
|
|
|
2
|
|
16
|
no Moose::Role; |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
19
|
|
116
|
|
|
|
|
|
|
|
117
|
|
|
|
|
|
|
1; |