Code

* checkin of new plugin load_reporter, again
[gosa.git] / gosa-si / client / events / load_reporter.pm
1 package load_reporter;
2 use Exporter;
3 @ISA = qw(Exporter);
4 my @events = (
5     "get_events",
6     "get_terminal_server",
7         "get_load",
8         "report_load",
9         "set_terminal_server",
10     );
11 @EXPORT = @events;
13 use strict;
14 use warnings;
15 use GOSA::GosaSupportDaemon;
16 use Data::Dumper;
18 BEGIN {}
19 END {}
21 my $ts_load_file;
22 my $waiting_for_ts_info;
23 my %cfg_defaults = (
24                 "client" => {
25                 "ts-load-file" => [\$ts_load_file, "/var/run/gosa-si-client-ts-load.txt"],
26                 "waiting-for-ts-info" => [\$waiting_for_ts_info, 5],
27                 },
28                 );
29 &GOSA::GosaSupportDaemon::read_configfile($main::cfg_file, %cfg_defaults);
32 ### FUNCTIONS #################################################################
33 sub get_events { return \@events; }
35 sub get_terminal_server 
36 {
37         my ($content, $poe_kernel) = @_ ;
39         # Create message
40         my $msg_hash = &create_xml_hash("get_terminal_server", $main::client_address, $main::server_address);
41         &add_content2xml_hash($msg_hash, "macaddress", $main::client_mac_address);
42         my $msg = &create_xml_string($msg_hash);
43         
44         $poe_kernel->delay_set('trigger_set_terminal_server', $waiting_for_ts_info);
45         &main::daemon_log("INFO: Start obtaining terminal server load information. Set waiting time to '$waiting_for_ts_info' sec.", 5);
46         return $msg;
47 }
49 sub get_load 
50 {
51         my ($msg, $msg_hash) = @_ ;     
52         my $source = @{$msg_hash->{'source'}}[0];
53         my $target = @{$msg_hash->{'target'}}[0];
54         my $out_msg;
57         my $file = "/proc/loadavg";
58         if ((not -f $file) || (not -r $file)) { return }
59         open(FHD, "<$file");
60         my $line = <FHD>;
61         close(FHD);
62         chomp($line);
64         $out_msg = &create_xml_string(&create_xml_hash("report_load", $target, $source, $line));
66         return $out_msg;
67 }
69 sub report_load
70 {
71         my ($msg, $msg_hash) = @_ ;
72         my $source = @{$msg_hash->{'source'}}[0];
73         my $load = @{$msg_hash->{'report_load'}}[0];
75         $main::terminal_server_hash->{$source} = $load;
77         return;
78 }
80 sub set_terminal_server
81 {
82         my $file_content = "";
83         while (my ($ts, $load) = each %$main::terminal_server_hash)
84         {
85                 $file_content .= "$ts $load\n";
86         }
87         open(FHD, ">$ts_load_file.part");
88         printf FHD $file_content;
89         close FHD;
91         system("mv $ts_load_file.part $ts_load_file");
92         &main::daemon_log("INFO: Wrote terminal server load information to $ts_load_file", 5);
93         return;
94 }
96 1;