File Coverage

blib/lib/Zonemaster/Backend/DB.pm
Criterion Covered Total %
statement 20 56 35.7
branch 4 20 20.0
condition 1 3 33.3
subroutine 6 9 66.6
pod 0 4 0.0
total 31 92 33.7


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;