class ArgusYml
Attributes
alert[R]
bns[R]
info_yml[R]
instance[R]
logs[R]
name[R]
node[R]
Public Class Methods
new(filename_or_hash, product = nil)
click to toggle source
# File lib/ymlex/argusyml.rb, line 170 def initialize filename_or_hash, product = nil if filename_or_hash.kind_of? String yml = Ymlex.load_file filename_or_hash else yml = filename_or_hash end @info_yml = value_to_str yml @name = @info_yml["name"] @bns = @info_yml["bns"] || [] node_list = @info_yml["node"] || [] node_str = "" node_list.each {|v| node_str += v + ","} @node = node_str.sub /,$/, "" @product = product || @info_yml["product"] || @bns.first.sub(/^.*?\./,"").sub(/\..*$/,"") || "Undefined_Product" @logs = {} @alert = Alert.new @info_yml["contacts"], @info_yml["alert"] @service_aggr = [] @service_rule = [] @service_alert = [default_alert] reset_instance trans_ytoj end
process_dir(dir_path, dest_path, product = nil)
click to toggle source
# File lib/ymlex/argusyml.rb, line 158 def self.process_dir dir_path, dest_path, product = nil filelist = `find #{dir_path} -type f -name '*yex'`.split(' ') product = File.basename dir_path if !product filelist.each do |ymx| puts "process #{ymx}" ags = ArgusYml.new ymx, product ags.dump_json dest_path end end
Public Instance Methods
dump_json(dir_path)
click to toggle source
# File lib/ymlex/argusyml.rb, line 213 def dump_json dir_path dir = "#{dir_path}/cluster/cluster.#{@name}.#{@product}.all" `mkdir -p #{dir}` # instance filename = "#{dir}/instance" new_instance = @instance File.open(filename,"w") do |f| f.puts JSON.pretty_generate new_instance end # log @logs.each do |log_key, log_value| log_name = "#{dir}/#{log_key}.conf" File.open(log_name, "w") do |f| f.puts JSON.pretty_generate log_value end end # cluster aggr_name = "#{dir}/cluster" File.open(aggr_name, "w") do |f| cluster = { "aggr" => @service_aggr, "rule" => @service_rule, "alert" => @service_alert, } cluster["namespace_list"] = @bns if @bns != [] cluster["service_node"] = @node if @node != "" f.puts JSON.pretty_generate cluster end end
reset_instance()
click to toggle source
# File lib/ymlex/argusyml.rb, line 193 def reset_instance @instance = empty end
trans_aggr(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 287 def trans_aggr list list.each do | rule_name, value | @service_aggr << { "items" => value["items"], "types" => value["types"] || "sum", } if value["formula"] rule_name = "#{@name}_aggr_#{rule_name}" alert_name = "default_alert" other = default_alert_level if value["alert"] alt = @alert.get_alert value["alert"] alt["name"] = rule_name other = alt.delete "other" @service_alert << alt alert_name = rule_name end @service_rule << { "name" => rule_name, "formula" => value["formula"], "filter" => value["filter"] || "1/1", "merge_window" => other["merge_window"], "level" => other["level"], "alert" => alert_name } end end end
trans_derived(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 279 def trans_derived list @instance["derived"] = [] list.each do |key, value| @instance["derived"] << value end #@instance["derived"] = list end
trans_exec(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 313 def trans_exec list list.each do | raw_key, raw_value | dft_exec_raw = { "cycle" => "60", "method" => "exec", } raw_value["name"] = "#{@name}_exec_#{raw_key}" @instance["raw"] << dft_exec_raw.merge(raw_value) end end
trans_log(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 344 def trans_log list list.each do |log_key, log_value| raw_name = "#{@name}_log_#{log_key}" log_raw = { "name" => raw_name, "cycle" => log_value["cycle"] || "60", "method" => "noah", "target" => "logmon", "params" => "${ATTACHMENT_DIR}/#{raw_name}.conf", } @instance["raw"] << log_raw log_conf = { "log_filepath" => log_value["path"], "limit_rate" => "5", "item" => [] } log_value.each do |raw_key, raw_value| next if raw_key == "path" item_name_prefix = "#{raw_name}_#{raw_key}" item = { "item_name_prefix" => item_name_prefix, "cycle" => raw_value["cycle"] || "60", "match_str" => raw_value["match_str"], "filter_str" => raw_value["filter_str"] || "", } log_conf["item"] << item next unless raw_value["formula"] alert_name = "default_alert" other = default_alert_level if raw_value["alert"] alt = @alert.get_alert raw_value["alert"] alt["name"] = item_name_prefix other = alt.delete "other" @instance["alert"] << alt alert_name = item_name_prefix end @instance["rule"] << { "name" => item_name_prefix, "formula" => raw_value["formula"], "filter" => raw_value["filter"] || "1/1", "merge_window" => other["merge_window"], "level" => other["level"], "alert" => alert_name, } end @logs[raw_name] = log_conf end end
trans_move_core_path(value)
click to toggle source
# File lib/ymlex/argusyml.rb, line 271 def trans_move_core_path value @instance["move_core_path"] = value end
trans_other(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 323 def trans_other list list.each do | rule_key, rule_value | rule_name = "#{@name}_other_#{rule_key}" alert_name = "default_alert" other = default_alert_level if rule_value["alert"] alt = @alert.get_alert rule_value["alert"] alt["name"] = rule_name other = alt.delete "other" @instance["alert"] << alt alert_name = rule_name end @instance["rule"] << { "name" => rule_name, "formula" => rule_value["formula"], "filter" => rule_value["filter"] || "1/1", "merge_window" => other["merge_window"], "level" => other["level"], "alert" => alert_name } end end
trans_proc(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 390 def trans_proc list list.each do |raw_key, raw_value| raw_name = "#{@name}_proc_#{raw_key}" @instance["raw"] << { "name" => raw_name, "cycle" => raw_value["cycle"]||"10", "method" => "noah", "target" => "procmon", "params" => raw_value["path"] } raw_value.each do |rule_key, rule_value| next if (rule_key == "path" || !rule_value["formula"]) rule_name = "#{raw_name}_#{rule_key}" alert_name = "default_alert" other = default_alert_level if rule_value["alert"] alt = @alert.get_alert rule_value["alert"] alt["name"] = rule_name other = alt.delete "other" @instance["alert"] << alt alert_name = rule_name end @instance["rule"] << { "name" => rule_name, "formula" => rule_value["formula"], "filter" => rule_value["filter"]||"3/3", "merge_window" => other["merge_window"], "level" => other["level"], "alert" => alert_name } end end end
trans_request(list)
click to toggle source
# File lib/ymlex/argusyml.rb, line 420 def trans_request list list.each do |raw_key, raw_value| raw_name = "#{@name}_request_#{raw_key}" dft_raw = { "name" => raw_name, "cycle" => "60", "port" => "8080", "protocol" => "tcp", "mon_idc" => "local", "req_type" => "port", } alert_name = "default_alert" other = default_alert_level if raw_value["alert"] alt = @alert.get_alert raw_value["alert"] alt["name"] = raw_name other = alt.delete "other" @instance["alert"] << alt alert_name = raw_name raw_value.delete "alert" end @instance["request"] << dft_raw.merge(raw_value) @instance["rule"] << { "name" => raw_name, "formula" => "#{raw_name} != 'ok'", "filter" => raw_value["filter"]||"3/3", "merge_window" => other["merge_window"], "level" => other["level"], "alert" => alert_name } end end
trans_started_mode(value)
click to toggle source
# File lib/ymlex/argusyml.rb, line 275 def trans_started_mode value @instance["started_mode"] = value end
trans_ytoj()
click to toggle source
# File lib/ymlex/argusyml.rb, line 246 def trans_ytoj @info_yml.each do |key, value| case key when "move_core_path" trans_move_core_path value when "started_mode" trans_started_mode value when "proc" trans_proc value when "request" trans_request value when "exec" trans_exec value when "other" trans_other value when "log" trans_log value when "aggr" trans_aggr value when "derived" trans_derived value end end end
value_to_str(input)
click to toggle source
# File lib/ymlex/argusyml.rb, line 197 def value_to_str input case when input.kind_of?(Hash) input.each do |k,v| input[k] = value_to_str v end when input.kind_of?(Array) input.each_index do |i| input[i] = value_to_str input[i] end when input.kind_of?(Fixnum) || input.kind_of?(Float) input = input.to_s end input end
Private Instance Methods
default_alert()
click to toggle source
# File lib/ymlex/argusyml.rb, line 461 def default_alert alt = @alert.get_alert alt["name"] = "default_alert" alt.delete "other" alt end
default_alert_level()
click to toggle source
# File lib/ymlex/argusyml.rb, line 468 def default_alert_level alt = @alert.get_alert alt["other"] end
empty()
click to toggle source
# File lib/ymlex/argusyml.rb, line 480 def empty {"raw"=>[], "request"=>[], "rule"=>[], "alert"=>[default_alert]} end
noah_error()
click to toggle source
# File lib/ymlex/argusyml.rb, line 452 def noah_error { "name" => "noah_error", "formula" => "noah_error != '' && not_contain(noah_error,'logmon open log failed') && time_between('080000-220000')", "filter" => "100/100", "alert" => "noah_error_alert", } end
noah_error_alert()
click to toggle source
# File lib/ymlex/argusyml.rb, line 473 def noah_error_alert alt = @alert.get_alert({"rd" => nil, "qa" => nil, "op" => "warn" }) alt["name"] = "noah_error_alert" alt.delete "other" alt end