Code

Don't by case sensitive when comparing mac addresses.
[gosa.git] / gosa-si / server / events / databases.pm
1 package databases;
2 use Exporter;
3 @ISA = qw(Exporter);
4 my @events = (
5     "get_events", 
6     "query_jobdb",
7     "query_packages_list",
8     "count_jobdb",
9     "count_packages_list",
10     "delete_jobdb_entry",
11     "clear_jobdb",
12     "update_status_jobdb_entry",
13     );
14 @EXPORT = @events;
16 use strict;
17 use warnings;
18 use GOSA::GosaSupportDaemon;
19 use Data::Dumper;
20 use utf8;
22 BEGIN {}
24 END {}
26 ### Start ######################################################################
28 #&main::read_configfile($main::cfg_file, %cfg_defaults);
30 sub get_events {
31     return \@events;
32 }
35 sub query_packages_list { return &query_db( @_ ) ; }
36 sub query_jobdb { return &query_db( @_ ) ; }
37 sub query_db {
38     my ($msg, $msg_hash, $session_id) = @_ ;
39     my $header = @{$msg_hash->{'header'}}[0];
40     my $target = @{$msg_hash->{'target'}}[0];
41     my $source = @{$msg_hash->{'source'}}[0];
42     my $table;
43     my $db;
44     if( $header =~ /query_jobdb/ ) {
45         $table = $main::job_queue_tn;
46         $db = $main::job_db;
47     } elsif( $header =~ /query_packages_list/ ) {
48         $table = $main::packages_list_tn;
49         $db = $main::packages_list_db;
50     }
51    
52     # prepare sql statement and execute query
53     my $select= &get_select_statement($msg, $msg_hash);
54     my $where= &get_where_statement($msg, $msg_hash);
55     my $limit= &get_limit_statement($msg, $msg_hash);
56     my $orderby= &get_orderby_statement($msg, $msg_hash);
57     my $sql_statement= "SELECT $select FROM $table $where $orderby $limit";
58     my $res_hash = $db->select_dbentry($sql_statement);
59     
60     my $out_xml = &db_res2si_msg($res_hash, $header, $target, $source);
61     my @out_msg_l = ( $out_xml );
62     return @out_msg_l;
63 }
64     
66 sub count_packages_list{ return &count_db( @_ ); }
67 sub count_jobdb{ return &count_db( @_ ); }
68 sub count_db {
69     my ($msg, $msg_hash, $session_id) = @_;
70     my $header = @{$msg_hash->{'header'}}[0];
71     my $target = @{$msg_hash->{'target'}}[0];
72     my $source = @{$msg_hash->{'source'}}[0];
73     my $table;
74     my $db;
75     if( $header =~ /count_jobdb/ ) {
76         $table = $main::job_queue_tn;
77         $db = $main::job_db;
78     } elsif( $header =~ /count_packages_list/ ) {
79         $table = $main::packages_list_tn;
80         $db = $main::packages_list_db;
81     }
83     # prepare sql statement and execute query
84     my $res_hash = $db->select_dbentry("SELECT * FROM $table");
86     my $count = keys(%{$res_hash});
87     my $out_xml= "<xml><header>answer</header><source>$target</source><target>$source</target><count>$count</count></xml>";
88     my @out_msg_l = ( $out_xml );
89     return @out_msg_l;
90 }
92 sub delete_jobdb_entry {
93     my ($msg, $msg_hash, $session_id) = @_ ;
94     my $target = @{$msg_hash->{'target'}}[0];
95     my $source = @{$msg_hash->{'source'}}[0];
96     
97     # prepare query sql statement
98     my $table= $main::job_queue_tn;
99     my $where= &get_where_statement($msg, $msg_hash);
100     my $sql_statement = "DELETE FROM $table $where";
101     
102     # execute db query
103     my $db_res = $main::job_db->del_dbentry($sql_statement);
105     my $res;
106     if( $db_res > 0 ) { 
107         $res = 0 ;
108     } else {
109         $res = 1;
110     }
112     # prepare xml answer
113     my $out_xml = "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>$res</answer1></xml>";
114     my @out_msg_l = ( $out_xml );
115     return @out_msg_l;
120 sub clear_jobdb {
121     my ($msg, $msg_hash, $session_id) = @_ ;
122     my $target = @{$msg_hash->{'target'}}[0];
123     my $source = @{$msg_hash->{'source'}}[0];
125     my $error= 0;
126     my $out_xml= "<xml><answer1>1</answer1></xml>";
127  
128     my $table= $main::job_queue_tn;
129     
130     my $sql_statement = "DELETE FROM $table";
131     my $db_res = $main::job_db->del_dbentry($sql_statement);
132     if( not $db_res > 0 ) { $error++; };
133     
134     if( $error == 0 ) {
135         $out_xml = "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>0</answer1></xml>";
136     }
137     my @out_msg_l = ( $out_xml );
138     return @out_msg_l;
142 sub update_status_jobdb_entry {
143     my ($msg, $msg_hash, $session_id) = @_ ;
144     my $target = @{$msg_hash->{'target'}}[0];
145     my $source = @{$msg_hash->{'source'}}[0];
147     my $error= 0;
148     my $out_xml= "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>1</answer1></xml>";
150     my @len_hash = keys %{$msg_hash};
151     if( 0 == @len_hash) {  $error++; };
152     
153     # prepare query sql statement
154     if( $error == 0) {
155         my $table= $main::job_queue_tn;
156         my $where= &get_where_statement($msg, $msg_hash);
157         my $update= &get_update_statement($msg, $msg_hash);
159         # conditions
160         # no timestamp update if status eq waiting
161         my $sql_statement = "SELECT * FROM $table $where AND status='processing'";
162         my $res_hash = $main::job_db->select_dbentry($sql_statement);
163         if( (0 != keys(%$res_hash)) && ($update =~ /timestamp/i) ) {
164             $error ++;
165             $out_xml = "<answer1>1</answer1><error_string>there is no timestamp update allowed while status is 'processing'</error_string>";
166         }
168         if( $error == 0 ) {
169             my $sql_statement = "UPDATE $table $update $where";
170             # execute db query
171             my $db_res = $main::job_db->update_dbentry($sql_statement);
173             # check success of db update
174             if( not $db_res > 0 ) { $error++; };
175         }
176     }
178     if( $error == 0) {
179         $out_xml = "<answer1>0</answer1>";
180     }
181     
182     my $out_msg = sprintf("<xml><header>answer</header><source>%s</source><target>%s</target>%s</xml>", $target, $source, $out_xml);
183     my @out_msg_l = ( $out_msg );
184     return @out_msg_l;
187 1;