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;
17 BEGIN {}
18 END {}
20 my $ts_load_file;
21 my $waiting_for_ts_info;
22 my %cfg_defaults = (
23 "client" => {
24 "ts-load-file" => [\$ts_load_file, "/var/run/gosa-si-client-ts-load.txt"],
25 "waiting-for-ts-info" => [\$waiting_for_ts_info, 5],
26 },
27 );
28 &GOSA::GosaSupportDaemon::read_configfile($main::cfg_file, %cfg_defaults);
31 ### FUNCTIONS #################################################################
32 sub get_events { return \@events; }
34 sub get_terminal_server
35 {
36 my ($content, $poe_kernel) = @_ ;
38 # Create message
39 my $msg_hash = &create_xml_hash("get_terminal_server", $main::client_address, $main::server_address);
40 &add_content2xml_hash($msg_hash, "macaddress", $main::client_mac_address);
41 my $msg = &create_xml_string($msg_hash);
43 $poe_kernel->delay_set('trigger_set_terminal_server', $waiting_for_ts_info);
44 &main::daemon_log("INFO: Start obtaining terminal server load information. Set waiting time to '$waiting_for_ts_info' sec.", 5);
45 return $msg;
46 }
48 sub get_load
49 {
50 my ($msg, $msg_hash) = @_ ;
51 my $source = @{$msg_hash->{'source'}}[0];
52 my $target = @{$msg_hash->{'target'}}[0];
53 my $out_msg;
56 my $file = "/proc/loadavg";
57 if ((not -f $file) || (not -r $file)) { return }
58 open(FHD, "<$file");
59 my $line = <FHD>;
60 close(FHD);
61 chomp($line);
63 $out_msg = &create_xml_string(&create_xml_hash("report_load", $target, $source, $line));
65 return $out_msg;
66 }
68 sub report_load
69 {
70 my ($msg, $msg_hash) = @_ ;
71 my $source = @{$msg_hash->{'source'}}[0];
72 my $load = @{$msg_hash->{'report_load'}}[0];
74 $main::terminal_server_hash->{$source} = $load;
76 return;
77 }
79 sub set_terminal_server
80 {
81 my $file_content = "";
82 while (my ($ts, $load) = each %$main::terminal_server_hash)
83 {
84 $file_content .= "$ts $load\n";
85 }
86 open(FHD, ">$ts_load_file.part");
87 printf FHD $file_content;
88 close FHD;
90 system("mv $ts_load_file.part $ts_load_file");
91 &main::daemon_log("INFO: Wrote terminal server load information to $ts_load_file", 5);
92 return;
93 }
95 1;