pytbox 0.2.1__tar.gz → 0.2.3__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.
- {pytbox-0.2.1/src/pytbox.egg-info → pytbox-0.2.3}/PKG-INFO +1 -1
- {pytbox-0.2.1 → pytbox-0.2.3}/pyproject.toml +1 -1
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/database/victoriametrics.py +34 -3
- {pytbox-0.2.1 → pytbox-0.2.3/src/pytbox.egg-info}/PKG-INFO +1 -1
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_victoriametrics.py +4 -1
- {pytbox-0.2.1 → pytbox-0.2.3}/MANIFEST.in +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/README.md +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/setup.cfg +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/alert/alert_handler.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/alert/ping.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/alicloud/sls.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/base.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/build_config.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/instances.toml +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/__init__.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.cpu/cpu.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.disk/disk.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.diskio/diskio.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.dns_query/dns_query.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.http_response/http_response.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.mem/mem.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.net/net.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.ping/ping.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.prometheus/prometheus.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/cisco_interface.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/cisco_system.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/h3c_interface.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/h3c_system.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/huawei_interface.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/huawei_system.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/ruijie_interface.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/ruijie_system.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.vsphere/vsphere.toml.j2 +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/__init__.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/categraf/__init__.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/categraf/commands.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/commands/vm.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/common/__init__.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/common/options.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/common/utils.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/formatters/__init__.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/formatters/output.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli/main.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/cli.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/common/__init__.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/database/mongo.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/dida365.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/excel.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/feishu/client.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/feishu/endpoints.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/feishu/errors.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/feishu/helpers.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/feishu/typing.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/log/logger.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/log/victorialog.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/mail/alimail.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/mail/client.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/mail/mail_detail.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/network/meraki.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/onepassword_connect.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/onepassword_sa.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/pyjira.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/cronjob.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/env.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/load_config.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/load_vm_devfile.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/response.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/richutils.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/utils/timeutils.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/vmware.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/win/ad.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox.egg-info/SOURCES.txt +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox.egg-info/dependency_links.txt +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox.egg-info/entry_points.txt +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox.egg-info/requires.txt +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox.egg-info/top_level.txt +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_base.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_feishu.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_load_jsonfile.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_logger.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_onepassword_connect.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_onepassword_sa.py +0 -0
- {pytbox-0.2.1 → pytbox-0.2.3}/tests/test_vmware.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pytbox"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.3"
|
|
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"
|
|
@@ -251,16 +251,47 @@ class VictoriaMetrics:
|
|
|
251
251
|
ReturnResponse: _description_
|
|
252
252
|
'''
|
|
253
253
|
if direction == 'in':
|
|
254
|
-
query = f'avg_over_time(rate(snmp_interface_ifHCInOctets{{sysName="{sysname}", ifName="{ifname}"}}[{last_minutes}m]) * 8 [{last_hours}h:]) / 1e6'
|
|
254
|
+
query = f'avg_over_time((rate(snmp_interface_ifHCInOctets{{sysName="{sysname}", ifName="{ifname}"}}[{last_minutes}m]) * 8) [{last_hours}h:]) / 1e6'
|
|
255
255
|
else:
|
|
256
|
-
query = f'avg_over_time(rate(snmp_interface_ifHCOutOctets{{sysName="{sysname}", ifName="{ifname}"}}[{last_minutes}m]) * 8 [{last_hours}h:]) / 1e6'
|
|
256
|
+
query = f'avg_over_time((rate(snmp_interface_ifHCOutOctets{{sysName="{sysname}", ifName="{ifname}"}}[{last_minutes}m]) * 8) [{last_hours}h:]) / 1e6'
|
|
257
257
|
r = self.query(query)
|
|
258
258
|
try:
|
|
259
259
|
rate = r.data[0]['value'][1]
|
|
260
260
|
return ReturnResponse(code=0, msg=f"查询 {sysname} {ifname} 最近 {last_hours} 小时平均速率为 {round(float(rate), 2)} Mbit/s", data=round(float(rate), 2))
|
|
261
261
|
except KeyError:
|
|
262
262
|
return ReturnResponse(code=1, msg=f"查询 {sysname} {ifname} 最近 {last_hours} 小时平均速率为 0 Mbit/s")
|
|
263
|
-
|
|
263
|
+
|
|
264
|
+
def check_interface_max_rate(self,
|
|
265
|
+
direction: Literal['in', 'out'],
|
|
266
|
+
sysname: str,
|
|
267
|
+
ifname:str,
|
|
268
|
+
last_hours: Optional[int] = 24,
|
|
269
|
+
last_minutes: Optional[int] = 5,
|
|
270
|
+
) -> ReturnResponse:
|
|
271
|
+
'''
|
|
272
|
+
_summary_
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
direction (Literal['in', 'out']): _description_
|
|
276
|
+
sysname (str): _description_
|
|
277
|
+
ifname (str): _description_
|
|
278
|
+
last_hours (Optional[int], optional): _description_. Defaults to 24.
|
|
279
|
+
last_minutes (Optional[int], optional): _description_. Defaults to 5.
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
ReturnResponse: _description_
|
|
283
|
+
'''
|
|
284
|
+
if direction == 'in':
|
|
285
|
+
query = f'max_over_time((rate(snmp_interface_ifHCInOctets{{sysName="{sysname}", ifName="{ifname}"}}[{last_minutes}m]) * 8) [{last_hours}h:]) / 1e6'
|
|
286
|
+
else:
|
|
287
|
+
query = f'max_over_time((rate(snmp_interface_ifHCOutOctets{{sysName="{sysname}", ifName="{ifname}"}}[{last_minutes}m]) * 8) [{last_hours}h:]) / 1e6'
|
|
288
|
+
r = self.query(query)
|
|
289
|
+
try:
|
|
290
|
+
rate = r.data[0]['value'][1]
|
|
291
|
+
return ReturnResponse(code=0, msg=f"查询 {sysname} {ifname} 最近 {last_hours} 小时最大速率为 {round(float(rate), 2)} Mbit/s", data=round(float(rate), 2))
|
|
292
|
+
except KeyError:
|
|
293
|
+
return ReturnResponse(code=1, msg=f"查询 {sysname} {ifname} 最近 {last_hours} 小时最大速率为 0 Mbit/s")
|
|
294
|
+
|
|
264
295
|
def check_snmp_port_status(self, sysname: str=None, if_name: str=None, last_minute: int=5, dev_file: str=None) -> ReturnResponse:
|
|
265
296
|
'''
|
|
266
297
|
查询端口状态
|
|
@@ -22,7 +22,10 @@ def test_check_snmp_port_status():
|
|
|
22
22
|
print(r)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
r = vm.check_interface_avg_rate(direction='in', sysname='whcq-prod-coresw-s6720-254', ifname='XGigabitEthernet0/0/47', last_hours=24, last_minutes=5)
|
|
25
|
+
r = vm.check_interface_avg_rate(direction='in', sysname='whcq-prod-coresw-s6720-254', ifname='XGigabitEthernet0/0/47', last_hours=24*30, last_minutes=5)
|
|
26
|
+
print(r)
|
|
27
|
+
|
|
28
|
+
r = vm.check_interface_max_rate(direction='in', sysname='whcq-prod-coresw-s6720-254', ifname='XGigabitEthernet0/0/47', last_hours=24*30, last_minutes=5)
|
|
26
29
|
print(r)
|
|
27
30
|
|
|
28
31
|
if __name__ == "__main__":
|
|
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
|
|
File without changes
|
{pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.http_response/http_response.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
{pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.prometheus/prometheus.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/huawei_interface.toml.j2
RENAMED
|
File without changes
|
|
File without changes
|
{pytbox-0.2.1 → pytbox-0.2.3}/src/pytbox/categraf/jinja2/input.snmp/ruijie_interface.toml.j2
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|