zabbix_manager 5.1.4 → 5.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cebae410e9abb93e18e28e5184aca238514910332b5769d132fc282d163d218c
4
- data.tar.gz: f02f9e2cbe167a4358dd89da12f7d04f27d84a2e9869bc9d652ef8526671c514
3
+ metadata.gz: 72554dfff6fd4d60ac8be48bc766c9367e4b07f9fa2e3df7500cb21b49a6b033
4
+ data.tar.gz: 01bea1ff565779f4ce5dab0b9a53d1832e80f9581b58dcc2e9bc943e83da9a46
5
5
  SHA512:
6
- metadata.gz: c73a3e5b13a7f514508ed7998bf4df6ffc6a5c778e9a8b5eac620842a3df4555fc4c4fca41d76ad8740665c4d5583ceea2440439113ebd7dd3aeeeb40eab32b4
7
- data.tar.gz: d3f0d4c6d9e627f36ba0f1ca87098c6060e20f22218586368139e14d0446dcddef640a998dcd711b4c848ef60e9e9f99b10204a5fe0f69fe28dc6c438f256cf1
6
+ metadata.gz: 28bfea0b7a7bd6d99d394a0168a3399275af50fe139609141d03a996e6f488f484e8601529a58bf8710c492edd401514d66771e3b1411a53500898a05e8b6974
7
+ data.tar.gz: a25a5c306cffa53d2b601c6f281e5ab5afbfb72fd8cef106683668f7d4b907b047b5d4ab76fcc2aa1e62b9df979ba5129628443c53601effe0de95facb69dd90
@@ -38,11 +38,11 @@ class ZabbixManager
38
38
  )
39
39
 
40
40
  result.filter_map do |graph|
41
- num = graph["graphid"]
42
- name = graph["name"]
43
- filter = data[:filter]
41
+ graphid = graph["graphid"]
42
+ name = graph["name"]
43
+ filter = data[:filter]
44
44
 
45
- num if filter.nil? || /#{filter}/ =~ name
45
+ graphid if filter.nil? || name.match?(/#{filter}/)
46
46
  end
47
47
  end
48
48
 
@@ -64,17 +64,29 @@ class ZabbixManager
64
64
 
65
65
  # 使用 Zabbix API 创建或更新 Zabbix 对象
66
66
  def create_or_update(data)
67
+ # 输出调试日志,显示方法调用和参数信息
67
68
  log "[DEBUG] 调用 #{method_name}.create_or_update 方法,参数: #{data.inspect}"
68
69
 
70
+ # 获取 Zabbix 对象的 ID
69
71
  hostid = get_id(identify.to_sym => data[identify.to_sym])
72
+ # 如果不存在对应的对象ID,则创建新对象
70
73
  return create(data) unless hostid
71
74
 
75
+ # 获取对象的接口 ID
72
76
  interface_id = get_interfaceid(hostid)
77
+ # 如果接口 ID 不存在,抛出异常
73
78
  raise ZbxError, "#{data.inspect} get_interfaceid 查无记录" unless interface_id
74
79
 
75
- dump_data = data.dup
80
+ # 复制数据以避免修改原始数据
81
+ dump_data = data.dup
82
+
83
+ # 从数据中提取并删除 interfaces,并合并接口 ID
76
84
  interfaces = dump_data.delete(:interfaces)&.merge(interfaceid: interface_id)
77
- params = dump_data.merge(interfaces: interfaces).merge(key.to_sym => hostid.to_s)
85
+
86
+ # 构建参数,包括 interfaces 和 Zabbix 对象的键值对
87
+ params = dump_data.merge(interfaces: interfaces).merge(key.to_sym => hostid.to_s)
88
+
89
+ # 更新对象
78
90
  update(params)
79
91
  end
80
92
 
@@ -86,7 +98,14 @@ class ZabbixManager
86
98
  method: "hostinterface.get",
87
99
  params: { output: "interfaceid", hostids: hostid }
88
100
  )
89
- result&.[](0)&.[]("interfaceid")&.to_i
101
+
102
+ # 使用 dig 方法获取深层嵌套的值
103
+ interface_id = result&.dig(0, "interfaceid")&.to_i
104
+
105
+ # 如果获取接口 ID 失败,提供更具体的错误信息
106
+ raise ZbxError, "无法获取 #{hostid} 的接口 ID" if interface_id.nil?
107
+
108
+ interface_id
90
109
  end
91
110
 
92
111
  # 在 Hosts 中使用 Zabbix API 取消关联/移除模板
@@ -23,7 +23,7 @@ class ZabbixManager
23
23
 
24
24
  # 通过 Zabbix API 获取或创建 HttpTest 对象
25
25
  def get_or_create(data)
26
- log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
26
+ log "[DEBUG] 使用参数调用 get_or_create: #{data.inspect}"
27
27
 
28
28
  unless (id = get_id(name: data[:name], hostid: data[:hostid]))
29
29
  id = create(data)
@@ -52,7 +52,7 @@ class ZabbixManager
52
52
 
53
53
  # 通过 Zabbix API 获取或创建 Item 对象
54
54
  def get_or_create(data)
55
- log "[DEBUG] Call #{method_name}.get_or_create with parameters: #{data.inspect}"
55
+ log "[DEBUG] 调用 #{method_name}.get_or_create 方法,参数: #{data.inspect}"
56
56
 
57
57
  if (id = get_id(name: data[:name], hostid: data[:hostid]))
58
58
  id
@@ -80,19 +80,16 @@ class ZabbixManager
80
80
  result = get_raw(
81
81
  {
82
82
  output: "extend",
83
- hostids: hostid,
84
- search: {
85
- name: iface
86
- }
83
+ hostids: [hostid],
84
+ search: { name: iface }
87
85
  }
88
- ).select {
89
- |item| item["snmp_oid"].match?(/(1.3.6.1.2.1.31.1.1.1.(6|10|15)|1.3.6.1.2.1.2.2.1.8)./)
90
- }.sort_by {
91
- |item| item["key_"]
92
- }
86
+ )
87
+
88
+ # 过滤结果,只保留符合正则表达式的项
89
+ filtered_result = result.select { |item| item["snmp_oid"].match?(/(1.3.6.1.2.1.31.1.1.1.(6|10|15)|1.3.6.1.2.1.2.2.1.8)./) }
93
90
 
94
91
  # 如果结果为空,则返回 nil;否则,返回排序后的结果
95
- result.empty? ? nil : result
92
+ filtered_result.empty? ? nil : filtered_result.sort_by { |item| item["key_"] }
96
93
  end
97
94
  end
98
95
  end
@@ -60,7 +60,7 @@ class ZabbixManager
60
60
  end
61
61
 
62
62
  # 检查 Zabbix API 版本是否受支持
63
- unless api_version.match?(/^(234567)\.\d+\.\d+$/)
63
+ unless api_version.match?(/^[4-7]\.\d+\.\d+$/)
64
64
  message = "Zabbix API版本:#{api_version} 不受此版本的 zabbix_manager 支持"
65
65
  if @options[:ignore_version]
66
66
  log "[WARNING] #{message}"
@@ -151,10 +151,12 @@ class ZabbixManager
151
151
  if result["error"]
152
152
  # 构建错误消息,包括服务器返回的错误信息和请求的详细信息
153
153
  msg = <<~MOJO
154
+
154
155
  ---------------------------------------------------------------
155
156
  Server answer API error: #{JSON.pretty_unparse(result["error"])}
156
157
  on request: #{pretty_body(body)}
157
158
  ---------------------------------------------------------------
159
+
158
160
  MOJO
159
161
 
160
162
  # 抛出自定义异常 ZbxError,并传递错误消息和完整的响应结果
@@ -182,7 +184,6 @@ class ZabbixManager
182
184
  # 通用的 API 调用发起方法
183
185
  def api_request(body)
184
186
  # 调用之前定义的 json_payload 方法,将请求信息转换为 JSON 字符串
185
- # 然后调用之前定义的 _request 方法,发起 API 请求并解析响应结果
186
187
  _request json_payload(body)
187
188
  end
188
189
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ZabbixManager
4
- VERSION = "5.1.4"
4
+ VERSION = "5.1.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabbix_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.4
4
+ version: 5.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - WENWU YAN
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-25 00:00:00.000000000 Z
11
+ date: 2023-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http