[Fusioninventory-commit] [fusinv/fusioninventory-agent] 409c05: turn getSerialNumber into a generic function
Guillaume Rousse
guillomovitch at gmail.com
Thu May 3 18:14:14 UTC 2012
Branch: refs/heads/2.2.x
Home: https://github.com/fusinv/fusioninventory-agent
Commit: 409c0577b7242493dcc8ec5860e6a792e01eac2f
https://github.com/fusinv/fusioninventory-agent/commit/409c0577b7242493dcc8ec5860e6a792e01eac2f
Author: Guillaume Rousse <guillomovitch at gmail.com>
Date: 2012-05-03 (Thu, 03 May 2012)
Changed paths:
M lib/FusionInventory/Agent/Tools/Linux.pm
Log Message:
-----------
turn getSerialNumber into a generic function
smartctl is able to return far more information than just the serial
number
diff --git a/lib/FusionInventory/Agent/Tools/Linux.pm b/lib/FusionInventory/Agent/Tools/Linux.pm
index 983a329..6e8f5bc 100644
--- a/lib/FusionInventory/Agent/Tools/Linux.pm
+++ b/lib/FusionInventory/Agent/Tools/Linux.pm
@@ -16,7 +16,7 @@ our @EXPORT = qw(
getDevicesFromHal
getDevicesFromProc
getCPUsFromProc
- getSerialnumber
+ getInfoFromSmartctl
getInterfacesFromIfconfig
getInterfacesFromIp
);
@@ -243,17 +243,39 @@ sub _getValueFromSysProc {
return $value;
}
-sub getSerialnumber {
+sub getInfoFromSmartctl {
my (%params) = @_;
- my ($serial) = getFirstMatch(
+ my $handle = getFileHandle(
+ %params,
command => $params{device} ? "smartctl -i $params{device}" : undef,
- file => $params{file},
- logger => $params{logger},
- pattern => qr/^Serial Number:\s+(\S*)/
);
+ return unless $handle;
+
+ my $info = {
+ TYPE => 'disk',
+ DESCRIPTION => 'SATA',
+ };
+
+ while (my $line = <$handle>) {
+ if ($line =~ /^Transport protocol: +(\S+)/i) {
+ $info->{DESCRIPTION} = $1;
+ next;
+ }
+
+ if ($line =~ /^Device type: +(\S+)/i) {
+ $info->{TYPE} = $1;
+ next;
+ }
+
+ if ($line =~ /^Serial number: +(\S+)/i) {
+ $info->{SERIALNUMBER} = $1;
+ next;
+ }
+ }
+ close $handle;
- return $serial;
+ return $info;
}
sub getInterfacesFromIfconfig {
@@ -440,9 +462,9 @@ Availables parameters:
=back
-=head2 getSerialnumber(%params)
+=head2 getInfoFromSmartctl(%params)
-Returns the serial number of a drive, using smartctl.
+Returns some informations about a drive, using smartctl.
Availables parameters:
================================================================
Commit: 6bf7ffca419910da3db2ba206c7fe3f59b7403b7
https://github.com/fusinv/fusioninventory-agent/commit/6bf7ffca419910da3db2ba206c7fe3f59b7403b7
Author: Guillaume Rousse <guillomovitch at gmail.com>
Date: 2012-05-03 (Thu, 03 May 2012)
Changed paths:
A resources/linux/smartctl/sample2
A resources/linux/smartctl/sample3
A resources/linux/smartctl/sample4
Log Message:
-----------
new samples
diff --git a/resources/linux/smartctl/sample2 b/resources/linux/smartctl/sample2
new file mode 100644
index 0000000..0ad69b3
--- /dev/null
+++ b/resources/linux/smartctl/sample2
@@ -0,0 +1,7 @@
+smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
+Home page is http://smartmontools.sourceforge.net/
+
+Device: ServeRA Drive 1 Version: V1.0
+scsiModePageOffset: response length too short, resp_len=4 offset=4 bd_len=0
+>> Terminate command early due to bad response to IEC mode page
+A mandatory SMART command failed: exiting. To continue, add one or more '-T permissive' options.
diff --git a/resources/linux/smartctl/sample3 b/resources/linux/smartctl/sample3
new file mode 100644
index 0000000..b23d4a4
--- /dev/null
+++ b/resources/linux/smartctl/sample3
@@ -0,0 +1,10 @@
+smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
+Home page is http://smartmontools.sourceforge.net/
+
+Device: IBM-ESXS ST3300655SS Version: BA23
+Serial number: 3LM0L0FJ00009733Y46W
+Device type: disk
+Transport protocol: SAS
+Local Time is: Sat Apr 28 12:03:55 2012 MSK
+Device supports SMART and is Enabled
+Temperature Warning Enabled
diff --git a/resources/linux/smartctl/sample4 b/resources/linux/smartctl/sample4
new file mode 100644
index 0000000..6b3db52
--- /dev/null
+++ b/resources/linux/smartctl/sample4
@@ -0,0 +1,7 @@
+smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
+Home page is http://smartmontools.sourceforge.net/
+
+Device: IBM-ESXS VSC7160 Version: 1.06
+Device type: enclosure
+Local Time is: Sat Apr 28 12:03:57 2012 MSK
+Device does not support SMART
================================================================
Commit: bfbe965ceb26a0d8acd258227c5ce1e01290ce7f
https://github.com/fusinv/fusioninventory-agent/commit/bfbe965ceb26a0d8acd258227c5ce1e01290ce7f
Author: Guillaume Rousse <guillomovitch at gmail.com>
Date: 2012-05-03 (Thu, 03 May 2012)
Changed paths:
R resources/linux/smartctl/dell-xt2
A resources/linux/smartctl/sample1
Log Message:
-----------
rename existing sample
diff --git a/resources/linux/smartctl/dell-xt2 b/resources/linux/smartctl/dell-xt2
deleted file mode 100644
index ba063ab..0000000
--- a/resources/linux/smartctl/dell-xt2
+++ /dev/null
@@ -1,15 +0,0 @@
-smartctl 5.40 2010-10-16 r3189 [x86_64-mandriva-linux-gnu] (local build)
-Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
-
-=== START OF INFORMATION SECTION ===
-Device Model: SAMSUNG SSD PM800 TM 128GB
-Serial Number: DFW1W11002SE002B3117
-Firmware Version: VBM24D1Q
-User Capacity: 128 035 676 160 bytes
-Device is: Not in smartctl database [for details use: -P showall]
-ATA Version is: 7
-ATA Standard is: ATA/ATAPI-7 T13 1532D revision 1
-Local Time is: Thu Dec 23 15:15:06 2010 CET
-SMART support is: Available - device has SMART capability.
-SMART support is: Enabled
-
diff --git a/resources/linux/smartctl/sample1 b/resources/linux/smartctl/sample1
new file mode 100644
index 0000000..ba063ab
--- /dev/null
+++ b/resources/linux/smartctl/sample1
@@ -0,0 +1,15 @@
+smartctl 5.40 2010-10-16 r3189 [x86_64-mandriva-linux-gnu] (local build)
+Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
+
+=== START OF INFORMATION SECTION ===
+Device Model: SAMSUNG SSD PM800 TM 128GB
+Serial Number: DFW1W11002SE002B3117
+Firmware Version: VBM24D1Q
+User Capacity: 128 035 676 160 bytes
+Device is: Not in smartctl database [for details use: -P showall]
+ATA Version is: 7
+ATA Standard is: ATA/ATAPI-7 T13 1532D revision 1
+Local Time is: Thu Dec 23 15:15:06 2010 CET
+SMART support is: Available - device has SMART capability.
+SMART support is: Enabled
+
================================================================
Commit: 8ab7f8a825b742e90a259f397d32e47af2f9d3be
https://github.com/fusinv/fusioninventory-agent/commit/8ab7f8a825b742e90a259f397d32e47af2f9d3be
Author: Guillaume Rousse <guillomovitch at gmail.com>
Date: 2012-05-03 (Thu, 03 May 2012)
Changed paths:
M t/tools/linux.t
Log Message:
-----------
test new function
diff --git a/t/tools/linux.t b/t/tools/linux.t
index 9ca970d..94276cc 100755
--- a/t/tools/linux.t
+++ b/t/tools/linux.t
@@ -533,7 +533,24 @@ my %hal_tests = (
);
my %smartctl_tests = (
- 'dell-xt2' => 'DFW1W11002SE002B3117'
+ sample1 => {
+ TYPE => 'disk',
+ DESCRIPTION => 'SATA',
+ SERIALNUMBER => 'DFW1W11002SE002B3117'
+ },
+ sample2 => {
+ TYPE => 'disk',
+ DESCRIPTION => 'SATA'
+ },
+ sample3 => {
+ TYPE => 'disk',
+ DESCRIPTION => 'SAS',
+ SERIALNUMBER => '3LM0L0FJ00009733Y46W',
+ },
+ sample4 => {
+ TYPE => 'enclosure',
+ DESCRIPTION => 'SATA'
+ },
);
my %ifconfig_tests = (
@@ -879,8 +896,8 @@ foreach my $test (keys %hal_tests) {
foreach my $test (keys %smartctl_tests) {
my $file = "resources/linux/smartctl/$test";
- my $result = getSerialnumber(file => $file);
- is($result, $smartctl_tests{$test}, "$test smartctl parsing");
+ my $result = getInfoFromSmartctl(file => $file);
+ is_deeply($result, $smartctl_tests{$test}, "$test smartctl parsing");
}
foreach my $test (keys %ifconfig_tests) {
================================================================
Commit: b00187101465b6a9733f20e1f77283e818b567f0
https://github.com/fusinv/fusioninventory-agent/commit/b00187101465b6a9733f20e1f77283e818b567f0
Author: Guillaume Rousse <guillomovitch at gmail.com>
Date: 2012-05-03 (Thu, 03 May 2012)
Changed paths:
M lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
M lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
M t/inventory/linux/storages/adaptec.t
M t/inventory/linux/storages/lsilogic.t
Log Message:
-----------
replace getSerialNumber with getInfoFromSmartctl
This allow to get more than serial number.
diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
index b036683..8976d61 100644
--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
+++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Adaptec.pm
@@ -30,8 +30,12 @@ sub doInventory {
controller => 'scsi' . $device->{SCSI_COID},
name => $device->{NAME},
logger => $logger
- )) {
- $disk->{SERIALNUMBER} = getSerialnumber(device => $disk->{device});
+ )) {
+ # merge with smartctl info
+ my $info = getInfoFromSmartctl(device => $disk->{device});
+ foreach my $key (qw/SERIALNUMBER DESCRIPTION TYPE/) {
+ $disk->{$key} = $info->{$key};
+ }
delete $disk->{device};
$inventory->addEntry(section => 'STORAGES', entry => $disk);
}
@@ -60,8 +64,6 @@ sub _getDisksFromProc {
# that's the controller we're looking for
$disk = {
NAME => $params{name},
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
};
} else {
# that's another controller
diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
index 73b4c49..bb42ae2 100644
--- a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
+++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Storages/Lsilogic.pm
@@ -24,7 +24,11 @@ sub doInventory {
logger => $logger,
command => "mpt-status -n -i $device->{SCSI_UNID}"
)) {
- $disk->{SERIALNUMBER} = getSerialnumber(device => $disk->{device});
+ # merge with smartctl info
+ my $info = getInfoFromSmartctl(device => $disk->{device});
+ foreach my $key (qw/SERIALNUMBER DESCRIPTION TYPE/) {
+ $disk->{$key} = $info->{$key};
+ }
delete $disk->{device};
$inventory->addEntry(section => 'STORAGES', entry => $disk);
}
@@ -51,8 +55,6 @@ sub _getDiskFromMptStatus {
my $disk = {
NAME => $params{name},
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => "/dev/sg$1",
MODEL => $2,
MANUFACTURER => getCanonicalManufacturer($2),
diff --git a/t/inventory/linux/storages/adaptec.t b/t/inventory/linux/storages/adaptec.t
index 790c99e..ca154da 100644
--- a/t/inventory/linux/storages/adaptec.t
+++ b/t/inventory/linux/storages/adaptec.t
@@ -13,8 +13,6 @@ my %tests = (
disks => [
{
NAME => 'foo',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
MODEL => 'SAMSUNG SSD PM80',
MANUFACTURER => 'Samsung',
FIRMWARE => 'VBM2',
@@ -28,8 +26,6 @@ my %tests = (
disks => [
{
NAME => 'foo',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
MODEL => 'HUS151436VL3800',
MANUFACTURER => 'Hitachi',
FIRMWARE => 'S3C0',
@@ -37,8 +33,6 @@ my %tests = (
},
{
NAME => 'foo',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
MODEL => 'HUS151436VL3800',
MANUFACTURER => 'Hitachi',
FIRMWARE => 'S3C0',
@@ -52,8 +46,6 @@ my %tests = (
disks => [
{
NAME => 'foo',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
MODEL => 'UJDA782 DVD/CDRW',
MANUFACTURER => 'UJDA782 DVD/CDRW',
FIRMWARE => 'VA13',
@@ -70,8 +62,6 @@ my %tests = (
FIRMWARE => 'V1.0',
MANUFACTURER => 'Drive 1',
MODEL => 'Drive 1',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg0'
},
{
@@ -79,8 +69,6 @@ my %tests = (
FIRMWARE => 'V1.0',
MANUFACTURER => 'Drive 2',
MODEL => 'Drive 2',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg1'
},
{
@@ -88,8 +76,6 @@ my %tests = (
FIRMWARE => 'BA23',
MANUFACTURER => 'Seagate',
MODEL => 'ST3300655SS',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg2'
},
{
@@ -97,8 +83,6 @@ my %tests = (
FIRMWARE => 'BA23',
MANUFACTURER => 'Seagate',
MODEL => 'ST3300655SS',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg3'
},
{
@@ -106,8 +90,6 @@ my %tests = (
FIRMWARE => 'BA23',
MANUFACTURER => 'Seagate',
MODEL => 'ST3300655SS',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg4'
},
{
@@ -115,8 +97,6 @@ my %tests = (
FIRMWARE => 'BA23',
MANUFACTURER => 'Seagate',
MODEL => 'ST3300655SS',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg5'
},
{
@@ -124,8 +104,6 @@ my %tests = (
FIRMWARE => 'BA23',
MANUFACTURER => 'Seagate',
MODEL => 'ST3300655SS',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg6'
},
{
@@ -133,8 +111,6 @@ my %tests = (
FIRMWARE => 'BA23',
MANUFACTURER => 'Seagate',
MODEL => 'ST3300655SS',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg7'
},
{
@@ -142,8 +118,6 @@ my %tests = (
FIRMWARE => '1.06',
MANUFACTURER => 'VSC7160',
MODEL => 'VSC7160',
- DESCRIPTION => 'SATA',
- TYPE => 'disk',
device => '/dev/sg8'
}
]
diff --git a/t/inventory/linux/storages/lsilogic.t b/t/inventory/linux/storages/lsilogic.t
index fefa13a..115845f 100755
--- a/t/inventory/linux/storages/lsilogic.t
+++ b/t/inventory/linux/storages/lsilogic.t
@@ -15,9 +15,7 @@ my %tests = (
FIRMWARE => 'D',
MANUFACTURER => 'Seagate',
MODEL => 'ST3160815AS',
- DESCRIPTION => 'SATA',
device => '/dev/sg1',
- TYPE => 'disk'
},
{
SIZE => '152576',
@@ -25,9 +23,7 @@ my %tests = (
FIRMWARE => 'D',
MANUFACTURER => 'Seagate',
MODEL => 'ST3160815AS',
- DESCRIPTION => 'SATA',
device => '/dev/sg0',
- TYPE => 'disk'
}
]
},
@@ -40,9 +36,7 @@ my %tests = (
FIRMWARE => 'C610',
MANUFACTURER => 'CBRCA146C3ETS0 N',
MODEL => 'CBRCA146C3ETS0 N',
- DESCRIPTION => 'SATA',
device => '/dev/sg5',
- TYPE => 'disk'
},
{
SIZE => '139264',
@@ -50,9 +44,7 @@ my %tests = (
FIRMWARE => 'C610',
MANUFACTURER => 'CBRCA146C3ETS0 N',
MODEL => 'CBRCA146C3ETS0 N',
- DESCRIPTION => 'SATA',
device => '/dev/sg4',
- TYPE => 'disk'
},
{
SIZE => '139264',
@@ -60,9 +52,7 @@ my %tests = (
FIRMWARE => 'B53C',
MANUFACTURER => 'Seagate',
MODEL => 'ST9146803SS',
- DESCRIPTION => 'SATA',
device => '/dev/sg3',
- TYPE => 'disk'
},
{
SIZE => '139264',
@@ -70,9 +60,7 @@ my %tests = (
FIRMWARE => 'C610',
MANUFACTURER => 'CBRCA146C3ETS0 N',
MODEL => 'CBRCA146C3ETS0 N',
- DESCRIPTION => 'SATA',
device => '/dev/sg2',
- TYPE => 'disk'
},
{
SIZE => '139264',
@@ -80,9 +68,7 @@ my %tests = (
FIRMWARE => 'C610',
MANUFACTURER => 'CBRCA146C3ETS0 N',
MODEL => 'CBRCA146C3ETS0 N',
- DESCRIPTION => 'SATA',
device => '/dev/sg1',
- TYPE => 'disk'
},
{
SIZE => '139264',
@@ -90,9 +76,7 @@ my %tests = (
FIRMWARE => 'C610',
MANUFACTURER => 'CBRCA146C3ETS0 N',
MODEL => 'CBRCA146C3ETS0 N',
- DESCRIPTION => 'SATA',
device => '/dev/sg0',
- TYPE => 'disk'
}
]
}
================================================================
Compare: https://github.com/fusinv/fusioninventory-agent/compare/161a58e...b001871
More information about the Fusioninventory-commit
mailing list