Class: WatchmonkeyCli::Application
- Inherits:
-
Object
- Object
- WatchmonkeyCli::Application
- Includes:
- Colorize, Configuration::AppHelper, Core, Dispatch, OutputHelper, Checker::AppHelper, Helper
- Defined in:
- lib/watchmonkey_cli/application.rb,
lib/watchmonkey_cli/application/core.rb,
lib/watchmonkey_cli/application/colorize.rb,
lib/watchmonkey_cli/application/dispatch.rb,
lib/watchmonkey_cli/application/configuration.rb,
lib/watchmonkey_cli/application/output_helper.rb
Defined Under Namespace
Modules: Colorize, Core, Dispatch, OutputHelper Classes: Configuration
Constant Summary
Constants included from Colorize
Constants included from Helper
Instance Attribute Summary collapse
-
#checkers ⇒ Object
readonly
Returns the value of attribute checkers.
-
#connections ⇒ Object
readonly
Returns the value of attribute connections.
-
#hooks ⇒ Object
readonly
Returns the value of attribute hooks.
-
#opts ⇒ Object
readonly
Returns the value of attribute opts.
-
#processed ⇒ Object
readonly
Returns the value of attribute processed.
-
#queue ⇒ Object
readonly
Returns the value of attribute queue.
-
#tag_list ⇒ Object
readonly
Returns the value of attribute tag_list.
-
#threads ⇒ Object
readonly
Returns the value of attribute threads.
Class Method Summary collapse
-
.dispatch(*a) ⇒ Object
= Setup = =========.
Instance Method Summary collapse
- #dump_and_exit! ⇒ Object
- #init_params ⇒ Object
-
#initialize(env, argv) {|_self| ... } ⇒ Application
constructor
A new instance of Application.
- #parse_params ⇒ Object
- #running? ⇒ Boolean
- #sync(&block) ⇒ Object
Methods included from Checker::AppHelper
#init_checkers!, #start_checkers!, #stop_checkers!
Methods included from Configuration::AppHelper
#checker_directory, #checker_files, #config_directory, #config_filename, #config_files, #generate_config, #load_appconfig, #load_checkers!, #load_configs!, #wm_cfg_configfile, #wm_cfg_path
Methods included from Dispatch
#dispatch, #dispatch_generate_config, #dispatch_help, #dispatch_index, #dispatch_info
Methods included from Core
#_fire_around, #_queueoff, #close_connections!, #enqueue, #enqueue_sub, #fetch_connection, #filtered_threads, #fire, #haltpoint, #hook, #logger, #logger_filename, #release_signals, #spawn_threads_and_run!, #trap_signals
Methods included from Colorize
Methods included from OutputHelper
#abort, #debug, #error, #info, #print, #puts, #warn
Methods included from Helper
#human_filesize, #human_number, #human_seconds
Constructor Details
#initialize(env, argv) {|_self| ... } ⇒ Application
Returns a new instance of Application.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/watchmonkey_cli/application.rb', line 44 def initialize env, argv @boot = Time.current @env, @argv = env, argv @connections = {} @hooks = {} @monitor = Monitor.new @threads = [] @queue = Queue.new @tag_list = Set.new @processed = 0 @running = false @opts = { dump: false, # (internal) if true app will dump itself and exit before running any checks dispatch: :index, # (internal) action to dispatch check_for_updates: true, # -z flag colorize: true, # -m flag debug: false, # -d flag threads: 10, # -t flag maxrt: 120.seconds, # max runtime of a single task after which it will be terminated (may break SSH connection), 0/false to not limit runtime max_retry: 3, # max retry on error for a single task conclosewait: 10, # max seconds to wait for connections to be closed (may never if they got killed by maxrt) loop_forever: false, # (internal) loop forever (app mode) loop_wait_empty: 1, # (internal) time to wait in thread if queue is empty autotag: true, # (internal) if true checkers will get auto tags for checker name and hostname/connection silent: false, # -s flag quiet: false, # -q flag stdout: STDOUT, # (internal) STDOUT redirect tag_only: [], # -o flag tag_except: [], # -e flag filtered_threads: [ # (internal) stray-thread-detection exclusion list "gems/concurrent-ruby", "gems/timeout", ], } init_params yield(self) end |
Instance Attribute Details
#checkers ⇒ Object (readonly)
Returns the value of attribute checkers.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def checkers @checkers end |
#connections ⇒ Object (readonly)
Returns the value of attribute connections.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def connections @connections end |
#hooks ⇒ Object (readonly)
Returns the value of attribute hooks.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def hooks @hooks end |
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def opts @opts end |
#processed ⇒ Object (readonly)
Returns the value of attribute processed.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def processed @processed end |
#queue ⇒ Object (readonly)
Returns the value of attribute queue.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def queue @queue end |
#tag_list ⇒ Object (readonly)
Returns the value of attribute tag_list.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def tag_list @tag_list end |
#threads ⇒ Object (readonly)
Returns the value of attribute threads.
3 4 5 |
# File 'lib/watchmonkey_cli/application.rb', line 3 def threads @threads end |
Class Method Details
.dispatch(*a) ⇒ Object
Setup =
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/watchmonkey_cli/application.rb', line 15 def self.dispatch *a new(*a) do |app| app.load_appconfig app.parse_params begin app.dispatch app.haltpoint rescue Interrupt app.abort("Interrupted", 1) rescue SystemExit # silence ensure $wm_runtime_exiting = true app.fire(:wm_shutdown) if app.filtered_threads.length > 1 app.error "[WARN] #{app.filtered_threads.length} threads remain (should be 1)..." app.filtered_threads.each do |thr| app.debug "[THR] #{Thread.main == thr ? "MAIN" : "THREAD"}\t#{thr.alive? ? "ALIVE" : "DEAD"}\t#{thr.inspect}", 10 thr.backtrace.each do |l| app.debug "[THR]\t#{l}", 20 end end else app.debug "1 thread remains..." end end end end |
Instance Method Details
#dump_and_exit! ⇒ Object
126 127 128 129 130 131 |
# File 'lib/watchmonkey_cli/application.rb', line 126 def dump_and_exit! puts " Queue: #{@queue.length}" puts " AppOpts: #{@opts}" puts "Checkers: #{@checkers.keys.join(",")}" exit 9 end |
#init_params ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/watchmonkey_cli/application.rb', line 82 def init_params @optparse = OptionParser.new do |opts| opts. = "Usage: watchmonkey [options]" opts.separator(c "# Application options", :blue) opts.on("--generate-config [myconfig]", "Generates a example config in ~/.watchmonkey") {|s| @opts[:dispatch] = :generate_config; @opts[:config_name] = s } opts.on("-l", "--log [file]", "Log to file, defaults to ~/.watchmonkey/logs/watchmonkey.log") {|s| @opts[:logfile] = s || logger_filename } opts.on("-t", "--threads [NUM]", Integer, "Amount of threads to be used for checking (default: 10)") {|s| @opts[:threads] = s } opts.on("-e", "--except tag1,tag2", Array, "Don't run tasks tagged with given tags") {|s| @opts[:tag_except] = s.map(&:to_sym) } opts.on("-o", "--only tag1,tag2", Array, "Only run tasks tagged with given tags") {|s| @opts[:tag_only] = s.map(&:to_sym) } opts.on("-s", "--silent", "Only print errors and infos") { @opts[:silent] = true } opts.on("-q", "--quiet", "Only print errors") { @opts[:quiet] = true } opts.separator("\n" << c("# General options", :blue)) opts.on("-d", "--debug [lvl=1]", Integer, "Enable debug output") {|l| @opts[:debug] = l || 1 } opts.on("-m", "--monochrome", "Don't colorize output") { @opts[:colorize] = false } opts.on("-h", "--help", "Shows this help") { @opts[:dispatch] = :help } opts.on("-v", "--version", "Shows version and other info") { @opts[:dispatch] = :info } opts.on("-z", "Do not check for updates on GitHub (with -v/--version)") { @opts[:check_for_updates] = false } opts.on("--dump-core", "for developers") { @opts[:dump] = true } end fire(:optparse_init, @optparse) end |
#parse_params ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/watchmonkey_cli/application.rb', line 106 def parse_params fire(:optparse_parse_before, @optparse) fire(:optparse_parse_around, @optparse) do @optparse.parse!(@argv) end fire(:optparse_parse_after, @optparse) rescue OptionParser::ParseError => e abort(e.) dispatch(:help) exit 1 end |
#running? ⇒ Boolean
118 119 120 |
# File 'lib/watchmonkey_cli/application.rb', line 118 def running? @running end |
#sync(&block) ⇒ Object
122 123 124 |
# File 'lib/watchmonkey_cli/application.rb', line 122 def sync &block @monitor.synchronize(&block) end |