require_relative "rubysermon/version" require_relative "rubysermon/mod_loader" require_relative "rubysermon/mod_template" require_relative "rubysermon/configurator" require_relative "rubysermon/db" require "date" module Rubysermon LIB_PATH = File.expand_path(File.dirname(__FILE__)) APP_PATH = "#{LIB_PATH}/.." MOD_PATH = "#{LIB_PATH}/rubysermon/mod" class App def initialize @config = { repeat: 60, config_path: "#{LIB_PATH}/rubysermon/config.json", db_path: "/tmp/rubysermon_history.db" } @running_mods = [] @enabled_mods = [] @db = nil check_args() end def run read_config() enable_and_start_mods() if (msg = cannot_start_fetch_process_sleep_cycle?) abort(msg) end #start_db() start_fetch_process_sleep_cycle() end private def check_args if not ARGV.empty? config_path = ARGV.first if File.exists?(config_path) @config[:config_path] = config_path else abort("Wrong config file path. Exiting.") end end end def read_config configurator = Configurator.new(@config[:config_path]) config = configurator.get_settings() @config.merge!(config) end def enable_and_start_mods @enabled_mods = @config[:modules].to_a @enabled_mods.each do |mod| load_mod(mod) end end def load_mod(mod_name) begin mod = ModLoader.load(mod_name) @running_mods.push(mod) rescue ModLoaderException => e $stderr.puts e.message end end def cannot_start_fetch_process_sleep_cycle? if @config[:repeat].to_i < 1 return "Repeat cycle is too short" elsif @running_mods.empty? return "There are no enabled modules" end false end def start_db @db = DB.new(@config[:db_path]) end def start_fetch_process_sleep_cycle while true current_time = DateTime.now() @running_mods.each do |mod| result = mod.results notify = mod.notify? end sleep @config[:repeat] end end end end