Code

Added branches container for old stuff
[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     "count_jobdb",
8     "delete_jobdb_entry",
9     "clear_jobdb",
10     "update_status_jobdb_entry",
11     "query_packages_list",
12     "count_packages_list",
13     "query_fai_server",
14     "count_fai_server",
15     "query_fai_release",
16     "count_fai_release",
17     );
18 @EXPORT = @events;
20 use strict;
21 use warnings;
22 use GOSA::GosaSupportDaemon;
23 use Data::Dumper;
25 BEGIN {}
27 END {}
29 ### Start ######################################################################
31 #&main::read_configfile($main::cfg_file, %cfg_defaults);
33 sub get_events {
34     return \@events;
35 }
37 sub query_fai_release{ return &query_db( @_ ); }
38 sub query_fai_server{ return &query_db( @_ ) ; }
39 sub query_packages_list { return &query_db( @_ ) ; }
40 sub query_jobdb { return &query_db( @_ ) ; }
41 sub query_db {
42     my ($msg, $msg_hash, $session_id) = @_ ;
43     my $header = @{$msg_hash->{'header'}}[0];
44     my $target = @{$msg_hash->{'target'}}[0];
45     my $source = @{$msg_hash->{'source'}}[0];
46     my $table;
47     my $db;
48     if( $header =~ /query_jobdb/ ) {
49         $table = $main::job_queue_tn;
50         $db = $main::job_db;
51     } elsif( $header =~ /query_packages_list/ ) {
52         $table = $main::packages_list_tn;
53         $db = $main::packages_list_db;
54     } elsif( $header =~ /query_fai_server/ ) {
55         $table = $main::fai_server_tn;
56         $db = $main::fai_server_db;
57     } elsif( $header =~ /query_fai_release/ ) {
58         $table = $main::fai_release_tn;
59         $db = $main::fai_release_db;
60     }
62    
63     # prepare sql statement and execute query
64     my $select= &get_select_statement($msg, $msg_hash);
65     my $where= &get_where_statement($msg, $msg_hash);
66     my $limit= &get_limit_statement($msg, $msg_hash);
67     my $orderby= &get_orderby_statement($msg, $msg_hash);
68     my $sql_statement= "SELECT $select FROM $table $where $orderby $limit";
69     my $res_hash = $db->select_dbentry($sql_statement);
70     
71     my $out_xml = &db_res2si_msg($res_hash, $header, $source, $target);
72     #$out_xml =~ s/<\/xml>/<session_id>$session_id<\/session_id><\/xml>/;
73     my $forward_to_gosa = @{$msg_hash->{'forward_to_gosa'}}[0];
74     if (defined $forward_to_gosa) {
75         #&add_content2xml_hash($out_hash, "forward_to_gosa", $forward_to_gosa);
76         $out_xml =~s/<\/xml>/<forward_to_gosa>$forward_to_gosa<\/forward_to_gosa><\/xml>/;
77     }
78     my @out_msg_l = ( $out_xml );
80     return @out_msg_l;
81 }
82     
83 sub count_fai_releas{ return &count_db( @_ ); }    
84 sub count_fai_server{ return &count_db( @_ ); }
85 sub count_packages_list{ return &count_db( @_ ); }
86 sub count_jobdb{ return &count_db( @_ ); }
87 sub count_db {
88     my ($msg, $msg_hash, $session_id) = @_;
89     my $header = @{$msg_hash->{'header'}}[0];
90     my $target = @{$msg_hash->{'target'}}[0];
91     my $source = @{$msg_hash->{'source'}}[0];
92     my $table;
93     my $db;
95     if( $header =~ /count_jobdb/ ) {
96         $table = $main::job_queue_tn;
97         $db = $main::job_db;
98     } elsif( $header =~ /count_packages_list/ ) {
99         $table = $main::packages_list_tn;
100         $db = $main::packages_list_db;
101     } elsif( $header =~ /count_fai_server/ ) {
102         $table = $main::fai_server_tn;
103         $db = $main::fai_server_db;
104     } elsif( $header =~ /count_fai_release/ ) {
105         $table = $main::fai_release_tn;
106         $db = $main::fai_server_db;
107     }
110     # prepare sql statement and execute query
111     my $res_hash = $db->select_dbentry("SELECT * FROM $table");
113     my $count = keys(%{$res_hash});
114     my $out_xml= "<xml><header>answer</header><source>$target</source><target>$source</target><count>$count</count><session_id>$session_id</session_id></xml>";
115     my $forward_to_gosa = @{$msg_hash->{'forward_to_gosa'}}[0];
116     if (defined $forward_to_gosa) {
117         #&add_content2xml_hash($out_hash, "forward_to_gosa", $forward_to_gosa);
118         $out_xml =~s/<\/xml>/<forward_to_gosa>$forward_to_gosa<\/forward_to_gosa><\/xml>/;
119     }
121     my @out_msg_l = ( $out_xml );
122     return @out_msg_l;
125 sub delete_jobdb_entry {
126     my ($msg, $msg_hash, $session_id) = @_ ;
127     my $target = @{$msg_hash->{'target'}}[0];
128     my $source = @{$msg_hash->{'source'}}[0];
129     
130     # prepare query sql statement
131     my $where= &get_where_statement($msg, $msg_hash);
133     #my $sql_statement = "DELETE FROM $main::job_queue_tn $where";
134         #&main::daemon_log("$session_id DEBUG: $sql_statement",7);
135     # execute db query
136     #my $db_res = $main::job_db->del_dbentry($sql_statement);
137     #
138     #my $res;
139     #if( $db_res > 0 ) { 
140     #    $res = 0 ;
141     #} else {
142     #    $res = 1;
143     #}
145     # set job to status 'done', job will be deleted automatically
146     my $sql_statement = "UPDATE $main::job_queue_tn ".
147         "SET status='done', modified='1' ".
148         "$where";
149     &main::daemon_log("$session_id DEBUG: $sql_statement", 7);
150     my $res = $main::job_db->update_dbentry( $sql_statement );
151  
152     # prepare xml answer
153     my $out_xml = "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>$res</answer1><session_id>$session_id</session_id></xml>";
154     my $forward_to_gosa = @{$msg_hash->{'forward_to_gosa'}}[0];
155     if (defined $forward_to_gosa) {
156         $out_xml =~s/<\/xml>/<forward_to_gosa>$forward_to_gosa<\/forward_to_gosa><\/xml>/;
157     }
159     my @out_msg_l = ( $out_xml );
160     return @out_msg_l;
165 sub clear_jobdb {
166     my ($msg, $msg_hash, $session_id) = @_ ;
167     my $target = @{$msg_hash->{'target'}}[0];
168     my $source = @{$msg_hash->{'source'}}[0];
170     my $error= 0;
171     my $out_xml= "<xml><answer1>1</answer1></xml>";
172  
173     my $table= $main::job_queue_tn;
174     
175     my $sql_statement = "DELETE FROM $table";
176     my $db_res = $main::job_db->del_dbentry($sql_statement);
177     if( not $db_res > 0 ) { $error++; };
178     
179     if( $error == 0 ) {
180         $out_xml = "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>0</answer1><session_id>$session_id</session_id></xml>";
181     }
182     my $forward_to_gosa = @{$msg_hash->{'forward_to_gosa'}}[0];
183     if (defined $forward_to_gosa) {
184         #&add_content2xml_hash($out_hash, "forward_to_gosa", $forward_to_gosa);
185         $out_xml =~s/<\/xml>/<forward_to_gosa>$forward_to_gosa<\/forward_to_gosa><\/xml>/;
186     }
187    
188     my @out_msg_l = ( $out_xml );
189     return @out_msg_l;
193 sub update_status_jobdb_entry {
194     my ($msg, $msg_hash, $session_id) = @_ ;
195     my $target = @{$msg_hash->{'target'}}[0];
196     my $source = @{$msg_hash->{'source'}}[0];
198     my $error= 0;
199     my $out_xml= "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>1</answer1><session_id>$session_id</session_id></xml>";
201     my @len_hash = keys %{$msg_hash};
202     if( 0 == @len_hash) {  $error++; };
203     
204     # prepare query sql statement
205     if( $error == 0) {
206         my $table= $main::job_queue_tn;
207         my $where= &get_where_statement($msg, $msg_hash);
208         my $update= &get_update_statement($msg, $msg_hash);
210         # conditions
211         # no timestamp update if status eq waiting
212         my $sql_statement = "SELECT * FROM $table $where AND status='processing'";
213         my $res_hash = $main::job_db->select_dbentry($sql_statement);
214         if( (0 != keys(%$res_hash)) && ($update =~ /timestamp/i) ) {
215             $error ++;
216             $out_xml = "<answer1>1</answer1><error_string>there is no timestamp update allowed while status is 'processing'</error_string>";
217         }
219         if( $error == 0 ) {
220             my $sql_statement = "UPDATE $table $update $where";
221             # execute db query
222             my $db_res = $main::job_db->update_dbentry($sql_statement);
224             # check success of db update
225             if( not $db_res > 0 ) { $error++; };
226         }
227     }
229     if( $error == 0) {
230         $out_xml = "<answer1>0</answer1>";
231     }
232     
233     my $out_msg = sprintf("<xml><header>answer</header><source>%s</source><target>%s</target>%s<session_id>$session_id</session_id></xml>", $target, $source, $out_xml);
234     my $forward_to_gosa = @{$msg_hash->{'forward_to_gosa'}}[0];
235     if (defined $forward_to_gosa) {
236         #&add_content2xml_hash($out_hash, "forward_to_gosa", $forward_to_gosa);
237         $out_xml =~s/<\/xml>/<forward_to_gosa>$forward_to_gosa<\/forward_to_gosa><\/xml>/;
238     }
239      
240     my @out_msg_l = ( $out_msg );
241     return @out_msg_l;
245 =pod
247 =head1 NAME
249 databases - Implementation of a GOsa-SI event module for GOsa-SI-server.
251 =head1 SYNOPSIS
253  use GOSA::GosaSupportDaemon;
255 =head1 DESCRIPTION
257 This GOsa-SI event module containing all functions to handle messages coming from GOsa and concerning GOsa-SI databases. 
259 This module will be automatically imported by GOsa-SI if it is under F</usr/lib/gosa-si/server/E<lt>PACKAGEMODULEE<gt>/> .
261 =head1 METHODS
263 =over 4
265 =item get_events ( )
267 =item query_jobdb ( )
269 =item count_jobdb ( )
271 =item delete_jobdb_entry ( )
273 =item clear_jobdb ( )
275 =item update_status_jobdb_entry ( )
277 =item query_packages_list ( )
279 =item count_packages_list ( )
281 =item query_fai_server ( )
283 =item count_fai_server ( )
285 =item query_fai_release ( )
287 =item count_fai_release ( )
289 =back
291 =head1 BUGS
293 Please report any bugs, or post any suggestions, to the GOsa mailing list E<lt>gosa-devel@oss.gonicus.deE<gt> or to L<https://oss.gonicus.de/labs/gosa>
295 =head1 COPYRIGHT
297 This code is part of GOsa (L<http://www.gosa-project.org>)
299 Copyright (C) 2003-2008 GONICUS GmbH
301 This program is distributed in the hope that it will be useful,
302 but WITHOUT ANY WARRANTY; without even the implied warranty of
303 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
304 GNU General Public License for more details.
306 =cut
309 1;