server-status 1.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 +7 -0
- data/.gitignore +9 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +41 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/server-status +3 -0
- data/lib/server-status/application.rb +88 -0
- data/lib/server-status/commands/add.rb +29 -0
- data/lib/server-status/commands/base.rb +16 -0
- data/lib/server-status/commands/list.rb +15 -0
- data/lib/server-status/commands/remove.rb +24 -0
- data/lib/server-status/commands/run.rb +24 -0
- data/lib/server-status/configuration.rb +31 -0
- data/lib/server-status/host.rb +50 -0
- data/lib/server-status/host_set.rb +28 -0
- data/lib/server-status/report.rb +132 -0
- data/lib/server-status/status_command.rb +51 -0
- data/lib/server-status/version.rb +3 -0
- data/lib/server-status.rb +18 -0
- data/server-status.gemspec +25 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: af20ee25a465ed5e45e9a0018dcacb9afc3f94e4
|
4
|
+
data.tar.gz: 3110214e2c5ce45799d213a9e97505b5ce82dd6a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c7c22c4d49b1c6fee75812769db130051a98406729dcc39e96c508e535e06c35bc93a4a64dd2821be07790a47e32ce722f41ea964d8fcbce4d99d30b411547c9
|
7
|
+
data.tar.gz: be97a5537f8c72f8d570fbdab9c8d945baa5aef74f96a85616ba48a58448bdc6899452f8e105579d4f0683e71f3273d1adaa4257f6bc55c7cbedc910a85e8421
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2016 James Brooks
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Server Status
|
2
|
+
|
3
|
+
[](https://codeclimate.com/github/JamesBrooks/git-runner)
|
4
|
+
[](http://badge.fury.io/rb/git-runner)
|
5
|
+
[](https://gemnasium.com/JamesBrooks/git-runner)
|
6
|
+
|
7
|
+
Command line tool for quickly fetching and displaying vital host metrics.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
`gem install server-status`
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
### Add a host
|
16
|
+
|
17
|
+
```sh
|
18
|
+
# Track a host (uses the host name as the friendly name)
|
19
|
+
server-status add ubuntu@server.net
|
20
|
+
|
21
|
+
# Track a host using a friendly name
|
22
|
+
server-status add ubuntu@server.net personal-server
|
23
|
+
```
|
24
|
+
|
25
|
+
### Remove a host
|
26
|
+
|
27
|
+
```sh
|
28
|
+
server-status remove personal-server
|
29
|
+
```
|
30
|
+
|
31
|
+
### List all hosts
|
32
|
+
|
33
|
+
```sh
|
34
|
+
server-status list
|
35
|
+
```
|
36
|
+
|
37
|
+
### Fetch statuses of all tracked hosts
|
38
|
+
|
39
|
+
```sh
|
40
|
+
server-status
|
41
|
+
```
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "server/status"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/server-status
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
class Application
|
3
|
+
include Commander::Methods
|
4
|
+
|
5
|
+
attr_accessor :configuration
|
6
|
+
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@config = ServerStatus::Configuration.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
never_trace!
|
14
|
+
|
15
|
+
program :name, 'Server Status'
|
16
|
+
program :version, ServerStatus::VERSION
|
17
|
+
program :description, 'Fast remote host statuses'
|
18
|
+
|
19
|
+
default_command :run
|
20
|
+
|
21
|
+
command :run do |c|
|
22
|
+
c.description = 'Fetch statuses of all tracked hosts (default)'
|
23
|
+
|
24
|
+
c.option '--[no-]os'
|
25
|
+
c.option '--[no-]uptime'
|
26
|
+
c.option '--[no-]load'
|
27
|
+
c.option '--[no-]disk-usage'
|
28
|
+
c.option '--[no-]inode-usage'
|
29
|
+
c.option '--[no-]memory-usage'
|
30
|
+
c.option '--[no-]package-updates'
|
31
|
+
c.option '--[no-]reboot-required'
|
32
|
+
|
33
|
+
c.action do |args, options|
|
34
|
+
options.default({
|
35
|
+
os: false,
|
36
|
+
uptime: true,
|
37
|
+
load: true,
|
38
|
+
disk_usage: true,
|
39
|
+
inode_usage: true,
|
40
|
+
memory_usage: true,
|
41
|
+
package_updates: true,
|
42
|
+
reboot_required: true
|
43
|
+
}.merge(@config.options))
|
44
|
+
|
45
|
+
ServerStatus::Commands::Run.new(@config, options).perform
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
command :list do |c|
|
50
|
+
c.description = 'List all currently tracked hosts'
|
51
|
+
|
52
|
+
c.action do
|
53
|
+
ServerStatus::Commands::List.new(@config).perform
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
command :add do |c|
|
58
|
+
c.syntax = 'add <host> [name]'
|
59
|
+
c.description = 'Add a remote host'
|
60
|
+
|
61
|
+
c.action do |args, options|
|
62
|
+
if args.size < 1 || args.size > 2
|
63
|
+
puts "requires either 1 or 2 arguments\n\n\tadd <host> [friendly-name]\n\n"
|
64
|
+
exit(1)
|
65
|
+
end
|
66
|
+
|
67
|
+
ServerStatus::Commands::Add.new(@config, *args).perform
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
command :remove do |c|
|
72
|
+
c.syntax = 'remove <name>'
|
73
|
+
c.description = 'Remove a remote host'
|
74
|
+
|
75
|
+
c.action do |args, options|
|
76
|
+
unless args.size == 1
|
77
|
+
puts "requires 1 argument\n\n\tremove <name>\n\n"
|
78
|
+
exit(1)
|
79
|
+
end
|
80
|
+
|
81
|
+
ServerStatus::Commands::Remove.new(@config, *args).perform
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
run!
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
module Commands
|
3
|
+
class Add < BaseCommand
|
4
|
+
def initialize(config, host, name=nil)
|
5
|
+
super(config)
|
6
|
+
|
7
|
+
@host = host
|
8
|
+
@name = name || host
|
9
|
+
end
|
10
|
+
|
11
|
+
def perform
|
12
|
+
settings['hosts'] ||= {}
|
13
|
+
|
14
|
+
# Check to see if we're already tracking
|
15
|
+
settings['hosts'].each do |name, host|
|
16
|
+
if name == @name
|
17
|
+
puts "#{name} already exists"
|
18
|
+
exit(1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
settings['hosts'][@name] = @host
|
23
|
+
config.save
|
24
|
+
|
25
|
+
puts "Added #{@name}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
module Commands
|
3
|
+
class List < BaseCommand
|
4
|
+
def perform
|
5
|
+
if settings['hosts'].any?
|
6
|
+
longest_name = settings['hosts'].map { |n, h| n.size }.max
|
7
|
+
|
8
|
+
settings['hosts'].each do |name, host|
|
9
|
+
puts "#{name.ljust(longest_name)} #{host}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
module Commands
|
3
|
+
class Remove < BaseCommand
|
4
|
+
def initialize(config, name)
|
5
|
+
super(config)
|
6
|
+
@name = name
|
7
|
+
end
|
8
|
+
|
9
|
+
def perform
|
10
|
+
if settings['hosts'] && settings['hosts'][@name]
|
11
|
+
settings['hosts'].delete(@name)
|
12
|
+
config.save
|
13
|
+
|
14
|
+
puts "Removed #{@name}"
|
15
|
+
|
16
|
+
return
|
17
|
+
end
|
18
|
+
|
19
|
+
puts "#{@name} does not exist"
|
20
|
+
exit(1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
module Commands
|
3
|
+
class Run < BaseCommand
|
4
|
+
def initialize(config, options)
|
5
|
+
super(config)
|
6
|
+
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
unless settings['hosts']
|
12
|
+
puts "No hosts tracked. To add hosts: server-status add <host> [name]"
|
13
|
+
exit(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
host_set = ServerStatus::HostSet.new(config, @options, settings['hosts'])
|
17
|
+
host_set.fetch_statuses
|
18
|
+
|
19
|
+
report = ServerStatus::Report.new(config, @options, host_set)
|
20
|
+
puts report.generate_table
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module ServerStatus
|
4
|
+
class Configuration
|
5
|
+
CONFIG_PATH = File.join(Dir.home, '.server-status.json')
|
6
|
+
|
7
|
+
attr_accessor :settings
|
8
|
+
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
if File.exist?(CONFIG_PATH)
|
12
|
+
@settings = JSON.parse(File.open(CONFIG_PATH).read)
|
13
|
+
else
|
14
|
+
@settings = {}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def save
|
19
|
+
File.open(CONFIG_PATH, 'w') do |file|
|
20
|
+
file.write JSON.pretty_generate(@settings)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def options
|
25
|
+
# symbolize keys
|
26
|
+
(settings['options'] || {}).each_with_object({}) do |(key, value), hash|
|
27
|
+
hash[key.to_sym] = value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
class Host
|
3
|
+
class RemoteCommandFailure < StandardError ; end
|
4
|
+
|
5
|
+
attr_accessor :name, :status
|
6
|
+
|
7
|
+
|
8
|
+
def initialize(config, name, host)
|
9
|
+
@config = config
|
10
|
+
@name = name
|
11
|
+
@host = host
|
12
|
+
|
13
|
+
@feteched_status = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def feteched_status?
|
17
|
+
@feteched_status
|
18
|
+
end
|
19
|
+
|
20
|
+
def fetch_status(status_command)
|
21
|
+
# Fetch statuses
|
22
|
+
raw_statuses = execute_command(status_command)
|
23
|
+
|
24
|
+
# Hashed statuses
|
25
|
+
raw_statuses = raw_statuses.split(ServerStatus::StatusCommand::SEPARATOR)
|
26
|
+
raw_statuses = raw_statuses.map(&:strip)
|
27
|
+
raw_statuses = status_command.requested_options.zip(raw_statuses).to_h
|
28
|
+
|
29
|
+
@feteched_status = true
|
30
|
+
|
31
|
+
@status = raw_statuses
|
32
|
+
|
33
|
+
|
34
|
+
rescue RemoteCommandFailure => ex
|
35
|
+
@status = { error: ex.message }
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
private
|
40
|
+
def execute_command(status_command)
|
41
|
+
stdin, stdout, stderr, wait_thread = Open3.popen3("ssh #{@host} \"bash -s\" << EOF\n#{status_command.to_script}\nEOF")
|
42
|
+
|
43
|
+
if wait_thread.value.success?
|
44
|
+
stdout.read
|
45
|
+
else
|
46
|
+
raise RemoteCommandFailure, stderr.read
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
class HostSet
|
3
|
+
attr_accessor :config, :options, :hosts
|
4
|
+
|
5
|
+
|
6
|
+
def initialize(config, options, hosts)
|
7
|
+
@config = config
|
8
|
+
@options = options
|
9
|
+
@hosts = hosts.map { |host, name| Host.new(config, host, name) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def fetch_statuses
|
13
|
+
threads = @hosts.map do |host|
|
14
|
+
Thread.new do
|
15
|
+
host.fetch_status(status_command)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
threads.each(&:join)
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
def status_command
|
25
|
+
@status_command ||= ServerStatus::StatusCommand.new(@options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
class Report
|
3
|
+
COLUMN_SPACING = 5
|
4
|
+
|
5
|
+
|
6
|
+
def initialize(config, options, host_set)
|
7
|
+
@config = config
|
8
|
+
@options = options
|
9
|
+
@host_set = host_set
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate_table
|
13
|
+
str = "\n"
|
14
|
+
|
15
|
+
# Report any failures
|
16
|
+
if (failed_hosts = @host_set.hosts.reject(&:feteched_status?)).any?
|
17
|
+
failed_hosts.each do |host|
|
18
|
+
str << "Failure #{host.name} - #{host.status[:error]}\n".colorize(:red)
|
19
|
+
end
|
20
|
+
|
21
|
+
str << "\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
columns = [ :host ] + @host_set.hosts.detect(&:feteched_status?).status.keys
|
25
|
+
|
26
|
+
# Process status values
|
27
|
+
statuses = @host_set.hosts.select(&:feteched_status?).map do |host|
|
28
|
+
host.status.each_with_object({ host: host.name }) do |(k, v), hash|
|
29
|
+
hash[k] = send("format_#{k}", v)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Determine column widths
|
34
|
+
column_widths = columns.each_with_object({}) do |col, hash|
|
35
|
+
sizes = statuses.map { |s| s[col].uncolorize.size }
|
36
|
+
sizes << col.to_s.size
|
37
|
+
|
38
|
+
hash[col] = sizes.max
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
# Render headings
|
43
|
+
column_widths.each do |col, col_width|
|
44
|
+
str << col.to_s.upcase.colorize(:blue)
|
45
|
+
str << ' ' * (COLUMN_SPACING + col_width - col.size)
|
46
|
+
end
|
47
|
+
|
48
|
+
str << "\n"
|
49
|
+
|
50
|
+
|
51
|
+
# Render table
|
52
|
+
statuses.sort { |x,y| x[:host] <=> y[:host] }.each do |status|
|
53
|
+
column_widths.each do |col, col_width|
|
54
|
+
str << status[col]
|
55
|
+
str << ' ' * (COLUMN_SPACING + col_width - status[col].uncolorize.size)
|
56
|
+
end
|
57
|
+
|
58
|
+
str << "\n"
|
59
|
+
end
|
60
|
+
|
61
|
+
str << "\n"
|
62
|
+
str
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
private
|
67
|
+
# Formatters
|
68
|
+
def format_os(val)
|
69
|
+
val
|
70
|
+
end
|
71
|
+
|
72
|
+
def format_uptime(val)
|
73
|
+
"#{val.to_i / 86400} days"
|
74
|
+
end
|
75
|
+
|
76
|
+
def format_load(val)
|
77
|
+
val
|
78
|
+
end
|
79
|
+
|
80
|
+
def format_disk_usage(val)
|
81
|
+
format_percentage(val)
|
82
|
+
end
|
83
|
+
|
84
|
+
def format_inode_usage(val)
|
85
|
+
format_percentage(val)
|
86
|
+
end
|
87
|
+
|
88
|
+
def format_memory_usage(val)
|
89
|
+
used, available = val.split(' ').map(&:to_f)
|
90
|
+
format_percentage(used / (used + available))
|
91
|
+
end
|
92
|
+
|
93
|
+
def format_package_updates(val)
|
94
|
+
str = ''
|
95
|
+
|
96
|
+
if val =~ /(\d+) packages can be updated/
|
97
|
+
str << $1 if $1.to_i != 0
|
98
|
+
end
|
99
|
+
|
100
|
+
if val =~ /(\d+) (updates are|update is a) security update(s)?/
|
101
|
+
str << " (#{$1} security)".colorize(:red) if $1.to_i != 0
|
102
|
+
end
|
103
|
+
|
104
|
+
str
|
105
|
+
end
|
106
|
+
|
107
|
+
def format_reboot_required(val)
|
108
|
+
if val.to_i == 1
|
109
|
+
'YES'.colorize(:yellow)
|
110
|
+
else
|
111
|
+
'NO'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def format_percentage(val)
|
116
|
+
if val.is_a?(String)
|
117
|
+
# Convert from string % to float
|
118
|
+
val = val.to_f / 100
|
119
|
+
end
|
120
|
+
|
121
|
+
color = if val > 0.85
|
122
|
+
:red
|
123
|
+
elsif val > 0.7
|
124
|
+
:yellow
|
125
|
+
else
|
126
|
+
:normal
|
127
|
+
end
|
128
|
+
|
129
|
+
"#{(val * 100).round(0)}%".colorize(color)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module ServerStatus
|
2
|
+
class StatusCommand
|
3
|
+
SEPARATOR = '###'
|
4
|
+
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
@parts = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def requested_options
|
12
|
+
@requested_options ||= @options.__hash__.select { |k,v| k if v }.keys
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_script
|
16
|
+
if @options.os
|
17
|
+
@parts << "lsb_release -d | cut -f2"
|
18
|
+
end
|
19
|
+
|
20
|
+
if @options.uptime
|
21
|
+
@parts << "cat /proc/uptime | cut -d\" \" -f1"
|
22
|
+
end
|
23
|
+
|
24
|
+
if @options.load
|
25
|
+
@parts << "cat /proc/loadavg | cut -d\" \" -f -3"
|
26
|
+
end
|
27
|
+
|
28
|
+
if @options.disk_usage
|
29
|
+
@parts << "df -h | awk '/\\/$/' | sed 's/ \\+/ /g' | cut -d\" \" -f5"
|
30
|
+
end
|
31
|
+
|
32
|
+
if @options.inode_usage
|
33
|
+
@parts << "df -hi | awk '/\\/$/' | sed 's/ \\+/ /g' | cut -d\" \" -f5"
|
34
|
+
end
|
35
|
+
|
36
|
+
if @options.memory_usage
|
37
|
+
@parts << "free -m | sed -n 3p | sed 's/ \\+/ /g' | cut -d\" \" -f 3-"
|
38
|
+
end
|
39
|
+
|
40
|
+
if @options.package_updates
|
41
|
+
@parts << "cat /var/lib/update-notifier/updates-available 2>/dev/null"
|
42
|
+
end
|
43
|
+
|
44
|
+
if @options.reboot_required
|
45
|
+
@parts << "if [ -f /var/run/reboot-required ]; then echo 1 ; fi"
|
46
|
+
end
|
47
|
+
|
48
|
+
@parts.join("\necho '#{SEPARATOR}'\n")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require 'commander'
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
require 'server-status/version'
|
6
|
+
require 'server-status/application'
|
7
|
+
require 'server-status/configuration'
|
8
|
+
|
9
|
+
require 'server-status/host_set'
|
10
|
+
require 'server-status/host'
|
11
|
+
require 'server-status/status_command'
|
12
|
+
require 'server-status/report'
|
13
|
+
|
14
|
+
require 'server-status/commands/base'
|
15
|
+
require 'server-status/commands/add'
|
16
|
+
require 'server-status/commands/list'
|
17
|
+
require 'server-status/commands/remove'
|
18
|
+
require 'server-status/commands/run'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'server-status/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "server-status"
|
8
|
+
spec.version = ServerStatus::VERSION
|
9
|
+
spec.authors = ["James Brooks"]
|
10
|
+
spec.email = ["james@jamesbrooks.net"]
|
11
|
+
|
12
|
+
spec.summary = "Command line tool for quickly fetching and displaying vital host metrics"
|
13
|
+
spec.description = "Command line tool for quickly fetching and displaying vital host metrics"
|
14
|
+
spec.homepage = "https://github.com/jamesbrooks/server-status"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.executables = ["server-status"]
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency "commander", "~> 4.3"
|
21
|
+
spec.add_dependency "colorize", "~> 0.7.7"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: server-status
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Brooks
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.7.7
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.7.7
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.11'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
description: Command line tool for quickly fetching and displaying vital host metrics
|
70
|
+
email:
|
71
|
+
- james@jamesbrooks.net
|
72
|
+
executables:
|
73
|
+
- server-status
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- Gemfile
|
79
|
+
- LICENSE
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- bin/console
|
83
|
+
- bin/server-status
|
84
|
+
- lib/server-status.rb
|
85
|
+
- lib/server-status/application.rb
|
86
|
+
- lib/server-status/commands/add.rb
|
87
|
+
- lib/server-status/commands/base.rb
|
88
|
+
- lib/server-status/commands/list.rb
|
89
|
+
- lib/server-status/commands/remove.rb
|
90
|
+
- lib/server-status/commands/run.rb
|
91
|
+
- lib/server-status/configuration.rb
|
92
|
+
- lib/server-status/host.rb
|
93
|
+
- lib/server-status/host_set.rb
|
94
|
+
- lib/server-status/report.rb
|
95
|
+
- lib/server-status/status_command.rb
|
96
|
+
- lib/server-status/version.rb
|
97
|
+
- server-status.gemspec
|
98
|
+
homepage: https://github.com/jamesbrooks/server-status
|
99
|
+
licenses: []
|
100
|
+
metadata: {}
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 2.5.1
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Command line tool for quickly fetching and displaying vital host metrics
|
121
|
+
test_files: []
|