Class: ZabbixManager::Basic
- Inherits:
-
Object
- Object
- ZabbixManager::Basic
- Defined in:
- lib/zabbix_manager/basic/basic_func.rb,
lib/zabbix_manager/basic/basic_init.rb,
lib/zabbix_manager/basic/basic_alias.rb,
lib/zabbix_manager/basic/basic_logic.rb
Direct Known Subclasses
Actions, Applications, Configurations, Drules, Events, Graphs, HostGroups, HostInterfaces, Hosts, HttpTests, Items, Maintenance, Mediatypes, Problems, Proxies, Roles, Screens, Scripts, Templates, Triggers, Usergroups, Usermacros, Users, ValueMaps
Instance Method Summary collapse
-
#add(data) ⇒ Object
新增 Zabbix 对象.
-
#all ⇒ Object
使用 API 查询所有 Zabbix 监控对象的详细信息.
-
#create(data) ⇒ Object
使用 API 新增 Zabbix 监控对象(使用默认值).
-
#create_or_update(data) ⇒ Object
使用 API 创建或更新 Zabbix 监控对象.
-
#default_options ⇒ Object
派生类可以重写此方法以提供特定的默认选项.
-
#delete(data) ⇒ Object
使用 API 删除 Zabbix 监控对象.
-
#destroy(data) ⇒ Object
删除 Zabbix 对象.
-
#dump_by_id(data) ⇒ Object
使用 API 基于 key 打印 Zabbix 监控对象详情.
-
#get(data) ⇒ Object
获取 Zabbix 对象数据.
-
#get_full_data(data) ⇒ Object
使用 API 查询 Zabbix 监控对象的详细信息.
-
#get_id(data) ⇒ Object
使用 API 基于提供的数据查询 Zabbix 监控对象 id.
-
#get_ids(data) ⇒ Object
使用 API 基于提供的数据查询 Zabbix 监控对象 ids.
-
#get_ids_by_identify(data) ⇒ Object
使用 API 基于 name 查询 Zabbix 监控对象 id.
-
#get_key_ids(data) ⇒ Object
使用 API 基于提供的数据查询 Zabbix 监控对象 id.
-
#get_key_ids_by_identify(data) ⇒ Object
使用 API 基于 name 查询 Zabbix 监控对象 id.
-
#get_or_create(data) ⇒ Object
使用 API 获取或创建 Zabbix 监控对象.
-
#get_or_create_keys(data) ⇒ Object
使用 API 批量获取或创建 Zabbix 监控对象.
-
#get_raw(data) ⇒ Object
使用 API 查询 Zabbix 监控对象的原始数据.
-
#hash_equals?(hash1, hash2) ⇒ Boolean
比较两个哈希是否相等.
-
#identify ⇒ Object
在派生类中应该重写此方法以提供特定的 ID 字段名.
-
#initialize(client) ⇒ Basic
constructor
使用 ZabbixManager 客户端初始化一个新的 Basic 对象.
-
#key ⇒ Object
根据 method_name + id 返回对象的 ID 字段名(identify).
-
#keys ⇒ Object
根据 key 返回对象的复数 ID 字段名(identify).
-
#log(message) ⇒ Object
在调试模式下将日志消息记录到 stdout.
-
#merge_hashes(hash1, hash2) ⇒ Object
合并两个哈希为一个新的哈希.
-
#method_name ⇒ Object
在派生类中应该重写此方法以提供特定的方法名.
-
#normalize_array(array) ⇒ Object
将所有数组值规范化为字符串.
-
#normalize_hash(hash) ⇒ Object
将所有哈希值规范化为字符串.
-
#parse_keys(data) ⇒ Object
解析包含 ID 键或布尔值的数据哈希.
-
#request_raw(method, data) ⇒ Object
使用 API 查询 Zabbix 监控对象的原始数据.
-
#symbolize_keys(object) ⇒ Object
将所有哈希/数组键转换为符号 &method(:symbolize_keys) 是 Ruby 中一种将方法转换为可传递给块或其他方法的 Proc 的方式.
-
#update(data, force = false) ⇒ Object
使用 API 更新 Zabbix 监控对象.
Constructor Details
#initialize(client) ⇒ Basic
使用 ZabbixManager 客户端初始化一个新的 Basic 对象
6 7 8 |
# File 'lib/zabbix_manager/basic/basic_init.rb', line 6 def initialize(client) @client = client end |
Instance Method Details
#add(data) ⇒ Object
新增 Zabbix 对象
11 12 13 |
# File 'lib/zabbix_manager/basic/basic_alias.rb', line 11 def add(data) create(data) end |
#all ⇒ Object
使用 API 查询所有 Zabbix 监控对象的详细信息
157 158 159 160 161 162 163 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 157 def all result = {} get_raw({ output: "extend" }).each do |item| result[item[identify]] = item[key] end result end |
#create(data) ⇒ Object
使用 API 新增 Zabbix 监控对象(使用默认值)
6 7 8 9 10 11 12 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 6 def create(data) log "[DEBUG] 调用 #{method_name}.create,参数: #{data.inspect}" params = .merge(data) result = @client.api_request(method: "#{method_name}.create", params: params) parse_keys result end |
#create_or_update(data) ⇒ Object
使用 API 创建或更新 Zabbix 监控对象
64 65 66 67 68 69 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 64 def create_or_update(data) log "[DEBUG] 调用 #{method_name}.create_or_update,参数: #{data.inspect}" id = get_id(identify.to_sym => data[identify.to_sym]) id ? update(data.merge(key.to_sym => id.to_s)) : create(data) end |
#default_options ⇒ Object
派生类可以重写此方法以提供特定的默认选项
21 22 23 |
# File 'lib/zabbix_manager/basic/basic_init.rb', line 21 def {} end |
#delete(data) ⇒ Object
使用 API 删除 Zabbix 监控对象
32 33 34 35 36 37 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 32 def delete(data) log "[DEBUG] 调用 #{method_name}.delete,参数: #{data.inspect}" result = @client.api_request(method: "#{method_name}.delete", params: [data].flatten) parse_keys result end |
#destroy(data) ⇒ Object
删除 Zabbix 对象
16 17 18 |
# File 'lib/zabbix_manager/basic/basic_alias.rb', line 16 def destroy(data) delete(data) end |
#dump_by_id(data) ⇒ Object
使用 API 基于 key 打印 Zabbix 监控对象详情
72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 72 def dump_by_id(data) log "[DEBUG] 调用 #{method_name}.dump_by_id,参数: #{data.inspect}" get_raw( { filter: { key.to_sym => data[key.to_sym] }, output: "extend" } ) end |
#get(data) ⇒ Object
获取 Zabbix 对象数据
6 7 8 |
# File 'lib/zabbix_manager/basic/basic_alias.rb', line 6 def get(data) get_full_data(data) end |
#get_full_data(data) ⇒ Object
使用 API 查询 Zabbix 监控对象的详细信息
166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 166 def get_full_data(data) log "[DEBUG] 调用 #{method_name}.get_full_data,参数: #{data.inspect}" get_raw( { filter: { identify.to_sym => data[identify.to_sym] }, output: "extend" } ) end |
#get_id(data) ⇒ Object
使用 API 基于提供的数据查询 Zabbix 监控对象 id
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 86 def get_id(data) log "[DEBUG] 调用 #{method_name}.get_id,参数: #{data.inspect}" data = symbolize_keys(data) if data.key?(identify) name = data[identify.to_sym] raise ZbxError, "在调用 get_id 时未提供 identify #{identify}" if name.nil? # 输出信息截取 key identify result = get_raw( { filter: data, output: [key, identify] } ) result.find { |item| item[identify] == data[identify.to_sym] }&.[](key)&.to_i end |
#get_ids(data) ⇒ Object
使用 API 基于提供的数据查询 Zabbix 监控对象 ids
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 105 def get_ids(data) log "[DEBUG] 调用 #{method_name}.get_ids,参数: #{data.inspect}" ids = [] [data].flatten.each do |item| if (id = get_id(item)) ids << id end end ids end |
#get_ids_by_identify(data) ⇒ Object
使用 API 基于 name 查询 Zabbix 监控对象 id
131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 131 def get_ids_by_identify(data) log "[DEBUG] 调用 #{method_name}.get_ids_by_identify,参数: #{data.inspect}" result = get_raw( { filter: { identify.to_sym => [data].flatten }, output: [key] } ) result.empty? ? nil : result.map { |i| i[key] } end |
#get_key_ids(data) ⇒ Object
使用 API 基于提供的数据查询 Zabbix 监控对象 id
118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 118 def get_key_ids(data) log "[DEBUG] 调用 #{method_name}.get_key_ids,参数: #{data.inspect}" ids = [] [data].flatten.each do |item| if (id = get_id(item)) ids << { key.to_sym => id } end end ids end |
#get_key_ids_by_identify(data) ⇒ Object
使用 API 基于 name 查询 Zabbix 监控对象 id
144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 144 def get_key_ids_by_identify(data) log "[DEBUG] 调用 #{method_name}.get_key_ids_by_identify,参数: #{data.inspect}" result = get_raw( { filter: { identify.to_sym => [data].flatten }, output: [key] } ) result.empty? ? nil : result.map { |i| { key.to_sym => i[key] } } end |
#get_or_create(data) ⇒ Object
使用 API 获取或创建 Zabbix 监控对象
40 41 42 43 44 45 46 47 48 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 40 def get_or_create(data) log "[DEBUG] 调用 #{method_name}.get_or_create,参数: #{data.inspect}" if (id = get_id(identify.to_sym => data[identify.to_sym])) id else create(data) end end |
#get_or_create_keys(data) ⇒ Object
使用 API 批量获取或创建 Zabbix 监控对象
51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 51 def get_or_create_keys(data) log "[DEBUG] 调用 #{method_name}.get_or_create_keys,参数: #{data.inspect}" ids = [] [data].flatten.each do |item| if (id = get_or_create(item)) ids << { key.to_sym => id } end end ids end |
#get_raw(data) ⇒ Object
使用 API 查询 Zabbix 监控对象的原始数据
180 181 182 183 184 185 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 180 def get_raw(data) @client.api_request( method: "#{method_name}.get", params: data ) end |
#hash_equals?(hash1, hash2) ⇒ Boolean
比较两个哈希是否相等
11 12 13 14 15 16 17 18 19 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 11 def hash_equals?(hash1, hash2) normalized_hash1 = normalize_hash(hash1) normalized_hash2 = normalize_hash(hash2) merged_hash1 = normalized_hash1.merge(normalized_hash2) merged_hash2 = normalized_hash2.merge(normalized_hash1) merged_hash1 == merged_hash2 end |
#identify ⇒ Object
在派生类中应该重写此方法以提供特定的 ID 字段名
16 17 18 |
# File 'lib/zabbix_manager/basic/basic_init.rb', line 16 def identify raise ZbxError, "子类需要自行实现 identify" end |
#key ⇒ Object
根据 method_name + id 返回对象的 ID 字段名(identify)
26 27 28 |
# File 'lib/zabbix_manager/basic/basic_init.rb', line 26 def key "#{method_name}id" end |
#keys ⇒ Object
根据 key 返回对象的复数 ID 字段名(identify)
31 32 33 |
# File 'lib/zabbix_manager/basic/basic_init.rb', line 31 def keys "#{key}s" end |
#log(message) ⇒ Object
在调试模式下将日志消息记录到 stdout
6 7 8 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 6 def log() puts if @client.[:debug] end |
#merge_hashes(hash1, hash2) ⇒ Object
合并两个哈希为一个新的哈希
79 80 81 82 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 79 def merge_hashes(hash1, hash2) new_hash = hash1.dup new_hash.merge(hash2) end |
#method_name ⇒ Object
在派生类中应该重写此方法以提供特定的方法名
11 12 13 |
# File 'lib/zabbix_manager/basic/basic_init.rb', line 11 def method_name raise ZbxError, "子类需要自行实现 method_name" end |
#normalize_array(array) ⇒ Object
将所有数组值规范化为字符串
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 48 def normalize_array(array) result = [] array.each do |e| if e.is_a?(Array) result.push(normalize_array(e)) elsif e.is_a?(Hash) result.push(normalize_hash(e)) else result.push(e.to_s) end end result end |
#normalize_hash(hash) ⇒ Object
将所有哈希值规范化为字符串
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 35 def normalize_hash(hash) result = hash.dup # 移除用于日志记录的 TODO 注释。TemplateID 和 HostID 具有不同的 ID result.delete(:hostid) result.transform_keys!(&:to_sym) result.transform_values! { |value| value.is_a?(Array) ? normalize_array(value) : value.to_s } result end |
#parse_keys(data) ⇒ Object
解析包含 ID 键或布尔值的数据哈希
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 65 def parse_keys(data) case data when Hash data.empty? ? false : data[keys][0].to_i when TrueClass true when FalseClass false else false end end |
#request_raw(method, data) ⇒ Object
使用 API 查询 Zabbix 监控对象的原始数据
188 189 190 191 192 193 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 188 def request_raw(method, data) @client.api_request( method: method, params: data ) end |
#symbolize_keys(object) ⇒ Object
将所有哈希/数组键转换为符号 &method(:symbolize_keys) 是 Ruby 中一种将方法转换为可传递给块或其他方法的 Proc 的方式
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/zabbix_manager/basic/basic_func.rb', line 23 def symbolize_keys(object) case object when Array object.map(&method(:symbolize_keys)) when Hash object.transform_keys(&:to_sym).transform_values(&method(:symbolize_keys)) else object end end |
#update(data, force = false) ⇒ Object
使用 API 更新 Zabbix 监控对象
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/zabbix_manager/basic/basic_logic.rb', line 15 def update(data, force = false) log "[DEBUG] 调用 #{method_name}.update,参数: #{data.inspect}" dump = {} dump_by_id(key.to_sym => data[key.to_sym]).each do |item| dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i end if hash_equals?(dump, data) && !force log "[DEBUG] 系统以有数据 #{dump} 和 待更新的数据 #{data} 相同,跳过本次更新" data[key.to_sym].to_i else result = @client.api_request(method: "#{method_name}.update", params: data) parse_keys result end end |