1 package load_reporter;
4 use strict;
5 use warnings;
6 use Exporter;
8 use GOSA::GosaSupportDaemon;
10 BEGIN {}
11 END {}
13 our @ISA = qw(Exporter);
15 my @events = (
16 "get_events",
17 "get_terminal_server",
18 "get_load",
19 "report_load",
20 "set_terminal_server",
21 );
23 our @EXPORT = @events;
25 my $ts_load_file;
26 my $waiting_for_ts_info;
27 my %cfg_defaults = (
28 "client" => {
29 "ts-load-file" => [\$ts_load_file, "/var/run/gosa-si-client-ts-load.txt"],
30 "waiting-for-ts-info" => [\$waiting_for_ts_info, 5],
31 },
32 );
33 &GOSA::GosaSupportDaemon::read_configfile($main::cfg_file, %cfg_defaults);
36 ### FUNCTIONS #################################################################
37 sub get_events { return \@events; }
39 sub get_terminal_server
40 {
41 my ($content, $poe_kernel) = @_ ;
43 # Create message
44 my $msg_hash = &create_xml_hash("get_terminal_server", $main::client_address, $main::server_address);
45 &add_content2xml_hash($msg_hash, "macaddress", $main::client_mac_address);
46 my $msg = &create_xml_string($msg_hash);
48 $poe_kernel->delay_set('trigger_set_terminal_server', $waiting_for_ts_info);
49 &main::daemon_log("INFO: Start obtaining terminal server load information. Set waiting time to '$waiting_for_ts_info' sec.", 5);
50 return $msg;
51 }
53 sub get_load
54 {
55 my ($msg, $msg_hash) = @_ ;
56 my $source = @{$msg_hash->{'source'}}[0];
57 my $target = @{$msg_hash->{'target'}}[0];
58 my $out_msg;
61 my $file = "/proc/loadavg";
62 if ((not -f $file) || (not -r $file)) { return }
63 open(my $FHD, "<", "$file");
64 my $line = <$FHD>;
65 close($FHD);
66 chomp($line);
68 $out_msg = &create_xml_string(&create_xml_hash("report_load", $target, $source, $line));
70 return $out_msg;
71 }
73 sub report_load
74 {
75 my ($msg, $msg_hash) = @_ ;
76 my $source = @{$msg_hash->{'source'}}[0];
77 my $load = @{$msg_hash->{'report_load'}}[0];
79 $main::terminal_server_hash->{$source} = $load;
81 return;
82 }
84 sub set_terminal_server
85 {
86 my $file_content = "";
87 while (my ($ts, $load) = each %$main::terminal_server_hash)
88 {
89 $file_content .= "$ts $load\n";
90 }
91 open(my $FHD, ">", "$ts_load_file.part");
92 printf $FHD $file_content;
93 close($FHD);
95 system("mv $ts_load_file.part $ts_load_file");
96 &main::daemon_log("INFO: Wrote terminal server load information to $ts_load_file", 5);
97 return;
98 }
100 1;