[quote=steffenw,20.12.2005, 13:21]Nein, ich hatte auf den allerersten Beitrag geantwortet. Das war Hashzugriff und foreach zusammen drin. Dein Beitrag, der dritte, geht davon aus, daß sie Sub und der Parameter gleich heißen. Wenn das so ist, dann ist das gut so. Ansonsten bleibt doch nur elsif übrig oder man legt die Subreferenzen in den Hash, wenn man keine symbolischen Referenzen will.[/quote]
du hast natürlich Recht. Ich habe das Ganze nun so realisiert...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
sub Statistics {
my %param;
if (ref $_[0] eq 'HASH') {
%param = %{$_[0]};
}
elsif (@_ & 1) {
die 'LinuxStatistics: not enough arguments ...';
}
else {
%param = @_;
}
my $t_stats = {};
my $stats = {};
# set a time stamp for the statistics
if ($param{TimePoint}) {
my @tm = localtime(time);
$tm[4] += 1;
$tm[5] += 1900;
foreach (@tm) {
$_ = "0$_" if $_ < 10;
}
$stats->{TimePoint}->{Date} = "$tm[5]-$tm[4]-$tm[3]";
$stats->{TimePoint}->{Time} = "$tm[2]:$tm[1]:$tm[0]";
}
# get the statistics
$stats->{SysInfo} = SysInfo() if $param{SysInfo};
$stats->{MemStats} = MemStats() if $param{MemStats};
$stats->{SockStats} = SockStats() if $param{SockStats};
$stats->{DiskUsage} = DiskUsage() if $param{DiskUsage};
$stats->{LoadAVG} = LoadAVG() if $param{LoadAVG};
$stats->{Processes} = Processes() if $param{Processes};
# some statistics must run twice because the differences are needed
$t_stats->{ProcStats} = ProcStats() if $param{ProcStats};
$t_stats->{PgSwStats} = PgSwStats() if $param{PgSwStats};
($t_stats->{NetStats},$t_stats->{NetSumStats}) = NetStats() if $param{NetStats};
($t_stats->{DiskStats},$t_stats->{DiskSumStats}) = DiskStats() if $param{DiskStats};
# wait a second until the next step
sleep(1) if %{$t_stats};
# now we calculate the difference
if ($param{ProcStats}) {
$stats->{ProcStats} = ProcStats();
foreach my $x (keys %{$stats->{ProcStats}}) {
$stats->{ProcStats}->{$x} -= $t_stats->{ProcStats}->{$x};
}
$stats->{ProcStats}->{ProcUser} = sprintf('%.2f',100 * $stats->{ProcStats}->{ProcUser} / $stats->{ProcStats}->{Uptime});
$stats->{ProcStats}->{ProcNice} = sprintf('%.2f',100 * $stats->{ProcStats}->{ProcNice} / $stats->{ProcStats}->{Uptime});
$stats->{ProcStats}->{ProcSystem} = sprintf('%.2f',100 * $stats->{ProcStats}->{ProcSystem} / $stats->{ProcStats}->{Uptime});
$stats->{ProcStats}->{ProcIdle} = sprintf('%.2f',100 * $stats->{ProcStats}->{ProcIdle} / $stats->{ProcStats}->{Uptime});
$stats->{ProcStats}->{ProcIOWait} = sprintf('%.2f',100 * $stats->{ProcStats}->{ProcIOWait} / $stats->{ProcStats}->{Uptime});
$stats->{ProcStats}->{ProcTotal} = $stats->{ProcStats}->{ProcUser} + $stats->{ProcStats}->{ProcNice} + $stats->{ProcStats}->{ProcSystem};
delete $stats->{ProcStats}->{Uptime};
}
if ($param{PgSwStats}) {
$stats->{PgSwStats} = PgSwStats();
foreach my $x (keys %{$stats->{PgSwStats}}) {
$stats->{PgSwStats}->{$x} -= $t_stats->{PgSwStats}->{$x};
}
}
if ($param{NetStats}) {
($stats->{NetStats},$stats->{NetSumStats}) = NetStats();
foreach my $x (keys %{$stats->{NetStats}}) {
foreach my $y (keys %{$stats->{NetStats}->{$x}}) {
$stats->{NetStats}->{$x}->{$y} -= $t_stats->{NetStats}->{$x}->{$y};
}
}
foreach my $x (keys %{$stats->{NetSumStats}}) {
$stats->{NetSumStats}->{$x} -= $t_stats->{NetSumStats}->{$x};
}
}
if ($param{DiskStats}) {
($stats->{DiskStats},$stats->{DiskSumStats}) = DiskStats();
foreach my $x (keys %{$stats->{DiskStats}}) {
foreach my $y (keys %{$stats->{DiskStats}->{$x}}) {
$stats->{DiskStats}->{$x}->{$y} -= $t_stats->{DiskStats}->{$x}->{$y};
}
}
foreach my $x (keys %{$stats->{DiskSumStats}}) {
$stats->{DiskSumStats}->{$x} -= $t_stats->{DiskSumStats}->{$x};
}
}
return $stats;
}
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.