- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
#!/usr/bin/perl
#
# Plugin to monitor CPU frequency scaling via time_in_state
#
# Origional Author: Kamen Naydenov @pau4o
# Contributors:
#
#
#
use strict;
use warnings;
my $data_file = '/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state';
if ($ARGV[0] and $ARGV[0] eq "autoconf") {
if (-r "$data_file") {
print "yes\n";
exit 0;
} else {
print $data_file, " not found\n";
exit 1;
}
}
my (%cpufreq_stats, $cpufreq, $freq, $total_time, $graphOrder, $firstOne);
&fetch_info;
if ($ARGV[0] and $ARGV[0] eq "config") {
print 'graph_args --base 1000 -l 0 -u 100', "\n";
print 'graph_vlabel %', "\n";
print 'graph_scale no', "\n";
print 'graph_title CPU scaling statistics', "\n";
print 'graph_category system', "\n";
print 'graph_info This graph shows how much time CPU spend in each supported frequency.', "\n";
foreach $freq (sort { $b <=> $a } keys %cpufreq_stats) {
$graphOrder .= 'cpu_at_' . $freq . ' ';
print 'cpu_at_', $freq, '.label ', $freq, "\n";
print 'cpu_at_', $freq, '.info Time spend using frequency of ', $freq, " Hz \n";
print 'cpu_at_', $freq, '.min 0', "\n";
print 'cpu_at_', $freq, '.max 100', "\n";
# if ($firstOne) {
# print $freq, ".draw STACK\n";
# } else {
# print $freq, ".draw AREA\n";
# }
# $firstOne++;
}
print 'graph_order ', $graphOrder, "\n";
exit 0;
}
foreach $cpufreq (sort { $b <=> $a } keys %cpufreq_stats ) {
my $time_in_percent = $cpufreq_stats{"$cpufreq"} * 100 / $total_time;
print 'cpu_at_', $cpufreq, '.value ', $time_in_percent, "\n";
}
sub fetch_info {
open (IN, '<', "$data_file")
or die "Could not open $data_file for reading: $!";
while (<IN>) {
if (/^(\d+)\s+(\d+)\s+/) {
$cpufreq_stats{"$1"} = $2;
$total_time += $2;
}
}
close (IN) or die "$!";
}
cykablyad 12.02.2017 11:04 # +2
bormand 12.02.2017 11:24 # +2
guestinho 12.02.2017 11:58 # 0
cykablyad 12.02.2017 12:13 # 0
huesto 12.02.2017 15:49 # +5
inkanus-gray 12.02.2017 16:19 # +7
Lokich 14.02.2017 08:27 # +2
как это вообще можно читать? это каким больным ублюдком надо быть?
dxd 14.02.2017 09:03 # +2
guestinho 14.02.2017 15:12 # +2
bormand 14.02.2017 17:40 # +1
Есть же - die + eval { }.
guestinho 14.02.2017 19:16 # −5
barop 15.02.2017 21:03 # +1
CTEPTOP 15.02.2017 21:13 # 0
Братишка, ты ли это?
kegdan 15.02.2017 17:16 # 0
CHayT 14.02.2017 21:41 # +3
Если в языке можно вызвать функцию по указателю, в нём возможны продолжения. А от них до исключений -- один шаг.
kegdan 15.02.2017 04:56 # +3
barop 15.02.2017 19:29 # 0
huesto 15.02.2017 19:57 # 0
CTEPTOP 14.02.2017 19:27 # +2
guestinho 15.02.2017 14:52 # +1
inkanus-gray 15.02.2017 21:17 # 0
И сто́ит шаг пройти,
Заносит время след.
Обратного пути
У жизни просто нет.
barop 15.02.2017 21:50 # 0
я видел тыщу плагинов к мамину, и все они такие
Ну да, для новичка тяжеловато, но осилить примерно три строки можно на любом ЯП, тем более если ты перловик
inkanus-gray 15.02.2017 22:11 # +2
Хугин и Мунин
над миром всё время
летают без устали;
мне за Хугина страшно,
страшней за Мунина, —
вернутся ли вороны!
kegdan 16.02.2017 08:33 # +1