zabbix-rails 0.1.9 → 0.2.0

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: aa818a8ba839cf3da0d79d2bd76a5bce34c9b153408320c57e87aa8c62c28700
4
- data.tar.gz: bf33db9b88d475e5ebf71caa669efe7be39a5976a0f1a844978a157181a89a58
3
+ metadata.gz: d72e0a2099b3dd87de6d9a38ec3514bc2e8f6fa7720804a202457a278af39987
4
+ data.tar.gz: d92f35f0c3497663edc9f50f5a6fbf4815bde298fb50fd2eb2921ffa367077ed
5
5
  SHA512:
6
- metadata.gz: 20114878297c5b7113f204881462c466b45e8512e500f5e3e6ede5a56ddc0869872bfdf7446142948133467c3a53e021f0a2b5a4d0d5aaf06a3e2574940448e4
7
- data.tar.gz: 1d3a1613710a430c2485e2354776df1e6cf8121ce203241a980c51ecd24c7363c3cb92d78d635ecfe83531927c4a02ea5f90e1eefb7147d674cc2d71b1d5b16d
6
+ metadata.gz: 239955a4196412900aad1f05e4b455274355960d3643ef1fc6572f16b16b158f7ec7b856aa069046c857774c284eaf7ef9d2b6a8f60e9727b2a4bbef1dd674c9
7
+ data.tar.gz: 6d3b8303de360e70c3c590faa7ed39b3b22fab9a198fd552dbe150ebf5a4a4eec090110c8b199db4c16409d54ffdbd7d143aebb4d1e372ae671435e4621b856e
@@ -0,0 +1,69 @@
1
+ require "active_support/concern"
2
+
3
+ module Zabbix
4
+ extend ActiveSupport::Concern
5
+
6
+ module Chart
7
+ # 请求生成 graph_chart 对象
8
+ def graph_chart(graphid, height = 400, width = 900, start_at = "now-6h", end_at = "now")
9
+ # 构造数据结构
10
+ data = {
11
+ from: start_at,
12
+ to: end_at,
13
+ graphid: graphid,
14
+ height: height,
15
+ width: width
16
+ }
17
+ # 请求后端返回图片对象
18
+ _item_chart("/chart2.php", data)
19
+ end
20
+
21
+ # 请求生成 item_chart 对象
22
+ def item_chart(itemid, height = 400, width = 900, start_at = "now-6h", end_at = "now")
23
+ # 构造数据结构
24
+ data = {
25
+ from: start_at,
26
+ to: end_at,
27
+ itemids: [itemid.to_i],
28
+ height: height,
29
+ width: width
30
+ }
31
+ # 请求后端返回图片对象
32
+ _item_chart(data)
33
+ end
34
+
35
+ # 请求后端返回图形
36
+ def _item_chart(url = "/chart.php", data)
37
+ # 请求接口
38
+ @conn.get "#{url}" do |r|
39
+ r.params.merge!(data)
40
+ r.headers["Host"] = Config.url.gsub!(%r{http(s)?://}, "")
41
+ r.headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
42
+ r.headers["Cookie"] = zabbix_token
43
+ end.body
44
+ end
45
+
46
+ # 保存图片并返回文件名
47
+ def save_chart_graph(itemid, height = 400, width = 900, start_at = "now-6h", end_at = "now")
48
+ filename = generate_name(itemid)
49
+ save_file(filename, item_chart(itemid, height, width, start_at, end_at))
50
+ "chart/#{File.basename(filename)}"
51
+ end
52
+
53
+ # 保存图片
54
+ def save_file(filename, content)
55
+ # 生成绝对路径地址
56
+ filename.prepend("app/assets/images/chart/")
57
+
58
+ # 存储数据
59
+ File.open(filename, "wb") do |chart|
60
+ chart.write(content)
61
+ end
62
+ end
63
+
64
+ def generate_name(itemid)
65
+ require "uuidtools"
66
+ "#{UUIDTools::UUID.timestamp_create}-#{itemid}.png"
67
+ end
68
+ end
69
+ end
@@ -10,7 +10,7 @@ module Zabbix
10
10
  # 将鉴权后的 zabbix-rails 对象缓存到 Rails,减少不必要的认证动作加速执行
11
11
  # https://guides.rubyonrails.org/caching_with_rails.html
12
12
  def zabbix_connector
13
- Rails.cache.fetch("zabbix_connector", expires_in: 4.hours) do
13
+ Rails.cache.fetch("zabbix_connector", expires_in: 2.hours) do
14
14
  Rails.logger.warn("Zabbix 正在请求 API 鉴权")
15
15
  ZabbixManager.connect(url: Config.url, user: Config.user, password: Config.password, debug: Config.debug)
16
16
  rescue => e
@@ -18,6 +18,14 @@ module Zabbix
18
18
  end
19
19
  end
20
20
 
21
+ # 获取 zabbix 登录凭证缓存
22
+ def zabbix_token
23
+ Rails.cache.fetch("zabbix_token", expires_in: 2.hours) do
24
+ Rails.logger.warn("正在请求 zabbix/index.php 登录认证")
25
+ authenticate_with_cookie
26
+ end
27
+ end
28
+
21
29
  # 删除主机监控
22
30
  def delete_host_monitor(name)
23
31
  id = zabbix_connector.hosts.get_host_id(name)
@@ -43,4 +51,27 @@ module Zabbix
43
51
  Rails.logger.warn("调用 delete_trigger_monitor 接口异常,原始报错信息: #{e}")
44
52
  end
45
53
  end
54
+
55
+ # 请求 zabbix 后端认证,返回 Cookie
56
+ def authenticate_with_cookie
57
+ # 初始化会话
58
+ base_url = Config.url
59
+ @conn = Faraday::Connection.new(base_url)
60
+
61
+ # 登录权限凭证
62
+ data = {
63
+ name: Config.user,
64
+ password: Config.password,
65
+ autologin: 1,
66
+ enter: "Sign in",
67
+ }
68
+
69
+ # 请求认证
70
+ ret = @conn.post "/index.php" do |r|
71
+ r.headers["Host"] = base_url.gsub!(%r{http(s)?://}, "")
72
+ r.body = data
73
+ end
74
+
75
+ ret.headers["set-cookie"].presence || nil
76
+ end
46
77
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zabbix
4
- VERSION = "0.1.9"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabbix-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - WENWU.YAN
@@ -35,6 +35,7 @@ files:
35
35
  - Rakefile
36
36
  - lib/tasks/zabbix_tasks.rake
37
37
  - lib/zabbix-rails.rb
38
+ - lib/zabbix/chart.rb
38
39
  - lib/zabbix/config.rb
39
40
  - lib/zabbix/connector.rb
40
41
  - lib/zabbix/dns_monitor.rb