zabbix_manager 5.0.1 → 5.0.2
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/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 +145 -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
- metadata +77 -2
@@ -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(100_000)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns the API version from the Zabbix Server
|
17
|
+
#
|
18
|
+
# @return [String]
|
19
|
+
def api_version
|
20
|
+
@api_version ||= api_request(method: 'apiinfo.version', params: {})
|
21
|
+
@api_version
|
22
|
+
end
|
23
|
+
|
24
|
+
# Log in to the Zabbix Server and generate an auth token using the API
|
25
|
+
#
|
26
|
+
# @return [Hash]
|
27
|
+
def auth
|
28
|
+
api_request(
|
29
|
+
method: 'user.login',
|
30
|
+
params: {
|
31
|
+
user: @options[:user],
|
32
|
+
password: @options[:password]
|
33
|
+
}
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
# ZabbixManager::Basic.log does not like @client.options[:debug]
|
38
|
+
#
|
39
|
+
# @return [boolean]
|
40
|
+
def debug?
|
41
|
+
return !@options || @options[:debug]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Initializes a new Client object
|
45
|
+
#
|
46
|
+
# @param options [Hash]
|
47
|
+
# @option opts [String] :url The url of zabbixapi(example: 'http://localhost/zabbix/api_jsonrpc.php')
|
48
|
+
# @option opts [String] :user
|
49
|
+
# @option opts [String] :password
|
50
|
+
# @option opts [String] :http_user A user for basic auth.(optional)
|
51
|
+
# @option opts [String] :http_password A password for basic auth.(optional)
|
52
|
+
# @option opts [Integer] :timeout Set timeout for requests in seconds.(default: 60)
|
53
|
+
#
|
54
|
+
# @return [ZabbixManager::Client]
|
55
|
+
def initialize(options = {})
|
56
|
+
@options = options
|
57
|
+
if !ENV['http_proxy'].nil? && options[:no_proxy] != true
|
58
|
+
@proxy_uri = URI.parse(ENV['http_proxy'])
|
59
|
+
@proxy_host = @proxy_uri.host
|
60
|
+
@proxy_port = @proxy_uri.port
|
61
|
+
@proxy_user, @proxy_pass = @proxy_uri.userinfo.split(/:/) if @proxy_uri.userinfo
|
62
|
+
end
|
63
|
+
unless api_version =~ %r{^5.[0|2]\.\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
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WENWU YAN
|
@@ -9,7 +9,49 @@ autorequire:
|
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
11
|
date: 2021-12-18 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
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
|
@@ -27,7 +69,40 @@ files:
|
|
27
69
|
- bin/console
|
28
70
|
- bin/setup
|
29
71
|
- lib/zabbix_manager.rb
|
72
|
+
- lib/zabbix_manager/basic/basic_alias.rb
|
73
|
+
- lib/zabbix_manager/basic/basic_extend.rb
|
74
|
+
- lib/zabbix_manager/basic/basic_func.rb
|
75
|
+
- lib/zabbix_manager/basic/basic_init.rb
|
76
|
+
- lib/zabbix_manager/basic/basic_logic.rb
|
77
|
+
- lib/zabbix_manager/classes/actions.rb
|
78
|
+
- lib/zabbix_manager/classes/applications.rb
|
79
|
+
- lib/zabbix_manager/classes/configurations.rb
|
80
|
+
- lib/zabbix_manager/classes/drules.rb
|
81
|
+
- lib/zabbix_manager/classes/errors.rb
|
82
|
+
- lib/zabbix_manager/classes/events.rb
|
83
|
+
- lib/zabbix_manager/classes/graphs.rb
|
84
|
+
- lib/zabbix_manager/classes/hostgroups.rb
|
85
|
+
- lib/zabbix_manager/classes/hosts.rb
|
86
|
+
- lib/zabbix_manager/classes/httptests.rb
|
87
|
+
- lib/zabbix_manager/classes/items.rb
|
88
|
+
- lib/zabbix_manager/classes/maintenance.rb
|
89
|
+
- lib/zabbix_manager/classes/mediatypes.rb
|
90
|
+
- lib/zabbix_manager/classes/problems.rb
|
91
|
+
- lib/zabbix_manager/classes/proxies.rb
|
92
|
+
- lib/zabbix_manager/classes/roles.rb
|
93
|
+
- lib/zabbix_manager/classes/screens.rb
|
94
|
+
- lib/zabbix_manager/classes/scripts.rb
|
95
|
+
- lib/zabbix_manager/classes/server.rb
|
96
|
+
- lib/zabbix_manager/classes/templates.rb
|
97
|
+
- lib/zabbix_manager/classes/triggers.rb
|
98
|
+
- lib/zabbix_manager/classes/unusable.rb
|
99
|
+
- lib/zabbix_manager/classes/usergroups.rb
|
100
|
+
- lib/zabbix_manager/classes/usermacros.rb
|
101
|
+
- lib/zabbix_manager/classes/users.rb
|
102
|
+
- lib/zabbix_manager/classes/valuemaps.rb
|
103
|
+
- lib/zabbix_manager/client.rb
|
30
104
|
- lib/zabbix_manager/version.rb
|
105
|
+
- zabbix_manager-5.0.1.gem
|
31
106
|
homepage: https://github.com/snmpd/zabbix_manager
|
32
107
|
licenses:
|
33
108
|
- MIT
|