File Coverage

blib/lib/FusionInventory/Agent/Task/Inventory/Linux/i386/CPU.pm
Criterion Covered Total %
statement 40 48 83.3
branch 13 18 72.2
condition 5 15 33.3
subroutine 6 8 75.0
pod 0 2 0.0
total 64 91 70.3


line stmt bran cond sub pod time code
1             package FusionInventory::Agent::Task::Inventory::Linux::i386::CPU;
2              
3 2     2   113321485 use strict;
  2         5  
  2         64  
4 2     2   6 use warnings;
  2         3  
  2         70  
5              
6 2     2   394 use FusionInventory::Agent::Tools;
  2         3  
  2         244  
7 2     2   771 use FusionInventory::Agent::Tools::Linux;
  2         4  
  2         152  
8 2     2   746 use FusionInventory::Agent::Tools::Generic;
  2         3  
  2         670  
9              
10             sub isEnabled {
11 0     0 0 0 my (%params) = @_;
12 0 0       0 return 0 if $params{no_category}->{cpu};
13 0         0 return -r '/proc/cpuinfo';
14             }
15              
16             sub doInventory {
17 0     0 0 0 my (%params) = @_;
18              
19 0         0 my $inventory = $params{inventory};
20 0         0 my $logger = $params{logger};
21              
22 0         0 foreach my $cpu (_getCPUs(logger => $logger)) {
23 0         0 $inventory->addEntry(
24             section => 'CPUS',
25             entry => $cpu
26             );
27             }
28             }
29              
30             sub _getCPUs {
31 7     7   1168 my (%params) = @_;
32              
33             my @dmidecodeInfos = $params{dmidecode} ?
34 7 50       24 getCpusFromDmidecode(file => $params{dmidecode}) :
35             getCpusFromDmidecode();
36              
37 7         8 my $count = 0;
38 7         5 my @cpus;
39             my %seen;
40              
41 7         25 foreach my $logicalCpu (getCPUsFromProc(@_)) {
42 29         31 my $cpuId = $logicalCpu->{'physical id'};
43 29         20 my ($core, $thread);
44 29 100       27 if (defined $cpuId) {
45 27 100       48 next if $seen{$cpuId}++;
46 6         7 $core = $logicalCpu->{'cpu cores'};
47 6         5 $thread = $logicalCpu->{'siblings'};
48             } else {
49 2         2 $cpuId = $count;
50 2         3 $core = 1;
51 2         3 $thread = 1;
52             }
53              
54 8         11 my $dmidecodeInfo = $dmidecodeInfos[$cpuId];
55              
56             my $cpu = {
57             ARCH => 'i386',
58             MANUFACTURER => getCanonicalManufacturer($logicalCpu->{vendor_id}),
59             STEPPING => $logicalCpu->{'stepping'} ||
60             $dmidecodeInfo->{STEPPING},
61             FAMILYNUMBER => $logicalCpu->{'cpu family'} ||
62             $dmidecodeInfo->{FAMILYNUMBER},
63             MODEL => $logicalCpu->{'model'} ||
64             $dmidecodeInfo->{MODEL},
65             NAME => $logicalCpu->{'model name'},
66             CORE => $core || $dmidecodeInfo->{CORE},
67             THREAD => $thread || $dmidecodeInfo->{THREAD}
68 8   33     19 };
      33        
      33        
      33        
      33        
69              
70 8 100       18 $cpu->{ID} = $dmidecodeInfo->{ID} if $dmidecodeInfo->{ID};
71 8 50       13 $cpu->{SERIAL} = $dmidecodeInfo->{SERIAL} if $dmidecodeInfo->{SERIAL};
72 8 100       13 $cpu->{EXTERNAL_CLOCK} = $dmidecodeInfo->{EXTERNAL_CLOCK} if $dmidecodeInfo->{EXTERNAL_CLOCK};
73 8 100       16 $cpu->{FAMILYNAME} = $dmidecodeInfo->{FAMILYNAME} if $dmidecodeInfo->{FAMILYNAME};
74              
75 8 50       41 if ($cpu->{NAME} =~ /([\d\.]+)s*(GHZ)/i) {
76             $cpu->{SPEED} = {
77             ghz => 1000,
78             mhz => 1,
79 8         37 }->{lc($2)} * $1;
80             }
81              
82 8         15 push @cpus, $cpu;
83 8         58 $count++;
84             }
85              
86 7         73 return @cpus;
87             }
88              
89             1;