ohai 13.3.0 → 13.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ohai/mixin/azure_metadata.rb +53 -0
- data/lib/ohai/plugins/aix/uptime.rb +25 -10
- data/lib/ohai/plugins/azure.rb +68 -8
- data/lib/ohai/plugins/cloud.rb +4 -2
- data/lib/ohai/plugins/digital_ocean.rb +3 -3
- data/lib/ohai/plugins/dragonflybsd/os.rb +1 -2
- data/lib/ohai/plugins/ec2.rb +24 -16
- data/lib/ohai/plugins/eucalyptus.rb +4 -4
- data/lib/ohai/plugins/freebsd/os.rb +1 -2
- data/lib/ohai/plugins/gce.rb +3 -3
- data/lib/ohai/plugins/hostname.rb +3 -3
- data/lib/ohai/plugins/linux/cpu.rb +33 -2
- data/lib/ohai/plugins/linux/filesystem.rb +47 -39
- data/lib/ohai/plugins/linux/systemd_paths.rb +3 -4
- data/lib/ohai/plugins/linux/virtualization.rb +6 -2
- data/lib/ohai/plugins/network.rb +2 -3
- data/lib/ohai/plugins/openstack.rb +2 -3
- data/lib/ohai/plugins/os.rb +1 -2
- data/lib/ohai/plugins/packages.rb +28 -2
- data/lib/ohai/plugins/passwd.rb +1 -2
- data/lib/ohai/plugins/rackspace.rb +1 -2
- data/lib/ohai/plugins/shard.rb +1 -2
- data/lib/ohai/plugins/softlayer.rb +1 -2
- data/lib/ohai/plugins/solaris2/virtualization.rb +1 -2
- data/lib/ohai/plugins/uptime.rb +1 -2
- data/lib/ohai/version.rb +1 -1
- data/spec/data/plugins/pacman.output +51 -0
- data/spec/unit/mixin/azure_metadata_spec.rb +67 -0
- data/spec/unit/mixin/softlayer_metadata_spec.rb +1 -1
- data/spec/unit/plugins/aix/uptime_spec.rb +7 -9
- data/spec/unit/plugins/azure_spec.rb +81 -0
- data/spec/unit/plugins/cloud_spec.rb +37 -5
- data/spec/unit/plugins/ec2_spec.rb +34 -12
- data/spec/unit/plugins/linux/cpu_spec.rb +123 -87
- data/spec/unit/plugins/linux/filesystem_spec.rb +12 -0
- data/spec/unit/plugins/linux/virtualization_spec.rb +11 -0
- data/spec/unit/plugins/packages_spec.rb +37 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65368dc9cbcaede4fadbcbf469c90fb68a64b4c0
|
4
|
+
data.tar.gz: 6c5a528d552e9cf11a81f6b5181ad86f226ff6cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b4557d434f813f5b4320274d48a14791a5bd6111c2163ffbc7934efe68d43a71d64d067196da68ca31895dd0947d0e021b80e936a9216e3a01bd398f6d80208
|
7
|
+
data.tar.gz: 848d151c7ff1b30b15971d9d4b7d2e9a34f239f9f256df3f7cc1324b39cb811bf7245f1e15ce39e7ede589f30e3412e4093f27043bd0e4b02da2aa39262ca2dd
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
3
|
+
# Copyright:: Copyright 2017 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
|
18
|
+
require "net/http"
|
19
|
+
|
20
|
+
module Ohai
|
21
|
+
module Mixin
|
22
|
+
module AzureMetadata
|
23
|
+
|
24
|
+
AZURE_METADATA_ADDR = "169.254.169.254" unless defined?(AZURE_METADATA_ADDR)
|
25
|
+
AZURE_METADATA_URL = "/metadata/instance?api-version=2017-04-02" unless defined?(AZURE_METADATA_URL)
|
26
|
+
|
27
|
+
# fetch the meta content with a timeout and the required header
|
28
|
+
def http_get(uri)
|
29
|
+
conn = Net::HTTP.start(AZURE_METADATA_ADDR)
|
30
|
+
conn.read_timeout = 6
|
31
|
+
conn.get(uri, initheader = { "Metadata" => "true" })
|
32
|
+
end
|
33
|
+
|
34
|
+
def fetch_metadata
|
35
|
+
Ohai::Log.debug("Mixin AzureMetadata: Fetching metadata from host #{AZURE_METADATA_ADDR} at #{AZURE_METADATA_URL}")
|
36
|
+
response = http_get(AZURE_METADATA_URL)
|
37
|
+
if response.code == "200"
|
38
|
+
begin
|
39
|
+
data = StringIO.new(response.body)
|
40
|
+
parser = FFI_Yajl::Parser.new
|
41
|
+
parser.parse(data)
|
42
|
+
rescue FFI_Yajl::ParseError
|
43
|
+
Ohai::Log.warn("Mixin AzureMetadata: Metadata response is NOT valid JSON")
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
else
|
47
|
+
Ohai::Log.warn("Mixin AzureMetadata: Received resonse code #{response.code} requesting metadata")
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -22,16 +22,31 @@ Ohai.plugin(:Uptime) do
|
|
22
22
|
|
23
23
|
collect_data(:aix) do
|
24
24
|
require "date"
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
|
29
|
-
so
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
25
|
+
# below we're going to assume that PID 1 is init (this is true 99.99999% of the time)
|
26
|
+
# output will look like this
|
27
|
+
# 1148-20:54:50
|
28
|
+
# This reads as 1148 days, 20 hours, 54 minutes, 50 seconds since the process was started (elapsed)
|
29
|
+
# who -b does not return the YEAR, so we need something more concrete
|
30
|
+
so = shell_out("LC_ALL=POSIX ps -o etime= -p 1").stdout
|
31
|
+
|
32
|
+
# Here we'll check our shell_out for a dash, which indicates there is a # of days involved
|
33
|
+
# We'll chunk off the days, hours (where applicable), minutes, seconds into seperate vars
|
34
|
+
# We also need to do this because ps -o etime= will not display days if the machine has been up for less than 24 hours
|
35
|
+
# If the machine has been up for less than one hour, the shell_out will not output hours hence our else
|
36
|
+
# see here: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.cmds4/ps.htm#ps__row-d3e109655
|
37
|
+
d = nil
|
38
|
+
h = nil
|
39
|
+
case so
|
40
|
+
when /^\d+-\d/
|
41
|
+
(d, h, m, s) = so.split(/[-:]/)
|
42
|
+
when /^\d+:\d+:\d/
|
43
|
+
(h, m, s) = so.split(/[:]/)
|
44
|
+
else
|
45
|
+
(m, s) = so.split(/[:]/)
|
35
46
|
end
|
47
|
+
elapsed_seconds = ((d.to_i * 86400) + (h.to_i * 3600) + (m.to_i * 60) + s.to_i)
|
48
|
+
|
49
|
+
uptime_seconds Time.now.to_i - elapsed_seconds
|
50
|
+
uptime seconds_to_human(elapsed_seconds)
|
36
51
|
end
|
37
52
|
end
|
data/lib/ohai/plugins/azure.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright:: Copyright
|
1
|
+
# Copyright:: Copyright 2013-2017 Chef Software, Inc.
|
2
2
|
# License:: Apache License, Version 2.0
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -15,23 +15,31 @@
|
|
15
15
|
#
|
16
16
|
|
17
17
|
Ohai.plugin(:Azure) do
|
18
|
+
require "ohai/mixin/azure_metadata"
|
19
|
+
require "ohai/mixin/http_helper"
|
20
|
+
|
21
|
+
include Ohai::Mixin::AzureMetadata
|
22
|
+
include Ohai::Mixin::HttpHelper
|
23
|
+
|
18
24
|
provides "azure"
|
19
25
|
|
20
26
|
collect_data do
|
21
|
-
#
|
22
|
-
#
|
27
|
+
# Before we had the metadata endpoint we relied exclusively on
|
28
|
+
# the knife-azure plugin populating data to the hint file.
|
23
29
|
# Please see the lib/chef/knife/azure_server_create.rb file in that
|
24
30
|
# project for details
|
25
31
|
azure_metadata_from_hints = hint?("azure")
|
26
32
|
if azure_metadata_from_hints
|
27
|
-
Ohai::Log.debug("Plugin Azure:
|
33
|
+
Ohai::Log.debug("Plugin Azure: Azure hint is present. Parsing any hint data.")
|
28
34
|
azure Mash.new
|
29
35
|
azure_metadata_from_hints.each { |k, v| azure[k] = v }
|
36
|
+
azure["metadata"] = parse_metadata
|
30
37
|
elsif has_waagent? || has_dhcp_option_245?
|
31
|
-
Ohai::Log.debug("Plugin Azure: No hints present, but system appears to be on
|
38
|
+
Ohai::Log.debug("Plugin Azure: No hints present, but system appears to be on Azure.")
|
32
39
|
azure Mash.new
|
40
|
+
azure["metadata"] = parse_metadata
|
33
41
|
else
|
34
|
-
Ohai::Log.debug("Plugin Azure: No hints present
|
42
|
+
Ohai::Log.debug("Plugin Azure: No hints present and doesn't appear to be on Azure.")
|
35
43
|
false
|
36
44
|
end
|
37
45
|
end
|
@@ -40,7 +48,7 @@ Ohai.plugin(:Azure) do
|
|
40
48
|
# http://blog.mszcool.com/index.php/2015/04/detecting-if-a-virtual-machine-runs-in-microsoft-azure-linux-windows-to-protect-your-software-when-distributed-via-the-azure-marketplace/
|
41
49
|
def has_waagent?
|
42
50
|
if File.exist?("/usr/sbin/waagent") || Dir.exist?('C:\WindowsAzure')
|
43
|
-
Ohai::Log.debug("Plugin Azure: Found waagent used by
|
51
|
+
Ohai::Log.debug("Plugin Azure: Found waagent used by Azure.")
|
44
52
|
true
|
45
53
|
end
|
46
54
|
end
|
@@ -50,7 +58,7 @@ Ohai.plugin(:Azure) do
|
|
50
58
|
if File.exist?("/var/lib/dhcp/dhclient.eth0.leases")
|
51
59
|
File.open("/var/lib/dhcp/dhclient.eth0.leases").each do |line|
|
52
60
|
if line =~ /unknown-245/
|
53
|
-
Ohai::Log.debug("Plugin Azure: Found unknown-245 DHCP option used by
|
61
|
+
Ohai::Log.debug("Plugin Azure: Found unknown-245 DHCP option used by Azure.")
|
54
62
|
has_245 = true
|
55
63
|
break
|
56
64
|
end
|
@@ -59,4 +67,56 @@ Ohai.plugin(:Azure) do
|
|
59
67
|
has_245
|
60
68
|
end
|
61
69
|
|
70
|
+
# create the basic structure we'll store our data in
|
71
|
+
def initialize_metadata_mash
|
72
|
+
metadata = Mash.new
|
73
|
+
metadata["compute"] = Mash.new
|
74
|
+
metadata["network"] = Mash.new
|
75
|
+
metadata["network"]["interfaces"] = Mash.new
|
76
|
+
%w{public_ipv4 local_ipv4 public_ipv6 local_ipv6}.each do |type|
|
77
|
+
metadata["network"][type] = []
|
78
|
+
end
|
79
|
+
metadata
|
80
|
+
end
|
81
|
+
|
82
|
+
def fetch_ip_data(data, type, field)
|
83
|
+
ips = []
|
84
|
+
|
85
|
+
data[type]["ipAddress"].each do |val|
|
86
|
+
ips << val[field] unless val[field].empty?
|
87
|
+
end
|
88
|
+
ips
|
89
|
+
end
|
90
|
+
|
91
|
+
def parse_metadata
|
92
|
+
return nil unless can_socket_connect?(Ohai::Mixin::AzureMetadata::AZURE_METADATA_ADDR, 80)
|
93
|
+
|
94
|
+
endpoint_data = fetch_metadata
|
95
|
+
return nil if endpoint_data.nil?
|
96
|
+
metadata = initialize_metadata_mash
|
97
|
+
|
98
|
+
# blindly add everything in compute to our data structure
|
99
|
+
endpoint_data["compute"].each do |k, v|
|
100
|
+
metadata["compute"][k] = v
|
101
|
+
end
|
102
|
+
|
103
|
+
# parse out per interface interface IP data
|
104
|
+
endpoint_data["network"]["interface"].each do |int|
|
105
|
+
metadata["network"]["interfaces"][int["macAddress"]] = Mash.new
|
106
|
+
metadata["network"]["interfaces"][int["macAddress"]]["mac"] = int["macAddress"]
|
107
|
+
metadata["network"]["interfaces"][int["macAddress"]]["public_ipv6"] = fetch_ip_data(int, "ipv6", "publicIpAddress")
|
108
|
+
metadata["network"]["interfaces"][int["macAddress"]]["public_ipv4"] = fetch_ip_data(int, "ipv4", "publicIpAddress")
|
109
|
+
metadata["network"]["interfaces"][int["macAddress"]]["local_ipv6"] = fetch_ip_data(int, "ipv6", "privateIpAddress")
|
110
|
+
metadata["network"]["interfaces"][int["macAddress"]]["local_ipv4"] = fetch_ip_data(int, "ipv4", "privateIpAddress")
|
111
|
+
end
|
112
|
+
|
113
|
+
# aggregate the total IP data
|
114
|
+
%w{public_ipv4 local_ipv4 public_ipv6 local_ipv6}.each do |type|
|
115
|
+
metadata["network"]["interfaces"].each_value do |val|
|
116
|
+
metadata["network"][type].concat val[type] unless val[type].empty?
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
metadata
|
121
|
+
end
|
62
122
|
end
|
data/lib/ohai/plugins/cloud.rb
CHANGED
@@ -265,8 +265,10 @@ Ohai.plugin(:Cloud) do
|
|
265
265
|
|
266
266
|
# Fill cloud hash with azure values
|
267
267
|
def get_azure_values
|
268
|
-
@cloud_attr_obj.add_ipv4_addr(
|
269
|
-
|
268
|
+
azure["metadata"]["network"]["public_ipv4"].each { |ipaddr| @cloud_attr_obj.add_ipv4_addr(ipaddr, :public) }
|
269
|
+
azure["metadata"]["network"]["public_ipv6"].each { |ipaddr| @cloud_attr_obj.add_ipv6_addr(ipaddr, :public) }
|
270
|
+
azure["metadata"]["network"]["local_ipv4"].each { |ipaddr| @cloud_attr_obj.add_ipv4_addr(ipaddr, :private) }
|
271
|
+
azure["metadata"]["network"]["local_ipv6"].each { |ipaddr| @cloud_attr_obj.add_ipv6_addr(ipaddr, :private) }
|
270
272
|
@cloud_attr_obj.public_hostname = azure["public_fqdn"]
|
271
273
|
@cloud_attr_obj.provider = "azure"
|
272
274
|
end
|
@@ -15,10 +15,10 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
-
require "ohai/mixin/do_metadata"
|
19
|
-
require "ohai/mixin/http_helper"
|
20
|
-
|
21
18
|
Ohai.plugin(:DigitalOcean) do
|
19
|
+
require "ohai/mixin/do_metadata"
|
20
|
+
require "ohai/mixin/http_helper"
|
21
|
+
|
22
22
|
include Ohai::Mixin::DOMetadata
|
23
23
|
include Ohai::Mixin::HttpHelper
|
24
24
|
|
data/lib/ohai/plugins/ec2.rb
CHANGED
@@ -24,21 +24,20 @@
|
|
24
24
|
# 3. DMI data mentions amazon. This catches HVM instances in a VPC
|
25
25
|
# 4. Kernel data mentioned Amazon. This catches Windows HVM & paravirt instances
|
26
26
|
|
27
|
-
require "ohai/mixin/ec2_metadata"
|
28
|
-
require "ohai/mixin/http_helper"
|
29
|
-
require "base64"
|
30
|
-
|
31
27
|
Ohai.plugin(:EC2) do
|
28
|
+
require "ohai/mixin/ec2_metadata"
|
29
|
+
require "ohai/mixin/http_helper"
|
30
|
+
require "base64"
|
31
|
+
|
32
32
|
include Ohai::Mixin::Ec2Metadata
|
33
33
|
include Ohai::Mixin::HttpHelper
|
34
34
|
|
35
35
|
provides "ec2"
|
36
|
-
|
37
36
|
depends "dmi"
|
38
|
-
depends "kernel"
|
39
37
|
|
40
38
|
# look for amazon string in dmi bios data
|
41
39
|
# this gets us detection of HVM instances that are within a VPC
|
40
|
+
# @return [Boolean] do we have Amazon DMI data?
|
42
41
|
def has_ec2_dmi?
|
43
42
|
# detect a version of '4.2.amazon'
|
44
43
|
if get_attribute(:dmi, :bios, :all_records, 0, :Version) =~ /amazon/
|
@@ -51,7 +50,9 @@ Ohai.plugin(:EC2) do
|
|
51
50
|
end
|
52
51
|
|
53
52
|
# looks for a xen UUID that starts with ec2
|
54
|
-
#
|
53
|
+
# uses the sys tree on Linux and a WMI query on windows
|
54
|
+
# this gets us detection of HVM and Paravirt hosts
|
55
|
+
# @return [Boolean] do we have a Xen UUID or not?
|
55
56
|
def has_ec2_xen_uuid?
|
56
57
|
if ::File.exist?("/sys/hypervisor/uuid")
|
57
58
|
if ::File.read("/sys/hypervisor/uuid") =~ /^ec2/
|
@@ -63,24 +64,31 @@ Ohai.plugin(:EC2) do
|
|
63
64
|
false
|
64
65
|
end
|
65
66
|
|
66
|
-
# looks
|
67
|
-
# this
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
67
|
+
# looks at the identifying number WMI value to see if it starts with ec2.
|
68
|
+
# this is actually the same value we're looking at in has_ec2_xen_uuid? on
|
69
|
+
# linux hosts
|
70
|
+
# @return [Boolean] do we have a Xen Identifying Number or not?
|
71
|
+
def has_ec2_identifying_number?
|
72
|
+
if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
73
|
+
# require "wmi-lite/wmi"
|
74
|
+
wmi = WmiLite::Wmi.new
|
75
|
+
if wmi.first_of("Win32_ComputerSystemProduct")["identifyingnumber"] =~ /^ec2/
|
76
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_identifying_number? == true")
|
77
|
+
return true
|
78
|
+
end
|
73
79
|
else
|
74
|
-
Ohai::Log.debug("Plugin EC2:
|
80
|
+
Ohai::Log.debug("Plugin EC2: has_ec2_identifying_number? == false")
|
75
81
|
false
|
76
82
|
end
|
77
83
|
end
|
78
84
|
|
85
|
+
# a single check that combines all the various detection methods for EC2
|
86
|
+
# @return [Boolean] Does the system appear to be on EC2
|
79
87
|
def looks_like_ec2?
|
80
88
|
return true if hint?("ec2")
|
81
89
|
|
82
90
|
# Even if it looks like EC2 try to connect first
|
83
|
-
if has_ec2_xen_uuid? || has_ec2_dmi? ||
|
91
|
+
if has_ec2_xen_uuid? || has_ec2_dmi? || has_ec2_identifying_number?
|
84
92
|
return true if can_socket_connect?(Ohai::Mixin::Ec2Metadata::EC2_METADATA_ADDR, 80)
|
85
93
|
end
|
86
94
|
end
|
@@ -17,11 +17,11 @@
|
|
17
17
|
# See the License for the specific language governing permissions and
|
18
18
|
# limitations under the License.
|
19
19
|
|
20
|
-
# eucalyptus metadata service is compatible with the ec2 service calls
|
21
|
-
require "ohai/mixin/ec2_metadata"
|
22
|
-
require "ohai/mixin/http_helper"
|
23
|
-
|
24
20
|
Ohai.plugin(:Eucalyptus) do
|
21
|
+
# eucalyptus metadata service is compatible with the ec2 service calls
|
22
|
+
require "ohai/mixin/ec2_metadata"
|
23
|
+
require "ohai/mixin/http_helper"
|
24
|
+
|
25
25
|
include Ohai::Mixin::Ec2Metadata
|
26
26
|
include Ohai::Mixin::HttpHelper
|
27
27
|
|
data/lib/ohai/plugins/gce.rb
CHANGED
@@ -14,10 +14,10 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
require "ohai/mixin/gce_metadata"
|
18
|
-
require "ohai/mixin/http_helper"
|
19
|
-
|
20
17
|
Ohai.plugin(:GCE) do
|
18
|
+
require "ohai/mixin/gce_metadata"
|
19
|
+
require "ohai/mixin/http_helper"
|
20
|
+
|
21
21
|
include Ohai::Mixin::GCEMetadata
|
22
22
|
include Ohai::Mixin::HttpHelper
|
23
23
|
|
@@ -25,10 +25,10 @@
|
|
25
25
|
# limitations under the License.
|
26
26
|
#
|
27
27
|
|
28
|
-
require "socket"
|
29
|
-
require "ipaddr"
|
30
|
-
|
31
28
|
Ohai.plugin(:Hostname) do
|
29
|
+
require "socket"
|
30
|
+
require "ipaddr"
|
31
|
+
|
32
32
|
provides "domain", "hostname", "fqdn", "machinename"
|
33
33
|
|
34
34
|
# hostname : short hostname
|
@@ -82,8 +82,39 @@ Ohai.plugin(:CPU) do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
cpu cpuinfo
|
85
|
+
|
85
86
|
cpu[:total] = cpu_number
|
86
|
-
|
87
|
-
|
87
|
+
|
88
|
+
# use data we collected unless cpuinfo is lacking core information
|
89
|
+
# which is the case on older linux distros
|
90
|
+
if !real_cpu.empty? && cpu["0"]["cores"]
|
91
|
+
cpu[:real] = real_cpu.keys.length
|
92
|
+
cpu[:cores] = real_cpu.keys.length * cpu["0"]["cores"].to_i
|
93
|
+
else
|
94
|
+
begin
|
95
|
+
Ohai::Log.debug("Plugin CPU: Falling back to aggregate data from lscpu as real cpu & core data is missing in /proc/cpuinfo")
|
96
|
+
so = shell_out("lscpu")
|
97
|
+
if so.exitstatus == 0
|
98
|
+
lscpu_data = Mash.new
|
99
|
+
so.stdout.each_line do |line|
|
100
|
+
case line
|
101
|
+
when /^Thread\(s\) per core:\s(.+)/ # http://rubular.com/r/lOw2pRrw1q
|
102
|
+
lscpu_data[:threads] = $1.to_i
|
103
|
+
when /^Core\(s\) per socket:\s(.+)/ # http://rubular.com/r/lOw2pRrw1q
|
104
|
+
lscpu_data[:cores] = $1.to_i
|
105
|
+
when /^Socket\(s\):\s(.+)/ # http://rubular.com/r/DIzmPtJFvK
|
106
|
+
lscpu_data[:sockets] = $1.to_i
|
107
|
+
end
|
108
|
+
end
|
109
|
+
cpu[:total] = lscpu_data[:sockets] * lscpu_data[:cores] * lscpu_data[:threads]
|
110
|
+
cpu[:real] = lscpu_data[:sockets]
|
111
|
+
cpu[:cores] = lscpu_data[:sockets] * lscpu_data[:cores]
|
112
|
+
else
|
113
|
+
Ohai::Log.debug("Plugin CPU: Error executing lscpu. CPU data may not be available.")
|
114
|
+
end
|
115
|
+
rescue Ohai::Exceptions::Exec # util-linux isn't installed most likely
|
116
|
+
Ohai::Log.debug("Plugin CPU: Error executing lscpu. util-linux may not be installed.")
|
117
|
+
end
|
118
|
+
end
|
88
119
|
end
|
89
120
|
end
|
@@ -95,52 +95,60 @@ Ohai.plugin(:Filesystem) do
|
|
95
95
|
fs = Mash.new
|
96
96
|
|
97
97
|
# Grab filesystem data from df
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
98
|
+
begin
|
99
|
+
so = shell_out("df -P")
|
100
|
+
so.stdout.each_line do |line|
|
101
|
+
case line
|
102
|
+
when /^Filesystem\s+1024-blocks/
|
103
|
+
next
|
104
|
+
when /^(.+?)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+\%)\s+(.+)$/
|
105
|
+
key = "#{$1},#{$6}"
|
106
|
+
fs[key] = Mash.new
|
107
|
+
fs[key][:device] = $1
|
108
|
+
fs[key][:kb_size] = $2
|
109
|
+
fs[key][:kb_used] = $3
|
110
|
+
fs[key][:kb_available] = $4
|
111
|
+
fs[key][:percent_used] = $5
|
112
|
+
fs[key][:mount] = $6
|
113
|
+
end
|
112
114
|
end
|
113
|
-
end
|
114
115
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
116
|
+
# Grab filesystem inode data from df
|
117
|
+
so = shell_out("df -iP")
|
118
|
+
so.stdout.each_line do |line|
|
119
|
+
case line
|
120
|
+
when /^Filesystem\s+Inodes/
|
121
|
+
next
|
122
|
+
when /^(.+?)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+\%)\s+(.+)$/
|
123
|
+
key = "#{$1},#{$6}"
|
124
|
+
fs[key] ||= Mash.new
|
125
|
+
fs[key][:device] = $1
|
126
|
+
fs[key][:total_inodes] = $2
|
127
|
+
fs[key][:inodes_used] = $3
|
128
|
+
fs[key][:inodes_available] = $4
|
129
|
+
fs[key][:inodes_percent_used] = $5
|
130
|
+
fs[key][:mount] = $6
|
131
|
+
end
|
130
132
|
end
|
133
|
+
rescue Ohai::Exceptions::Exec
|
134
|
+
Ohai::Log.warn("Plugin Filesystem: df binary is not available. Some data will not be available.")
|
131
135
|
end
|
132
136
|
|
133
137
|
# Grab mount information from /bin/mount
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
138
|
+
begin
|
139
|
+
so = shell_out("mount")
|
140
|
+
so.stdout.each_line do |line|
|
141
|
+
if line =~ /^(.+?) on (.+?) type (.+?) \((.+?)\)$/
|
142
|
+
key = "#{$1},#{$2}"
|
143
|
+
fs[key] = Mash.new unless fs.has_key?(key)
|
144
|
+
fs[key][:device] = $1
|
145
|
+
fs[key][:mount] = $2
|
146
|
+
fs[key][:fs_type] = $3
|
147
|
+
fs[key][:mount_options] = $4.split(",")
|
148
|
+
end
|
143
149
|
end
|
150
|
+
rescue Ohai::Exceptions::Exec
|
151
|
+
Ohai::Log.warn("Plugin Filesystem: mount binary is not available. Some data will not be available.")
|
144
152
|
end
|
145
153
|
|
146
154
|
# We used to try to decide if we wanted to run lsblk or blkid
|