diff options
author | Nate Walck <nate.walck@gmail.com> | 2016-07-20 11:07:38 -0700 |
---|---|---|
committer | Phil Dibowitz <phil@ipom.com> | 2016-07-20 11:07:38 -0700 |
commit | 618c4493940188c55ff3d4baf3bb211804cc1b5f (patch) | |
tree | 9ac0fcef7f402691ac49aa351fe7c39fa35f0e3e | |
parent | d70e02a812fdbabaec6ec10999990ab2e2268875 (diff) | |
download | ohai-618c4493940188c55ff3d4baf3bb211804cc1b5f.tar.gz |
Added hardware plugin for ohai on darwin (#839)
-rw-r--r-- | lib/ohai/plugins/darwin/hardware.rb | 98 | ||||
-rw-r--r-- | spec/unit/plugins/darwin/hardware_spec.rb | 116 | ||||
-rw-r--r-- | spec/unit/plugins/darwin/hardware_system_profiler_output.rb | 1110 |
3 files changed, 1324 insertions, 0 deletions
diff --git a/lib/ohai/plugins/darwin/hardware.rb b/lib/ohai/plugins/darwin/hardware.rb new file mode 100644 index 00000000..1aab3b92 --- /dev/null +++ b/lib/ohai/plugins/darwin/hardware.rb @@ -0,0 +1,98 @@ +# +# Author:: Nate Walck (<nate.walck@gmail.com>) +# Copyright:: Copyright (c) 2016-present Facebook, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +Ohai.plugin(:Hardware) do + provides "hardware" + + def system_profiler(datatype) + sp_cmd = "system_profiler #{datatype} -xml" + # Hardware queries + sp_std = shell_out(sp_cmd) + sp_hash = Plist.parse_xml(sp_std.stdout) + end + + collect_data(:darwin) do + unless hardware + hardware Mash.new + else + Ohai::Log.debug("Plugin Darwin Hardware: namespace already exists") + next + end + + begin + require "plist" + rescue LoadError => e + # In case the plist gem isn't present, skip this plugin. + Ohai::Log.debug("Plugin Hardware: Can't load gem: #{e}. Cannot continue.") + next + end + + hw_hash = system_profiler("SPHardwareDataType") + hw_hash[0]["_items"][0].delete("_name") + hardware.merge!(hw_hash[0]["_items"][0]) + + { + "operating_system" => "sw_vers -productName", + "operating_system_version" => "sw_vers -productVersion", + "build_version" => "sw_vers -buildVersion", + "architecture" => "uname -m", + }.each do |var, cmd| + os_info = shell_out(cmd).stdout + hardware[var] = os_info.strip unless os_info.nil? + end + + # Storage queries + storage = [] + storage_hash = system_profiler("SPStorageDataType") + drives = storage_hash[0]["_items"] + drives.each do |drive_entry| + drive = Mash.new + drive[:name] = drive_entry["_name"] + drive[:bsd_name] = drive_entry["bsd_name"] + drive[:capacity] = drive_entry["size_in_bytes"] + if drive_entry.has_key?("com.apple.corestorage.pv") + drive[:drive_type] = drive_entry["com.apple.corestorage.pv"][0]["medium_type"] + drive[:smart_status] = drive_entry["com.apple.corestorage.pv"][0]["smart_status"] + drive[:partitions] = drive_entry["com.apple.corestorage.pv"].count + end + storage << drive + end + + hardware["storage"] = storage + + # Battery queries + battery_hash = system_profiler("SPPowerDataType") + power_entries = battery_hash[0]["_items"] + battery = Mash.new + power_entries.each do |entry| + if entry.value?("spbattery_information") + charge = entry["sppower_battery_charge_info"] + health = entry["sppower_battery_health_info"] + battery[:current_capacity] = charge["sppower_battery_current_capacity"] + battery[:max_capacity] = charge["sppower_battery_max_capacity"] + battery[:fully_charged] = charge["sppower_battery_fully_charged"].eql?("TRUE") + battery[:is_charging] = charge["sppower_battery_is_charging"].eql?("TRUE") + battery[:charge_cycle_count] = health["sppower_battery_cycle_count"] + battery[:health] = health["sppower_battery_health"] + battery[:serial] = entry["sppower_battery_model_info"]["sppower_battery_serial_number"] + battery[:remaining] = (battery["current_capacity"].to_f / battery["max_capacity"].to_f * 100).to_i + end + end + hardware[:battery] = battery + end +end diff --git a/spec/unit/plugins/darwin/hardware_spec.rb b/spec/unit/plugins/darwin/hardware_spec.rb new file mode 100644 index 00000000..65f3cd4f --- /dev/null +++ b/spec/unit/plugins/darwin/hardware_spec.rb @@ -0,0 +1,116 @@ +# +# Author:: Nate Walck (<nate.walck@gmail.com>) +# Copyright:: Copyright (c) 2016-present Facebook, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper.rb") +require File.expand_path("#{File.dirname(__FILE__)}/hardware_system_profiler_output.rb") + +describe Ohai::System, "Darwin hardware plugin", :unix_only do + let (:plugin) { get_plugin("darwin/hardware") } + before(:each) do + allow(plugin).to receive(:collect_os).and_return(:darwin) + # Make sure it always runs correct commands and mock the data as it calls them + allow(plugin).to receive(:shell_out).with( + "system_profiler SPHardwareDataType -xml" + ).and_return( + mock_shell_out(0, HardwareSystemProfilerOutput::Hardware, "") + ) + + allow(plugin).to receive(:shell_out).with( + "sw_vers -productName" + ).and_return( + mock_shell_out(0, "Mac OS X", "") + ) + + allow(plugin).to receive(:shell_out).with( + "sw_vers -productVersion" + ).and_return( + mock_shell_out(0, "10.12", "") + ) + + allow(plugin).to receive(:shell_out).with( + "sw_vers -buildVersion" + ).and_return( + mock_shell_out(0, "16A239j", "") + ) + + allow(plugin).to receive(:shell_out).with( + "uname -m" + ).and_return( + mock_shell_out(0, "x86_64", "") + ) + + allow(plugin).to receive(:shell_out).with( + "system_profiler SPStorageDataType -xml" + ).and_return( + mock_shell_out(0, HardwareSystemProfilerOutput::Storage, "") + ) + + allow(plugin).to receive(:shell_out).with( + "system_profiler SPPowerDataType -xml" + ).and_return( + mock_shell_out(0, HardwareSystemProfilerOutput::Power, "") + ) + end + + it "parses hardware data correctly" do + plugin.run + expect(plugin["hardware"]["SMC_version_system"]).to eq("2.16f68") + expect(plugin["hardware"]["boot_rom_version"]).to eq("MBP111.0138.B17") + expect(plugin["hardware"]["cpu_type"]).to eq("Intel Core i7") + expect(plugin["hardware"]["current_processor_speed"]).to eq("3 GHz") + expect(plugin["hardware"]["l2_cache_core"]).to eq("256 KB") + expect(plugin["hardware"]["l3_cache"]).to eq("4 MB") + expect(plugin["hardware"]["machine_model"]).to eq("MacBookPro11,1") + expect(plugin["hardware"]["machine_name"]).to eq("MacBook Pro") + expect(plugin["hardware"]["number_processors"]).to eq(2) + expect(plugin["hardware"]["packages"]).to eq(1) + expect(plugin["hardware"]["physical_memory"]).to eq("16 GB") + expect(plugin["hardware"]["platform_UUID"]).to eq("F1A4AE0F-84A8-45D8-83C7-F3F904464FC5") + expect(plugin["hardware"]["serial_number"]).to eq("ABCDEFG12345") + end + + it "parses sw_vers and uname data correctly" do + plugin.run + expect(plugin["hardware"]["operating_system"]).to eq("Mac OS X") + expect(plugin["hardware"]["operating_system_version"]).to eq("10.12") + expect(plugin["hardware"]["build_version"]).to eq("16A239j") + expect(plugin["hardware"]["architecture"]).to eq("x86_64") + end + + it "parses storage data correctly" do + plugin.run + expect(plugin["hardware"]["storage"][0]["name"]).to eq("Macintosh HD") + expect(plugin["hardware"]["storage"][0]["bsd_name"]).to eq("disk1") + expect(plugin["hardware"]["storage"][0]["capacity"]).to eq(249661751296) + expect(plugin["hardware"]["storage"][0]["drive_type"]).to eq("ssd") + expect(plugin["hardware"]["storage"][0]["smart_status"]).to eq("Verified") + expect(plugin["hardware"]["storage"][0]["partitions"]).to eq(1) + end + + it "parses storage data correctly" do + plugin.run + expect(plugin["hardware"]["battery"]["current_capacity"]).to eq(5841) + expect(plugin["hardware"]["battery"]["max_capacity"]).to eq(5841) + expect(plugin["hardware"]["battery"]["fully_charged"]).to eq(true) + expect(plugin["hardware"]["battery"]["is_charging"]).to eq(false) + expect(plugin["hardware"]["battery"]["charge_cycle_count"]).to eq(201) + expect(plugin["hardware"]["battery"]["health"]).to eq("Good") + expect(plugin["hardware"]["battery"]["serial"]).to eq("D123456789ABCDEFG") + expect(plugin["hardware"]["battery"]["remaining"]).to eq(100) + end +end diff --git a/spec/unit/plugins/darwin/hardware_system_profiler_output.rb b/spec/unit/plugins/darwin/hardware_system_profiler_output.rb new file mode 100644 index 00000000..086ebec0 --- /dev/null +++ b/spec/unit/plugins/darwin/hardware_system_profiler_output.rb @@ -0,0 +1,1110 @@ +module HardwareSystemProfilerOutput + Hardware = <<hardware_output +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<array> + <dict> + <key>_SPCommandLineArguments</key> + <array> + <string>/usr/sbin/system_profiler</string> + <string>-nospawn</string> + <string>-xml</string> + <string>SPHardwareDataType</string> + <string>-detailLevel</string> + <string>full</string> + </array> + <key>_SPCompletionInterval</key> + <real>0.095997989177703857</real> + <key>_SPResponseTime</key> + <real>0.21922904253005981</real> + <key>_dataType</key> + <string>SPHardwareDataType</string> + <key>_detailLevel</key> + <string>-2</string> + <key>_items</key> + <array> + <dict> + <key>SMC_version_system</key> + <string>2.16f68</string> + <key>_name</key> + <string>hardware_overview</string> + <key>boot_rom_version</key> + <string>MBP111.0138.B17</string> + <key>cpu_type</key> + <string>Intel Core i7</string> + <key>current_processor_speed</key> + <string>3 GHz</string> + <key>l2_cache_core</key> + <string>256 KB</string> + <key>l3_cache</key> + <string>4 MB</string> + <key>machine_model</key> + <string>MacBookPro11,1</string> + <key>machine_name</key> + <string>MacBook Pro</string> + <key>number_processors</key> + <integer>2</integer> + <key>packages</key> + <integer>1</integer> + <key>physical_memory</key> + <string>16 GB</string> + <key>platform_UUID</key> + <string>F1A4AE0F-84A8-45D8-83C7-F3F904464FC5</string> + <key>serial_number</key> + <string>ABCDEFG12345</string> + </dict> + </array> + <key>_parentDataType</key> + <string>SPRootDataType</string> + <key>_properties</key> + <dict> + <key>LOM_revision</key> + <dict> + <key>_order</key> + <string>85</string> + </dict> + <key>Lightshow_version</key> + <dict> + <key>_order</key> + <string>83</string> + <key>_suppressLocalization</key> + <string>YES</string> + </dict> + <key>MMM_state</key> + <dict> + <key>_order</key> + <string>70</string> + </dict> + <key>SMC_version_other</key> + <dict> + <key>_order</key> + <string>82</string> + </dict> + <key>SMC_version_riser</key> + <dict> + <key>_order</key> + <string>81</string> + </dict> + <key>SMC_version_system</key> + <dict> + <key>_order</key> + <string>80</string> + <key>_suppressLocalization</key> + <string>YES</string> + </dict> + <key>apple_rom_info</key> + <dict> + <key>_order</key> + <string>53</string> + </dict> + <key>boot_rom_release_date</key> + <dict> + <key>_order</key> + <string>52</string> + </dict> + <key>boot_rom_vendor</key> + <dict> + <key>_order</key> + <string>50</string> + </dict> + <key>boot_rom_version</key> + <dict> + <key>_order</key> + <string>51</string> + </dict> + <key>bus_speed</key> + <dict> + <key>_order</key> + <string>45</string> + </dict> + <key>cores_per_package</key> + <dict> + <key>_order</key> + <string>24</string> + </dict> + <key>cpu_interconnect_speed</key> + <dict> + <key>_order</key> + <string>46</string> + </dict> + <key>cpu_type</key> + <dict> + <key>_order</key> + <string>15</string> + </dict> + <key>current_processor_speed</key> + <dict> + <key>_order</key> + <string>17</string> + </dict> + <key>l2_cache</key> + <dict> + <key>_order</key> + <string>26</string> + </dict> + <key>l2_cache_core</key> + <dict> + <key>_order</key> + <string>26</string> + </dict> + <key>l2_cache_share</key> + <dict> + <key>_order</key> + <string>26</string> + </dict> + <key>l2_cache_size</key> + <dict> + <key>_order</key> + <string>26</string> + </dict> + <key>l3_cache</key> + <dict> + <key>_order</key> + <string>27</string> + </dict> + <key>l3_cache_processor</key> + <dict> + <key>_order</key> + <string>27</string> + </dict> + <key>l3_cache_size</key> + <dict> + <key>_order</key> + <string>27</string> + </dict> + <key>machine_model</key> + <dict> + <key>_order</key> + <string>11</string> + </dict> + <key>machine_name</key> + <dict> + <key>_order</key> + <string>10</string> + </dict> + <key>maximum_processor_speed</key> + <dict> + <key>_order</key> + <string>19</string> + </dict> + <key>minimum_processor_speed</key> + <dict> + <key>_order</key> + <string>18</string> + </dict> + <key>number_cpus</key> + <dict> + <key>_order</key> + <string>20</string> + </dict> + <key>number_processors</key> + <dict> + <key>_order</key> + <string>22</string> + </dict> + <key>packages</key> + <dict> + <key>_order</key> + <string>20</string> + </dict> + <key>physical_memory</key> + <dict> + <key>_order</key> + <string>40</string> + </dict> + <key>platform_UUID</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + <key>_order</key> + <string>98</string> + </dict> + <key>platform_cpu_features</key> + <dict> + <key>_order</key> + <string>30</string> + </dict> + <key>platform_cpu_htt</key> + <dict> + <key>_order</key> + <string>28</string> + </dict> + <key>platform_cpu_vendor</key> + <dict> + <key>_order</key> + <string>12</string> + </dict> + <key>platform_manufacturer</key> + <dict> + <key>_order</key> + <string>4</string> + </dict> + <key>platform_product_name</key> + <dict> + <key>_order</key> + <string>2</string> + </dict> + <key>platform_version</key> + <dict> + <key>_order</key> + <string>6</string> + </dict> + <key>riser_serial_number</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + <key>_order</key> + <string>92</string> + </dict> + <key>sales_order_number</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + <key>_order</key> + <string>95</string> + </dict> + <key>serial_number</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + <key>_order</key> + <string>90</string> + </dict> + <key>volumes</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + </dict> + </dict> + <key>_timeStamp</key> + <date>2016-07-08T19:44:04Z</date> + <key>_versionInfo</key> + <dict> + <key>com.apple.SystemProfiler.SPPlatformReporter</key> + <string>1445</string> + </dict> + </dict> +</array> +</plist> +hardware_output + + Storage = <<storage_output +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<array> + <dict> + <key>_SPCommandLineArguments</key> + <array> + <string>/usr/sbin/system_profiler</string> + <string>-nospawn</string> + <string>-xml</string> + <string>SPStorageDataType</string> + <string>-detailLevel</string> + <string>full</string> + </array> + <key>_SPCompletionInterval</key> + <real>0.35913503170013428</real> + <key>_SPResponseTime</key> + <real>0.46972799301147461</real> + <key>_dataType</key> + <string>SPStorageDataType</string> + <key>_items</key> + <array> + <dict> + <key>_name</key> + <string>Macintosh HD</string> + <key>bsd_name</key> + <string>disk1</string> + <key>com.apple.corestorage.lv</key> + <dict> + <key>com.apple.corestorage.lv.encrypted</key> + <string>yes</string> + <key>com.apple.corestorage.lv.encryptionType</key> + <string>AES-XTS</string> + <key>com.apple.corestorage.lv.locked</key> + <string>no</string> + <key>com.apple.corestorage.lv.revertible</key> + <string>kCoreStorageDecryptRevert</string> + <key>com.apple.corestorage.lv.uuid</key> + <string>1CD892E5-60BC-4339-AEF9-8C2818735617</string> + </dict> + <key>com.apple.corestorage.lvg</key> + <dict> + <key>com.apple.corestorage.lvg.freeSpace</key> + <integer>0</integer> + <key>com.apple.corestorage.lvg.name</key> + <string>Macintosh HD</string> + <key>com.apple.corestorage.lvg.size</key> + <integer>250006216704</integer> + <key>com.apple.corestorage.lvg.uuid</key> + <string>949A3F85-1B19-4930-8EE0-B1565D66F2C5</string> + </dict> + <key>com.apple.corestorage.pv</key> + <array> + <dict> + <key>_name</key> + <string>disk0s2</string> + <key>com.apple.corestorage.pv.size</key> + <integer>250006216704</integer> + <key>com.apple.corestorage.pv.status</key> + <string>Online</string> + <key>com.apple.corestorage.pv.uuid</key> + <string>D26DACEB-E661-4621-9BE3-355FAE611398</string> + <key>device_name</key> + <string>APPLE SSD SM0256F</string> + <key>is_internal_disk</key> + <string>yes</string> + <key>media_name</key> + <string>APPLE SSD SM0256F Media</string> + <key>medium_type</key> + <string>ssd</string> + <key>partition_map_type</key> + <string>guid_partition_map_type</string> + <key>protocol</key> + <string>PCI</string> + <key>smart_status</key> + <string>Verified</string> + </dict> + </array> + <key>file_system</key> + <string>Journaled HFS+</string> + <key>free_space_in_bytes</key> + <integer>23864803328</integer> + <key>ignore_ownership</key> + <string>no</string> + <key>mount_point</key> + <string>/</string> + <key>size_in_bytes</key> + <integer>249661751296</integer> + <key>volume_uuid</key> + <string>06A53A23-1675-31BF-93BF-E78C149C61E9</string> + <key>writable</key> + <string>yes</string> + </dict> + </array> + <key>_parentDataType</key> + <string>SPHardwareDataType</string> + <key>_properties</key> + <dict> + <key>_name</key> + <dict> + <key>_isColumn</key> + <string>YES</string> + <key>_order</key> + <string>100</string> + </dict> + <key>bsd_name</key> + <dict> + <key>_isColumn</key> + <true/> + <key>_order</key> + <string>180</string> + </dict> + <key>com.apple.corestorage.lv</key> + <dict> + <key>_order</key> + <string>200</string> + </dict> + <key>com.apple.corestorage.lv.bytesConverted</key> + <dict> + <key>_isByteSize</key> + <true/> + <key>_order</key> + <string>250</string> + </dict> + <key>com.apple.corestorage.lv.conversionState</key> + <dict> + <key>_order</key> + <string>240</string> + </dict> + <key>com.apple.corestorage.lv.encrypted</key> + <dict> + <key>_order</key> + <string>220</string> + </dict> + <key>com.apple.corestorage.lv.encryptionType</key> + <dict> + <key>_order</key> + <string>225</string> + </dict> + <key>com.apple.corestorage.lv.locked</key> + <dict> + <key>_order</key> + <string>230</string> + </dict> + <key>com.apple.corestorage.lv.revertible</key> + <dict> + <key>_order</key> + <string>210</string> + </dict> + <key>com.apple.corestorage.lv.uuid</key> + <dict> + <key>_order</key> + <string>290</string> + </dict> + <key>com.apple.corestorage.lvg</key> + <dict> + <key>_order</key> + <string>400</string> + </dict> + <key>com.apple.corestorage.lvg.freeSpace</key> + <dict> + <key>_isByteSize</key> + <true/> + <key>_order</key> + <string>430</string> + </dict> + <key>com.apple.corestorage.lvg.name</key> + <dict> + <key>_order</key> + <string>410</string> + </dict> + <key>com.apple.corestorage.lvg.size</key> + <dict> + <key>_isByteSize</key> + <true/> + <key>_order</key> + <string>420</string> + </dict> + <key>com.apple.corestorage.lvg.uuid</key> + <dict> + <key>_order</key> + <string>440</string> + </dict> + <key>com.apple.corestorage.pv</key> + <dict> + <key>_order</key> + <string>500</string> + </dict> + <key>com.apple.corestorage.pv.size</key> + <dict> + <key>_isByteSize</key> + <true/> + <key>_order</key> + <string>520</string> + </dict> + <key>com.apple.corestorage.pv.status</key> + <dict> + <key>_order</key> + <string>565</string> + </dict> + <key>com.apple.corestorage.pv.uuid</key> + <dict> + <key>_order</key> + <string>590</string> + </dict> + <key>device_name</key> + <dict> + <key>_order</key> + <string>505</string> + </dict> + <key>file_system</key> + <dict> + <key>_isColumn</key> + <true/> + <key>_order</key> + <string>140</string> + </dict> + <key>free_space_in_bytes</key> + <dict> + <key>_isByteSize</key> + <true/> + <key>_isColumn</key> + <true/> + <key>_order</key> + <string>110</string> + </dict> + <key>ignore_ownership</key> + <dict> + <key>_order</key> + <string>160</string> + </dict> + <key>is_internal_disk</key> + <dict> + <key>_order</key> + <string>550</string> + </dict> + <key>media_name</key> + <dict> + <key>_order</key> + <string>510</string> + </dict> + <key>medium_type</key> + <dict> + <key>_order</key> + <string>530</string> + </dict> + <key>mount_point</key> + <dict> + <key>_isColumn</key> + <true/> + <key>_order</key> + <string>130</string> + </dict> + <key>optical_media_type</key> + <dict> + <key>_order</key> + <string>535</string> + </dict> + <key>partition_map_type</key> + <dict> + <key>_order</key> + <string>560</string> + </dict> + <key>protocol</key> + <dict> + <key>_order</key> + <string>540</string> + </dict> + <key>size_in_bytes</key> + <dict> + <key>_isByteSize</key> + <string>YES</string> + <key>_isColumn</key> + <true/> + <key>_order</key> + <string>120</string> + </dict> + <key>smart_status</key> + <dict> + <key>_order</key> + <string>570</string> + </dict> + <key>volume_uuid</key> + <dict> + <key>_order</key> + <string>190</string> + </dict> + <key>volumes</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + </dict> + <key>writable</key> + <dict> + <key>_order</key> + <string>150</string> + </dict> + </dict> + <key>_timeStamp</key> + <date>2016-07-08T19:45:57Z</date> + <key>_versionInfo</key> + <dict> + <key>com.apple.SystemProfiler.SPStorageReporter</key> + <string>900</string> + </dict> + </dict> +</array> +</plist> +storage_output + + Power = <<power_output +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<array> + <dict> + <key>_SPCommandLineArguments</key> + <array> + <string>/usr/sbin/system_profiler</string> + <string>-nospawn</string> + <string>-xml</string> + <string>SPPowerDataType</string> + <string>-detailLevel</string> + <string>full</string> + </array> + <key>_SPCompletionInterval</key> + <real>0.061106979846954346</real> + <key>_SPResponseTime</key> + <real>0.16731500625610352</real> + <key>_dataType</key> + <string>SPPowerDataType</string> + <key>_detailLevel</key> + <string>0</string> + <key>_items</key> + <array> + <dict> + <key>_name</key> + <string>spbattery_information</string> + <key>sppower_battery_charge_info</key> + <dict> + <key>sppower_battery_current_capacity</key> + <integer>5841</integer> + <key>sppower_battery_fully_charged</key> + <string>TRUE</string> + <key>sppower_battery_is_charging</key> + <string>FALSE</string> + <key>sppower_battery_max_capacity</key> + <integer>5841</integer> + </dict> + <key>sppower_battery_health_info</key> + <dict> + <key>sppower_battery_cycle_count</key> + <integer>201</integer> + <key>sppower_battery_health</key> + <string>Good</string> + </dict> + <key>sppower_battery_installed</key> + <string>TRUE</string> + <key>sppower_battery_model_info</key> + <dict> + <key>PCB Lot Code</key> + <string>0000</string> + <key>Pack Lot Code</key> + <string>0000</string> + <key>sppower_battery_cell_revision</key> + <string>0389</string> + <key>sppower_battery_device_name</key> + <string>bq20z451</string> + <key>sppower_battery_firmware_version</key> + <string>0702</string> + <key>sppower_battery_hardware_revision</key> + <string>000a</string> + <key>sppower_battery_manufacturer</key> + <string>SMP</string> + <key>sppower_battery_serial_number</key> + <string>D123456789ABCDEFG</string> + </dict> + <key>sppower_current_amperage</key> + <integer>0</integer> + <key>sppower_current_voltage</key> + <integer>12788</integer> + </dict> + <dict> + <key>AC Power</key> + <dict> + <key>AutoPowerOff Delay</key> + <integer>14400</integer> + <key>AutoPowerOff Enabled</key> + <integer>1</integer> + <key>Current Power Source</key> + <string>TRUE</string> + <key>DarkWakeBackgroundTasks</key> + <true/> + <key>Disk Sleep Timer</key> + <integer>10</integer> + <key>Display Sleep Timer</key> + <integer>10</integer> + <key>Display Sleep Uses Dim</key> + <string>Yes</string> + <key>Hibernate Mode</key> + <integer>3</integer> + <key>PrioritizeNetworkReachabilityOverSleep</key> + <integer>0</integer> + <key>Standby Delay</key> + <integer>10800</integer> + <key>Standby Enabled</key> + <integer>1</integer> + <key>System Sleep Timer</key> + <integer>1</integer> + <key>Wake On AC Change</key> + <string>No</string> + <key>Wake On Clamshell Open</key> + <string>Yes</string> + <key>Wake On LAN</key> + <string>Yes</string> + </dict> + <key>Battery Power</key> + <dict> + <key>AutoPowerOff Delay</key> + <integer>14400</integer> + <key>AutoPowerOff Enabled</key> + <integer>1</integer> + <key>DarkWakeBackgroundTasks</key> + <false/> + <key>Disk Sleep Timer</key> + <integer>10</integer> + <key>Display Sleep Timer</key> + <integer>2</integer> + <key>Display Sleep Uses Dim</key> + <string>Yes</string> + <key>Hibernate Mode</key> + <integer>3</integer> + <key>ReduceBrightness</key> + <string>Yes</string> + <key>Standby Delay</key> + <integer>10800</integer> + <key>Standby Enabled</key> + <integer>1</integer> + <key>System Sleep Timer</key> + <integer>1</integer> + <key>Wake On AC Change</key> + <string>No</string> + <key>Wake On Clamshell Open</key> + <string>Yes</string> + </dict> + <key>_name</key> + <string>sppower_information</string> + </dict> + <dict> + <key>_name</key> + <string>sppower_hwconfig_information</string> + <key>sppower_ups_installed</key> + <string>FALSE</string> + </dict> + <dict> + <key>_name</key> + <string>sppower_ac_charger_information</string> + <key>sppower_ac_charger_ID</key> + <string>0x0100</string> + <key>sppower_ac_charger_family</key> + <string>0x0085</string> + <key>sppower_ac_charger_revision</key> + <string>0x0000</string> + <key>sppower_ac_charger_serial_number</key> + <string>0x00a1dab7</string> + <key>sppower_ac_charger_watts</key> + <string>85</string> + <key>sppower_battery_charger_connected</key> + <string>TRUE</string> + <key>sppower_battery_is_charging</key> + <string>FALSE</string> + </dict> + </array> + <key>_parentDataType</key> + <string>SPHardwareDataType</string> + <key>_properties</key> + <dict> + <key>Automatic Restart On Power Loss</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>107</string> + </dict> + <key>Disk Sleep Timer</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>102</string> + </dict> + <key>Display Sleep Timer</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>103</string> + </dict> + <key>Dynamic Power Step</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>104</string> + </dict> + <key>PCB Lot Code</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>404</string> + </dict> + <key>Pack Lot Code</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>403</string> + </dict> + <key>Reduce Processor Speed</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>105</string> + </dict> + <key>Sleep On Power Button</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>106</string> + </dict> + <key>System Sleep Timer</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>101</string> + </dict> + <key>Wake On AC Change</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>108</string> + </dict> + <key>Wake On Clamshell Open</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>109</string> + </dict> + <key>Wake On LAN</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>110</string> + </dict> + <key>Wake On Modem Ring</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>111</string> + </dict> + <key>spbattery_information</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>200</string> + </dict> + <key>sppower_ac_charger_ID</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>310</string> + </dict> + <key>sppower_ac_charger_family</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>313</string> + </dict> + <key>sppower_ac_charger_firmware_version</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>318</string> + </dict> + <key>sppower_ac_charger_hardware_version</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>317</string> + </dict> + <key>sppower_ac_charger_information</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>300</string> + </dict> + <key>sppower_ac_charger_manufacturer</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>316</string> + </dict> + <key>sppower_ac_charger_name</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>315</string> + </dict> + <key>sppower_ac_charger_revision</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>312</string> + </dict> + <key>sppower_ac_charger_serial_number</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>314</string> + </dict> + <key>sppower_ac_charger_watts</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>311</string> + </dict> + <key>sppower_battery_cannot_charge</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>401</string> + </dict> + <key>sppower_battery_cell_revision</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>407</string> + </dict> + <key>sppower_battery_charge_info</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>2</string> + </dict> + <key>sppower_battery_charger_connected</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>302</string> + </dict> + <key>sppower_battery_depleted</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>203</string> + </dict> + <key>sppower_battery_device_name</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>402</string> + </dict> + <key>sppower_battery_firmware_version</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>405</string> + </dict> + <key>sppower_battery_hardware_revision</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>406</string> + </dict> + <key>sppower_battery_health_info</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>3</string> + </dict> + <key>sppower_battery_installed</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>201</string> + </dict> + <key>sppower_battery_manufacturer</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>401</string> + </dict> + <key>sppower_battery_model_info</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>1</string> + </dict> + <key>sppower_battery_serial_number</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>400</string> + </dict> + <key>sppower_clamshell_closed</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>401</string> + </dict> + <key>sppower_current_amperage</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>206</string> + </dict> + <key>sppower_current_voltage</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>207</string> + </dict> + <key>sppower_events_info</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>500</string> + </dict> + <key>sppower_hwconfig_information</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>400</string> + </dict> + <key>sppower_information</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>100</string> + </dict> + <key>sppower_repeating_events_info</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>520</string> + </dict> + <key>sppower_scheduled_events_info</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>510</string> + </dict> + <key>sppower_watts</key> + <dict> + <key>_isColumn</key> + <string>NO</string> + <key>_order</key> + <string>301</string> + </dict> + <key>volumes</key> + <dict> + <key>_detailLevel</key> + <string>0</string> + </dict> + </dict> + <key>_timeStamp</key> + <date>2016-07-08T19:46:23Z</date> + <key>_versionInfo</key> + <dict> + <key>com.apple.SystemProfiler.SPPowerReporter</key> + <string>150</string> + </dict> + </dict> +</array> +</plist> +power_output + +end |