Sha256: d133bc5381950a894cdf53bcfcac9c7be34f6f7b4bffa7cca4b84a5740164995

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

module LinuxStat
	module OS
		class << self
			def os_release
				# Cached ; as changing the value in runtime is unexpected
				@@os_release ||= File.readable?('/etc/os-release') ? release('/etc/os-release') : {}
			end

			def lsb_release
				# Cached ; as changing the value in runtime is unexpected
				@@lsb_release ||= File.readable?('/etc/lsb-release') ? release('/etc/lsb-release') : {}
			end

			def distribution
				@@distribution ||= if os_release.key?(:NAME)
					os_release[:NAME]
				else
					v = lsb_release

					if v.key?(:DISTRIB_DESCRIPTION)
						v[:DISTRIB_DESCRIPTION]
					elsif v.key?(:DISTRIB_ID)
						v[:DISTRIB_ID]
					elsif File.readable?('/etc/issue')
						IO.read('/etc/issue').strip
					else
						'Unknown'.freeze
					end
				end
			end

			def hostname
				@@hostname ||= if File.exist?('/etc/hostname')
					IO.read('/etc/hostname').strip
				else
					'localhost'
				end
			end

			def bits
				@@bits ||= if RbConfig::CONFIG['host_cpu'].end_with?('64') || RUBY_PLATFORM[/x86_64/]
					64
				else
					32
				end
			end

			def uptime
				raise StatUnavailable, 'Cannot read /proc/uptime' unless uptime_readable?

				uptime = IO.read('/proc/uptime').to_f
				uptime_i = uptime.to_i

				h = uptime_i / 3600
				m = uptime_i % 3600 / 60
				s = uptime.%(3600).%(60).round(2)

				{
					hour: h,
					minute: m,
					second: s
				}
			end

			private
			def release(file)
				IO.readlines(file, 3000).reduce({}) { |h, x|
					x.strip!
					next h if x.empty?

					splitted = x.split(?=)

					key = splitted[0].to_s.strip
					value = splitted[1..-1].join(?=).to_s.strip

					value[0] = '' if value[0] == ?"
					value[-1] = '' if value[-1] == ?"

					h.merge!( key.to_sym => value )
				}
			end

			def uptime_readable?
				@@uptime_readable = File.readable?('/proc/uptime')
			end
		end
	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
linux_stat-0.1.6 lib/linux_stat/os.rb
linux_stat-0.1.4 lib/linux_stat/os.rb