Leser: 1
|< 1 2 3 4 5 6 7 ... 12 >| | 119 Einträge, 12 Seiten |
1
2
3
4
5
6
7
8
9
10
my @array = (1,2,3,4,5);
Benchmark::cmpthese(-1, {
'& 1' => sub { my $val = 1 if @array & 1; },
'modulo 2' => sub { my $val = 1 if @array % 2; },
});
Rate modulo 2 & 1
modulo 2 3113701/s -- -9%
& 1 3429921/s 10% --
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $stats = Statistics(
ProcStats => 1,
MemStats => 1,
NetStats => 1,
DiskStats => 1,
DiskUsage => 1,
);
sub Statistics {
my %param = @_;
my %stats;
if ($param{ProcStats}) {
$stats{ProcStats} = ProcStats();
} elsif ($param{NetStats}) {
$stats{NetStats} = NetStats();
} # usw ...
return \%stats;
}
1
2
3
4
5
6
7
8
9
10
11
12
my $stats = Statistics(qw/ProcStats MemStats NetStats DiskStats DiskUsage/);
sub Statistics {
my %param = map +($_ => undef), @_;
my %stats;
if (exists $param{ProcStats}) {
$stats{ProcStats} = ProcStats();
} elsif (exits $param{NetStats}) {
$stats{NetStats} = NetStats();
} # usw ...
return \%stats;
}
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;
}
1
2
3
4
5
6
7
8
9
10
11
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]";
1
2
3
4
5
my @tm = (localtime)[reverse 0..5]; # time ist default, gleich richtig für spätere Array-Slices sortieren
$tm[0] += 1900;
$tm[1]++;
$stats->{TimePoint}->{Time} = sprintf '%02d:%02d:%02d', @tm[0..2];
$stats->{TimePoint}->{Date} = sprintf '%04d-%02d-%02d', @tm[3..5];
1
2
3
4
5
6
$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};
1
2
3
4
for (qw/SysInfo MemStats SockStats DiskUsage LoadAVG Processes/) {
no strict 'refs';
$stats->{$_} = &$_() if $param{$_};
}
1
2
3
4
5
my @tm = (localtime)[reverse 0..5]; # time ist default, gleich richtig für spätere Array-Slices sortieren
$tm[0] += 1900;
$tm[1]++;
$stats->{TimePoint}->{Time} = sprintf '%02d:%02d:%02d', @tm[0..2];
$stats->{TimePoint}->{Date} = sprintf '%04d-%02d-%02d', @tm[3..5];
1
2
3
4
for (qw/SysInfo MemStats SockStats DiskUsage LoadAVG Processes/) {
no strict 'refs';
$stats->{$_} = &$_() if $param{$_};
}
|< 1 2 3 4 5 6 7 ... 12 >| | 119 Einträge, 12 Seiten |