source: ocsinventory-agent/trunk/fuentes/lib/Ocsinventory/Agent/Backend/OS/Solaris/CPU.pm @ 468

Last change on this file since 468 was 468, checked in by mabarracus, 4 years ago

Copyt trusty code

File size: 8.5 KB
Line 
1package Ocsinventory::Agent::Backend::OS::Solaris::CPU;
2
3use strict;
4
5sub check {
6  my $params = shift;
7
8  my $logger = $params->{logger};
9
10  if (!can_run ("memconf")) {
11    $logger->debug('memconf not found in $PATH');
12    return;
13  }
14
15  1;
16}
17
18sub run {
19  my $params = shift;
20  my $common = $params->{common};
21
22  #modif 20100329
23  my @cpu;
24  my $current;
25  my $cpu_core;
26  my $cpu_thread;
27  my $cpu_slot;
28  my $cpu_speed;
29  my $cpu_type;
30  my $OSLevel;
31  my $model;
32  my $zone;
33  my $sun_class_cpu=0;
34 
35  $OSLevel=`uname -r`;
36         
37 
38  if ( $OSLevel =~ /5.8/ || !can_run("zoneadm")){
39        $zone = "global";
40  }else{
41          foreach (`zoneadm list -p`){
42                $zone=$1 if /^0:([a-z]+):.*$/;
43          } 
44  }
45 
46  if ($zone)
47  { 
48  # first, we need determinate on which model of Sun Server we run,
49  # because prtdiags output (and with that memconfs output) is differend
50  # from server model to server model
51  # we try to classified our box in one of the known classes
52        $model=`uname -i`;
53  # debug print model 
54  # cut the CR from string model
55        $model = substr($model, 0, length($model)-1);
56  }else{
57        $model="Solaris Containers";
58  }
59 
60  #print "CPU Model: $model\n";
61  # we map (hopfully) our server model to a known class
62  #
63  #     #sun_class_cpu  sample out from memconf
64  #     0               (default)               generic detection with prsinfo
65  #     1               Sun Microsystems, Inc. Sun Fire 880 (4 X UltraSPARC-III 750MHz)
66  #     2               Sun Microsystems, Inc. Sun Fire V490 (2 X dual-thread UltraSPARC-IV 1350MHz)
67  #     3               Sun Microsystems, Inc. Sun-Fire-T200 (Sun Fire T2000) (8-core quad-thread UltraSPARC-T1 1000MHz)
68  #     4               Sun Microsystems, Inc. SPARC Enterprise T5220 (4-core 8-thread UltraSPARC-T2 1165MHz)
69  #
70  #if ($model eq "SUNW,Sun-Fire-280R") { $sun_class_cpu = 1; }
71  #if ($model eq "SUNW,Sun-Fire-480R") { $sun_class_cpu = 1; }
72  #if ($model eq "SUNW,Sun-Fire-V240") { $sun_class_cpu = 1; }
73  #if ($model eq "SUNW,Sun-Fire-V245") { $sun_class_cpu = 1; } 
74  #if ($model eq "SUNW,Sun-Fire-V250") { $sun_class_cpu = 1; }
75  #if ($model eq "SUNW,Sun-Fire-V440") { $sun_class_cpu = 1; }
76  #if ($model eq "SUNW,Sun-Fire-V445") { $sun_class_cpu = 1; }
77  #if ($model eq "SUNW,Sun-Fire-880") { $sun_class_cpu = 1; }
78  #if ($model eq "SUNW,Sun-Fire-V490") { $sun_class_cpu = 2; }
79  #if ($model eq "SUNW,Netra-T12") { $sun_class_cpu = 2; }     
80  #if ($model eq "SUNW,Sun-Fire-T200") { $sun_class_cpu = 3; }
81  #if ($model eq "SUNW,SPARC-Enterprise-T1000") { $sun_class_cpu = 4; }
82  #if ($model eq "SUNW,SPARC-Enterprise-T5220") { $sun_class_cpu = 4; }
83  #if ($model eq "SUNW,SPARC-Enterprise-T5240") { $sun_class_cpu = 4; }
84  #if ($model eq "SUNW,SPARC-Enterprise-T5120") { $sun_class_cpu = 4; }
85  #if ($model eq "SUNW,SPARC-Enterprise") { $sun_class_cpu = 4; }
86  if ($model  =~ /SUNW,SPARC-Enterprise/) { $sun_class_cpu = 5; } # M5000
87  if ($model  =~ /SUNW,SPARC-Enterprise-T\d/){ $sun_class_cpu = 4; } #T5220 - T5210 
88  if ($model  =~ /SUNW,Netra-T/){ $sun_class_cpu = 2; }
89  if ($model  =~ /SUNW,Sun-Fire-\d/){ $sun_class_cpu = 1; }
90  if ($model  =~ /SUNW,Sun-Fire-V/){ $sun_class_cpu = 2; } 
91  if ($model  =~ /SUNW,Sun-Fire-T\d/) { $sun_class_cpu = 3; } 
92  if ($model  =~ /Solaris Containers/){ $sun_class_cpu = 6; } 
93  if ($model  =~ /SUNW,SPARCstation/) { $sun_class_cpu = 7; }
94  if ($model  =~ /SUNW,Sun-Blade-100/) { $sun_class_cpu = 7; }
95  if ($model  =~ /SUNW,Ultra/) { $sun_class_cpu = 7; }
96
97
98
99  if($sun_class_cpu == 0)
100  {
101  # if our maschine is not in one of the sun classes from upside, we use psrinfo
102        # a generic methode
103    foreach (`psrinfo -v`)
104    {
105      if (/^\s+The\s(\w+)\sprocessor\soperates\sat\s(\d+)\sMHz,/)
106      {
107        $cpu_type = $1;
108        $cpu_speed = $2;
109        $cpu_slot++;
110      }
111    }
112  }
113
114  if($sun_class_cpu == 1)
115  {
116
117  # Sun Microsystems, Inc. Sun Fire 880 (4 X UltraSPARC-III 750MHz)
118    foreach (`memconf 2>&1`)
119    {
120      if(/^Sun Microsystems, Inc. Sun Fire\s+\S+\s+\((\d+)\s+X\s+(\S+)\s+(\d+)/)
121      {
122        $cpu_slot = $1;
123        $cpu_type = $2;
124        $cpu_speed = $3;
125                $cpu_core=$1;
126                $cpu_thread="0";
127      }
128           
129      elsif (/^Sun Microsystems, Inc. Sun Fire\s+\S+\s+\((\S+)\s+(\d+)/)
130      {
131          $cpu_slot="1";
132          $cpu_type=$1;
133          $cpu_speed=$2;
134                  $cpu_core="1";
135                $cpu_thread="0";
136      }
137         
138    }
139  }
140
141  if($sun_class_cpu == 2)
142  { 
143 
144  #Sun Microsystems, Inc. Sun Fire V490 (2 X dual-thread UltraSPARC-IV 1350MHz)
145    foreach (`memconf 2>&1`)
146    {
147      if(/^Sun Microsystems, Inc. Sun Fire\s+\S+\s+\((\d+)\s+X\s+(\S+)\s+(\S+)\s+(\d+)/)         
148      {
149        $cpu_slot = $1;
150        $cpu_type = $3 . " (" . $2 . ")";
151        $cpu_speed = $4;
152                $cpu_core=$1;
153                $cpu_thread=$2;
154      }
155          elsif (/^Sun Microsystems, Inc. Sun Fire\s+V\S+\s+\((\d+)\s+X\s+(\S+)\s+(\d+)(\S+)/)
156          {
157        $cpu_slot = $1;
158        $cpu_type = $2 . " (" . $1 . ")";
159        $cpu_speed = $3;
160                $cpu_core=$1;
161                $cpu_thread=$2;
162      }
163          #     Sun Microsystems, Inc. Sun Fire V240 (UltraSPARC-IIIi 1002MHz)
164      elsif (/^Sun Microsystems, Inc. Sun Fire\s+\S+\s+\((\S+)\s+(\d+)/)
165      {
166          $cpu_slot="1";
167          $cpu_type=$1;
168          $cpu_speed=$2;
169                  $cpu_core="1";
170                $cpu_thread="0";
171      }
172         
173    }
174  }
175 
176  if($sun_class_cpu == 3)
177  {
178    foreach (`memconf 2>&1`)
179    {
180        #Sun Microsystems, Inc. Sun-Fire-T200 (Sun Fire T2000) (8-core quad-thread UltraSPARC-T1 1000MHz)
181        #Sun Microsystems, Inc. Sun-Fire-T200 (Sun Fire T2000) (4-core quad-thread UltraSPARC-T1 1000MHz)
182      if(/^Sun Microsystems, Inc.\s+\S+\s+\(\S+\s+\S+\s+\S+\)\s+\((\d+).*\s+(\S+)\s+(\S+)\s+(\d+)/)
183      {
184        # T2000 has only one cCPU
185        $cpu_slot = $1;
186        $cpu_type = $3 . " (" . $1 . " " . $2 . ")";
187        $cpu_speed = $4;
188                $cpu_core=$1;
189                $cpu_thread=$2;
190      }
191    }
192  }
193 
194  if($sun_class_cpu == 4)
195  {
196       
197        foreach (`memconf 2>&1`)
198    {
199       
200      #Sun Microsystems, Inc. SPARC Enterprise T5120 (8-core 8-thread UltraSPARC-T2 1165MHz)
201          #Sun Microsystems, Inc. SPARC Enterprise T5120 (4-core 8-thread UltraSPARC-T2 1165MHz)
202          if(/^Sun Microsystems, Inc\..+\((\d+)*(\S+)\s+(\d+)*(\S+)\s+(\S+)\s+(\d+)MHz\)/)
203      {
204        $cpu_slot = $1;
205        $cpu_type = $1 . " (" . $3 . "" . $4 . ")";
206        $cpu_speed = $6;
207                $cpu_core=$1;
208                $cpu_thread=$3;
209               
210      }
211    }
212  }
213 
214  if($sun_class_cpu == 5)
215  {
216    foreach (`memconf 2>&1`)
217    {
218      #Sun Microsystems, Inc. Sun SPARC Enterprise M5000 Server (6 X dual-core dual-thread SPARC64-VI 2150MHz)
219         
220          #Fujitsu SPARC Enterprise M4000 Server (4 X dual-core dual-thread SPARC64-VI 2150MHz)
221          if(/^Sun Microsystems, Inc\..+\((\d+)\s+X\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)/)
222      {
223        $cpu_slot = $1;
224        $cpu_type = $3 . " (" . $1 . " " . $2 . ")";
225        $cpu_speed = $5;
226                $cpu_core=$1." ".$2;
227                $cpu_thread=$3;
228      }
229          if(/^Fujitsu SPARC Enterprise.*\((\d+)\s+X\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)/)
230      {
231        $cpu_slot = $1;
232        $cpu_type = $3 . " (" . $1 . " " . $2 . ")";
233        $cpu_speed = $5;
234                $cpu_core=$1." ".$2;
235                $cpu_thread=$3;
236      }
237         
238    }
239  }
240 
241 
242  if($sun_class_cpu == 6)
243  {
244        foreach (`prctl -n zone.cpu-shares $$`)
245        {
246                $cpu_type = $1 if /^zone.(\S+)$/;               
247                $cpu_type = $cpu_type." ".$1 if /^\s*privileged+\s*(\d+).*$/;
248                #$cpu_slot = 1 if /^\s*privileged+\s*(\d+).*$/;
249                foreach (`memconf 2>&1`)
250                {
251                        if(/^.*\s+\((\d+).*\s+(\d+)MHz.*$/)
252                        {       
253                                $cpu_slot = $1;
254                                $cpu_speed = $2;
255                        }
256                }
257        }       
258  }
259
260  if($sun_class_cpu == 7) {
261    foreach(`memconf 2<&1`) {
262      #Sun Microsystems, Inc. Sun Blade 100 (UltraSPARC-IIe 502MHz)
263      #Sun Microsystems, Inc. Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 333MHz)
264      #Sun Microsystems, Inc. Sun Ultra 1 SBus (UltraSPARC 143MHz)
265      #Sun Microsystems, Inc. SPARCstation 20 (1 X 390Z50) (SuperSPARC 50MHz)
266      #Sun Microsystems, Inc. SPARCstation 5 (TurboSPARC-II 170MHz)
267      if (/^Sun Microsystems, Inc\..+\((\S+)\s+(\d+)MHz\)/) {
268        $cpu_slot = 1;
269        $cpu_type = $1;
270        $cpu_speed = $2;
271        $cpu_core = 1;
272        $cpu_thread = 0;
273      }
274    }
275  }
276   
277  # for debug only
278  #print "cpu_slot: " . $cpu_slot . "\n";
279  #print "cpu_type: " . $cpu_type . "\n";
280  #print "cpu_speed: " . $cpu_speed . "\n";
281  #print "cpu_core: " . $cpu_core . "\n";
282  #print "cpu_thread: " . $cpu_thread . "\n";
283 
284  $current->{MANUFACTURER} = "SPARC" ;
285  $current->{SPEED} = $cpu_speed if $cpu_speed;
286  $current->{TYPE} = $cpu_type if $cpu_type;
287  $current->{NUMBER} = $cpu_slot if $cpu_slot;
288  $current->{CORE} = $cpu_core if $cpu_core;
289  $current->{THREAD} = $cpu_thread if $cpu_thread;
290  $common->addCPU($current);
291 
292 
293 
294  # insert to values we have found
295 # $common->setHardware({
296   #   PROCESSORT => $cpu_type,
297     #PROCESSORN => $cpu_slot,
298     # PROCESSORS => $cpu_speed
299     # });
300
301}
302#run();
3031;
Note: See TracBrowser for help on using the repository browser.