watchmonkey_cli 1.11.0 → 1.12.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/VERSION +1 -1
- data/lib/watchmonkey_cli/application/configuration.rb +18 -3
- data/lib/watchmonkey_cli/application/configuration.tpl +1 -1
- data/lib/watchmonkey_cli/application.rb +3 -1
- data/lib/watchmonkey_cli/checker.rb +4 -0
- data/lib/watchmonkey_cli/checkers/ftp_availability.rb +1 -1
- data/lib/watchmonkey_cli/checkers/ssl_expiration.rb +1 -1
- data/lib/watchmonkey_cli/checkers/unix_defaults.rb +3 -1
- data/lib/watchmonkey_cli/checkers/www_availability.rb +2 -1
- data/lib/watchmonkey_cli/hooks/telegram_bot.rb +1 -1
- data/lib/watchmonkey_cli/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d2615fa891c7ccb38541934fa918c33fa37a93cc3d3c52ece8db41a100e1d0b
|
4
|
+
data.tar.gz: 98f2a66da3fdc810c9b7fc1396ba12a605f3cd12d939585e9c9ed03d9f252fbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23307a955c34627a32e0023df5dc40874eda5d72e80f152e2a57bcf12be767b34db53fc565ffbc8329060cbfe8e72871956123bf553f0ff409ed4468528bca0f
|
7
|
+
data.tar.gz: c671b5bac01cf8c423eef81ada024cd35a1c82f426c9fa80cee4cb90047aa242c579a39248ef349d2cc69d7be281037caac74afa410d59af633029f5b5860b52
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.12.0
|
@@ -59,10 +59,11 @@ module WatchmonkeyCli
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
def initialize app, file
|
62
|
+
def initialize app, file = nil, tags = []
|
63
63
|
@app = app
|
64
64
|
@file = file
|
65
|
-
@tags =
|
65
|
+
@tags = tags
|
66
|
+
return unless file
|
66
67
|
begin
|
67
68
|
eval File.read(file, encoding: "utf-8"), binding, file
|
68
69
|
rescue
|
@@ -84,7 +85,21 @@ module WatchmonkeyCli
|
|
84
85
|
opts = args.extract_options!
|
85
86
|
only = @app.opts[:tag_only]
|
86
87
|
except = @app.opts[:tag_except]
|
87
|
-
|
88
|
+
|
89
|
+
# build tags
|
90
|
+
tags = (@tags + (opts[:tags] || []).map(&:to_sym))
|
91
|
+
if @app.opts[:autotag]
|
92
|
+
tags << :"WMC-#{c.class.checker_name}" # checker name
|
93
|
+
if args[0].is_a?(Symbol)
|
94
|
+
tags << :"WMS-#{args[0]}" # ssh/local connection
|
95
|
+
elsif args[0].is_a?(String) && args[0].match(/\Ahttp(s)?:\/\//i)
|
96
|
+
uri = URI.parse(args[0]) rescue false
|
97
|
+
tags << :"WMH-#{uri.hostname.gsub(".", "_")}" if uri # hostname from URL
|
98
|
+
end
|
99
|
+
end
|
100
|
+
tags = tags.uniq
|
101
|
+
@app.tag_list.merge(tags)
|
102
|
+
|
88
103
|
if only.any?
|
89
104
|
if tags.any?{|t| only.include?(t) }
|
90
105
|
if tags.any?{|t| except.include?(t) }
|
@@ -57,7 +57,7 @@ ssh_connection :my_server, host: "wheel@example.com", port: 23 # additional opti
|
|
57
57
|
#
|
58
58
|
# timeout Maximum time to wait for request (default: 20 seconds)
|
59
59
|
# verify If enabled the peer will be verified (default: true)
|
60
|
-
# threshold Minimum certificate lifetime before showing warnings (default:
|
60
|
+
# threshold Minimum certificate lifetime before showing warnings (default: 28.days)
|
61
61
|
#
|
62
62
|
ssl_expiration "https://example.com", threshold: 3.months
|
63
63
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module WatchmonkeyCli
|
2
2
|
class Application
|
3
|
-
attr_reader :opts, :checkers, :connections, :threads, :queue, :hooks, :processed
|
3
|
+
attr_reader :opts, :checkers, :connections, :threads, :queue, :hooks, :processed, :tag_list
|
4
4
|
include Helper
|
5
5
|
include OutputHelper
|
6
6
|
include Colorize
|
@@ -49,6 +49,7 @@ module WatchmonkeyCli
|
|
49
49
|
@monitor = Monitor.new
|
50
50
|
@threads = []
|
51
51
|
@queue = Queue.new
|
52
|
+
@tag_list = Set.new
|
52
53
|
@processed = 0
|
53
54
|
@running = false
|
54
55
|
@opts = {
|
@@ -62,6 +63,7 @@ module WatchmonkeyCli
|
|
62
63
|
conclosewait: 10, # max seconds to wait for connections to be closed (may never if they got killed by maxrt)
|
63
64
|
loop_forever: false, # (internal) loop forever (app mode)
|
64
65
|
loop_wait_empty: 1, # (internal) time to wait in thread if queue is empty
|
66
|
+
autotag: true, # (internal) if true checkers will get auto tags for checker name and hostname/connection
|
65
67
|
silent: false, # -s flag
|
66
68
|
quiet: false, # -q flag
|
67
69
|
stdout: STDOUT, # (internal) STDOUT redirect
|
@@ -163,6 +163,10 @@ module WatchmonkeyCli
|
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
+
def blank_config tags = []
|
167
|
+
Application::Configuration.new(app, nil, tags)
|
168
|
+
end
|
169
|
+
|
166
170
|
# def to_s
|
167
171
|
# string = "#<#{self.class.name}:#{self.object_id} "
|
168
172
|
# fields = self.class.inspector_fields.map{|field| "#{field}: #{self.send(field)}"}
|
@@ -4,7 +4,7 @@ module WatchmonkeyCli
|
|
4
4
|
self.checker_name = "ssl_expiration"
|
5
5
|
|
6
6
|
def enqueue page, opts = {}
|
7
|
-
opts = { threshold:
|
7
|
+
opts = { threshold: 28.days, verify: true, timeout: 20 }.merge(opts)
|
8
8
|
app.enqueue(self, page, opts)
|
9
9
|
end
|
10
10
|
|
@@ -35,7 +35,9 @@ module WatchmonkeyCli
|
|
35
35
|
# sec.check!(result, host, opts[which])
|
36
36
|
# end
|
37
37
|
# app.enqueue_sub(self, which, host, opts[which]) if opts[which]
|
38
|
-
spawn_sub(which, host, opts[which].is_a?(Hash) ? opts[which] : {}) unless opts[which] == false
|
38
|
+
#spawn_sub(which, host, (opts[which].is_a?(Hash) ? opts[which] : {}).merge(tags: result.tags)) unless opts[which] == false
|
39
|
+
stags = (opts[:tags] || []).reject{|t| t.to_s.start_with?("WMC-") }
|
40
|
+
blank_config(stags).send(which, host, (opts[which].is_a?(Hash) ? opts[which] : {})) unless opts[which] == false
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
@@ -9,7 +9,8 @@ module WatchmonkeyCli
|
|
9
9
|
# if available enable ssl_expiration support
|
10
10
|
if page.start_with?("https://") && opts[:ssl_expiration] != false && !app.running?
|
11
11
|
sopts = { timeout: opts[:timeout] }.merge(opts[:ssl_expiration].is_a?(Hash) ? opts[:ssl_expiration] : {})
|
12
|
-
|
12
|
+
stags = (opts[:tags] || []).reject{|t| t.to_s.start_with?("WMC-") }
|
13
|
+
blank_config(stags).ssl_expiration(page, sopts)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
@@ -418,7 +418,7 @@ module WatchmonkeyCli
|
|
418
418
|
when "/start"
|
419
419
|
if event.user_data
|
420
420
|
event.reply [].tap{|m|
|
421
|
-
m << "<b>Welcome!</b> I will tell you if something is wrong with
|
421
|
+
m << "<b>Welcome!</b> I will tell you if something is wrong with your infrastructure."
|
422
422
|
m << "Your current tags are: #{event.user_data[1].join(", ")}"
|
423
423
|
m << "<b>You have admin permissions!</b>" if event.user_admin?
|
424
424
|
m << "\nInstead of muting me in Telegram you can silence me for a while with <code>/mute 6h 30m</code>."
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watchmonkey_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Pachnit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
requirements: []
|
168
|
-
rubygems_version: 3.1.
|
168
|
+
rubygems_version: 3.1.4
|
169
169
|
signing_key:
|
170
170
|
specification_version: 4
|
171
171
|
summary: Watchmonkey CLI - dead simple agentless monitoring via SSH, HTTP, FTP, etc.
|