swiss_admin 0.6.1
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 +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +275 -0
- data/Rakefile +8 -0
- data/bin/swissadmin +8 -0
- data/lib/swiss_admin.rb +9 -0
- data/lib/swiss_admin/cli.rb +6 -0
- data/lib/swiss_admin/cli/cli.rb +19 -0
- data/lib/swiss_admin/cli/hardware_cli.rb +19 -0
- data/lib/swiss_admin/cli/host_cli.rb +18 -0
- data/lib/swiss_admin/cli/network_cli.rb +19 -0
- data/lib/swiss_admin/cli/user_cli.rb +25 -0
- data/lib/swiss_admin/cli/web_cli.rb +68 -0
- data/lib/swiss_admin/hardware.rb +2 -0
- data/lib/swiss_admin/hardware/cpus.rb +11 -0
- data/lib/swiss_admin/hardware/memory.rb +36 -0
- data/lib/swiss_admin/host.rb +1 -0
- data/lib/swiss_admin/host/host.rb +15 -0
- data/lib/swiss_admin/network.rb +1 -0
- data/lib/swiss_admin/network/network.rb +13 -0
- data/lib/swiss_admin/user.rb +1 -0
- data/lib/swiss_admin/user/user.rb +18 -0
- data/lib/swiss_admin/version.rb +3 -0
- data/lib/swiss_admin/web/app.rb +60 -0
- data/lib/swiss_admin/web/public/css/base.css +269 -0
- data/lib/swiss_admin/web/public/css/layout.css +58 -0
- data/lib/swiss_admin/web/public/css/skeleton.css +242 -0
- data/lib/swiss_admin/web/public/css/tables.css +46 -0
- data/lib/swiss_admin/web/public/images/apple-touch-icon-114x114.png +0 -0
- data/lib/swiss_admin/web/public/images/apple-touch-icon-72x72.png +0 -0
- data/lib/swiss_admin/web/public/images/apple-touch-icon.png +0 -0
- data/lib/swiss_admin/web/public/images/favicon.ico +0 -0
- data/lib/swiss_admin/web/public/javascript/jquery-2.1.0.min.js +4 -0
- data/lib/swiss_admin/web/views/info.erb +60 -0
- data/lib/swiss_admin/web/views/layout.erb +25 -0
- data/swiss_admin.gemspec +29 -0
- data/test/cli/cli_hardware_test.rb +21 -0
- data/test/cli/cli_host_test.rb +20 -0
- data/test/cli/cli_network_test.rb +17 -0
- data/test/cli/cli_user_test.rb +28 -0
- data/test/hardware_test.rb +9 -0
- data/test/host_test.rb +12 -0
- data/test/network_test.rb +14 -0
- data/test/test_helper.rb +28 -0
- data/test/user_test.rb +17 -0
- data/test/web/test_api.rb +70 -0
- data/test/web/test_host_info.rb +44 -0
- metadata +216 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 63eff973bde4a3cbdc4db697e985346757472687
|
4
|
+
data.tar.gz: 5daea5b752c885c7539c7289cbb9c9da2bf287c2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4a469600791cf64ef5d448c4da69a8cdedcb65de6b0afaee0e63e376153451fba0f3be6dda574a77dc4fd021cedc3ad3ac45a1bfed4b2d42ec39dfb70472fc76
|
7
|
+
data.tar.gz: abd5c1846b50ea41da4b414720e98e86f702f49b9f62fd2ca27ad5aa0f3a15a8292f14a6c4ca43e6da8af44c0d52fc207e1352e190a1e9514a71a397466bf3e7
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Bradley Smith
|
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,275 @@
|
|
1
|
+
# SwissAdmin
|
2
|
+
|
3
|
+
A generous, but not too bloated, system/host helpers for any self respecting system administrator ;)
|
4
|
+
|
5
|
+
SwissAdmin can either be included in your project or can used from the CLI.
|
6
|
+
|
7
|
+
I find it best to install swissadmin in your global gemset.
|
8
|
+
|
9
|
+
### This only works on Linux
|
10
|
+
|
11
|
+
## Things that make swissadmin cool.
|
12
|
+
|
13
|
+
1. It offers just the right amount of information about the system/host your are running it on.
|
14
|
+
2. Provides a web server for REST calls.
|
15
|
+
3. Provides a DRb server to query host for information. (see todo)
|
16
|
+
4. Everytime you use it puppies and rainbows shoot into the sky.
|
17
|
+
|
18
|
+
There a tons of tools that do similar stuff, but I find them to contain way to much information.
|
19
|
+
I do not have the brain capacity to remember all those arguments and parsing features.
|
20
|
+
|
21
|
+
|
22
|
+
## Installation
|
23
|
+
|
24
|
+
Add this line to your application's Gemfile:
|
25
|
+
|
26
|
+
gem 'swiss_admin'
|
27
|
+
|
28
|
+
And then execute:
|
29
|
+
|
30
|
+
$ bundle
|
31
|
+
|
32
|
+
Or install it yourself as:
|
33
|
+
|
34
|
+
$ gem install swiss_admin
|
35
|
+
|
36
|
+
## Usage
|
37
|
+
|
38
|
+
* only commands listed below are funcitonal currenlty
|
39
|
+
|
40
|
+
```bash
|
41
|
+
Commands:
|
42
|
+
swissadmin hardware SUBCOMMAND # Returns information about host hardware
|
43
|
+
swissadmin help [COMMAND] # Describe available commands or one specific command
|
44
|
+
swissadmin host SUBCOMMAND # Returns information about the host
|
45
|
+
swissadmin network SUBCOMMAND # Returns information about host network
|
46
|
+
swissadmin user SUBCOMMAND # Returns information about user(s) on host
|
47
|
+
```
|
48
|
+
|
49
|
+
### Hardware
|
50
|
+
List information about the host's hardware
|
51
|
+
|
52
|
+
```bash
|
53
|
+
Commands:
|
54
|
+
swissadmin hardware cpus # Number of cpu's
|
55
|
+
swissadmin hardware help [COMMAND] # Describe subcommands or one specific subcommand
|
56
|
+
swissadmin hardware memory # memory for host
|
57
|
+
```
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
swissadmin hardware cpus #=> 4
|
61
|
+
```
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
swissadmin hardware memory #=>
|
65
|
+
MemTotal 7873568
|
66
|
+
MemFree 3731188
|
67
|
+
Buffers 164064
|
68
|
+
.....
|
69
|
+
```
|
70
|
+
|
71
|
+
### Host
|
72
|
+
|
73
|
+
Returns information about the host
|
74
|
+
|
75
|
+
```bash
|
76
|
+
commands:
|
77
|
+
swissadmin host help [COMMAND] # Describe subcommands or one specific subcommand
|
78
|
+
swissadmin host name # Hostname
|
79
|
+
swissadmin host loadavg # Current system load
|
80
|
+
```
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
swissadmin host name #=> foo.local
|
84
|
+
```
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
# 1,5,15,number of currently running processes/total number of processes, pid
|
88
|
+
swissadmin host loadavg #=> 0.10 0.19 0.23 1/742 24553
|
89
|
+
```
|
90
|
+
|
91
|
+
### Network
|
92
|
+
|
93
|
+
Return information about the host's network
|
94
|
+
|
95
|
+
```bash
|
96
|
+
Commands:
|
97
|
+
swissadmin network first_ipv4 # First ipv4 interface
|
98
|
+
swissadmin network help [COMMAND] # Describe subcommands or one specific subcommand
|
99
|
+
swissadmin network ip_addresses # All the ip addresses on this host
|
100
|
+
```
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
swissadmin host ip_addresses #=> {:ip_address=>"127.0.0.1", :name=>["localhost", "0"]}
|
104
|
+
{:ip_address=>"192.168.4.34", :name=>["bradleyd-900X4C.local", "0"]}
|
105
|
+
{:ip_address=>"::1", :name=>["ip6-localhost", "0"]}
|
106
|
+
{:ip_address=>"fe80::c685:8ff:fe72:beab%wlan0", :name=>["fe80::c685:8ff:fe72:beab%wlan0", "0"]}
|
107
|
+
```
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
swissadmin host first_ipv4 #=> 192.168.0.5
|
111
|
+
```
|
112
|
+
|
113
|
+
### User
|
114
|
+
|
115
|
+
Return information about user(s)
|
116
|
+
|
117
|
+
```bash
|
118
|
+
Commands:
|
119
|
+
swissadmin user active # All active users
|
120
|
+
swissadmin user current # Current user
|
121
|
+
swissadmin user help [COMMAND] # Describe subcommands or one specific subcommand
|
122
|
+
swissadmin user home # Current user's home directory
|
123
|
+
```
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
swissadmin user active #=>
|
127
|
+
bradleyd tty7 :0 2days init --user
|
128
|
+
bradleyd pts/0 :0 57:24 bash
|
129
|
+
bradleyd pts/3 :0 1:06m bash
|
130
|
+
bradleyd pts/8 :0.0 4.00s w -s -h
|
131
|
+
```
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
swissadmin user current #=> bradleyd
|
135
|
+
```
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
swissadmin user home #=> /home/bradleyd
|
139
|
+
```
|
140
|
+
|
141
|
+
### Web
|
142
|
+
```bash
|
143
|
+
Commands:
|
144
|
+
swissadmin web help [COMMAND] # Describe subcommands or one specific subcommand
|
145
|
+
swissadmin web start # Start web server
|
146
|
+
Usage:
|
147
|
+
swissadmin start
|
148
|
+
Options:
|
149
|
+
-p, [--port=PORT] # Set port for web companion
|
150
|
+
# Default: 8080
|
151
|
+
|
152
|
+
swissadmin web stop # Stop web server
|
153
|
+
swissadmin web status # Status of the web server
|
154
|
+
```
|
155
|
+
|
156
|
+
```ruby
|
157
|
+
swissadmin web start
|
158
|
+
```
|
159
|
+
This also gives you an API which you can query
|
160
|
+
|
161
|
+
Every CLI command can be accessed via the REST API
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
curl localhost:8080/api/host/loadavg #=> {"load_average":"0.29 0.29 0.28 2/972 27659\n"}
|
165
|
+
```
|
166
|
+
## Contributing
|
167
|
+
|
168
|
+
1. Fork it
|
169
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
170
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
171
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
172
|
+
5. Create new Pull Request
|
173
|
+
|
174
|
+
## Add a new command
|
175
|
+
### This is a work in progress and might not be worth a dam
|
176
|
+
|
177
|
+
To add a new command you must understand the directory structures of ```lib/``` and ```cli/```
|
178
|
+
|
179
|
+
### lib/
|
180
|
+
|
181
|
+
```bash
|
182
|
+
lib/swiss_admin/
|
183
|
+
├── hardware
|
184
|
+
│ ├── cpus.rb
|
185
|
+
│ └── memory.rb
|
186
|
+
├── host
|
187
|
+
│ └── host.rb
|
188
|
+
├── network
|
189
|
+
│ └── network.rb
|
190
|
+
├── user
|
191
|
+
│ └── user.rb
|
192
|
+
```
|
193
|
+
|
194
|
+
### cli/
|
195
|
+
```bash
|
196
|
+
lib/swiss_admin/cli/
|
197
|
+
├── cli.rb
|
198
|
+
├── hardware_cli.rb
|
199
|
+
├── host_cli.rb
|
200
|
+
├── network_cli.rb
|
201
|
+
└── user_cli.rb
|
202
|
+
```
|
203
|
+
|
204
|
+
Let's say you have a need for a command called--you guessed it--```foo```
|
205
|
+
|
206
|
+
```foo``` will give you the ultimate answer.
|
207
|
+
|
208
|
+
* I will assume you have written tests for ```foo``` you know who you are!
|
209
|
+
|
210
|
+
If ```foo``` does not fit in any category from ```lib/``` then you would create a new one.
|
211
|
+
|
212
|
+
Create a file and directory called foo and adjust to your liking.
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
# foo/foo.rb
|
216
|
+
module SwissAdmin
|
217
|
+
class Foo
|
218
|
+
def self.answer
|
219
|
+
"42"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
```
|
224
|
+
|
225
|
+
Run your tests...green I presume.
|
226
|
+
|
227
|
+
Create another file under ```cli/``` cleverly called ```foo_cli.rb```
|
228
|
+
|
229
|
+
```ruby
|
230
|
+
module SwissAdmin
|
231
|
+
module Commands
|
232
|
+
class Foo < Thor
|
233
|
+
namespace :foo
|
234
|
+
|
235
|
+
desc "answer", "ultimate answer"
|
236
|
+
def answer
|
237
|
+
$stdout.puts SwissAdmin::Foo.answer
|
238
|
+
end
|
239
|
+
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
```
|
244
|
+
|
245
|
+
* Note, we are calling ```Foo``` class from ```lib/``` instead of just creating it here
|
246
|
+
* This is so we can use ```swissadmin``` as library in another project and forgo the CLI
|
247
|
+
|
248
|
+
|
249
|
+
Next, we need to tell ```CLI``` about this new command.
|
250
|
+
|
251
|
+
```ruby
|
252
|
+
#lib/cli/cli.rb
|
253
|
+
|
254
|
+
module SwissAdmin
|
255
|
+
class CLI < Thor
|
256
|
+
#....snippet....
|
257
|
+
desc "foo SUBCOMMAND", "Returns the ultimate answer"
|
258
|
+
subcommand "foo", SwissAdmin::Commands::Foo
|
259
|
+
end
|
260
|
+
end
|
261
|
+
```
|
262
|
+
|
263
|
+
This will give ```swissadmin``` the ultimate power and bestow it upon you ;)
|
264
|
+
|
265
|
+
```ruby
|
266
|
+
swissadmin foo answer #=> 42
|
267
|
+
```
|
268
|
+
|
269
|
+
### TODO
|
270
|
+
|
271
|
+
* create DRB server
|
272
|
+
* Lock down web server with basic auth or token
|
273
|
+
* Show all commands available in CLI
|
274
|
+
* Show all commands available in Web
|
275
|
+
* Write pid, port file path to `~/.swissadmin/.web.conf
|
data/Rakefile
ADDED
data/bin/swissadmin
ADDED
data/lib/swiss_admin.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "thor"
|
2
|
+
module SwissAdmin
|
3
|
+
class CLI < Thor
|
4
|
+
desc "host SUBCOMMAND", "Returns information about the host"
|
5
|
+
subcommand "host", SwissAdmin::Commands::Host
|
6
|
+
|
7
|
+
desc "hardware SUBCOMMAND", "Returns information about host hardware"
|
8
|
+
subcommand "hardware", SwissAdmin::Commands::Hardware
|
9
|
+
|
10
|
+
desc "network SUBCOMMAND", "Returns information about host network"
|
11
|
+
subcommand "network", SwissAdmin::Commands::Network
|
12
|
+
|
13
|
+
desc "user SUBCOMMAND", "Returns information about user(s) on host"
|
14
|
+
subcommand "user", SwissAdmin::Commands::User
|
15
|
+
|
16
|
+
desc "web SUBCOMMAND", "A basic web ui with all of the hosts information"
|
17
|
+
subcommand "web", SwissAdmin::Commands::Web
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "thor"
|
2
|
+
module SwissAdmin
|
3
|
+
module Commands
|
4
|
+
class Hardware < Thor
|
5
|
+
namespace :hardware
|
6
|
+
|
7
|
+
desc "cpus", "Number of cpu's"
|
8
|
+
def cpus
|
9
|
+
$stdout.puts SwissAdmin::Hardware.cpus
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "memory", "memory for host"
|
13
|
+
def memory
|
14
|
+
print_table(SwissAdmin::Hardware.memory)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "thor"
|
2
|
+
module SwissAdmin
|
3
|
+
module Commands
|
4
|
+
class Host < Thor
|
5
|
+
namespace :host
|
6
|
+
|
7
|
+
desc "name", "Hostname"
|
8
|
+
def name
|
9
|
+
$stdout.puts SwissAdmin::Host.name
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "loadavg", "Current system load"
|
13
|
+
def loadavg
|
14
|
+
$stdout.puts SwissAdmin::Host.loadavg
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "thor"
|
2
|
+
module SwissAdmin
|
3
|
+
module Commands
|
4
|
+
class Network < Thor
|
5
|
+
namespace :network
|
6
|
+
|
7
|
+
desc "ip_addresses", "All the ip addresses on this host"
|
8
|
+
def ip_addresses
|
9
|
+
$stdout.puts SwissAdmin::Network.ip_addresses
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "first_ipv4", "First ipv4 interface"
|
13
|
+
def first_ipv4
|
14
|
+
$stdout.puts SwissAdmin::Network.first_ipv4
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|