zabbix_manager 5.0.1 → 5.0.4
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 +4 -4
- data/.idea/workspace.xml +69 -0
- data/lib/zabbix_manager/basic/basic_alias.rb +37 -0
- data/lib/zabbix_manager/basic/basic_extend.rb +38 -0
- data/lib/zabbix_manager/basic/basic_func.rb +103 -0
- data/lib/zabbix_manager/basic/basic_init.rb +46 -0
- data/lib/zabbix_manager/basic/basic_logic.rb +227 -0
- data/lib/zabbix_manager/classes/actions.rb +41 -0
- data/lib/zabbix_manager/classes/applications.rb +43 -0
- data/lib/zabbix_manager/classes/configurations.rb +42 -0
- data/lib/zabbix_manager/classes/drules.rb +55 -0
- data/lib/zabbix_manager/classes/errors.rb +28 -0
- data/lib/zabbix_manager/classes/events.rb +18 -0
- data/lib/zabbix_manager/classes/graphs.rb +111 -0
- data/lib/zabbix_manager/classes/hostgroups.rb +58 -0
- data/lib/zabbix_manager/classes/hosts.rb +218 -0
- data/lib/zabbix_manager/classes/httptests.rb +54 -0
- data/lib/zabbix_manager/classes/items.rb +146 -0
- data/lib/zabbix_manager/classes/maintenance.rb +17 -0
- data/lib/zabbix_manager/classes/mediatypes.rb +109 -0
- data/lib/zabbix_manager/classes/problems.rb +133 -0
- data/lib/zabbix_manager/classes/proxies.rb +68 -0
- data/lib/zabbix_manager/classes/roles.rb +114 -0
- data/lib/zabbix_manager/classes/screens.rb +94 -0
- data/lib/zabbix_manager/classes/scripts.rb +35 -0
- data/lib/zabbix_manager/classes/server.rb +16 -0
- data/lib/zabbix_manager/classes/templates.rb +123 -0
- data/lib/zabbix_manager/classes/triggers.rb +166 -0
- data/lib/zabbix_manager/classes/unusable.rb +8 -0
- data/lib/zabbix_manager/classes/usergroups.rb +73 -0
- data/lib/zabbix_manager/classes/usermacros.rb +228 -0
- data/lib/zabbix_manager/classes/users.rb +64 -0
- data/lib/zabbix_manager/classes/valuemaps.rb +50 -0
- data/lib/zabbix_manager/client.rb +158 -0
- data/lib/zabbix_manager/version.rb +1 -1
- data/zabbix_manager-5.0.1.gem +0 -0
- data/zabbix_manager-5.0.2.gem +0 -0
- metadata +81 -4
@@ -0,0 +1,50 @@
|
|
1
|
+
class ZabbixManager
|
2
|
+
class ValueMaps < Basic
|
3
|
+
# The method name used for interacting with ValueMaps via Zabbix API
|
4
|
+
#
|
5
|
+
# @return [String]
|
6
|
+
def method_name
|
7
|
+
'valuemap'
|
8
|
+
end
|
9
|
+
|
10
|
+
# The key field name used for ValueMap objects via Zabbix API
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def key
|
14
|
+
'valuemapid'
|
15
|
+
end
|
16
|
+
|
17
|
+
# The id field name used for identifying specific ValueMap objects via Zabbix API
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
def identify
|
21
|
+
'name'
|
22
|
+
end
|
23
|
+
|
24
|
+
# Get or Create ValueMap object using Zabbix API
|
25
|
+
#
|
26
|
+
# @param data [Hash] Needs to include valuemapids [List] to properly identify ValueMaps via Zabbix API
|
27
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
28
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
29
|
+
# @return [Integer] Zabbix object id
|
30
|
+
def get_or_create(data)
|
31
|
+
log "[DEBUG] Call get_or_create with parameters: #{data.inspect}"
|
32
|
+
|
33
|
+
unless (id = get_id(valuemapids: data[:valuemapids]))
|
34
|
+
id = create(data)
|
35
|
+
end
|
36
|
+
id
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create or update Item object using Zabbix API
|
40
|
+
#
|
41
|
+
# @param data [Hash] Needs to include valuemapids to properly identify ValueMaps via Zabbix API
|
42
|
+
# @raise [ManagerError] Error returned when there is a problem with the Zabbix API call.
|
43
|
+
# @raise [HttpError] Error raised when HTTP status from Zabbix Server response is not a 200 OK.
|
44
|
+
# @return [Integer] Zabbix object id
|
45
|
+
def create_or_update(data)
|
46
|
+
valuemapid = get_id(name: data[:name])
|
47
|
+
valuemapid ? update(data.merge(valuemapids: [:valuemapid])) : create(data)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
require 'openssl'
|
4
|
+
|
5
|
+
class ZabbixManager
|
6
|
+
class Client
|
7
|
+
# @param (see ZabbixManager::Client#initialize)
|
8
|
+
# @return [Hash]
|
9
|
+
attr_reader :options
|
10
|
+
|
11
|
+
# @return [Integer]
|
12
|
+
def id
|
13
|
+
rand(800_000)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns the API version from the Zabbix Server
|
17
|
+
#
|
18
|
+
# @return [String, Hash]
|
19
|
+
def api_version
|
20
|
+
api_request(method: 'apiinfo.version', params: {})
|
21
|
+
end
|
22
|
+
|
23
|
+
# Log in to the Zabbix Server and generate an auth token using the API
|
24
|
+
#
|
25
|
+
# @return [Hash, String]
|
26
|
+
def auth
|
27
|
+
api_request(
|
28
|
+
method: 'user.login',
|
29
|
+
params: {
|
30
|
+
user: @options[:user],
|
31
|
+
password: @options[:password]
|
32
|
+
}
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
# ZabbixManager::Basic.log does not like @client.options[:debug]
|
37
|
+
#
|
38
|
+
# @return [boolean]
|
39
|
+
def debug?
|
40
|
+
!@options || @options[:debug]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Initializes a new Client object
|
44
|
+
#
|
45
|
+
# @param options [Hash]
|
46
|
+
# @option opts [String] :url The url of zabbixapi(example: 'http://localhost/zabbix/api_jsonrpc.php')
|
47
|
+
# @option opts [String] :user
|
48
|
+
# @option opts [String] :password
|
49
|
+
# @option opts [String] :http_user A user for basic auth.(optional)
|
50
|
+
# @option opts [String] :http_password A password for basic auth.(optional)
|
51
|
+
# @option opts [Integer] :timeout Set timeout for requests in seconds.(default: 60)
|
52
|
+
#
|
53
|
+
# @return [ZabbixManager::Client]
|
54
|
+
def initialize(options = {})
|
55
|
+
@options = options
|
56
|
+
if !ENV['http_proxy'].nil? && options[:no_proxy] != true
|
57
|
+
@proxy_uri = URI.parse(ENV['http_proxy'])
|
58
|
+
@proxy_host = @proxy_uri.host
|
59
|
+
@proxy_port = @proxy_uri.port
|
60
|
+
@proxy_user, @proxy_pass = @proxy_uri.userinfo&.split(/:/) if @proxy_uri.userinfo
|
61
|
+
end
|
62
|
+
|
63
|
+
if api_version.match? /^7\.\d+\.\d+$/
|
64
|
+
message = "Zabbix API version: #{api_version} is not supported by this version of zabbixapi"
|
65
|
+
if @options[:ignore_version]
|
66
|
+
puts "[WARNING] #{message}" if @options[:debug]
|
67
|
+
else
|
68
|
+
raise ZabbixManager::ManagerError.new(message)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
@auth_hash = auth
|
73
|
+
end
|
74
|
+
|
75
|
+
# Convert message body to JSON string for the Zabbix API
|
76
|
+
#
|
77
|
+
# @param body [Hash]
|
78
|
+
# @return [String]
|
79
|
+
def message_json(body)
|
80
|
+
message = {
|
81
|
+
method: body[:method],
|
82
|
+
params: body[:params],
|
83
|
+
id: id,
|
84
|
+
jsonrpc: '2.0'
|
85
|
+
}
|
86
|
+
|
87
|
+
message[:auth] = @auth_hash unless body[:method] == 'apiinfo.version' || body[:method] == 'user.login'
|
88
|
+
|
89
|
+
JSON.generate(message)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @param body [String]
|
93
|
+
# @return [String]
|
94
|
+
def http_request(body)
|
95
|
+
uri = URI.parse(@options[:url])
|
96
|
+
|
97
|
+
# set the time out the default (60) or to what the user passed
|
98
|
+
timeout = @options[:timeout].nil? ? 60 : @options[:timeout]
|
99
|
+
puts "[DEBUG] Timeout for request set to #{timeout} seconds" if @options[:debug]
|
100
|
+
|
101
|
+
http =
|
102
|
+
if @proxy_uri
|
103
|
+
Net::HTTP.Proxy(@proxy_host, @proxy_port, @proxy_user, @proxy_pass).new(uri.host, uri.port)
|
104
|
+
else
|
105
|
+
Net::HTTP.new(uri.host, uri.port)
|
106
|
+
end
|
107
|
+
|
108
|
+
if uri.scheme == 'https'
|
109
|
+
http.use_ssl = true
|
110
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
111
|
+
end
|
112
|
+
|
113
|
+
http.open_timeout = timeout
|
114
|
+
http.read_timeout = timeout
|
115
|
+
|
116
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
117
|
+
request.basic_auth @options[:http_user], @options[:http_password] if @options[:http_user]
|
118
|
+
request.add_field('Content-Type', 'application/json-rpc')
|
119
|
+
request.body = body
|
120
|
+
|
121
|
+
response = http.request(request)
|
122
|
+
|
123
|
+
raise HttpError.new("HTTP Error: #{response.code} on #{@options[:url]}", response) unless response.code == '200'
|
124
|
+
|
125
|
+
puts "[DEBUG] Get answer: #{response.body}" if @options[:debug]
|
126
|
+
response.body
|
127
|
+
end
|
128
|
+
|
129
|
+
# @param body [String]
|
130
|
+
# @return [Hash, String]
|
131
|
+
def _request(body)
|
132
|
+
puts "[DEBUG] Send request: #{body}" if @options[:debug]
|
133
|
+
result = JSON.parse(http_request(body))
|
134
|
+
# 异常信息抛出
|
135
|
+
raise ManagerError.new("Server answer API error\n #{JSON.pretty_unparse(result['error'])}\n on request:\n #{pretty_body(body)}", result) if result['error']
|
136
|
+
|
137
|
+
result['result']
|
138
|
+
end
|
139
|
+
|
140
|
+
def pretty_body(body)
|
141
|
+
parsed_body = JSON.parse(body)
|
142
|
+
|
143
|
+
# If password is in body hide it
|
144
|
+
parsed_body['params']['password'] = '***' if parsed_body['params'].is_a?(Hash) && parsed_body['params'].key?('password')
|
145
|
+
|
146
|
+
JSON.pretty_unparse(parsed_body)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Execute Zabbix API requests and return response
|
150
|
+
#
|
151
|
+
# @param body [Hash]
|
152
|
+
# @return [Hash, String]
|
153
|
+
def api_request(body)
|
154
|
+
# ap body
|
155
|
+
_request message_json(body)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,15 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zabbix_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WENWU YAN
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2022-03-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: http
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
13
55
|
description: Write a longer description or delete this line.
|
14
56
|
email:
|
15
57
|
- careline@foxmail.com
|
@@ -17,6 +59,7 @@ executables: []
|
|
17
59
|
extensions: []
|
18
60
|
extra_rdoc_files: []
|
19
61
|
files:
|
62
|
+
- ".idea/workspace.xml"
|
20
63
|
- ".rubocop.yml"
|
21
64
|
- CHANGELOG.md
|
22
65
|
- CODE_OF_CONDUCT.md
|
@@ -27,7 +70,41 @@ files:
|
|
27
70
|
- bin/console
|
28
71
|
- bin/setup
|
29
72
|
- lib/zabbix_manager.rb
|
73
|
+
- lib/zabbix_manager/basic/basic_alias.rb
|
74
|
+
- lib/zabbix_manager/basic/basic_extend.rb
|
75
|
+
- lib/zabbix_manager/basic/basic_func.rb
|
76
|
+
- lib/zabbix_manager/basic/basic_init.rb
|
77
|
+
- lib/zabbix_manager/basic/basic_logic.rb
|
78
|
+
- lib/zabbix_manager/classes/actions.rb
|
79
|
+
- lib/zabbix_manager/classes/applications.rb
|
80
|
+
- lib/zabbix_manager/classes/configurations.rb
|
81
|
+
- lib/zabbix_manager/classes/drules.rb
|
82
|
+
- lib/zabbix_manager/classes/errors.rb
|
83
|
+
- lib/zabbix_manager/classes/events.rb
|
84
|
+
- lib/zabbix_manager/classes/graphs.rb
|
85
|
+
- lib/zabbix_manager/classes/hostgroups.rb
|
86
|
+
- lib/zabbix_manager/classes/hosts.rb
|
87
|
+
- lib/zabbix_manager/classes/httptests.rb
|
88
|
+
- lib/zabbix_manager/classes/items.rb
|
89
|
+
- lib/zabbix_manager/classes/maintenance.rb
|
90
|
+
- lib/zabbix_manager/classes/mediatypes.rb
|
91
|
+
- lib/zabbix_manager/classes/problems.rb
|
92
|
+
- lib/zabbix_manager/classes/proxies.rb
|
93
|
+
- lib/zabbix_manager/classes/roles.rb
|
94
|
+
- lib/zabbix_manager/classes/screens.rb
|
95
|
+
- lib/zabbix_manager/classes/scripts.rb
|
96
|
+
- lib/zabbix_manager/classes/server.rb
|
97
|
+
- lib/zabbix_manager/classes/templates.rb
|
98
|
+
- lib/zabbix_manager/classes/triggers.rb
|
99
|
+
- lib/zabbix_manager/classes/unusable.rb
|
100
|
+
- lib/zabbix_manager/classes/usergroups.rb
|
101
|
+
- lib/zabbix_manager/classes/usermacros.rb
|
102
|
+
- lib/zabbix_manager/classes/users.rb
|
103
|
+
- lib/zabbix_manager/classes/valuemaps.rb
|
104
|
+
- lib/zabbix_manager/client.rb
|
30
105
|
- lib/zabbix_manager/version.rb
|
106
|
+
- zabbix_manager-5.0.1.gem
|
107
|
+
- zabbix_manager-5.0.2.gem
|
31
108
|
homepage: https://github.com/snmpd/zabbix_manager
|
32
109
|
licenses:
|
33
110
|
- MIT
|
@@ -51,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
128
|
- !ruby/object:Gem::Version
|
52
129
|
version: '0'
|
53
130
|
requirements: []
|
54
|
-
rubygems_version: 3.
|
131
|
+
rubygems_version: 3.3.3
|
55
132
|
signing_key:
|
56
133
|
specification_version: 4
|
57
134
|
summary: Write a short summary, because RubyGems requires one.
|