-
Notifications
You must be signed in to change notification settings - Fork 125
/
CPU.pm
127 lines (95 loc) · 2.85 KB
/
CPU.pm
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package FusionInventory::Agent::Task::Inventory::Input::MacOS::CPU;
use strict;
use warnings;
use FusionInventory::Agent::Tools;
use FusionInventory::Agent::Tools::MacOS;
sub isEnabled {
return
-r '/usr/sbin/system_profiler';
}
sub doInventory {
my (%params) = @_;
my $inventory = $params{inventory};
my $logger = $params{logger};
my $sysprofile = getSystemProfilerInfos(@_);
foreach my $cpu (_getCpus(logger => $logger)) {
$inventory->addEntry(
section => 'CPUS',
entry => $cpu
);
}
### mem convert it to meg's if it comes back in gig's
my $mem = $sysprofile->{'Memory'};
if ($mem =~ /GB$/){
$mem =~ s/\sGB$//;
$mem = ($mem * 1024);
} elsif ($mem =~ /MB$/){
$mem =~ s/\sMB$//;
}
$inventory->setHardware({
MEMORY => $mem,
});
}
sub _getCpus{
my (%params) = @_;
my $logger = $params{logger};
my $sysctl = $params{sysctl};
# Get more informations from sysctl
my $sysctl = getFileHandle (
logger => $logger,
command => 'sysctl -a machdep.cpu',
file => $sysctl
);
# System profiler informations
my $sysprofile = getSystemProfilerInfos(@_);
#add sysctl informations into profiler informations
my $info = $sysprofile->{'Hardware'}->{'Hardware Overview'};
while (my $line = <$sysctl>) {
chomp $line;
if ($line =~ /(.+) : \s (.+)/x) {
$info->{$1} = $2;
}
}
my $type = $info->{'Processor Name'} ||
$info->{'CPU Type'};
my $procs = $info->{'Number Of Processors'} ||
$info->{'Number Of CPUs'} ||
1;
my $speed = $info->{'Processor Speed'} ||
$info->{'CPU Speed'};
my $stepping = $info->{'machdep.cpu.stepping'};
my $family = $info->{'machdep.cpu.family'};
my $model = $info->{'machdep.cpu.model'};
# French Mac returns 2,60 Ghz instead of 2.60 Ghz :D
$speed =~ s/,/./;
if ($speed =~ /GHz$/i) {
$speed =~ s/GHz//i;
$speed = $speed * 1000;
} elsif ($speed =~ /MHz$/i){
$speed =~ s/MHz//i;
}
$speed =~ s/\s//g;
my $cores =
$info->{'Total Number Of Cores'} ? $info->{'Total Number Of Cores'} / $procs :
1 ;
my $manufacturer =
$type =~ /Intel/i ? "Intel" :
$type =~ /AMD/i ? "AMD" :
undef ;
my @cpus;
my $cpu={
CORE => $cores,
MANUFACTURER => $manufacturer,
NAME => $type,
THREAD => 1,
FAMILYNUMBER => $family,
MODEL => $model,
STEPPING => $stepping,
SPEED => $speed
};
for (my $i=0;$i<$procs;$i++) {
push @cpus, $cpu;
}
return $cpu;
}
1;