panda-motd 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83d9afcd650c9756e2d67f1b943636e1f36fd82f2bf980efdbdc5ecaa15de0d4
4
- data.tar.gz: b63abe376f04963ef5c4a6d5609ddcaef7a6f5070e27e762ffa8dc1b61a91fb3
3
+ metadata.gz: 602cdbb28a1c8eb7b902dd7c1dee4f0caffb0663fcda3d4b505ca9f53b2aebf7
4
+ data.tar.gz: 638ca548913a3de96d7534bc22f84aa1fef57e4ee45ad18c4b295de7ce8add42
5
5
  SHA512:
6
- metadata.gz: e53ec2f4ebd333e722d6c5954ffecd243af8edb3c84d791e8117e02ce23509866b1eedc09557f282553794f469082f29d79b714903ce0dd0b28979ebc246dd11
7
- data.tar.gz: 272253a011490cdef506dff3fe273a1819795a9fcac8f25a16ad4b3f7a445e2373718d8a2d07ed525d99e13a46b98fb4de3c2ffb373330f74a1fd37e7d73a757
6
+ metadata.gz: ca2a3254437207351125a08175382980cc43905a22b9f84127993e900d9a2e20213b89d79f973fc9505b8ee38423e24b8542e78135f6cb4423f729782d60400f
7
+ data.tar.gz: fb2e551bc3bcf911fc9d01aad4af7906aaad435ec19e89026232e34e53ef536d6eae592a6a68e9700b69ac3924d7714e4d22a299e6f75746acbdf951880eaa1e
data/bin/panda-motd CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  require 'panda_motd'
4
4
 
5
- motd = MOTD.new
5
+ motd = PandaMOTD.new_motd
6
6
  puts motd
data/lib/panda_motd.rb CHANGED
@@ -1,4 +1,8 @@
1
- Dir['lib/panda_motd/**/*.rb'].each { |r| require r.gsub(%r{lib\/|\.rb}, '') }
1
+ require 'require_all'
2
+ require_rel 'panda_motd'
2
3
 
3
4
  class PandaMOTD
5
+ def self.new_motd
6
+ return MOTD.new
7
+ end
4
8
  end
File without changes
@@ -1,12 +1,18 @@
1
1
  require 'artii'
2
+ require 'colorize'
2
3
 
3
4
  class AsciiTextArt
4
- def initialize(text, font)
5
- @text = text
6
- @art = Artii::Base.new font: font
5
+ def initialize(motd)
6
+ @motd = motd
7
+ @config = motd.config.component_config('ascii_text_art')
8
+ end
9
+
10
+ def process
11
+ @text = `hostname`
12
+ @art = Artii::Base.new font: @config['font']
7
13
  end
8
14
 
9
15
  def to_s
10
- return "\n#{@art.asciify(@text)}\n"
16
+ return @art.asciify(@text).red
11
17
  end
12
18
  end
@@ -0,0 +1,101 @@
1
+ require 'colorize'
2
+
3
+ class ServiceStatus
4
+ attr_reader :results
5
+
6
+ def initialize(motd)
7
+ @motd = motd
8
+ @config = motd.config.component_config('service_status')
9
+ end
10
+
11
+ def process
12
+ @services = @config['services']
13
+ @results = {}
14
+
15
+ parse_services
16
+ end
17
+
18
+ def to_s
19
+ if @results.any?
20
+ result = "Services:\n"
21
+ longest_name_size = @results.keys.map { |k| k.to_s.length }.max + 1 # add 1 for the ':' at the end
22
+ @results.each do |name, status|
23
+ name_part = if name.to_s.length > longest_name_size
24
+ name.to_s.slice(1..longest_name_size)
25
+ else
26
+ (name.to_s + ':').ljust(longest_name_size, ' ')
27
+ end
28
+ result += " #{name_part} #{status}\n"
29
+ end
30
+
31
+ return result
32
+ else
33
+ return "Services:\n No matching services found."
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def parse_services
40
+ case Gem::Platform.local.os
41
+ when 'darwin'
42
+ @results = parse_services_macos(@services)
43
+ when 'linux'
44
+ @results = parse_services_linux(@services)
45
+ end
46
+
47
+ return self
48
+ end
49
+
50
+ def parse_services_macos(services)
51
+ results = {}
52
+
53
+ # valid statuses are started, stopped, error, and unknown
54
+ `brew services list`.split("\n").each do |line|
55
+ parsed_name = line.split[0]
56
+ parsed_status = line.split[1]
57
+
58
+ matching_service = services.find { |service, _name| service == parsed_name }
59
+
60
+ if matching_service
61
+ results[parsed_name.to_sym] = parsed_status.send(macos_service_colors[parsed_status.to_sym])
62
+ end
63
+ end
64
+
65
+ return results
66
+ end
67
+
68
+ def parse_services_linux(services)
69
+ results = {}
70
+
71
+ `systemctl | grep '\.service'`.split("\n").each do |line|
72
+ parsed_name = line.split[0].gsub('.service', '')
73
+ parsed_status = line.split[3]
74
+
75
+ matching_service = services.find { |service, _name| service == parsed_name }
76
+
77
+ if matching_service
78
+ results[parsed_name.to_sym] = parsed_status.send(linux_service_colors[parsed_status.to_sym])
79
+ end
80
+ end
81
+
82
+ return results
83
+ end
84
+
85
+ def macos_service_colors
86
+ return {
87
+ started: :green,
88
+ stopped: :white,
89
+ error: :red,
90
+ unknown: :yellow
91
+ }
92
+ end
93
+
94
+ def linux_service_colors
95
+ return {
96
+ running: :green,
97
+ exited: :white,
98
+ failed: :red
99
+ }
100
+ end
101
+ end
@@ -3,7 +3,12 @@ require 'sysinfo'
3
3
  class Uptime
4
4
  attr_reader :days, :hours, :minutes
5
5
 
6
- def initialize
6
+ def initialize(motd)
7
+ @motd = motd
8
+ @config = motd.config.component_config('ascii_text_art')
9
+ end
10
+
11
+ def process
7
12
  sysinfo = SysInfo.new
8
13
  uptime = sysinfo.uptime
9
14
 
@@ -0,0 +1,32 @@
1
+ require 'yaml'
2
+ require 'fileutils'
3
+
4
+ class Config
5
+ def initialize(file_path = nil)
6
+ @file_path = File.join(Dir.home, '.config', 'panda-motd.yaml') if file_path.nil?
7
+ create_config(@file_path) unless File.exist?(@file_path)
8
+ load_config(@file_path)
9
+ end
10
+
11
+ def components_enabled
12
+ # first iterate through the config hash and grab all names of enabled components
13
+ enabled_list = @config['components'].map { |component, setting| component if setting['enabled'] }.compact
14
+ # convert each snake_case name to an upper-camel-case name which represents a class, and get that class constant
15
+ return enabled_list.map { |e| Object.const_get(e.split('_').map(&:capitalize).join) }
16
+ end
17
+
18
+ def component_config(component_name)
19
+ return @config['components'][component_name.to_s]
20
+ end
21
+
22
+ private
23
+
24
+ def create_config(file_path)
25
+ default_config_path = File.join(File.dirname(__dir__), 'panda_motd', 'default_config.yaml')
26
+ FileUtils.cp(default_config_path, file_path)
27
+ end
28
+
29
+ def load_config(file_path)
30
+ @config = YAML.safe_load(File.read(file_path))
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ components:
2
+ ascii_text_art:
3
+ enabled: true
4
+ font: slant
5
+ color: red
6
+
7
+ service_status:
8
+ enabled: true
9
+ services:
10
+ chunkwm: chunkwm
11
+ skhd: skhd
12
+ elasticsearch@5.6: elasticsearch
13
+ mysql: MySQL
14
+
15
+ uptime:
16
+ enabled: true
17
+
18
+ # disk_info:
19
+ # enabled: true
20
+ # disks:
21
+ # /dev/disk3s1: Macintosh HD
22
+ # /dev/disk0s4: Windows
23
+ # /dev/disk2s2: Games
@@ -1,14 +1,20 @@
1
+ require 'sysinfo'
2
+
1
3
  class MOTD
2
- attr_reader :components
4
+ attr_reader :config, :components
3
5
 
4
6
  def initialize
5
- @components = [
6
- AsciiTextArt.new('pandaMOTD', 'slant'),
7
- Uptime.new
8
- ]
7
+ @config = Config.new
8
+
9
+ @components = []
10
+ @config.components_enabled.each do |component_class|
11
+ @components << component_class.new(self)
12
+ end
13
+
14
+ @components.each(&:process)
9
15
  end
10
16
 
11
17
  def to_s
12
- return @components.map(&:to_s).join("\n")
18
+ return @components.map(&:to_s).join("\n\n")
13
19
  end
14
20
  end
@@ -1,4 +1,4 @@
1
1
  class PandaMOTD
2
2
  #:nodoc:
3
- VERSION = '0.0.2'.freeze
3
+ VERSION ||= '0.0.3'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda-motd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Thurlow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-04 00:00:00.000000000 Z
11
+ date: 2018-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: artii
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sysinfo
28
+ name: colorize
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
@@ -39,19 +39,33 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.8'
41
41
  - !ruby/object:Gem::Dependency
42
- name: tty-markdown
42
+ name: require_all
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sysinfo
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0.3'
61
+ version: '0.8'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0.3'
68
+ version: '0.8'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: byebug
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,20 @@ dependencies:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: '1.25'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.12'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.12'
139
167
  description: Enhance your MOTD with useful at-a-glance information.
140
168
  email: taylorthurlow8@gmail.com
141
169
  executables:
@@ -145,8 +173,12 @@ extra_rdoc_files: []
145
173
  files:
146
174
  - bin/panda-motd
147
175
  - lib/panda_motd.rb
176
+ - lib/panda_motd/component.rb
148
177
  - lib/panda_motd/components/ascii_text_art.rb
178
+ - lib/panda_motd/components/service_status.rb
149
179
  - lib/panda_motd/components/uptime.rb
180
+ - lib/panda_motd/config.rb
181
+ - lib/panda_motd/default_config.yaml
150
182
  - lib/panda_motd/motd.rb
151
183
  - lib/panda_motd/version.rb
152
184
  homepage: https://github.com/taylorthurlow/panda-motd