ServState 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -4
- data/.travis.yml +13 -0
- data/README.md +9 -0
- data/ServState.gemspec +5 -2
- data/bin/servstate +1 -55
- data/lib/ServState/application.rb +118 -0
- data/lib/ServState/cpu_usage.rb +36 -0
- data/lib/ServState/log_manager.rb +47 -0
- data/lib/ServState/network_usage.rb +48 -0
- data/lib/ServState/public/css/rickshaw.min.css +1 -0
- data/lib/ServState/public/css/style.css +28 -0
- data/lib/ServState/public/js/charts.js +89 -0
- data/lib/ServState/public/js/d3.layout.min.js +1 -0
- data/lib/ServState/public/js/d3.min.js +2 -0
- data/lib/ServState/public/js/{app.js → dashboard.js} +7 -19
- data/lib/ServState/public/js/jquery.js +6 -0
- data/lib/ServState/public/js/notification.js +11 -0
- data/lib/ServState/public/js/rickshaw.min.js +3 -0
- data/lib/ServState/rotator.rb +17 -0
- data/lib/ServState/services_manager.rb +42 -0
- data/lib/ServState/usage_manager.rb +121 -0
- data/lib/ServState/version.rb +1 -1
- data/lib/ServState/views/charts.erb +74 -0
- data/lib/ServState/views/error.erb +43 -0
- data/lib/ServState/views/index.erb +66 -48
- data/lib/ServState/views/login.erb +14 -15
- data/lib/ServState.rb +43 -2
- data/spec/charts_json_spec.rb +12 -0
- data/spec/dashboard_spec.rb +33 -0
- data/spec/spec_helper.rb +11 -0
- metadata +87 -27
- data/.rvmrc +0 -1
- data/lib/ServState/info.rb +0 -122
- data/lib/ServState/main.rb +0 -61
- data/lib/ServState/views/css/base.scss +0 -2
- data/lib/ServState/views/css/custom.scss +0 -20
- data/lib/ServState/views/css/style.scss +0 -2
@@ -1,25 +1,24 @@
|
|
1
1
|
<!doctype html>
|
2
2
|
<html>
|
3
3
|
<head>
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
<title><%=@name %> login</title>
|
5
|
+
<script type="text/javascript" src="js/jquery.js"></script>
|
6
|
+
<script type="text/javascript" src="js/uikit.min.js"></script>
|
7
|
+
<link rel="stylesheet" href="css/uikit.gradient.min.css">
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
<link rel="stylesheet" href="style.css">
|
9
|
+
<!-- Custom includes -->
|
10
|
+
<link rel="stylesheet" href="css/style.css">
|
12
11
|
</head>
|
13
12
|
<body>
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
<div class="login uk-panel uk-panel-box">
|
15
|
+
<form class="uk-form" method="post">
|
16
|
+
<legend>Login to ServState</legend>
|
17
|
+
<fieldset>
|
18
|
+
<input type="password" name="pass" class="uk-width-1-1 uk-form-large" placeholder="password">
|
19
|
+
</fieldset>
|
20
|
+
</form>
|
21
|
+
</div>
|
23
22
|
|
24
23
|
</body>
|
25
24
|
</html>
|
data/lib/ServState.rb
CHANGED
@@ -1,6 +1,47 @@
|
|
1
|
+
require "rack"
|
2
|
+
require "slop"
|
1
3
|
require_relative "ServState/version"
|
2
|
-
require_relative "ServState/
|
4
|
+
require_relative "ServState/application"
|
3
5
|
|
4
6
|
module ServState
|
5
|
-
|
7
|
+
def self.run!
|
8
|
+
|
9
|
+
options = Slop.parse(help: true) do
|
10
|
+
banner 'Usage: servstate [options]'
|
11
|
+
on 'pass=', 'Password to login.'
|
12
|
+
on 'port=', 'Set port.'
|
13
|
+
end
|
14
|
+
|
15
|
+
app_port = options.port? ? options[:port] : 8080
|
16
|
+
app_pass = options.pass? ? options[:pass] : nil
|
17
|
+
options.inspect
|
18
|
+
|
19
|
+
puts " ____ ____ _ _ "
|
20
|
+
puts "/ ___| ___ _ ____ __/ ___|| |_ __ _| |_ ___ "
|
21
|
+
puts "\\___ \\ / _ \\ '__\\ \\ / /\\___ \\| __/ _` | __/ _ \\"
|
22
|
+
puts " ___) | __/ | \\ V / ___) | || (_| | || __/"
|
23
|
+
puts "|____/ \\___|_| \\_/ |____/ \\__\\__,_|\\__\\___|"
|
24
|
+
puts "\nPORT: #{app_port}"
|
25
|
+
if(app_pass)
|
26
|
+
puts "PASSWORD: #{app_pass}"
|
27
|
+
else
|
28
|
+
puts "WITHOUT PASSWORD"
|
29
|
+
end
|
30
|
+
puts "\n"*3
|
31
|
+
|
32
|
+
#Rack::Handler::WEBrick.run(Application,{:Port => port, :Password => pass, :AccessLog => []})
|
33
|
+
Application.set_settings do
|
34
|
+
port app_port
|
35
|
+
password app_pass
|
36
|
+
end
|
37
|
+
Application.run!
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.run &block
|
42
|
+
p block
|
43
|
+
Application.set_settings &block
|
44
|
+
Application.run!
|
45
|
+
end
|
46
|
+
|
6
47
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature 'Charts json' do
|
4
|
+
it 'should has cpu information' do
|
5
|
+
visit '/charts/10min/renew.json'
|
6
|
+
expect(page).to have_content /.*cpu.*\:\[({.*},?)+\]/
|
7
|
+
end
|
8
|
+
it 'should has ram information' do
|
9
|
+
visit '/charts/10min/renew.json'
|
10
|
+
expect(page).to have_content /.*ram.*\:\[({.*},?)+\]/
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
feature 'Dashboard' do
|
3
|
+
|
4
|
+
it 'should has uptime information' do
|
5
|
+
visit '/'
|
6
|
+
expect(page).to have_content /Uptime(\ )+[0-9]+\ days\ [0-9]+h\ [0-9]+m/
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should has cpu load information' do
|
10
|
+
visit '/'
|
11
|
+
expect(page).to have_content /CPU\ usage(\ )+[0-9]+/
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should has ram usage information' do
|
15
|
+
visit '/'
|
16
|
+
expect(page).to have_content /RAM\ used\ [0-9]+(\.[0-9]+)?Gb\ from\ [0-9]+(\.[0-9]+)?Gb\ total/
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should show swap usage' do
|
20
|
+
visit '/'
|
21
|
+
expect(page).to have_content /Swap\ used\ [0-9]+(\.[0-9]+)?Gb\ from\ [0-9](\.[0-9]+)?Gb\ total/
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should show network interfaces' do
|
25
|
+
visit '/'
|
26
|
+
expect(page).to have_content /[a-z]+[0-9][0-9\.]+(\ )/
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should show disks status' do
|
30
|
+
visit '/'
|
31
|
+
expect(page).to have_content /\/.*used\ [0-9\.]+Gb\ from\ [0-9\.]+Gb\ total/
|
32
|
+
end
|
33
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ServState
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Sergienko
|
@@ -9,76 +9,118 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '1.4'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.4'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rack
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '1.5'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '1.5'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: slop
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 3.5.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 3.5.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: bundler
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.3'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.3'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rspec
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: capybara
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: capybara-webkit
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
82
124
|
- !ruby/object:Gem::Version
|
83
125
|
version: '0'
|
84
126
|
description: Simple tool to watch your linux server state
|
@@ -89,8 +131,8 @@ executables:
|
|
89
131
|
extensions: []
|
90
132
|
extra_rdoc_files: []
|
91
133
|
files:
|
92
|
-
- .gitignore
|
93
|
-
- .
|
134
|
+
- ".gitignore"
|
135
|
+
- ".travis.yml"
|
94
136
|
- Gemfile
|
95
137
|
- LICENSE.txt
|
96
138
|
- README.md
|
@@ -98,21 +140,36 @@ files:
|
|
98
140
|
- ServState.gemspec
|
99
141
|
- bin/servstate
|
100
142
|
- lib/ServState.rb
|
101
|
-
- lib/ServState/
|
102
|
-
- lib/ServState/
|
143
|
+
- lib/ServState/application.rb
|
144
|
+
- lib/ServState/cpu_usage.rb
|
145
|
+
- lib/ServState/log_manager.rb
|
146
|
+
- lib/ServState/network_usage.rb
|
147
|
+
- lib/ServState/public/css/rickshaw.min.css
|
148
|
+
- lib/ServState/public/css/style.css
|
103
149
|
- lib/ServState/public/css/uikit.gradient.min.css
|
104
150
|
- lib/ServState/public/fonts/FontAwesome.otf
|
105
151
|
- lib/ServState/public/fonts/fontawesome-webfont.eot
|
106
152
|
- lib/ServState/public/fonts/fontawesome-webfont.ttf
|
107
153
|
- lib/ServState/public/fonts/fontawesome-webfont.woff
|
108
|
-
- lib/ServState/public/js/
|
154
|
+
- lib/ServState/public/js/charts.js
|
155
|
+
- lib/ServState/public/js/d3.layout.min.js
|
156
|
+
- lib/ServState/public/js/d3.min.js
|
157
|
+
- lib/ServState/public/js/dashboard.js
|
158
|
+
- lib/ServState/public/js/jquery.js
|
159
|
+
- lib/ServState/public/js/notification.js
|
160
|
+
- lib/ServState/public/js/rickshaw.min.js
|
109
161
|
- lib/ServState/public/js/uikit.min.js
|
162
|
+
- lib/ServState/rotator.rb
|
163
|
+
- lib/ServState/services_manager.rb
|
164
|
+
- lib/ServState/usage_manager.rb
|
110
165
|
- lib/ServState/version.rb
|
111
|
-
- lib/ServState/views/
|
112
|
-
- lib/ServState/views/
|
113
|
-
- lib/ServState/views/css/style.scss
|
166
|
+
- lib/ServState/views/charts.erb
|
167
|
+
- lib/ServState/views/error.erb
|
114
168
|
- lib/ServState/views/index.erb
|
115
169
|
- lib/ServState/views/login.erb
|
170
|
+
- spec/charts_json_spec.rb
|
171
|
+
- spec/dashboard_spec.rb
|
172
|
+
- spec/spec_helper.rb
|
116
173
|
homepage: http://github.com/ololyay/ServState
|
117
174
|
licenses:
|
118
175
|
- MIT
|
@@ -123,18 +180,21 @@ require_paths:
|
|
123
180
|
- lib
|
124
181
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
182
|
requirements:
|
126
|
-
- -
|
183
|
+
- - ">="
|
127
184
|
- !ruby/object:Gem::Version
|
128
185
|
version: '0'
|
129
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
187
|
requirements:
|
131
|
-
- -
|
188
|
+
- - ">="
|
132
189
|
- !ruby/object:Gem::Version
|
133
190
|
version: '0'
|
134
191
|
requirements: []
|
135
192
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.
|
193
|
+
rubygems_version: 2.2.2
|
137
194
|
signing_key:
|
138
195
|
specification_version: 4
|
139
196
|
summary: http://github.com/ololyay/ServState
|
140
|
-
test_files:
|
197
|
+
test_files:
|
198
|
+
- spec/charts_json_spec.rb
|
199
|
+
- spec/dashboard_spec.rb
|
200
|
+
- spec/spec_helper.rb
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use 2.0.0@servstate --create
|
data/lib/ServState/info.rb
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
class Info
|
2
|
-
@@old_usage=0
|
3
|
-
@@old_total_usage=0
|
4
|
-
@@old_traffic=Hash.new
|
5
|
-
@@old_time_for_traffic=Time.now
|
6
|
-
@@cpu_stat_value=0
|
7
|
-
@@traffic_speed_value=0
|
8
|
-
def self.hostname
|
9
|
-
`hostname`.chomp
|
10
|
-
end
|
11
|
-
#hash[interface name] => ipaddr as string
|
12
|
-
def self.interfaces
|
13
|
-
ifconfig=`ifconfig -a`
|
14
|
-
ifconfig=ifconfig.lines.map do |line|
|
15
|
-
line.chomp
|
16
|
-
end
|
17
|
-
key=''
|
18
|
-
faces=Hash.new
|
19
|
-
ifconfig.each do |line|
|
20
|
-
unless line.start_with?' ' or line.start_with?'lo'
|
21
|
-
key=line.split[0]
|
22
|
-
end
|
23
|
-
if line.include? 'inet addr:' and key
|
24
|
-
faces[key]=line.split[1][5..-1]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
faces
|
28
|
-
end
|
29
|
-
# hash with fixnum values
|
30
|
-
def self.uptime
|
31
|
-
upt=Hash.new
|
32
|
-
upt[:total_sec]=IO.read('/proc/uptime').split.first.to_i
|
33
|
-
upt[:days]=upt[:total_sec]/86400
|
34
|
-
upt[:hours]=(upt[:total_sec]-upt[:days]*86400)/3600
|
35
|
-
upt[:minutes]=(upt[:total_sec]-upt[:days]*86400-upt[:hours]*3600)/60
|
36
|
-
upt[:seconds]=upt[:total_sec]-upt[:days]*86400-upt[:hours]*3600-upt[:minutes]*60
|
37
|
-
upt
|
38
|
-
end
|
39
|
-
# fixnum % of cpu load
|
40
|
-
def self.cpu_stat
|
41
|
-
if @@old_total_usage==0 # first call
|
42
|
-
@@old_usage=IO.readlines('/proc/stat').grep(/^cpu /).first.split[1..3].collect{|i| i.to_i}.inject(:+)
|
43
|
-
@@old_total_usage=IO.readlines('/proc/stat').grep(/^cpu /).first.split.collect{|i| i.to_i}.inject(:+)
|
44
|
-
sleep 1
|
45
|
-
end
|
46
|
-
new_usage=IO.readlines('/proc/stat').grep(/^cpu /).first.split[1..3].collect{|i| i.to_i}.inject(:+)
|
47
|
-
usage=new_usage-@@old_usage
|
48
|
-
|
49
|
-
new_total_usage=IO.readlines('/proc/stat').grep(/^cpu /).first.split.collect{|i| i.to_i}.inject(:+)
|
50
|
-
total_usage=new_total_usage-@@old_total_usage
|
51
|
-
|
52
|
-
@@old_usage=new_usage
|
53
|
-
@@old_total_usage=new_total_usage
|
54
|
-
|
55
|
-
((usage/total_usage.to_f)*100).to_i
|
56
|
-
end
|
57
|
-
# hash[mount point] => [usage %, total space in gb, used space in gb, free space in gb ]
|
58
|
-
def self.disk_usage
|
59
|
-
disk_usage=Hash.new
|
60
|
-
df=`df`.lines.grep(/^\/dev/)
|
61
|
-
df.each do |line|
|
62
|
-
line=line.split
|
63
|
-
name = line[5..-1].join(' ').chomp
|
64
|
-
usage_per = line[4].chop.to_i
|
65
|
-
total = (line[1].to_f/1048576).round 2
|
66
|
-
used = (line[2].to_f/1048576).round 2
|
67
|
-
available = (line[3].to_f/1048576).round 2
|
68
|
-
disk_usage[name]=[usage_per,total,used,available]
|
69
|
-
end
|
70
|
-
disk_usage
|
71
|
-
end
|
72
|
-
def self.ram_usage
|
73
|
-
usage=Hash.new
|
74
|
-
ram=`free`.lines
|
75
|
-
# [memory type]=[total, used] in Gb
|
76
|
-
usage[:ram]=[(ram[1].split[1].to_f/1048576).round(2),(ram[2].split[2].to_f/1048576).round(2)]
|
77
|
-
usage[:ram_per]=(100*(ram[2].split[2].to_f/1048576)/(ram[1].split[1].to_f/1048576)).round
|
78
|
-
usage[:swap]=[(ram[3].split[1].to_f/1048576).round(2),(ram[3].split[2].to_f/1048576).round(2)]
|
79
|
-
usage[:swap_per]=(100*(ram[3].split[2].to_f/1048576)/(ram[3].split[1].to_f/1048576)).round if ram[3].split[1].to_f!=0
|
80
|
-
usage
|
81
|
-
end
|
82
|
-
def self.traffic_stat
|
83
|
-
new_traffic=Hash.new
|
84
|
-
lines=IO.readlines('/proc/net/dev').grep(/:/)
|
85
|
-
lines.each do |line|
|
86
|
-
line=line.split
|
87
|
-
new_traffic[line[0].chop.to_sym]=[line[1].to_i,line[9].to_i] # [receive bytes, transmit bytes]
|
88
|
-
end
|
89
|
-
if @@old_traffic.size==0
|
90
|
-
@@old_traffic=new_traffic
|
91
|
-
end
|
92
|
-
speeds=Hash.new
|
93
|
-
time_diff=Time.new-@@old_time_for_traffic
|
94
|
-
@@old_time_for_traffic=Time.new
|
95
|
-
new_traffic.each do |interface,data|
|
96
|
-
down=data[0]-@@old_traffic[interface][0]
|
97
|
-
up=data[1]-@@old_traffic[interface][1]
|
98
|
-
speeds[interface]=[(down/1024/128/time_diff).round(2),(up/1024/128/time_diff).round(2)]
|
99
|
-
end
|
100
|
-
@@old_traffic=new_traffic
|
101
|
-
speeds
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
def self.update
|
106
|
-
@@cpu_stat_value=self.cpu_stat # run different long-time operations in different threads
|
107
|
-
Thread.new{
|
108
|
-
@@traffic_speed_value=self.traffic_stat
|
109
|
-
}
|
110
|
-
# network will be here
|
111
|
-
end
|
112
|
-
# operations of getting cpu load or network load take a few seconds
|
113
|
-
# we will calculate this values in another thread
|
114
|
-
# and just return values by this functions
|
115
|
-
def self.get_cpu_stat
|
116
|
-
@@cpu_stat_value
|
117
|
-
end
|
118
|
-
def self.get_traffic_speed
|
119
|
-
@@traffic_speed_value
|
120
|
-
end
|
121
|
-
|
122
|
-
end
|
data/lib/ServState/main.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'sinatra/base'
|
3
|
-
require 'json'
|
4
|
-
require 'date'
|
5
|
-
require 'sass'
|
6
|
-
|
7
|
-
require_relative 'info'
|
8
|
-
# require_relative 'controllers/assets'
|
9
|
-
# require_relative 'controllers/home'
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
class ServStateApp < Sinatra::Base
|
14
|
-
|
15
|
-
enable :sessions
|
16
|
-
|
17
|
-
get '/' do
|
18
|
-
if session[:login] or not APP_OPTIONS[:password]
|
19
|
-
@name=Info.hostname
|
20
|
-
erb :index
|
21
|
-
else
|
22
|
-
redirect '/login'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
get("/style.css") do
|
27
|
-
scss "css/style".to_sym
|
28
|
-
end
|
29
|
-
get '/renew.json' do
|
30
|
-
if session[:login] or not APP_OPTIONS[:password]
|
31
|
-
content_type :json
|
32
|
-
{ :cpu => Info.get_cpu_stat,
|
33
|
-
:uptime => Info.uptime,
|
34
|
-
:mem_usage => Info.ram_usage,
|
35
|
-
:disks_usage => Info.disk_usage,
|
36
|
-
:interfaces => Info.interfaces,
|
37
|
-
:network => Info.get_traffic_speed }.to_json
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
get '/login' do
|
42
|
-
unless(APP_OPTIONS[:password])
|
43
|
-
redirect '/'
|
44
|
-
end
|
45
|
-
session[:login]=false;
|
46
|
-
@name=Info.hostname
|
47
|
-
erb :login
|
48
|
-
end
|
49
|
-
|
50
|
-
post '/login' do
|
51
|
-
unless(APP_OPTIONS[:password])
|
52
|
-
redirect '/'
|
53
|
-
end
|
54
|
-
if(params[:pass])==APP_OPTIONS[:password]
|
55
|
-
session[:login]=true;
|
56
|
-
redirect '/'
|
57
|
-
else
|
58
|
-
redirect '/login'
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
#wrapper {
|
2
|
-
min-width: $wrapperMinWidth;
|
3
|
-
max-width: $wrapperMaxWidth;
|
4
|
-
margin: 0 auto;
|
5
|
-
padding: 10px;
|
6
|
-
}
|
7
|
-
.uk-width-medium-1-2 {
|
8
|
-
padding: 10px;
|
9
|
-
}
|
10
|
-
.uk-width-medium-1-4 {
|
11
|
-
padding: 10px;
|
12
|
-
}
|
13
|
-
.uk-panel {
|
14
|
-
margin-bottom: 10px;
|
15
|
-
}
|
16
|
-
.login {
|
17
|
-
width: 200px;
|
18
|
-
height: 100px;
|
19
|
-
margin: 0 auto;
|
20
|
-
}
|