zabbix_manager 5.1.4 → 5.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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