bin/splash in prometheus-splash-0.1.0 vs bin/splash in prometheus-splash-0.1.1
- old
+ new
@@ -1,374 +1,16 @@
#!/usr/bin/env ruby -W:no-deprecated
-require 'socket'
-require 'yaml'
-require 'thread'
+# coding: utf-8
-begin
- require 'prometheus/client'
- require 'prometheus/client/push'
- require 'thor'
- require 'rufus-scheduler'
+require 'splash/dependencies'
+require 'splash/cli'
-rescue Gem::GemNotFoundException
- $stderr.puts "Loadind error, it's like you try to run Splash, with a lake of dependencies."
- $stderr.puts "If you run on RVM, please run with rvmsudo and not with sudo."
- $stderr.puts "If problem is percistant, please, proceed to new install and Setup."
-end
-
-require 'yaml'
-
-require 'splash/constants'
-require 'splash/helpers'
-require 'splash/config'
-require 'splash/templates'
-require 'splash/backends'
-require 'splash/transports'
-
-require 'splash/commands'
-require 'splash/logs'
-require 'splash/orchestrator'
-require 'splash/controller'
-
#inhibit warning : due to prometheus-client call to URI.encode warning
$-w = nil
+include Splash::Dependencies
include Splash::Helpers
+include Splash::Exiter
-module CLISplash
- class Commands < Thor
- include Splash::Config
- include Splash::Backends
-
- desc "execute NAME", "run for command/sequence or ack result"
- long_desc <<-LONGDESC
- execute command or sequence or ack result
- with --no-trace prevent storing execution trace in configured backend (see config file)
- with --ack, notify errorcode=0 to Prometheus PushGateway
- with --no-notify, bypass Prometheus notification
- with --no-callback, never execute callback (:on_failure, :on_success)
- never follow sequences
- LONGDESC
- option :trace, :type => :boolean, :default => true
- option :ack, :type => :boolean, negate: false
- option :notify, :type => :boolean, :default => true
- option :callback, :type => :boolean, :default => true
- def execute(name)
- if is_root? then
- command = Splash::CommandWrapper::new(name)
- command.ack if options[:ack]
- command.call_and_notify trace: options[:trace], notify: options[:notify], callback: options[:callback]
- else
- $stderr.puts "Command wrapping need to be run as root"
- exit 60
- end
- end
-
-
-
- desc "treeview", "Show commands sequence tree"
- def treeview(command, depht = 0)
- puts "Command : #{command.to_s}" if depht == 0
- cmd = get_config.commands[command.to_sym]
- if cmd[:on_failure] then
- print " " * depht + " "
- puts "* on failure => #{cmd[:on_failure]}"
- treeview(cmd[:on_failure], depht+2)
- end
- if cmd[:on_success] then
- print " " * depht + " "
- puts "* on success => #{cmd[:on_success]}"
- treeview(cmd[:on_success],depht+2)
- end
- end
-
-
-
-
-
-
-
-
-
- desc "list", "Show configured commands"
- long_desc <<-LONGDESC
- Show configured commands
- with --detail, show command details
- LONGDESC
- option :detail, :type => :boolean
- def list
- puts "Splash configured commands :"
- list = get_config.commands
- puts 'No configured commands found' if list.keys.empty?
- list.keys.each do |command|
- puts " * #{command.to_s}"
- if options[:detail] then
- puts " - command line : '#{list[command][:command]}'"
- puts " - command description : '#{list[command][:desc]}'"
- puts " - command failure callback : '#{list[command.to_sym][:on_failure]}'" if list[command.to_sym][:on_failure]
- puts " - command success callback : '#{list[command.to_sym][:on_success]}'" if list[command.to_sym][:on_success]
- end
- end
- end
-
-
- desc "show COMMAND", "Show specific configured command COMMAND"
- def show(command)
- list = get_config.commands
- if list.keys.include? command.to_sym then
- puts "Splash command : #{command}"
- puts " - command line : '#{list[command.to_sym][:command]}'"
- puts " - command description : '#{list[command.to_sym][:desc]}'"
- puts " - command failure callback : '#{list[command.to_sym][:on_failure]}'" if list[command.to_sym][:on_failure]
- puts " - command success callback : '#{list[command.to_sym][:on_success]}'" if list[command.to_sym][:on_success]
- else
- $stderr.puts "Command not configured"
- exit 50
- end
- end
-
-
- desc "lastrun COMMAND", "Show last running result for specific configured command COMMAND"
- long_desc <<-LONGDESC
- Show last running result for specific configured command COMMAND
- with --hostname <HOSTNAME>, an other Splash monitored server (only with Redis backend configured)
- LONGDESC
- option :hostname, :type => :string
- def lastrun(command)
- backend = get_backend :execution_trace
- redis = (backend.class == Splash::Backends::Redis)? true : false
- if not redis and options[:hostname] then
- $stderr.puts "Remote execution report request only possible with Redis backend"
- end
- list = get_config.commands
- if list.keys.include? command.to_sym then
- print "Splash command #{command} previous execution report:\n\n"
- req = { :key => command}
- req[:hostname] = options[:hostname] if options[:hostname]
- if backend.exist? req then
- print backend.get req
- else
- puts "Command not already runned."
- end
- else
- $stderr.puts "Command not configured"
- exit 50
- end
- end
-
- desc "getreportlist COMMAND", "list all executions report results "
- long_desc <<-LONGDESC
- Show configured commands
- with --pattern <SEARCH>, search type string, wilcard * (group) ? (char)
- with --hostname <HOSTNAME>, an other Splash monitored server (only with Redis backend configured)
- with --all, get all execution report for all servers (only with Redis backend configured)
- --all and --hostname are exclusives
- LONGDESC
- option :pattern, :type => :string
- option :hostname, :type => :string
- option :all, :type => :boolean, :negate => false
- def getreportlist
- if options[:hostname] and options[:all] then
- $stderr.puts "--all option imcompatible with --hostname"
- exit 40
- end
- backend = get_backend :execution_trace
- redis = (backend.class == Splash::Backends::Redis)? true : false
- if not redis and (options[:hostname] or options[:all]) then
- $stderr.puts "Remote execution report request only possible with Redis backend"
- exit 40
- end
- pattern = (options[:pattern])? options[:pattern] : '*'
- if options[:all] then
- res = backend.listall pattern
- elsif options[:hostname]
- res = backend.list pattern, options[:hostname]
- else
- res = backend.list pattern
- end
- print "List of Executions reports :\n\n"
- puts "Not reports found" if res.empty?
- res.each do |item|
- if options[:all]
- host,command = item.split('#')
- puts " * Command : #{command} @ host : #{host}"
- else
- puts " * Command : #{item}"
- end
- end
- end
-
-
-
- end
-
-
-
-
- class CLIController < Thor
- include Splash::LogsMonitor::DaemonController
- include Splash::Transports
-
- option :foreground, :type => :boolean
- desc "start", "Starting Logs Monitor Daemon"
- def start
- errorcode = run_as_root :startdaemon
- exit errorcode
- end
-
- desc "stop", "Stopping Logs Monitor Daemon"
- def stop
- errorcode = run_as_root :stopdaemon
- exit errorcode
- end
-
- desc "status", "Logs Monitor Daemon status"
- def status
- errorcode = run_as_root :statusdaemon
- exit errorcode
- end
-
- desc "ping HOSTNAME", "send a ping to HOSTNAME daemon over transport (need an active tranport), Typicallly RabbitMQ"
- def ping(hostname=Socket.gethostname)
- puts "ctrl+c for interrupt"
- queue = "splash.#{Socket.gethostname}.returncli"
- order = {:verb => :ping, :payload => {:hostname => Socket.gethostname}, :return_to => queue}
-
- lock = Mutex.new
- condition = ConditionVariable.new
- begin
- get_default_subscriber(queue: queue).subscribe(timeout: 10) do |delivery_info, properties, payload|
- puts YAML::load(payload)
- lock.synchronize { condition.signal }
- end
- get_default_client.publish queue: "splash.#{hostname}.input", message: order.to_yaml
- lock.synchronize { condition.wait(lock) }
- rescue Interrupt
- puts "Splash : ping : Interrupted by user. "
- exit 33
- end
- end
-
- end
-
-
-
-
- class Config < Thor
- include Splash::Config
- include Splash::Helpers
-
- desc "setup", "Setup installation fo Splash"
- long_desc <<-LONGDESC
- Setup installation fo Splash
- with --preserve, preserve from reinstallation of the config
- LONGDESC
- option :preserve, :type => :boolean
- def setup
- errorcode = run_as_root :setupsplash
- exit errorcode
- end
-
- desc "sanitycheck", "Verify installation fo Splash"
- def sanitycheck
- errorcode = run_as_root :checkconfig
- exit errorcode
- end
-
- desc "version", "display current Splash version"
- def version
- config = get_config
- puts "Splash version : #{config.version}, Author : #{config.author}"
- puts config.copyright
- end
-
-
- end
-
-
- class Logs < Thor
- include Splash::Config
-
- desc "analyse", "analyze logs in config"
- def analyse
- results = Splash::LogScanner::new
- results.analyse
- puts "SPlash Configured logs status :"
- full_status = true
- results.output.each do |result|
- status = (result[:status] == :clean)? "OK": "KO"
- puts " * Log : #{result[:log]} : [#{status}]"
- puts " - Detected pattern : #{result[:pattern]}"
- puts " - detailled Status : #{result[:status].to_s}"
- puts " count = #{result[:count]}" if result[:status] == :matched
- puts " nb lines = #{result[:lines]}" if result[:status] != :missing
- full_status = false unless result[:status] == :clean
- end
- display_status = (full_status)? "OK": "KO"
- puts "Global Status : [#{display_status}]"
- end
-
- desc "monitor", "monitor logs in config"
- def monitor
- result = Splash::LogScanner::new
- result.analyse
- result.notify
- end
-
- desc "show LOG", "show configured log monitoring for LOG"
- def show(log)
- log_record_set = get_config.logs.select{|item| item[:log] == log }
- unless log_record_set.empty? then
- record = log_record_set.first
- puts "Splash log monitor : #{record[:log]}"
- puts " -> pattern : /#{record[:pattern]}/"
- else
- $stderr.puts "log not configured"
- exit 50
- end
- end
-
- desc "list", "Show configured logs monitoring"
- long_desc <<-LONGDESC
- Show configured logs monitoring
- with --detail, show logs monitor details
- LONGDESC
- option :detail, :type => :boolean
- def list
- puts "Splash configured log monitoring :"
- log_record_set = get_config.logs
- puts 'No configured commands found' if log_record_set.empty?
- log_record_set.each do |record|
- puts " * log monitor : #{record[:log]}"
- if options[:detail] then
- puts " -> pattern : /#{record[:pattern]}/"
- end
- end
- end
-
- end
-end
-
-class CLI < Thor
- def self.exit_on_failure?
- true
- end
-
- include CLISplash
- desc "commands SUBCOMMAND ...ARGS", "Managing commands/batchs supervision"
- subcommand "commands", Commands
- desc "logs SUBCOMMAND ...ARGS", "Managing Files/Logs supervision"
- subcommand "logs", Logs
- desc "daemon SUBCOMMAND ...ARGS", "Logs monitor daemon contoller"
- subcommand "daemon", CLIController
- desc "config SUBCOMMAND ...ARGS", "config tools for Splash"
- subcommand "config", Config
-end
-
-
-
-
-
-
-CLI.start(ARGV)
+ CLI.start(ARGV)