diff --git a/Changes b/Changes index 9e7506bdce..6b380c1aba 100644 --- a/Changes +++ b/Changes @@ -3,7 +3,7 @@ Revision history for FusionInventory agent 2.3.0 General: * various UTF8 encoding fixes -* Add DNS_DOMAIN and FQDN in OPERATINGSYSTEM section +* Add DNS_DOMAIN, BOOT_TIME and FQDN in OPERATINGSYSTEM section * Collect public SSH keys Windows: diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/BSD.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/BSD.pm index bf9c5439e5..cfdfa9b4d1 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Input/BSD.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Input/BSD.pm @@ -40,6 +40,8 @@ sub doInventory { } close $handle; + my $boottime = getFirstMatch(command => "sysctl -n kern.boottime", pattern => qr/sec = (\d+)/); + my $OSName = $OSNAME; if (canRun('lsb_release')) { $OSName = getFirstMatch( @@ -58,7 +60,8 @@ sub doInventory { NAME => $OSName, VERSION => $OSVersion, KERNEL_VERSION => $OSVersion, - FULL_NAME => $OSNAME + FULL_NAME => $OSNAME, + BOOT_TIME => getFormatedLocalTime($boottime) }); } diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux.pm index 32a772b66d..8f3bebf2a4 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux.pm @@ -24,6 +24,8 @@ sub doInventory { my $oscomment = getFirstLine(command => 'uname -v'); my $systemId = _getRHNSystemId('/etc/sysconfig/rhn/systemid'); + my $boottime = time - getFirstMatch(file => '/proc/uptime', pattern => qr/^(\d+)/); + $inventory->setHardware({ OSVERSION => $osversion, OSCOMMENTS => $oscomment, @@ -31,7 +33,8 @@ sub doInventory { }); $inventory->setOperatingSystem({ - KERNEL_VERSION => $osversion + KERNEL_VERSION => $osversion, + BOOT_TIME => getFormatedLocalTime($boottime) }); } diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Uptime.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Uptime.pm index 4841ef5220..12707af294 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Uptime.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Linux/Uptime.pm @@ -16,10 +16,9 @@ sub doInventory { my $inventory = $params{inventory}; - my $arch = getFirstLine(command => 'uname -m'); my $uptime = _getUptime(file => '/proc/uptime'); - $inventory->setHardware({ - DESCRIPTION => "$arch/$uptime" + $inventory->setOperatingSystem({ + BOOT_TIME => "$uptime" }); } @@ -30,7 +29,7 @@ sub _getUptime { ); return unless $uptime; - return getFormatedGmTime($uptime); + return getFormatedLocalTime(int(time - $uptime)); } 1; diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/MacOS.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/MacOS.pm index 504a5a689d..18e5890f74 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Input/MacOS.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Input/MacOS.pm @@ -34,6 +34,7 @@ sub doInventory { # never hurt my $OSComment = getFirstLine(command => 'uname -v'); my $KernelVersion = getFirstLine(command => 'uname -r'); + my $boottime = getFirstMatch(command => "sysctl -n kern.boottime", pattern => qr/sec = (\d+)/); $inventory->setHardware({ OSNAME => $OSName, @@ -45,7 +46,8 @@ sub doInventory { NAME => "MacOSX", VERSION => $OSVersion, KERNEL_VERSION => $KernelVersion, - FULL_NAME => $OSName + FULL_NAME => $OSName, + BOOT_TIME => getFormatedLocalTime($boottime) }); } diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/License.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/License.pm index 95120036d0..a163e1e9f1 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/License.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/License.pm @@ -42,7 +42,7 @@ sub doInventory { sub _scanOffice { my ($key) = @_; - my %license = { + my %license = ( PRODUCTID => $key->{ProductID}, UPDATE => $key->{SPLevel}, OEM => $key->{OEM}, @@ -50,7 +50,7 @@ sub _scanOffice { encodeFromRegistry($key->{ConvertToEdition}), NAME => encodeFromRegistry($key->{ProductNameNonQualified}) || encodeFromRegistry($key->{ProductNameVersion}) - }; + ); if ($key->{DigitalProductID}) { $license{KEY} = parseProductKey($key->{DigitalProductID}); diff --git a/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/OS.pm b/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/OS.pm index b933da4ec7..575e96a573 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/OS.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Input/Win32/OS.pm @@ -23,8 +23,9 @@ sub doInventory { foreach my $object (getWMIObjects( class => 'Win32_OperatingSystem', properties => [ qw/ - OSLanguage Caption Version SerialNumber Organization \ - RegisteredUser CSDVersion TotalSwapSpaceSize OSArchitecture + OSLanguage Caption Version SerialNumber Organization + RegisteredUser CSDVersion TotalSwapSpaceSize + OSArchitecture LastBootUpTime / ] )) { @@ -62,6 +63,12 @@ sub doInventory { my $osArchitecture = $object->{OSArchitecture} || '32-bit'; $osArchitecture =~ s/ /-/; # "64 bit" => "64-bit" + my $boottime; + if ($object->{LastBootUpTime} =~ + /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/) { + $boottime = getFormatedDate($1, $2, $3, $4, $5, 6); + } + $inventory->setOperatingSystem({ NAME => "Windows", INSTALL_DATE => $installDate, @@ -70,6 +77,7 @@ sub doInventory { FULL_NAME => $object->{Caption}, SERVICE_PACK => $object->{CSDVersion}, ARCH => $osArchitecture, + BOOT_TIME => $boottime, }); } diff --git a/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm b/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm index 925b58a251..ba961900f6 100644 --- a/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm +++ b/lib/FusionInventory/Agent/Task/Inventory/Inventory.pm @@ -68,8 +68,8 @@ my %fields = ( DEFAULTGATEWAY VMSYSTEM WINOWNER WINPRODID WINPRODKEY WINCOMPANY WINLANG CHASSIS_TYPE/ ], OPERATINGSYSTEM => [ qw/KERNEL_NAME KERNEL_VERSION NAME VERSION FULL_NAME - SERVICE_PACK INSTALL_DATE FQDN DNS_DOMAIN SSH_KEY - ARCH/ ], + SERVICE_PACK INSTALL_DATE FQDN DNS_DOMAIN + SSH_KEY ARCH BOOT_TIME/ ], ACCESSLOG => [ qw/USERID LOGDATE/ ], VIRTUALMACHINES => [ qw/MEMORY NAME UUID STATUS SUBSYSTEM VMTYPE VCPU VMID MAC COMMENT OWNER/ ], @@ -942,6 +942,10 @@ The operating system installation date. Operating system architecture. +=item BOOT_TIME + +The date of the boot of the computer, e.g: 2012-12-09 15:58:20 + =back =head2 MONITORS diff --git a/lib/FusionInventory/Agent/Tools.pm b/lib/FusionInventory/Agent/Tools.pm index 0b439536bf..49c8a3f512 100644 --- a/lib/FusionInventory/Agent/Tools.pm +++ b/lib/FusionInventory/Agent/Tools.pm @@ -57,6 +57,8 @@ if ($OSNAME ne 'MSWin32') { sub getFormatedLocalTime { my ($time) = @_; + return unless $time; + my ($year, $month , $day, $hour, $min, $sec) = (localtime ($time))[5, 4, 3, 2, 1, 0];