messhy 0.4.0 → 0.5.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 +4 -4
- data/lib/messhy/cli.rb +0 -5
- data/lib/messhy/health_checker.rb +47 -0
- data/lib/messhy/ssh_executor.rb +13 -0
- data/lib/messhy/version.rb +1 -1
- data/lib/tasks/messhy.rake +0 -5
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5baf6451ca408d1f0072e1f10316eb683cb96a8ff81726febc60e0a3e30b85ac
|
|
4
|
+
data.tar.gz: e7d1079753416d0288c015daf01c8fb7701de4fc5c6f6eaa4fc65143cb480191
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dd8ac97816e7670ce7e593663f4cb507340ce21f741728a9734f1c472ab3e151ac9d9540b626560de891e6b71ca3eab7abaa0d58148fc45b3f5096c43353e967
|
|
7
|
+
data.tar.gz: 47eb6507f60dbed0d9a7b3e8733b3abee88241a863e76d7618fe729bcc7053846fe71202ee94bf89720d85e36bb52ca9d885d05853166d79a4197570cb8bc23a
|
data/lib/messhy/cli.rb
CHANGED
|
@@ -25,6 +25,8 @@ module Messhy
|
|
|
25
25
|
show_node_status(node_name)
|
|
26
26
|
puts
|
|
27
27
|
end
|
|
28
|
+
|
|
29
|
+
show_latency_matrix
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
def show_node_status(node_name)
|
|
@@ -157,6 +159,51 @@ module Messhy
|
|
|
157
159
|
|
|
158
160
|
private
|
|
159
161
|
|
|
162
|
+
def show_latency_matrix
|
|
163
|
+
node_names = config.node_names
|
|
164
|
+
return if node_names.size < 2
|
|
165
|
+
|
|
166
|
+
puts '==> Latency Matrix (ms)'
|
|
167
|
+
puts
|
|
168
|
+
|
|
169
|
+
latencies = {}
|
|
170
|
+
tested_pairs = Set.new
|
|
171
|
+
|
|
172
|
+
node_names.each do |source|
|
|
173
|
+
node_names.each do |target|
|
|
174
|
+
next if source == target
|
|
175
|
+
|
|
176
|
+
pair_key = [source, target].sort.join('-')
|
|
177
|
+
next if tested_pairs.include?(pair_key)
|
|
178
|
+
|
|
179
|
+
tested_pairs.add(pair_key)
|
|
180
|
+
target_ip = config.node_config(target)['private_ip']
|
|
181
|
+
latency = @ssh_executor.measure_latency(source, target_ip)
|
|
182
|
+
latencies[[source, target]] = latency
|
|
183
|
+
latencies[[target, source]] = latency
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
max_name_len = node_names.map(&:length).max
|
|
188
|
+
header = ' ' * (max_name_len + 2) + node_names.map { |n| n[0..7].rjust(8) }.join(' ')
|
|
189
|
+
puts header
|
|
190
|
+
puts '-' * header.length
|
|
191
|
+
|
|
192
|
+
node_names.each do |source|
|
|
193
|
+
row = node_names.map do |target|
|
|
194
|
+
if source == target
|
|
195
|
+
' - '
|
|
196
|
+
else
|
|
197
|
+
lat = latencies[[source, target]]
|
|
198
|
+
lat ? format('%7.1f ', lat) : ' N/A '
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
puts "#{source.ljust(max_name_len)} #{row.join(' ')}"
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
puts
|
|
205
|
+
end
|
|
206
|
+
|
|
160
207
|
def handshake_recent?(source_name, target_ip, status_cache)
|
|
161
208
|
status = status_cache[source_name] ||= @ssh_executor.get_wireguard_status(source_name)
|
|
162
209
|
peer_block = WireguardStatusParser.extract_peer_block(status, target_ip)
|
data/lib/messhy/ssh_executor.rb
CHANGED
|
@@ -172,6 +172,19 @@ module Messhy
|
|
|
172
172
|
false
|
|
173
173
|
end
|
|
174
174
|
|
|
175
|
+
def measure_latency(source_node, target_ip)
|
|
176
|
+
latency = nil
|
|
177
|
+
execute_on_node(source_node) do
|
|
178
|
+
output = capture(:ping, '-c', '3', '-W', '2', '-I', 'wg0', target_ip, raise_on_non_zero_exit: false)
|
|
179
|
+
if output =~ %r{rtt min/avg/max/mdev = [\d.]+/([\d.]+)/}
|
|
180
|
+
latency = ::Regexp.last_match(1).to_f
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
latency
|
|
184
|
+
rescue StandardError
|
|
185
|
+
nil
|
|
186
|
+
end
|
|
187
|
+
|
|
175
188
|
def test_tcp_connectivity(source_node, target_ip, port = 22)
|
|
176
189
|
success = false
|
|
177
190
|
execute_on_node(source_node) do
|
data/lib/messhy/version.rb
CHANGED
data/lib/tasks/messhy.rake
CHANGED
|
@@ -9,11 +9,6 @@ namespace :messhy do
|
|
|
9
9
|
system('bundle exec messhy setup')
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
desc 'Check VPN mesh connectivity'
|
|
13
|
-
task :health do
|
|
14
|
-
system('bundle exec messhy health')
|
|
15
|
-
end
|
|
16
|
-
|
|
17
12
|
desc 'Generate new WireGuard keys'
|
|
18
13
|
task :keygen do
|
|
19
14
|
system('bundle exec messhy keygen')
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: messhy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- BoringCache
|
|
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
157
|
version: '0'
|
|
158
158
|
requirements: []
|
|
159
|
-
rubygems_version: 3.
|
|
159
|
+
rubygems_version: 3.7.2
|
|
160
160
|
specification_version: 4
|
|
161
161
|
summary: WireGuard VPN mesh for Ruby & Rails apps
|
|
162
162
|
test_files: []
|