pytbox 0.0.9__tar.gz → 0.1.0__tar.gz

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.

Potentially problematic release.


This version of pytbox might be problematic. Click here for more details.

Files changed (70) hide show
  1. {pytbox-0.0.9/src/pytbox.egg-info → pytbox-0.1.0}/PKG-INFO +1 -1
  2. {pytbox-0.0.9 → pytbox-0.1.0}/pyproject.toml +1 -1
  3. pytbox-0.1.0/src/pytbox/categraf/build_config.py +145 -0
  4. pytbox-0.1.0/src/pytbox/categraf/instances.toml +35 -0
  5. pytbox-0.1.0/src/pytbox/categraf/jinja2/input.dns_query/dns_query.toml.j2 +12 -0
  6. pytbox-0.1.0/src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2 +9 -0
  7. pytbox-0.1.0/src/pytbox/categraf/jinja2/input.snmp/h3c_interface.toml.j2 +96 -0
  8. pytbox-0.1.0/src/pytbox/categraf/jinja2/input.snmp/h3c_system.toml.j2 +41 -0
  9. {pytbox-0.0.9 → pytbox-0.1.0/src/pytbox.egg-info}/PKG-INFO +1 -1
  10. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox.egg-info/SOURCES.txt +2 -0
  11. pytbox-0.0.9/src/pytbox/categraf/build_config.py +0 -91
  12. pytbox-0.0.9/src/pytbox/categraf/instances.toml +0 -16
  13. pytbox-0.0.9/src/pytbox/categraf/jinja2/input.dns_query/dns_query.toml.j2 +0 -0
  14. pytbox-0.0.9/src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2 +0 -0
  15. {pytbox-0.0.9 → pytbox-0.1.0}/MANIFEST.in +0 -0
  16. {pytbox-0.0.9 → pytbox-0.1.0}/README.md +0 -0
  17. {pytbox-0.0.9 → pytbox-0.1.0}/setup.cfg +0 -0
  18. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/alert/alert_handler.py +0 -0
  19. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/alert/ping.py +0 -0
  20. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/alicloud/sls.py +0 -0
  21. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/base.py +0 -0
  22. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/__init__.py +0 -0
  23. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.cpu/cpu.toml.j2 +0 -0
  24. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.disk/disk.toml.j2 +0 -0
  25. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.diskio/diskio.toml.j2 +0 -0
  26. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.http_response/http_response.toml.j2 +0 -0
  27. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.mem/mem.toml.j2 +0 -0
  28. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.net/net.toml.j2 +0 -0
  29. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.ping/ping.toml.j2 +0 -0
  30. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.prometheus/prometheus.toml.j2 +0 -0
  31. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/categraf/jinja2/input.vsphere/vsphere.toml.j2 +0 -0
  32. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/__init__.py +0 -0
  33. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/categraf/__init__.py +0 -0
  34. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/categraf/commands.py +0 -0
  35. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/common/__init__.py +0 -0
  36. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/common/options.py +0 -0
  37. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/common/utils.py +0 -0
  38. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/formatters/__init__.py +0 -0
  39. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/formatters/output.py +0 -0
  40. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli/main.py +0 -0
  41. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/cli.py +0 -0
  42. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/common/__init__.py +0 -0
  43. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/database/mongo.py +0 -0
  44. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/database/victoriametrics.py +0 -0
  45. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/dida365.py +0 -0
  46. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/feishu/client.py +0 -0
  47. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/feishu/endpoints.py +0 -0
  48. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/feishu/errors.py +0 -0
  49. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/feishu/helpers.py +0 -0
  50. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/feishu/typing.py +0 -0
  51. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/log/logger.py +0 -0
  52. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/log/victorialog.py +0 -0
  53. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/onepassword_connect.py +0 -0
  54. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/onepassword_sa.py +0 -0
  55. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/utils/env.py +0 -0
  56. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/utils/load_config.py +0 -0
  57. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/utils/ping_checker.py +0 -0
  58. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/utils/response.py +0 -0
  59. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/utils/richutils.py +0 -0
  60. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox/utils/timeutils.py +0 -0
  61. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox.egg-info/dependency_links.txt +0 -0
  62. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox.egg-info/entry_points.txt +0 -0
  63. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox.egg-info/requires.txt +0 -0
  64. {pytbox-0.0.9 → pytbox-0.1.0}/src/pytbox.egg-info/top_level.txt +0 -0
  65. {pytbox-0.0.9 → pytbox-0.1.0}/tests/test_base.py +0 -0
  66. {pytbox-0.0.9 → pytbox-0.1.0}/tests/test_feishu.py +0 -0
  67. {pytbox-0.0.9 → pytbox-0.1.0}/tests/test_logger.py +0 -0
  68. {pytbox-0.0.9 → pytbox-0.1.0}/tests/test_onepassword_connect.py +0 -0
  69. {pytbox-0.0.9 → pytbox-0.1.0}/tests/test_onepassword_sa.py +0 -0
  70. {pytbox-0.0.9 → pytbox-0.1.0}/tests/test_victoriametrics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytbox
3
- Version: 0.0.9
3
+ Version: 0.1.0
4
4
  Summary: A collection of Python integrations and utilities (Feishu, Dida365, VictoriaMetrics, ...)
5
5
  Author-email: mingming hou <houm01@foxmail.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pytbox"
7
- version = "0.0.9"
7
+ version = "0.1.0"
8
8
  description = "A collection of Python integrations and utilities (Feishu, Dida365, VictoriaMetrics, ...)"
9
9
  authors = [{ name = "mingming hou", email = "houm01@foxmail.com" }]
10
10
  license = "MIT"
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import os
4
+ from pathlib import Path
5
+ from pytbox.utils.load_config import load_config_by_file
6
+ from glob import glob
7
+ import os
8
+ from jinja2 import Environment, FileSystemLoader
9
+
10
+
11
+ jinja2_path = Path(__file__).parent / 'jinja2'
12
+ env = Environment(loader=FileSystemLoader(jinja2_path))
13
+
14
+ ping_template = env.get_template('input.ping/ping.toml.j2')
15
+ prometheus_template = env.get_template('input.prometheus/prometheus.toml.j2')
16
+
17
+
18
+ class BuildConfig:
19
+ '''
20
+ 生成配置
21
+
22
+ Args:
23
+ instances (_type_): _description_
24
+ output_dir (_type_): _description_
25
+ '''
26
+ def __init__(self, instances, output_dir):
27
+ self.instances = load_config_by_file(instances)
28
+ self.output_dir = output_dir
29
+
30
+ def _get_template(self, template_name):
31
+ return env.get_template(template_name)
32
+
33
+ def common(self, input_name):
34
+ template = self._get_template(f'input.{input_name}/{input_name}.toml.j2')
35
+ render_data = template.render()
36
+ target_dir = Path(self.output_dir) / f'input.{input_name}'
37
+ if not target_dir.exists():
38
+ target_dir.mkdir(parents=True, exist_ok=True)
39
+
40
+ with open(Path(self.output_dir) / f'input.{input_name}' / f'{input_name}.toml', 'w', encoding='utf-8') as f:
41
+ f.write(render_data)
42
+
43
+ def ping(self):
44
+ instances = self.instances['ping']['instance']
45
+ render_data = ping_template.render(instances=instances)
46
+ target_dir = Path(self.output_dir) / 'input.ping'
47
+ if not target_dir.exists():
48
+ target_dir.mkdir(parents=True, exist_ok=True)
49
+
50
+ with open(Path(self.output_dir) / 'input.ping' / 'ping.toml', 'w', encoding='utf-8') as f:
51
+ f.write(render_data)
52
+
53
+ def prometheus(self):
54
+ instances = self.instances['prometheus']['urls']
55
+ render_data = prometheus_template.render(instances=instances)
56
+ target_dir = Path(self.output_dir) / 'input.prometheus'
57
+ if not target_dir.exists():
58
+ target_dir.mkdir(parents=True, exist_ok=True)
59
+ with open(Path(self.output_dir) / 'input.prometheus' / 'prometheus.toml', 'w', encoding='utf-8') as f:
60
+ f.write(render_data)
61
+
62
+ def vsphere(self):
63
+ template = self._get_template('input.vsphere/vsphere.toml.j2')
64
+ instances = self.instances['vsphere']['instance']
65
+ render_data = template.render(instances=instances)
66
+ target_dir = Path(self.output_dir) / 'input.vsphere'
67
+ if not target_dir.exists():
68
+ target_dir.mkdir(parents=True, exist_ok=True)
69
+ with open(Path(self.output_dir) / 'input.vsphere' / 'vsphere.toml', 'w', encoding='utf-8') as f:
70
+ f.write(render_data)
71
+
72
+ def http_response(self):
73
+ template = self._get_template('input.http_response/http_response.toml.j2')
74
+ if self.instances.get('http_response'):
75
+ instances = self.instances['http_response']['instance']
76
+ render_data = template.render(instances=instances)
77
+ target_dir = Path(self.output_dir) / 'input.http_response'
78
+ if not target_dir.exists():
79
+ target_dir.mkdir(parents=True, exist_ok=True)
80
+ with open(Path(self.output_dir) / 'input.http_response' / 'http_response.toml', 'w', encoding='utf-8') as f:
81
+ f.write(render_data)
82
+
83
+ def net_response(self):
84
+ template = self._get_template('input.net_response/net_response.toml.j2')
85
+ if self.instances.get('net_response'):
86
+ instances = self.instances['net_response']['instance']
87
+ render_data = template.render(instances=instances)
88
+ target_dir = Path(self.output_dir) / 'input.net_response'
89
+ if not target_dir.exists():
90
+ target_dir.mkdir(parents=True, exist_ok=True)
91
+ with open(Path(self.output_dir) / 'input.net_response' / 'net_response.toml', 'w', encoding='utf-8') as f:
92
+ f.write(render_data)
93
+
94
+ def dns_query(self):
95
+ template = self._get_template('input.dns_query/dns_query.toml.j2')
96
+ if self.instances.get('dns_query'):
97
+ instances = self.instances['dns_query']['instance']
98
+ render_data = template.render(instances=instances)
99
+ target_dir = Path(self.output_dir) / 'input.dns_query'
100
+ if not target_dir.exists():
101
+ target_dir.mkdir(parents=True, exist_ok=True)
102
+ with open(Path(self.output_dir) / 'input.dns_query' / 'dns_query.toml', 'w', encoding='utf-8') as f:
103
+ f.write(render_data)
104
+
105
+ def snmp(self):
106
+ if self.instances.get('snmp'):
107
+ device_types = self.instances['snmp']['instances']
108
+ for device_type in device_types:
109
+ instances = self.instances['snmp']['instances'][device_type]
110
+ jinja2_dir = Path(jinja2_path) / 'input.snmp'
111
+ device_templates = glob(str(jinja2_dir / f'{device_type}_*.toml.j2'))
112
+ if not device_templates:
113
+ continue
114
+
115
+ for tmpl_path in device_templates:
116
+ tmpl_name = os.path.basename(tmpl_path)
117
+ # 例如 h3c_system.toml.j2 -> h3c_system
118
+ base_name = tmpl_name.replace('.toml.j2', '')
119
+
120
+ template = self._get_template(f'input.snmp/{tmpl_name}')
121
+ # 修复数据结构:模板期望的是数组,每个元素是字典
122
+ # instances 是 [{"udp://10.1.1.1:161": {...}, "udp://10.1.1.2:161": {...}}, ...]
123
+ render_data = template.render(instances=instances)
124
+
125
+ target_dir = Path(self.output_dir) / 'input.snmp'
126
+ if not target_dir.exists():
127
+ target_dir.mkdir(parents=True, exist_ok=True)
128
+
129
+ output_file = target_dir / f'{base_name}.toml'
130
+ with open(output_file, 'w', encoding='utf-8') as f:
131
+ f.write(render_data)
132
+
133
+ def run(self):
134
+ self.common('cpu')
135
+ self.common('mem')
136
+ self.common('net')
137
+ self.common('disk')
138
+ self.common('diskio')
139
+ self.vsphere()
140
+ self.ping()
141
+ self.prometheus()
142
+ self.http_response()
143
+ self.net_response()
144
+ self.dns_query()
145
+ self.snmp()
@@ -0,0 +1,35 @@
1
+ [ping]
2
+ [[ping.instance]]
3
+ "10.1.1.1" = { name = "x", env = "prod" }
4
+ "10.1.1.2" = { name = "demo02", env = "dev" }
5
+
6
+ [prometheus]
7
+ [[prometheus.urls]]
8
+ "http://10.200.12.202:9100" = { name = "x", env = "prod" }
9
+
10
+ [vsphere]
11
+ [[vsphere.instance]]
12
+ "test" = { vcenter = "https://10.1.1.1/sdk", username = "categraf@vsphere.local", password = "xxx" }
13
+
14
+ [http_response]
15
+ [[http_response.instance]]
16
+ "https://www.baidu.com" = { name = "x", env = "prod" }
17
+
18
+
19
+ [net_response]
20
+ [[net_response.instance]]
21
+ "124.74.245.90:8443" = { name = "x", env = "prod" }
22
+
23
+ [dns_query]
24
+ [[dns_query.instance]]
25
+ "119.29.29.29_baidu.com" = { dns_server = "119.29.29.29", domains = "www.baidu.com", labels = { name = "x", env = "prod" } }
26
+
27
+ [snmp]
28
+ [[snmp.instances.h3c]]
29
+ "10.1.1.1:161" = { version = 2, community = "public" }
30
+ "10.1.1.2:161" = { version = 2, community = "public" }
31
+ "10.1.1.3:161" = { version = 3, sec_name = "sec", auth_protocol = "SHA", auth_password = "pass01", priv_protocol = "AES", priv_password = "pass02", sec_level = "authPriv" }
32
+
33
+ # [[snmp.instances.huawei]]
34
+ # "udp://172.16.1.1:161" = { version = 2, community = "public"}
35
+ # "udp://172.16.1.2:161" = { version = 2, community = "public"}
@@ -0,0 +1,12 @@
1
+ {% for instance in instances %}
2
+ {% for name, data in instance.items() %}
3
+ [[instances]]
4
+ # append some labels for series
5
+ labels = { {% for k, v in data['labels'].items() %}{% if not loop.first %}, {% endif %}{% if k.isidentifier() %}{{ k }}{% else %}"{{ k }}"{% endif %} = "{{ v }}"{% endfor %} }
6
+ servers = ["{{ data['dns_server'] }}"]
7
+ ## Domains or subdomains to query.
8
+ domains = ["{{ data['domains'] }}"]
9
+ record_type = "A"
10
+ timeout = 2
11
+ {% endfor %}
12
+ {% endfor %}
@@ -0,0 +1,9 @@
1
+ {% for instance in instances %}
2
+ {% for target, labels in instance.items() %}
3
+ [[instances]]
4
+ targets = [
5
+ "{{ target }}"
6
+ ]
7
+ labels = { {% for k, v in labels.items() %}{% if not loop.first %}, {% endif %}{% if k.isidentifier() %}{{ k }}{% else %}"{{ k }}"{% endif %} = "{{ v }}"{% endfor %} }
8
+ {% endfor %}
9
+ {% endfor %}
@@ -0,0 +1,96 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.table]]
32
+ name = "interface"
33
+ inherit_tags = ["sysName"]
34
+ index_as_tag = true
35
+
36
+ [[instances.table.field]]
37
+ name = "ifIndex"
38
+ oid = "1.3.6.1.2.1.2.2.1.1"
39
+ is_tag = true
40
+
41
+ [[instances.table.field]]
42
+ name = "ifName"
43
+ oid = "1.3.6.1.2.1.31.1.1.1.1"
44
+ is_tag = true
45
+
46
+ [[instances.table.field]]
47
+ name = "ifDescr"
48
+ oid = "1.3.6.1.2.1.2.2.1.2"
49
+ is_tag = true
50
+
51
+ [[instances.table.field]]
52
+ name = "ifSpeed"
53
+ oid = "1.3.6.1.2.1.2.2.1.5"
54
+ # is_tag = true
55
+
56
+ [[instances.table.field]]
57
+ name = "ifAdminStatus"
58
+ oid = "1.3.6.1.2.1.2.2.1.7"
59
+ # is_tag = true
60
+
61
+ [[instances.table.field]]
62
+ name = "ifOperStatus"
63
+ oid = "1.3.6.1.2.1.2.2.1.8"
64
+ # is_tag = true
65
+
66
+ [[instances.table.field]]
67
+ name = "ifInDiscards"
68
+ oid = "1.3.6.1.2.1.2.2.1.13"
69
+
70
+ [[instances.table.field]]
71
+ name = "ifInErrors"
72
+ oid = "1.3.6.1.2.1.2.2.1.14"
73
+
74
+ [[instances.table.field]]
75
+ name = "ifOutDiscards"
76
+ oid = "1.3.6.1.2.1.2.2.1.19"
77
+
78
+ [[instances.table.field]]
79
+ name = "ifOutErrors"
80
+ oid = "1.3.6.1.2.1.2.2.1.20"
81
+
82
+ [[instances.table.field]]
83
+ name = "ifAlias"
84
+ oid = "1.3.6.1.2.1.31.1.1.1.18"
85
+ is_tag = true
86
+
87
+ [[instances.table.field]]
88
+ name = "ifHCInOctets"
89
+ oid = "1.3.6.1.2.1.31.1.1.1.6"
90
+
91
+ [[instances.table.field]]
92
+ name = "ifHCOutOctets"
93
+ oid = "1.3.6.1.2.1.31.1.1.1.10"
94
+
95
+ {% endfor %}
96
+ {% endfor %}
@@ -0,0 +1,41 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.field]]
32
+ oid = "1.3.6.1.2.1.1.1.0"
33
+ name = "sysDescr"
34
+ is_tag = true
35
+
36
+ [[instances.field]]
37
+ oid = "1.3.6.1.2.1.1.3.0"
38
+ name = "sysUpTime"
39
+ conversion = "float(2)"
40
+ {% endfor %}
41
+ {% endfor %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytbox
3
- Version: 0.0.9
3
+ Version: 0.1.0
4
4
  Summary: A collection of Python integrations and utilities (Feishu, Dida365, VictoriaMetrics, ...)
5
5
  Author-email: mingming hou <houm01@foxmail.com>
6
6
  License-Expression: MIT
@@ -28,6 +28,8 @@ src/pytbox/categraf/jinja2/input.net/net.toml.j2
28
28
  src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2
29
29
  src/pytbox/categraf/jinja2/input.ping/ping.toml.j2
30
30
  src/pytbox/categraf/jinja2/input.prometheus/prometheus.toml.j2
31
+ src/pytbox/categraf/jinja2/input.snmp/h3c_interface.toml.j2
32
+ src/pytbox/categraf/jinja2/input.snmp/h3c_system.toml.j2
31
33
  src/pytbox/categraf/jinja2/input.vsphere/vsphere.toml.j2
32
34
  src/pytbox/cli/__init__.py
33
35
  src/pytbox/cli/main.py
@@ -1,91 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- import os
4
- from pathlib import Path
5
- from pytbox.utils.load_config import load_config_by_file
6
-
7
- from jinja2 import Environment, FileSystemLoader
8
-
9
-
10
- jinja2_path = Path(__file__).parent / 'jinja2'
11
- env = Environment(loader=FileSystemLoader(jinja2_path))
12
-
13
- ping_template = env.get_template('input.ping/ping.toml.j2')
14
- prometheus_template = env.get_template('input.prometheus/prometheus.toml.j2')
15
-
16
-
17
- class BuildConfig:
18
- '''
19
- 生成配置
20
-
21
- Args:
22
- instances (_type_): _description_
23
- output_dir (_type_): _description_
24
- '''
25
- def __init__(self, instances, output_dir):
26
- self.instances = load_config_by_file(instances)
27
- self.output_dir = output_dir
28
-
29
- def _get_template(self, template_name):
30
- return env.get_template(template_name)
31
-
32
- def common(self, input_name):
33
- template = self._get_template(f'input.{input_name}/{input_name}.toml.j2')
34
- render_data = template.render()
35
- target_dir = Path(self.output_dir) / f'input.{input_name}'
36
- if not target_dir.exists():
37
- target_dir.mkdir(parents=True, exist_ok=True)
38
-
39
- with open(Path(self.output_dir) / f'input.{input_name}' / f'{input_name}.toml', 'w', encoding='utf-8') as f:
40
- f.write(render_data)
41
-
42
- def ping(self):
43
- instances = self.instances['ping']['instance']
44
- render_data = ping_template.render(instances=instances)
45
- target_dir = Path(self.output_dir) / 'input.ping'
46
- if not target_dir.exists():
47
- target_dir.mkdir(parents=True, exist_ok=True)
48
-
49
- with open(Path(self.output_dir) / 'input.ping' / 'ping.toml', 'w', encoding='utf-8') as f:
50
- f.write(render_data)
51
-
52
- def prometheus(self):
53
- instances = self.instances['prometheus']['urls']
54
- render_data = prometheus_template.render(instances=instances)
55
- target_dir = Path(self.output_dir) / 'input.prometheus'
56
- if not target_dir.exists():
57
- target_dir.mkdir(parents=True, exist_ok=True)
58
- with open(Path(self.output_dir) / 'input.prometheus' / 'prometheus.toml', 'w', encoding='utf-8') as f:
59
- f.write(render_data)
60
-
61
- def vsphere(self):
62
- template = self._get_template('input.vsphere/vsphere.toml.j2')
63
- instances = self.instances['vsphere']['instance']
64
- print(instances)
65
- render_data = template.render(instances=instances)
66
- target_dir = Path(self.output_dir) / 'input.vsphere'
67
- if not target_dir.exists():
68
- target_dir.mkdir(parents=True, exist_ok=True)
69
- with open(Path(self.output_dir) / 'input.vsphere' / 'vsphere.toml', 'w', encoding='utf-8') as f:
70
- f.write(render_data)
71
-
72
- def http_response(self):
73
- template = self._get_template('input.http_response/http_response.toml.j2')
74
- instances = self.instances['http_response']['instance']
75
- render_data = template.render(instances=instances)
76
- target_dir = Path(self.output_dir) / 'input.http_response'
77
- if not target_dir.exists():
78
- target_dir.mkdir(parents=True, exist_ok=True)
79
- with open(Path(self.output_dir) / 'input.http_response' / 'http_response.toml', 'w', encoding='utf-8') as f:
80
- f.write(render_data)
81
-
82
- def run(self):
83
- # self.common('cpu')
84
- # self.common('mem')
85
- # self.common('net')
86
- # self.common('disk')
87
- # self.common('diskio')
88
- # self.vsphere()
89
- # self.ping()
90
- # self.prometheus()
91
- self.http_response()
@@ -1,16 +0,0 @@
1
- [ping]
2
- [[ping.instance]]
3
- "10.1.1.1" = { name = "x", env = "prod" }
4
- "10.1.1.2" = { name = "demo02", env = "dev" }
5
-
6
- [prometheus]
7
- [[prometheus.urls]]
8
- "http://10.200.12.202:9100" = { name = "x", env = "prod" }
9
-
10
- [vsphere]
11
- [[vsphere.instance]]
12
- "test" = { vcenter = "https://10.1.1.1/sdk", username = "categraf@vsphere.local", password = "xxx" }
13
-
14
- [http_response]
15
- [[http_response.instance]]
16
- "https://www.baidu.com" = { name = "x", env = "prod" }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes