zabbix_manager 5.1.3 → 5.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zabbix_manager/basic/basic_alias.rb +3 -20
  3. data/lib/zabbix_manager/basic/basic_func.rb +24 -46
  4. data/lib/zabbix_manager/basic/basic_init.rb +8 -24
  5. data/lib/zabbix_manager/basic/basic_logic.rb +66 -104
  6. data/lib/zabbix_manager/classes/actions.rb +11 -21
  7. data/lib/zabbix_manager/classes/applications.rb +5 -19
  8. data/lib/zabbix_manager/classes/configurations.rb +5 -19
  9. data/lib/zabbix_manager/classes/drules.rb +6 -22
  10. data/lib/zabbix_manager/classes/errors.rb +19 -9
  11. data/lib/zabbix_manager/classes/events.rb +2 -6
  12. data/lib/zabbix_manager/classes/graphs.rb +18 -49
  13. data/lib/zabbix_manager/classes/hostgroups.rb +3 -9
  14. data/lib/zabbix_manager/classes/hostinterfaces.rb +7 -15
  15. data/lib/zabbix_manager/classes/hosts.rb +62 -77
  16. data/lib/zabbix_manager/classes/httptests.rb +8 -24
  17. data/lib/zabbix_manager/classes/items.rb +19 -78
  18. data/lib/zabbix_manager/classes/maintenance.rb +2 -6
  19. data/lib/zabbix_manager/classes/mediatypes.rb +20 -52
  20. data/lib/zabbix_manager/classes/problems.rb +38 -66
  21. data/lib/zabbix_manager/classes/proxies.rb +7 -26
  22. data/lib/zabbix_manager/classes/roles.rb +18 -57
  23. data/lib/zabbix_manager/classes/screens.rb +7 -21
  24. data/lib/zabbix_manager/classes/scripts.rb +7 -10
  25. data/lib/zabbix_manager/classes/server.rb +1 -6
  26. data/lib/zabbix_manager/classes/templates.rb +15 -49
  27. data/lib/zabbix_manager/classes/triggers.rb +15 -49
  28. data/lib/zabbix_manager/classes/unusable.rb +2 -1
  29. data/lib/zabbix_manager/classes/usergroups.rb +6 -28
  30. data/lib/zabbix_manager/classes/usermacros.rb +19 -113
  31. data/lib/zabbix_manager/classes/users.rb +7 -34
  32. data/lib/zabbix_manager/classes/valuemaps.rb +5 -26
  33. data/lib/zabbix_manager/client.rb +66 -69
  34. data/lib/zabbix_manager/version.rb +1 -2
  35. data/lib/zabbix_manager.rb +33 -46
  36. metadata +3 -3
@@ -2,23 +2,17 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Items < Basic
5
- # The method name used for interacting with Items via Zabbix API
6
- #
7
- # @return [String]
5
+ # 用于通过 Zabbix API Items 交互的方法名称
8
6
  def method_name
9
7
  "item"
10
8
  end
11
9
 
12
- # The id field name used for identifying specific Item objects via Zabbix API
13
- #
14
- # @return [String]
10
+ # 用于通过 Zabbix API 标识特定 Item 对象的 id 字段名称
15
11
  def identify
16
12
  "name"
17
13
  end
18
14
 
19
- # The default options used when creating Item objects via Zabbix API
20
- #
21
- # @return [Hash]
15
+ # 通过 Zabbix API 创建 Item 对象时使用的默认选项
22
16
  def default_options
23
17
  {
24
18
  name: nil,
@@ -56,14 +50,9 @@ class ZabbixManager
56
50
  }
57
51
  end
58
52
 
59
- # Get or Create Item object using Zabbix API
60
- #
61
- # @param data [Hash] Needs to include name and hostid to properly identify Items via Zabbix API
62
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
63
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
64
- # @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
53
+ # 通过 Zabbix API 获取或创建 Item 对象
65
54
  def get_or_create(data)
66
- log "[DEBUG] Call #{method_name}.get_or_create with parameters: #{data.inspect}"
55
+ log "[DEBUG] 调用 #{method_name}.get_or_create 方法,参数: #{data.inspect}"
67
56
 
68
57
  if (id = get_id(name: data[:name], hostid: data[:hostid]))
69
58
  id
@@ -72,83 +61,35 @@ class ZabbixManager
72
61
  end
73
62
  end
74
63
 
75
- # Create or update Item object using Zabbix API
76
- #
77
- # @param data [Hash] Needs to include name and hostid to properly identify Items via Zabbix API
78
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
79
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
80
- # @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
64
+ # 通过 Zabbix API 创建或更新 Item 对象
81
65
  def create_or_update(data)
82
66
  itemid = get_id(name: data[:name], hostid: data[:hostid])
83
67
  itemid ? update(data.merge(itemid: itemid)) : create(data)
84
68
  end
85
69
 
86
- # Create Dns Monitor object using Zabbix API
87
- # @note 根据设备名称和接口名字查询监控项:入参 GigabitEthernet1/0/12,出参 15809
88
- # @example Interface Et0/0(TO_CLOUD): Bits sent, snmpoid 1.3.6.1.2.1.31.1.1.1.10.1
89
- # @example Interface Et0/0(TO_CLOUD): Operational status, snmpoid 1.3.6.1.2.1.2.2.1.8.1
90
- # @example Interface Et0/0(TO_CLOUD): Speed, snmpoid 1.3.6.1.2.1.31.1.1.1.15.1
91
- # @example Interface Et0/0(TO_CLOUD): Bits received, snmpoid 1.3.6.1.2.1.31.1.1.1.6.1
92
- # @param hostid [String, Integer] Needs to include name and hostid to properly identify Items via Zabbix API
93
- # @param name [String] Needs to include name and hostid to properly identify Items via Zabbix API
94
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
95
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
96
- # @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
70
+ # 通过 Zabbix API 获取特定主机和接口下的监控项
97
71
  def get_interface_items(hostid, name)
98
- log "[DEBUG] Call #{method_name}.get_interface_items with: hostid #{hostid.inspect} name #{name.inspect}"
72
+ # 记录调试信息,标识方法调用以及传递的参数
73
+ log "[DEBUG] 调用 #{method_name}.get_interface_items,参数:hostid #{hostid.inspect},name #{name.inspect}"
99
74
 
100
- # 自动剔除收尾空白字串
101
- _name = name&.gsub(%r{[^/0-9]}, "").strip
75
+ # 自动剔除收尾空白字符,规范化接口名
76
+ _name = name&.gsub(%r{[^/0-9]}, "")&.strip
102
77
  iface = "#{_name}("
103
78
 
104
- # 模糊查询接口下所有监控项,同时过滤出特定的 snmp_oid
79
+ # 使用 Zabbix API 进行模糊查询,获取特定主机和接口下的监控项
105
80
  result = get_raw(
106
81
  {
107
82
  output: "extend",
108
- hostids: hostid,
109
- search: {
110
- name: iface
111
- }
83
+ hostids: [hostid],
84
+ search: { name: iface }
112
85
  }
113
- ).select {
114
- |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)./)
115
- }.sort_by {
116
- |item| item["key_"]
117
- }
118
- result.empty? ? nil : result
119
- end
120
-
121
- # The default options used when creating DNS Monitor objects via Zabbix API
122
- # @note 缺省的 dns 参数
123
- # @return [Hash]
124
- def default_dns_params
125
- {
126
- type: 0, # 代表 zabbix_agent
127
- value_type: 1, # 代表字符串
128
- delay: "1m",
129
- history: "90d",
130
- lifetime: "30d",
131
- timeout: "15s"
132
- }
133
- end
86
+ )
134
87
 
135
- # Create Dns Monitor object using Zabbix API
136
- #
137
- # @param hostid [Hash] Needs to include dns_name and hostid to properly identify Items via Zabbix API
138
- # @param dns_name [Hash] Needs to include dns_name and hostid to properly identify Items via Zabbix API
139
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
140
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
141
- # @return [Integer, TrueClass, FalseClass, NilClass] Zabbix object id
142
- def create_dns_item(hostid, dns_name)
143
- name = "【DNS域名解析监控】#{dns_name}"
144
- key = "net.dns.record[,#{dns_name},A,2,2]"
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)./) }
145
90
 
146
- params = default_dns_params.merge(hostid: hostid, name: name, key: key)
147
- result = @client.api_request(
148
- method: "item.create",
149
- params: params
150
- )
151
- result.empty? ? nil : result
91
+ # 如果结果为空,则返回 nil;否则,返回排序后的结果
92
+ filtered_result.empty? ? nil : filtered_result.sort_by { |item| item["key_"] }
152
93
  end
153
94
  end
154
95
  end
@@ -2,16 +2,12 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Maintenance < Basic
5
- # The method name used for interacting with Maintenances via Zabbix API
6
- #
7
- # @return [String]
5
+ # 用于通过 Zabbix API 与维护窗口对象交互的方法名称
8
6
  def method_name
9
7
  "maintenance"
10
8
  end
11
9
 
12
- # The id field name used for identifying specific Maintenance objects via Zabbix API
13
- #
14
- # @return [String]
10
+ # 用于通过 Zabbix API 识别特定维护窗口对象的 id 字段名称
15
11
  def identify
16
12
  "name"
17
13
  end
@@ -2,64 +2,45 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Mediatypes < Basic
5
- # The method name used for interacting with MediaTypes via Zabbix API
6
- #
7
- # @return [String]
5
+ # Zabbix API 交互的媒体类型方法名称
8
6
  def method_name
9
7
  "mediatype"
10
8
  end
11
9
 
12
- # The id field name used for identifying specific MediaType objects via Zabbix API
13
- #
14
- # @return [String]
10
+ # 识别特定媒体类型对象的 id 字段名称
15
11
  def identify
16
12
  "name"
17
13
  end
18
14
 
19
- # The default options used when creating MediaType objects via Zabbix API
20
- #
21
- # @return [Hash]
15
+ # 默认选项,用于通过 Zabbix API 创建媒体类型对象
22
16
  def default_options
23
17
  {
24
- name: "", # Name
25
- description: "", # Description
26
- type: 0, # 0 - Email, 1 - External script, 2 - SMS, 3 - Jabber, 100 - EzTexting
18
+ name: "", # 媒体类型名称
19
+ description: "", # 描述
20
+ type: 0, # 0 - 电子邮件,1 - 外部脚本,2 - 短信,3 - Jabber100 - EzTexting
27
21
  smtp_server: "",
28
22
  smtp_helo: "",
29
- smtp_email: "", # Email address of Zabbix server
30
- exec_path: "", # Name of external script
31
- gsm_modem: "", # Serial device name of GSM modem
32
- username: "", # Jabber user name used by Zabbix server
33
- passwd: "" # Jabber password used by Zabbix server
23
+ smtp_email: "", # Zabbix 服务器的电子邮件地址
24
+ exec_path: "", # 外部脚本的名称
25
+ gsm_modem: "", # GSM modem 的串口设备名称
26
+ username: "", # Zabbix 服务器使用的 Jabber 用户名
27
+ passwd: "" # Zabbix 服务器使用的 Jabber 密码
34
28
  }
35
29
  end
36
30
 
37
- # def log(message)
38
- # STDERR.puts
39
- # STDERR.puts message.to_s
40
- # STDERR.puts
41
- # end
42
-
43
- # Update MediaType object using API
44
- #
45
- # @param data [Hash] Should include object's id field name (identify) and id value
46
- # @param force [Boolean] Whether to force an object update even if provided data matches Zabbix
47
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
48
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
49
- # @return [Integer] The object id if a single object is created
50
- # @return [Boolean] True/False if multiple objects are created
31
+ # 使用 API 更新媒体类型对象
51
32
  def update(data, force = false)
52
- log "[DEBUG] Call update with parameters: #{data.inspect}"
33
+ log "[DEBUG] 调用 update 方法,参数: #{data.inspect}"
53
34
  if data[key.to_sym].nil?
54
35
  data[key.to_sym] = get_id(data)
55
- log "[DEBUG] Enriched data with id: #{data.inspect}"
36
+ log "[DEBUG] ID 丰富数据: #{data.inspect}"
56
37
  end
57
38
  dump = {}
58
39
  dump_by_id(key.to_sym => data[key.to_sym]).each do |item|
59
40
  dump = symbolize_keys(item) if item[key].to_i == data[key.to_sym].to_i
60
41
  end
61
42
  if hash_equals?(dump, data) && !force
62
- log "[DEBUG] Equal keys #{dump} and #{data}, skip update"
43
+ log "[DEBUG] #{dump} #{data} 相等,跳过更新"
63
44
  data[key.to_sym].to_i
64
45
  else
65
46
  data_update = [data]
@@ -68,19 +49,12 @@ class ZabbixManager
68
49
  end
69
50
  end
70
51
 
71
- # Get MediaType object id from API based on provided data
72
- #
73
- # @param data [Hash]
74
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call or missing object's id field name (identify).
75
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
76
- # @return [Integer, NilClass] Zabbix object id
52
+ # API 获取媒体类型对象的 id
77
53
  def get_id(data)
78
- log "[DEBUG] Call get_id with parameters: #{data.inspect}"
79
- # symbolize keys if the user used string keys instead of symbols
54
+ log "[DEBUG] 调用 get_id 方法,参数: #{data.inspect}"
80
55
  data = symbolize_keys(data) if data.key?(identify)
81
- # raise an error if identify name was not supplied
82
56
  name = data[identify.to_sym]
83
- raise ZbxError, "#{identify} not supplied in call to get_id, #{data} (#{method_name})" if name.nil?
57
+ raise ZbxError, "未提供 #{identify} 参数,#{data} (#{method_name})" if name.nil?
84
58
 
85
59
  result = @client.api_request(
86
60
  method: "#{method_name}.get",
@@ -94,15 +68,9 @@ class ZabbixManager
94
68
  id
95
69
  end
96
70
 
97
- # Create or update MediaType object using API
98
- #
99
- # @param data [Hash] Should include object's id field name (identify) and id value
100
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
101
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
102
- # @return [Integer] The object id if a single object is created
103
- # @return [Boolean] True/False if multiple objects are created
71
+ # 创建或更新媒体类型对象
104
72
  def create_or_update(data)
105
- log "[DEBUG] Call create_or_update with parameters: #{data.inspect}"
73
+ log "[DEBUG] 调用 create_or_update 方法,参数: #{data.inspect}"
106
74
 
107
75
  id = get_id(identify.to_sym => data[identify.to_sym])
108
76
  id ? update(data.merge(key.to_sym => id.to_s)) : create(data)
@@ -5,93 +5,65 @@ class ZabbixManager
5
5
  require "active_support"
6
6
  require "active_support/core_ext/date/calculations"
7
7
 
8
- # The method name used for interacting with Hosts via Zabbix API
9
- #
10
- # @return [String]
8
+ # Zabbix API 交互的问题方法名称
11
9
  def method_name
12
10
  "problem"
13
11
  end
14
12
 
15
- # The id field name used for identifying specific Problem objects via Zabbix API
16
- #
17
- # @return [String]
13
+ # 识别特定问题对象的 id 字段名称
18
14
  def identify
19
15
  "name"
20
16
  end
21
17
 
22
- # Dump Problem object data by key from Zabbix API
23
- #
24
- # @param data [Hash] Should include desired object's key and value
25
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
26
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
27
- # @return [Hash]
18
+ # 通过键值对从 Zabbix API 转储问题对象数据
28
19
  def dump_by_id(data)
29
- log "[DEBUG] Call #{method_name}.dump_by_id with parameters: #{data.inspect}"
20
+ log "[DEBUG] 调用 #{method_name}.dump_by_id 方法,参数: #{data.inspect}"
30
21
 
31
- @client.api_request(
32
- method: "#{method_name}.get",
33
- params: {
34
- filter: {
35
- identify.to_sym => data[identify.to_sym]
36
- },
37
- output: "extend"
38
- }
39
- )
22
+ get_raw({
23
+ filter: {
24
+ identify.to_sym => data[identify.to_sym]
25
+ },
26
+ output: "extend"
27
+ })
40
28
  end
41
29
 
42
- # Get full/extended Problem data from Zabbix API
43
- #
44
- # @param data [Hash] Should include object's id field name (identify) and id value
45
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
46
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
47
- # @return [Hash]
30
+ # Zabbix API 获取完整/扩展的问题数据
48
31
  def get_full_data(data)
49
- log "[DEBUG] Call #{method_name}.get_full_data with parameters: #{data.inspect}"
32
+ log "[DEBUG] 调用 #{method_name}.get_full_data 方法,参数: #{data.inspect}"
50
33
 
51
34
  data = symbolize_keys(data)
52
35
 
53
- @client.api_request(
54
- method: "#{method_name}.get",
55
- params: {
56
- filter: {
57
- identify.to_sym => data[identify.to_sym]
58
- },
59
- eventids: data[:eventids] || nil,
60
- groupids: data[:groupids] || nil,
61
- hostids: data[:hostids] || nil,
62
- objectids: data[:objectids] || nil,
63
- applicationids: data[:applicationids] || nil,
64
- tags: data[:tags] || nil,
65
- time_from: data[:time_from] || nil,
66
- time_till: data[:time_till] || nil,
67
- eventid_from: data[:eventid_from] || nil,
68
- eventid_till: data[:eventid_till] || nil,
69
- recent: data[:recent] || false,
70
- sortfield: data[:sortfield] || ["eventid"],
71
- sortorder: data[:sortorder] || "DESC",
72
- countOutput: data[:countOutput] || nil,
73
- output: "extend",
74
- selectAcknowledges: "extend",
75
- selectTags: "extend",
76
- selectSuppressionData: "extend"
77
- }
78
- )
36
+ get_raw({
37
+ filter: {
38
+ identify.to_sym => data[identify.to_sym]
39
+ },
40
+ eventids: data[:eventids] || nil,
41
+ groupids: data[:groupids] || nil,
42
+ hostids: data[:hostids] || nil,
43
+ objectids: data[:objectids] || nil,
44
+ applicationids: data[:applicationids] || nil,
45
+ tags: data[:tags] || nil,
46
+ time_from: data[:time_from] || nil,
47
+ time_till: data[:time_till] || nil,
48
+ eventid_from: data[:eventid_from] || nil,
49
+ eventid_till: data[:eventid_till] || nil,
50
+ recent: data[:recent] || false,
51
+ sortfield: data[:sortfield] || ["eventid"],
52
+ sortorder: data[:sortorder] || "DESC",
53
+ countOutput: data[:countOutput] || nil,
54
+ output: "extend",
55
+ selectAcknowledges: "extend",
56
+ selectTags: "extend",
57
+ selectSuppressionData: "extend"
58
+ })
79
59
  end
80
60
 
81
- # Get full/extended Zabbix data for Problem objects from API
82
- #
83
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
84
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
85
- # @return [Hash] Array of matching objects
61
+ # 获取所有问题对象的完整/扩展 Zabbix 数据
86
62
  def all
87
63
  get_full_data({})
88
64
  end
89
65
 
90
- # Acknowledged problems according to the given parameters.
91
- # @note 自动确认14天前的问题单
92
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
93
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
94
- # @return [Array, NilClass] Array of matching objects
66
+ # 根据给定参数自动确认问题
95
67
  def ack_problem
96
68
  time_from = 90.days.ago.at_beginning_of_day.to_i
97
69
  time_till = 7.days.ago.at_beginning_of_day.to_i
@@ -107,7 +79,7 @@ class ZabbixManager
107
79
  params: {
108
80
  eventids: event_ids,
109
81
  action: 2,
110
- message: "本次告警通过 zabbix_api 关闭"
82
+ message: "本次告警符合自动刷新规则,已通过接口处理且刷新时间为:#{Time.now}"
111
83
  }
112
84
  )
113
85
  result.empty? ? nil : result.map { |i| { eventids: i["eventids"] } }
@@ -2,48 +2,29 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Proxies < Basic
5
- # The method name used for interacting with Proxies via Zabbix API
6
- #
7
- # @return [String]
5
+ # Zabbix API 交互的代理方法名称
8
6
  def method_name
9
7
  "proxy"
10
8
  end
11
9
 
12
- # The id field name used for identifying specific Proxy objects via Zabbix API
13
- #
14
- # @return [String]
10
+ # 识别特定代理对象的 id 字段名称
15
11
  def identify
16
12
  "host"
17
13
  end
18
14
 
19
- # Delete Proxy object using Zabbix API
20
- #
21
- # @param data [Array] Should include array of proxyid's
22
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
23
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
24
- # @return [Integer, NilClass] The Proxy object id that was deleted
15
+ # 使用 Zabbix API 删除代理对象
25
16
  def delete(data)
26
17
  result = @client.api_request(method: "proxy.delete", params: data)
27
18
  result.empty? ? nil : result["proxyids"][0].to_i
28
19
  end
29
20
 
30
- # Check if a Proxy object is readable using Zabbix API
31
- #
32
- # @param data [Array] Should include array of proxyid's
33
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
34
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
35
- # @return [Boolean] Returns true if the given proxies are readable
36
- def isreadable(data)
21
+ # 检查代理对象是否可读
22
+ def is_readable(data)
37
23
  @client.api_request(method: "proxy.isreadable", params: data)
38
24
  end
39
25
 
40
- # Check if a Proxy object is writable using Zabbix API
41
- #
42
- # @param data [Array] Should include array of proxyid's
43
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
44
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
45
- # @return [Boolean] Returns true if the given proxies are writable
46
- def iswritable(data)
26
+ # 检查代理对象是否可写
27
+ def is_writable(data)
47
28
  @client.api_request(method: "proxy.iswritable", params: data)
48
29
  end
49
30
  end
@@ -2,85 +2,51 @@
2
2
 
3
3
  class ZabbixManager
4
4
  class Roles < Basic
5
- # The method name used for interacting with Role via Zabbix API
6
- #
7
- # @return [String]
5
+ # Zabbix API 交互的角色方法名称
8
6
  def method_name
9
7
  "role"
10
8
  end
11
9
 
12
- # The key field name used for Role objects via Zabbix API
13
- #
14
- # @return [String]
15
- def key
16
- "roleid"
17
- end
18
-
19
- # The id field name used for identifying specific Role objects via Zabbix API
20
- #
21
- # @return [String]
10
+ # 识别特定角色对象的 id 字段名称
22
11
  def identify
23
12
  "name"
24
13
  end
25
14
 
26
- # Set permissions for usergroup using Zabbix API
27
- #
28
- # @param data [Hash] Needs to include usrgrpids and hostgroupids along with permissions to set
29
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
30
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
31
- # @return [Integer, NilClass] Zabbix object id (usergroup)
15
+ # 使用 Zabbix API 为用户组设置权限
32
16
  def rules(data)
33
- rules = data[:rules] || 2
17
+ rules = data[:rules] || 2
34
18
  result = @client.api_request(
35
19
  method: "role.update",
36
20
  params: {
37
21
  roleid: data[:roleid],
38
- rules: data[:hostgroupids].map { |t| { permission: permission, id: t } }
22
+ rules: data[:hostgroupids].map { |t| { permission: permission, id: t } }
39
23
  }
40
24
  )
41
25
  result ? result["usrgrpids"][0].to_i : nil
42
26
  end
43
27
 
44
- # Add users to usergroup using Zabbix API
45
- #
46
- # @deprecated Zabbix has removed massAdd in favor of update.
47
- # @param data [Hash] Needs to include userids and usrgrpids to mass add users to groups
48
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
49
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
50
- # @return [Integer] Zabbix object id (usergroup)
28
+ # 使用 Zabbix API 将用户添加到用户组
51
29
  def add_user(data)
52
30
  update_users(data)
53
31
  end
54
32
 
55
- # Dump Role object data by key from Zabbix API
56
- #
57
- # @param data [Hash] Should include desired object's key and value
58
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
59
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
60
- # @return [Hash]
33
+ # Zabbix API 中根据指定键和值获取角色对象的数据
61
34
  def dump_by_id(data)
62
- log "[DEBUG] Call dump_by_id with parameters: #{data.inspect}"
35
+ log "[DEBUG] 调用 dump_by_id 方法,参数: #{data.inspect}"
63
36
 
64
- @client.api_request(
65
- method: "role.get",
66
- params: {
67
- output: "extend",
37
+ get_raw(
38
+ {
39
+ output: "extend",
68
40
  selectRules: "extend",
69
- roleids: data[:id]
41
+ roleids: data[:id]
70
42
  }
71
43
  )
72
44
  end
73
45
 
74
- # Get Role ids by Role Name from Zabbix API
75
- #
76
- # @param data [Hash] Should include host value to query for matching graphs
77
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
78
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
79
- # @return [Array] Returns array of Graph ids
46
+ # 通过角色名称从 Zabbix API 获取角色 id
80
47
  def get_ids_by_name(data)
81
- result = @client.api_request(
82
- method: "role.get",
83
- params: {
48
+ result = get_raw(
49
+ {
84
50
  filter: {
85
51
  name: data[:name]
86
52
  },
@@ -93,20 +59,15 @@ class ZabbixManager
93
59
  end
94
60
  end
95
61
 
96
- # Update users in Userroles using Zabbix API
97
- #
98
- # @param data [Hash] Needs to include userids and usrgrpids to mass update users in groups
99
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
100
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
101
- # @return [Integer, NilClass] Zabbix object id (usergroup)
62
+ # 使用 Zabbix API 更新用户角色中的用户
102
63
  def update_users(data)
103
64
  user_groups = data[:usrgrpids].map do |t|
104
65
  {
105
66
  usrgrpid: t,
106
- userids: data[:userids]
67
+ userids: data[:userids]
107
68
  }
108
69
  end
109
- result = @client.api_request(
70
+ result = @client.api_request(
110
71
  method: "usergroup.update",
111
72
  params: user_groups
112
73
  )
@@ -21,37 +21,23 @@ class ZabbixManager
21
21
  # SCREEN_RESOURCE_SYSTEM_STATUS => 15,
22
22
  # SCREEN_RESOURCE_HOST_TRIGGERS => 16
23
23
 
24
- # The method name used for interacting with Screens via Zabbix API
25
- #
26
- # @return [String]
24
+ # Zabbix API 交互的屏幕方法名称
27
25
  def method_name
28
26
  "screen"
29
27
  end
30
28
 
31
- # The id field name used for identifying specific Screen objects via Zabbix API
32
- #
33
- # @return [String]
29
+ # 用于通过 Zabbix API 标识特定屏幕对象的 ID 字段名称
34
30
  def identify
35
31
  "name"
36
32
  end
37
33
 
38
- # Delete Screen object using Zabbix API
39
- #
40
- # @param data [String, Array] Should include id's of the screens to delete
41
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
42
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
43
- # @return [Integer, NilClass] Zabbix object id
34
+ # 删除 Zabbix API 中的屏幕对象
44
35
  def delete(data)
45
36
  result = @client.api_request(method: "screen.delete", params: [data])
46
37
  result.empty? ? nil : result["screenids"][0].to_i
47
38
  end
48
39
 
49
- # Get or Create Screen object for Host using Zabbix API
50
- #
51
- # @param data [Hash] Needs to include screen_name and graphids to properly identify Screens via Zabbix API
52
- # @raise [ZbxError] Error returned when there is a problem with the Zabbix API call.
53
- # @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
54
- # @return [Integer] Zabbix object id
40
+ # 使用 Zabbix API 为主机获取或创建屏幕对象
55
41
  def get_or_create_for_host(data)
56
42
  screen_name = data[:screen_name]
57
43
  graphids = data[:graphids]
@@ -61,13 +47,13 @@ class ZabbixManager
61
47
  halign = data[:halign] || 2
62
48
  rowspan = data[:rowspan] || 1
63
49
  colspan = data[:colspan] || 1
64
- height = data[:height] || 320 # default 320
65
- width = data[:width] || 200 # default 200
50
+ height = data[:height] || 320
51
+ width = data[:width] || 200
66
52
  vsize = data[:vsize] || [1, (graphids.size / hsize).to_i].max
67
53
  screenid = get_id(name: screen_name)
68
54
 
69
55
  unless screenid
70
- # Create screen
56
+ # 创建屏幕
71
57
  graphids.each_with_index do |graphid, index|
72
58
  screenitems << {
73
59
  resourcetype: 0,