Thread Hash als Option missbrauchen (118 answers)
Opened by bloonix at 2005-12-19 02:24

bloonix
 2005-12-20 19:15
#60996 #60996
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[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...

Code: (dl )
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.

View full thread Hash als Option missbrauchen