watchmonkey_cli 1.5 → 1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 856c3354f0039a351a73dfd0175af79e387078fb
4
- data.tar.gz: 07e20ff5db1bc068d50784b826a05d412b5a7836
3
+ metadata.gz: c8e8b3281a2641174927f13de6f09d0bf2c35988
4
+ data.tar.gz: 1dbd8ec4d401dae1651fae131a874381242365f6
5
5
  SHA512:
6
- metadata.gz: e19791d169aa0d08700b7f85a2b38932271f640b676737f50ecd0beab86c87486068967f5a3ed896925d4fc43548a09932bed2cec201d8fc9ba58d62ed4d3538
7
- data.tar.gz: 1fa78746dafc66551783806f3ea963badf8aae01a61fdc23fdf349655449721c6203837607013506279d513c8f6cc0f7b44c00de008b22f91b58a7614d658077
6
+ metadata.gz: 41cffe415bdb00af10d9ee99ce1a5a59db0f9fa989c2938eefb329c378f4b16687774713946a82b02e4b44c23f6a48187f942ed96ace18a992f235ea58935ba1
7
+ data.tar.gz: 6be8aa148f2a41b3a4766e34ed02f9192d6591aa7486c49250190adced0e3546b1dfb4b7b898a098741d82ff089622541743ab4ddb4d8104c4933741c3d552c1
data/.gitignore CHANGED
@@ -7,7 +7,6 @@ Gemfile.lock
7
7
  InstalledFiles
8
8
  _yardoc
9
9
  coverage
10
- doc/
11
10
  lib/bundler/man
12
11
  pkg
13
12
  rdoc
data/README.md CHANGED
@@ -68,21 +68,21 @@ If you want to deactivate single configs just rename the file to start with two
68
68
 
69
69
 
70
70
  ## Application configuration
71
- If you want to add custom checkers, hooks or change default settings you can create `~/.watchmonkey/config.rb`. The file will be eval'd in the application object's context. Take a look at the [example configuration file](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/application.rb) and [application.rb](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/doc/config_example.rb).
71
+ If you want to add custom checkers, hooks or change default settings you can create `~/.watchmonkey/config.rb`. The file will be eval'd in the application object's context. Take a look at the [example configuration file](https://github.com/2called-chaos/watchmonkey_cli/blob/master/doc/config_example.rb) and [application.rb](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/application.rb).
72
72
 
73
73
 
74
74
  ## Custom checkers
75
- If you want to monitor something that is not covered by the buildin handlers you can create your own, it's not that hard and should be a breeze if you are used to Ruby. All descendants of the `WatchmonkeyCli::Checker` class will be initialized and are usable in the application. Documentation is thin but you can take a look at the [example checker](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/doc/checker_example.rb), the [buildin checkers](https://github.com/2called-chaos/watchmonkey_cli/tree/master/lib/watchmonkey_cli/checkers) or just [open an issue](https://github.com/2called-chaos/watchmonkey_cli/issues/new) and I might just implement it real quick.
75
+ If you want to monitor something that is not covered by the buildin handlers you can create your own, it's not that hard and should be a breeze if you are used to Ruby. All descendants of the `WatchmonkeyCli::Checker` class will be initialized and are usable in the application. Documentation is thin but you can take a look at the [example checker](https://github.com/2called-chaos/watchmonkey_cli/blob/master/doc/checker_example.rb), the [buildin checkers](https://github.com/2called-chaos/watchmonkey_cli/tree/master/lib/watchmonkey_cli/checkers) or just [open an issue](https://github.com/2called-chaos/watchmonkey_cli/issues/new) and I might just implement it real quick.
76
76
 
77
77
 
78
78
  ## Additional Features
79
79
 
80
80
  ### ReQueue
81
81
  By default Watchmonkey will run all tests once and then exit. This addon will enable Watchmonkey to run in a loop and run tests on a periodic interval.
82
- Since this seems like a core feature it might get included directly into Watchmonkey but for now take a look at the documentation in the [ReQueue source code](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/hooks/requeue.rb) for integration instructions.
82
+ Since this seems like a core feature it might get included directly into Watchmonkey but for now take a look at the [application configuration file](https://github.com/2called-chaos/watchmonkey_cli/blob/master/doc/config_example.rb) and [ReQueue source code](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/hooks/requeue.rb) for integration examples.
83
83
 
84
84
  ### Platypus support
85
- [Platypus](http://sveinbjorn.org/platypus) is a MacOS software to create dead simple GUI wrappers for scripts. There is buildin support for the interface types ProgressBar and WebView. For information look at the documentation in the [Platypus hook source code](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/hooks/platypus.rb).
85
+ [Platypus](http://sveinbjorn.org/platypus) is a MacOS software to create dead simple GUI wrappers for scripts. There is buildin support for the interface types ProgressBar and WebView. For integration examples take a look at the [application configuration file](https://github.com/2called-chaos/watchmonkey_cli/blob/master/doc/config_example.rb) and [Platypus hook source code](https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/hooks/platypus.rb).
86
86
 
87
87
 
88
88
  ## Contributing
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5
1
+ 1.6
@@ -0,0 +1,67 @@
1
+ # You will need to place this file somewhere and require it in your
2
+ # `~/.watchmonkey/config.rb` in order for it to register in the application.
3
+ # You can also place it into `~/watchmonkey/checkers/` and it will get required
4
+ # automatically unless the file name starts with two underscores.
5
+
6
+ module MyWatchmonkeyCheckers
7
+ class MyChecker < WatchmonkeyCli::Checker
8
+ # ============
9
+ # = Required =
10
+ # ============
11
+ # This name defines how you can add tests in your configs.
12
+ # e.g. my_checker "http://google.com", some_option: true
13
+ self.checker_name = "my_checker"
14
+
15
+ # Called by configuration defining a check with all the arguments.
16
+ # e.g. my_checker "http://google.com", some_option: true
17
+ # Should invoke `app.enqueue` which will by default call `#check!` method with given arguments.
18
+ def enqueue host, opts = {}
19
+ opts = { some_option: false }.merge(opts)
20
+
21
+ # If you want to exec commands (locally or SSH) usually a connection or symbol is passed.
22
+ # The buildin handlers follow this logic:
23
+ host = app.fetch_connection(:loopback, :local) if !host || host == :local
24
+ host = app.fetch_connection(:ssh, host) if host.is_a?(Symbol)
25
+
26
+ # requires first argument to be self (the checker), all other arguments are passed to `#check!` method.
27
+ app.enqueue(self, host, opts)
28
+ end
29
+
30
+ # First argument is the result object, all other arguments came from `app.enqueue` call.
31
+ def check! result, host, opts = {}
32
+ # Do your checks and modify the result object.
33
+ # Debug messages will not show if -s/--silent or -q/--quiet argument is passed.
34
+ # Info messages will not show if -q/-quiet argument is passed.
35
+
36
+ result.error "foo" # add error message (type won't be changed)
37
+ result.error! "foo" # add error message (type changes to error)
38
+ result.info "foo"
39
+ result.info! "foo"
40
+ result.debug "foo"
41
+ result.debug! "foo"
42
+ end
43
+
44
+
45
+
46
+ # ============
47
+ # = Optional =
48
+ # ============
49
+ def init
50
+ # hook method (called when checker is being initialized)
51
+ end
52
+
53
+ def start
54
+ # hook method (called after all checkers were initialized and configs + hosts are loaded)
55
+ # can/should be used for starting connections, etc.
56
+ end
57
+
58
+ def stop
59
+ # hook method (called on application shutdown)
60
+ # connections should be closed here
61
+
62
+ # DO NOT CLOSE CONNECTIONS HANDLED BY THE APP!
63
+ # Keep in mind that the checkers run concurrently
64
+ # and therefore shared resources might still be in use
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,45 @@
1
+ # Create this file as ~/.watchmonkey/config.rb
2
+ # This file is eval'd in the application object's context after it's initialized!
3
+
4
+ # Change option defaults (arguments will still override these settings)
5
+ # For options refer to application.rb#initialize
6
+ # https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/application.rb
7
+ @opts[:threads] = 50
8
+
9
+
10
+
11
+ # Integrate ReQueue (module for infinite checking)
12
+ # For options refer to the source code:
13
+ # https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/hooks/requeue.rb
14
+ if @argv.delete("--requeue") || @argv.delete("--reQ")
15
+ require "watchmonkey_cli/hooks/requeue"
16
+ WatchmonkeyCli::Requeue.hook!(self)
17
+
18
+ # change options after hooking!
19
+ @opts[:threads] = 8 # don't need as many here because speed is not a concern
20
+ @opts[:default_requeue] = 60 # default delay before requeuing checker, override with `every: 10.minutes` checker option
21
+ end
22
+
23
+
24
+
25
+ # Integrate Platypus (module for MacOS tool Platypus)
26
+ # For options refer to the source code:
27
+ # https://github.com/2called-chaos/watchmonkey_cli/blob/master/lib/watchmonkey_cli/hooks/platypus.rb
28
+ if @argv.delete("--platypus")
29
+ require "watchmonkey_cli/hooks/platypus"
30
+
31
+ # Options:
32
+ # * notifications(1)
33
+ # 1 - silent notifications (OS X notifications)
34
+ # 2 - notifications with sound (OS X notifications)
35
+ # everything else disables notifications (and renders the hook somewhat useless)
36
+ # * progress(true)
37
+ # outputs "PROGRESS:##" for Platypus ProgressBar interface (useless if HTML is enabled)
38
+ # * html(false)
39
+ # outputs HTML for Platypus WebView interface
40
+ # * draw_delay(1)
41
+ # seconds between HTML updates (useless if HTML is disabled)
42
+ WatchmonkeyCli::Platypus.hook!(self, notifications: 1, html: true, draw_delay: 3)
43
+
44
+ @opts[:colorize] = false # doesn't render in platypus
45
+ end
@@ -20,6 +20,13 @@ module WatchmonkeyCli
20
20
  emsg << "load5 is to high (limit5 is #{opts[:limits][1]}, load5 is #{ld[1]})" if ld[1] > opts[:limits][1]
21
21
  emsg << "load15 is to high (limit15 is #{opts[:limits][2]}, load15 is #{ld[2]})" if ld[2] > opts[:limits][2]
22
22
  result.error!(emsg.join("\n\t")) if emsg.any?
23
+
24
+ # plotter support
25
+ app.fire :plotter_push, self, host, {
26
+ load1: ld[0], limit1: opts[:limits][0],
27
+ load5: ld[1], limit5: opts[:limits][1],
28
+ load15: ld[2], limit15: opts[:limits][2],
29
+ }
23
30
  end
24
31
 
25
32
  def _parse_response res
@@ -2,10 +2,15 @@ module WatchmonkeyCli
2
2
  class Requeue
3
3
  def self.hook!(app)
4
4
  app.instance_eval do
5
+ @requeue = []
6
+
5
7
  # app options
6
8
  @opts[:loop_forever] = true
7
9
  @opts[:logfile] = logger_filename # enable logging
8
10
 
11
+ # scheduler options
12
+ @opts[:requeue_scheduler_hibernation] = 1 # tickrate of schedule in seconds
13
+
9
14
  # module options
10
15
  @opts[:default_requeue] = 60
11
16
  # @opts[:default_requeue_ftp_availability] = 60
@@ -19,9 +24,6 @@ module WatchmonkeyCli
19
24
  # @opts[:default_requeue_unix_memory] = 60
20
25
  @opts[:default_requeue_www_availability] = 30
21
26
 
22
- # Requeue threads
23
- @requeue = []
24
-
25
27
 
26
28
  # =================
27
29
  # = Status thread =
@@ -45,6 +47,25 @@ module WatchmonkeyCli
45
47
  end
46
48
 
47
49
 
50
+ # =================
51
+ # = Scheduler thread =
52
+ # =================
53
+ @requeue_scheduler_thread = Thread.new do
54
+ Thread.current.abort_on_exception = true
55
+ loop do
56
+ break if $wm_runtime_exiting
57
+ sync do
58
+ @requeue.each_with_index do |(run_at, callback), index|
59
+ next if run_at > Time.now
60
+ callback.call()
61
+ @requeue.delete_at(index)
62
+ end
63
+ end
64
+ sleep @opts[:requeue_scheduler_hibernation]
65
+ end
66
+ end
67
+
68
+
48
69
  # =========
49
70
  # = Hooks =
50
71
  # =========
@@ -61,11 +82,8 @@ module WatchmonkeyCli
61
82
 
62
83
  hook :wm_shutdown do
63
84
  sync do
64
- debug "[ReQ] #{@requeue.length} items in requeue..."
65
- unless @requeue.empty?
66
- @requeue.each(&:kill).each(&:join).select!(&:alive?)
67
- debug "[ReQ] #{@requeue.length} items in requeue..."
68
- end
85
+ @requeue_scheduler_thread.try(:join)
86
+ debug "[ReQ] Clearing #{@requeue.length} items in requeue..."
69
87
  @requeue_status_thread.try(:kill).try(:join)
70
88
  end
71
89
  end
@@ -77,12 +95,9 @@ module WatchmonkeyCli
77
95
  def requeue checker, args, delay = 10
78
96
  return if $wm_runtime_exiting
79
97
  sync do
80
- @requeue << Thread.new {
81
- Thread.current.abort_on_exception = true
82
- sleep(delay)
98
+ @requeue << [Time.now + delay, ->{
83
99
  checker.enqueue(*args)
84
- sync { @requeue.delete Thread.current }
85
- }
100
+ }]
86
101
  end
87
102
  end
88
103
  end
@@ -1,4 +1,4 @@
1
1
  module WatchmonkeyCli
2
- VERSION = "1.5"
2
+ VERSION = "1.6"
3
3
  UPDATE_URL = "https://raw.githubusercontent.com/2called-chaos/watchmonkey_cli/master/VERSION"
4
4
  end
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.5'
4
+ version: '1.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sven Pachnit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-24 00:00:00.000000000 Z
11
+ date: 2016-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -112,6 +112,8 @@ files:
112
112
  - VERSION
113
113
  - bin/watchmonkey
114
114
  - bin/watchmonkey.sh
115
+ - doc/checker_example.rb
116
+ - doc/config_example.rb
115
117
  - lib/watchmonkey_cli.rb
116
118
  - lib/watchmonkey_cli/application.rb
117
119
  - lib/watchmonkey_cli/application/colorize.rb