Code

gosa-si-server now multi-tasking-able
[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     );
16 @EXPORT = @events;
18 use strict;
19 use warnings;
20 use GOSA::GosaSupportDaemon;
21 use Data::Dumper;
22 use utf8;
24 BEGIN {}
26 END {}
28 ### Start ######################################################################
30 #&main::read_configfile($main::cfg_file, %cfg_defaults);
32 sub get_events {
33     return \@events;
34 }
37 sub query_fai_server{ return &query_db( @_ ) ; }
38 sub query_packages_list { return &query_db( @_ ) ; }
39 sub query_jobdb { return &query_db( @_ ) ; }
40 sub query_db {
41     my ($msg, $msg_hash, $session_id) = @_ ;
42     my $header = @{$msg_hash->{'header'}}[0];
43     my $target = @{$msg_hash->{'target'}}[0];
44     my $source = @{$msg_hash->{'source'}}[0];
45     my $table;
46     my $db;
47     if( $header =~ /query_jobdb/ ) {
48         $table = $main::job_queue_tn;
49         $db = $main::job_db;
50     } elsif( $header =~ /query_packages_list/ ) {
51         $table = $main::packages_list_tn;
52         $db = $main::packages_list_db;
53     }± elsif( $header =~ /query_fai_server/ ) {
54         $table = $main::fai_server_tn;
55         $db = $main::fai_server_db
56     }
57    
58     # prepare sql statement and execute query
59     my $select= &get_select_statement($msg, $msg_hash);
60     my $where= &get_where_statement($msg, $msg_hash);
61     my $limit= &get_limit_statement($msg, $msg_hash);
62     my $orderby= &get_orderby_statement($msg, $msg_hash);
63     my $sql_statement= "SELECT $select FROM $table $where $orderby $limit";
64     my $res_hash = $db->select_dbentry($sql_statement);
65     
66     my $out_xml = &db_res2si_msg($res_hash, $header, $target, $source);
67     my @out_msg_l = ( $out_xml );
68     return @out_msg_l;
69 }
70     
71 sub count_fai_server{ return &count_db( @_ ); }
72 sub count_packages_list{ return &count_db( @_ ); }
73 sub count_jobdb{ return &count_db( @_ ); }
74 sub count_db {
75     my ($msg, $msg_hash, $session_id) = @_;
76     my $header = @{$msg_hash->{'header'}}[0];
77     my $target = @{$msg_hash->{'target'}}[0];
78     my $source = @{$msg_hash->{'source'}}[0];
79     my $table;
80     my $db;
82     
84     if( $header =~ /count_jobdb/ ) {
85         $table = $main::job_queue_tn;
86         $db = $main::job_db;
87     } elsif( $header =~ /count_packages_list/ ) {
88         $table = $main::packages_list_tn;
89         $db = $main::packages_list_db;
90     } elsif( $header =~ /count_fai_server/ ) {
91         $table = $main::fai_server_tn;
92         $db = $main::fai_server_db
93     }
95     # prepare sql statement and execute query
96     my $res_hash = $db->select_dbentry("SELECT * FROM $table");
98     my $count = keys(%{$res_hash});
99     my $out_xml= "<xml><header>answer</header><source>$target</source><target>$source</target><count>$count</count></xml>";
100     my @out_msg_l = ( $out_xml );
101     return @out_msg_l;
104 sub delete_jobdb_entry {
105     my ($msg, $msg_hash, $session_id) = @_ ;
106     my $target = @{$msg_hash->{'target'}}[0];
107     my $source = @{$msg_hash->{'source'}}[0];
108     
109     # prepare query sql statement
110     my $table= $main::job_queue_tn;
111     my $where= &get_where_statement($msg, $msg_hash);
112     my $sql_statement = "DELETE FROM $table $where";
113     
114     # execute db query
115     my $db_res = $main::job_db->del_dbentry($sql_statement);
117     my $res;
118     if( $db_res > 0 ) { 
119         $res = 0 ;
120     } else {
121         $res = 1;
122     }
124     # prepare xml answer
125     my $out_xml = "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>$res</answer1></xml>";
126     my @out_msg_l = ( $out_xml );
127     return @out_msg_l;
132 sub clear_jobdb {
133     my ($msg, $msg_hash, $session_id) = @_ ;
134     my $target = @{$msg_hash->{'target'}}[0];
135     my $source = @{$msg_hash->{'source'}}[0];
137     my $error= 0;
138     my $out_xml= "<xml><answer1>1</answer1></xml>";
139  
140     my $table= $main::job_queue_tn;
141     
142     my $sql_statement = "DELETE FROM $table";
143     my $db_res = $main::job_db->del_dbentry($sql_statement);
144     if( not $db_res > 0 ) { $error++; };
145     
146     if( $error == 0 ) {
147         $out_xml = "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>0</answer1></xml>";
148     }
149     my @out_msg_l = ( $out_xml );
150     return @out_msg_l;
154 sub update_status_jobdb_entry {
155     my ($msg, $msg_hash, $session_id) = @_ ;
156     my $target = @{$msg_hash->{'target'}}[0];
157     my $source = @{$msg_hash->{'source'}}[0];
159     my $error= 0;
160     my $out_xml= "<xml><header>answer</header><source>$target</source><target>$source</target><answer1>1</answer1></xml>";
162     my @len_hash = keys %{$msg_hash};
163     if( 0 == @len_hash) {  $error++; };
164     
165     # prepare query sql statement
166     if( $error == 0) {
167         my $table= $main::job_queue_tn;
168         my $where= &get_where_statement($msg, $msg_hash);
169         my $update= &get_update_statement($msg, $msg_hash);
171         # conditions
172         # no timestamp update if status eq waiting
173         my $sql_statement = "SELECT * FROM $table $where AND status='processing'";
174         my $res_hash = $main::job_db->select_dbentry($sql_statement);
175         if( (0 != keys(%$res_hash)) && ($update =~ /timestamp/i) ) {
176             $error ++;
177             $out_xml = "<answer1>1</answer1><error_string>there is no timestamp update allowed while status is 'processing'</error_string>";
178         }
180         if( $error == 0 ) {
181             my $sql_statement = "UPDATE $table $update $where";
182             # execute db query
183             my $db_res = $main::job_db->update_dbentry($sql_statement);
185             # check success of db update
186             if( not $db_res > 0 ) { $error++; };
187         }
188     }
190     if( $error == 0) {
191         $out_xml = "<answer1>0</answer1>";
192     }
193     
194     my $out_msg = sprintf("<xml><header>answer</header><source>%s</source><target>%s</target>%s</xml>", $target, $source, $out_xml);
195     my @out_msg_l = ( $out_msg );
196     return @out_msg_l;
199 1;