ohai 13.3.0 → 13.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|