ezKit 1.12.0__py3-none-any.whl → 1.12.1__py3-none-any.whl
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.
- ezKit/bottle_extensions.py +8 -4
- ezKit/cipher.py +19 -16
- ezKit/database.py +20 -18
- ezKit/dockerhub.py +9 -3
- ezKit/http.py +9 -6
- ezKit/mongo.py +3 -2
- ezKit/qywx.py +47 -20
- ezKit/redis.py +2 -1
- ezKit/sendemail.py +12 -4
- ezKit/token.py +13 -13
- ezKit/utils.py +158 -230
- ezKit/xftp.py +39 -17
- ezKit/zabbix.py +140 -101
- {ezkit-1.12.0.dist-info → ezkit-1.12.1.dist-info}/METADATA +1 -1
- ezkit-1.12.1.dist-info/RECORD +22 -0
- {ezkit-1.12.0.dist-info → ezkit-1.12.1.dist-info}/WHEEL +1 -1
- ezkit-1.12.0.dist-info/RECORD +0 -22
- {ezkit-1.12.0.dist-info → ezkit-1.12.1.dist-info}/licenses/LICENSE +0 -0
- {ezkit-1.12.0.dist-info → ezkit-1.12.1.dist-info}/top_level.txt +0 -0
ezKit/zabbix.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
"""Zabbix Library"""
|
2
|
+
|
2
3
|
import time
|
3
4
|
from copy import deepcopy
|
4
5
|
|
@@ -8,7 +9,7 @@ from loguru import logger
|
|
8
9
|
from . import utils
|
9
10
|
|
10
11
|
|
11
|
-
class Zabbix
|
12
|
+
class Zabbix:
|
12
13
|
"""Zabbix"""
|
13
14
|
|
14
15
|
api: str | None = None
|
@@ -24,11 +25,7 @@ class Zabbix():
|
|
24
25
|
# ----------------------------------------------------------------------------------------------
|
25
26
|
|
26
27
|
def request(
|
27
|
-
self,
|
28
|
-
method: str,
|
29
|
-
params: dict | list,
|
30
|
-
debug: bool = False,
|
31
|
-
**kwargs
|
28
|
+
self, method: str, params: dict | list, debug: bool = False, **kwargs
|
32
29
|
) -> dict | None:
|
33
30
|
"""Request Zabbix API"""
|
34
31
|
|
@@ -50,7 +47,7 @@ class Zabbix():
|
|
50
47
|
"method": method,
|
51
48
|
"params": params,
|
52
49
|
"auth": None if method == "apiinfo.version" else self.auth,
|
53
|
-
"id": int(time.time())
|
50
|
+
"id": int(time.time()),
|
54
51
|
}
|
55
52
|
|
56
53
|
if utils.isTrue(debug, bool):
|
@@ -61,7 +58,9 @@ class Zabbix():
|
|
61
58
|
return None
|
62
59
|
|
63
60
|
# 请求API
|
64
|
-
response = requests.post(
|
61
|
+
response = requests.post(
|
62
|
+
self.api, headers=headers, json=data, timeout=10, **kwargs
|
63
|
+
)
|
65
64
|
|
66
65
|
if utils.isTrue(debug, bool):
|
67
66
|
logger.info(f"response: {response}")
|
@@ -89,8 +88,7 @@ class Zabbix():
|
|
89
88
|
logger.info(f"{info} [started]")
|
90
89
|
|
91
90
|
data: dict | None = self.request(
|
92
|
-
method="user.login",
|
93
|
-
params={"username": username, "password": password}
|
91
|
+
method="user.login", params={"username": username, "password": password}
|
94
92
|
)
|
95
93
|
|
96
94
|
if data is None:
|
@@ -122,7 +120,7 @@ class Zabbix():
|
|
122
120
|
data = self.request(method="user.logout", params={})
|
123
121
|
|
124
122
|
if data is not None and data.get("result"):
|
125
|
-
logger.success(f
|
123
|
+
logger.success(f"{info} [succeeded]")
|
126
124
|
return True
|
127
125
|
|
128
126
|
if data is not None and data.get("error"):
|
@@ -160,13 +158,13 @@ class Zabbix():
|
|
160
158
|
|
161
159
|
logger.info(f"{info} [started]")
|
162
160
|
|
163
|
-
data = self.request(
|
161
|
+
data = self.request("apiinfo.version", [])
|
164
162
|
|
165
163
|
if data is None:
|
166
164
|
return None
|
167
165
|
|
168
166
|
logger.success(f"{info} [succeeded]")
|
169
|
-
return data[
|
167
|
+
return data["result"]
|
170
168
|
|
171
169
|
except Exception as e:
|
172
170
|
logger.error(f"{info} [failed]")
|
@@ -189,17 +187,19 @@ class Zabbix():
|
|
189
187
|
|
190
188
|
logger.info(f"{info} [started]")
|
191
189
|
|
192
|
-
data = self.request(
|
190
|
+
data = self.request(
|
191
|
+
"template.get", {"output": "templateid", "filter": {"name": name}}
|
192
|
+
)
|
193
193
|
|
194
194
|
if data is None:
|
195
195
|
return None
|
196
196
|
|
197
|
-
if not utils.isTrue(data[
|
197
|
+
if not utils.isTrue(data["result"], list):
|
198
198
|
logger.error(f"{info} [error: {data['error']}]")
|
199
199
|
return None
|
200
200
|
|
201
201
|
logger.success(f"{info} [succeeded]")
|
202
|
-
return [i[
|
202
|
+
return [i["templateid"] for i in data["result"]]
|
203
203
|
|
204
204
|
except Exception as e:
|
205
205
|
logger.error(f"{info} [failed]")
|
@@ -223,17 +223,19 @@ class Zabbix():
|
|
223
223
|
logger.info(f"{info} [started]")
|
224
224
|
|
225
225
|
# Zabbix 6.0 -> output: groupid
|
226
|
-
data = self.request(
|
226
|
+
data = self.request(
|
227
|
+
"hostgroup.get", {"output": "extend", "filter": {"name": name}}
|
228
|
+
)
|
227
229
|
|
228
230
|
if data is None:
|
229
231
|
return None
|
230
232
|
|
231
|
-
if not utils.isTrue(data.get(
|
233
|
+
if not utils.isTrue(data.get("result"), list):
|
232
234
|
logger.error(f"{info} [error: {data['error']}]")
|
233
235
|
return None
|
234
236
|
|
235
237
|
logger.success(f"{info} [succeeded]")
|
236
|
-
return [i[
|
238
|
+
return [i["groupid"] for i in data["result"]]
|
237
239
|
|
238
240
|
except Exception as e:
|
239
241
|
logger.error(f"{info} [failed]")
|
@@ -242,7 +244,9 @@ class Zabbix():
|
|
242
244
|
|
243
245
|
# ----------------------------------------------------------------------------------------------
|
244
246
|
|
245
|
-
def get_hosts_by_template_name(
|
247
|
+
def get_hosts_by_template_name(
|
248
|
+
self, name: str, output: str = "extend", **kwargs
|
249
|
+
) -> list | None:
|
246
250
|
"""Get hosts by template name"""
|
247
251
|
|
248
252
|
# name: string/array
|
@@ -255,28 +259,32 @@ class Zabbix():
|
|
255
259
|
|
256
260
|
logger.info(f"{info} [started]")
|
257
261
|
|
258
|
-
templates = self.request(
|
262
|
+
templates = self.request(
|
263
|
+
"template.get", {"output": ["templateid"], "filter": {"host": name}}
|
264
|
+
)
|
259
265
|
|
260
266
|
if templates is None:
|
261
267
|
return None
|
262
268
|
|
263
|
-
if not utils.isTrue(templates.get(
|
269
|
+
if not utils.isTrue(templates.get("result"), list):
|
264
270
|
logger.error(f"{info} [error: {templates['error']}]")
|
265
271
|
return None
|
266
272
|
|
267
|
-
templateids = [i[
|
273
|
+
templateids = [i["templateid"] for i in templates["result"]]
|
268
274
|
|
269
|
-
hosts = self.request(
|
275
|
+
hosts = self.request(
|
276
|
+
"host.get", {"output": output, "templateids": templateids, **kwargs}
|
277
|
+
)
|
270
278
|
|
271
279
|
if hosts is None:
|
272
280
|
return None
|
273
281
|
|
274
|
-
if not utils.isTrue(hosts.get(
|
282
|
+
if not utils.isTrue(hosts.get("result"), list):
|
275
283
|
logger.error(f"{info} [error: {hosts['error']}]")
|
276
284
|
return None
|
277
285
|
|
278
286
|
logger.success(f"{info} [succeeded]")
|
279
|
-
return hosts[
|
287
|
+
return hosts["result"]
|
280
288
|
|
281
289
|
except Exception as e:
|
282
290
|
logger.error(f"{info} [failed]")
|
@@ -285,7 +293,9 @@ class Zabbix():
|
|
285
293
|
|
286
294
|
# ----------------------------------------------------------------------------------------------
|
287
295
|
|
288
|
-
def get_hosts_by_hostgroup_name(
|
296
|
+
def get_hosts_by_hostgroup_name(
|
297
|
+
self, name: str, output: str | list = "extend", **kwargs
|
298
|
+
) -> list | None:
|
289
299
|
"""Get hosts by hostgroup name"""
|
290
300
|
|
291
301
|
# name: string/array
|
@@ -303,17 +313,19 @@ class Zabbix():
|
|
303
313
|
if ids is None:
|
304
314
|
return None
|
305
315
|
|
306
|
-
hosts = self.request(
|
316
|
+
hosts = self.request(
|
317
|
+
"host.get", {"output": output, "groupids": ids, **kwargs}
|
318
|
+
)
|
307
319
|
|
308
320
|
if hosts is None:
|
309
321
|
return None
|
310
322
|
|
311
|
-
if not utils.isTrue(hosts.get(
|
323
|
+
if not utils.isTrue(hosts.get("result"), list):
|
312
324
|
logger.error(f"{info} [error: {hosts['error']}]")
|
313
325
|
return None
|
314
326
|
|
315
327
|
logger.success(f"{info} [succeeded]")
|
316
|
-
return hosts[
|
328
|
+
return hosts["result"]
|
317
329
|
|
318
330
|
except Exception as e:
|
319
331
|
logger.error(f"{info} [failed]")
|
@@ -322,7 +334,9 @@ class Zabbix():
|
|
322
334
|
|
323
335
|
# ----------------------------------------------------------------------------------------------
|
324
336
|
|
325
|
-
def get_interface_by_host_id(
|
337
|
+
def get_interface_by_host_id(
|
338
|
+
self, hostid: str, output: str = "extend"
|
339
|
+
) -> list | None:
|
326
340
|
"""Get interface by host id"""
|
327
341
|
|
328
342
|
# hostids: string/array
|
@@ -334,17 +348,19 @@ class Zabbix():
|
|
334
348
|
|
335
349
|
logger.info(f"{info} [started]")
|
336
350
|
|
337
|
-
data = self.request(
|
351
|
+
data = self.request(
|
352
|
+
"hostinterface.get", {"output": output, "hostids": hostid}
|
353
|
+
)
|
338
354
|
|
339
355
|
if data is None:
|
340
356
|
return None
|
341
357
|
|
342
|
-
if not utils.isTrue(data.get(
|
358
|
+
if not utils.isTrue(data.get("result"), list):
|
343
359
|
logger.error(f"{info} [error: {data['error']}]")
|
344
360
|
return None
|
345
361
|
|
346
362
|
logger.success(f"{info} [succeeded]")
|
347
|
-
return data[
|
363
|
+
return data["result"]
|
348
364
|
|
349
365
|
except Exception as e:
|
350
366
|
logger.error(f"{info} [failed]")
|
@@ -367,8 +383,8 @@ class Zabbix():
|
|
367
383
|
|
368
384
|
# 服务器排查
|
369
385
|
for host in hosts:
|
370
|
-
if host[
|
371
|
-
unavailable.append(host[
|
386
|
+
if host["interfaces"][0]["available"] != "1":
|
387
|
+
unavailable.append(host["name"])
|
372
388
|
else:
|
373
389
|
available.append(host)
|
374
390
|
|
@@ -386,7 +402,7 @@ class Zabbix():
|
|
386
402
|
time_from: int,
|
387
403
|
time_till: int,
|
388
404
|
item_key: str,
|
389
|
-
data_type: int = 3
|
405
|
+
data_type: int = 3,
|
390
406
|
) -> list | None:
|
391
407
|
"""get history by item key"""
|
392
408
|
|
@@ -453,13 +469,13 @@ class Zabbix():
|
|
453
469
|
# --------------------------------------------------------------------------------------
|
454
470
|
|
455
471
|
# Get Item
|
456
|
-
hostids = [i[
|
472
|
+
hostids = [i["hostid"] for i in hosts]
|
457
473
|
item_params = {
|
458
|
-
|
459
|
-
|
460
|
-
|
474
|
+
"output": ["name", "itemid", "hostid"],
|
475
|
+
"hostids": hostids,
|
476
|
+
"filter": {"key_": item_key},
|
461
477
|
}
|
462
|
-
items = self.request(
|
478
|
+
items = self.request("item.get", item_params)
|
463
479
|
|
464
480
|
if items is None:
|
465
481
|
return None
|
@@ -467,7 +483,7 @@ class Zabbix():
|
|
467
483
|
# --------------------------------------------------------------------------------------
|
468
484
|
|
469
485
|
# 因为 history 获取的顺序是乱的, 为了使输出和 hosts 列表顺序一致, 将 Item ID 追加到 hosts, 然后遍历 hosts 列表输出
|
470
|
-
if not utils.isTrue(items.get(
|
486
|
+
if not utils.isTrue(items.get("result"), list):
|
471
487
|
logger.error(f"{info} [item key {item_key} not find]")
|
472
488
|
return None
|
473
489
|
|
@@ -475,12 +491,12 @@ class Zabbix():
|
|
475
491
|
if not isinstance(items, dict):
|
476
492
|
return
|
477
493
|
|
478
|
-
item: dict = next((item_object for item_object in items[
|
494
|
+
item: dict = next((item_object for item_object in items["result"] if host["hostid"] == item_object["hostid"]), "") # type: ignore
|
479
495
|
|
480
|
-
if utils.isTrue(item, dict) and item.get(
|
481
|
-
host[
|
482
|
-
host[
|
483
|
-
item_ids.append(item[
|
496
|
+
if utils.isTrue(item, dict) and item.get("itemid") is not None:
|
497
|
+
host["itemkey"] = item_key
|
498
|
+
host["itemid"] = item["itemid"]
|
499
|
+
item_ids.append(item["itemid"])
|
484
500
|
item_history.append(host)
|
485
501
|
|
486
502
|
# 如果 ID 列表为空, 则返回 None
|
@@ -492,30 +508,36 @@ class Zabbix():
|
|
492
508
|
|
493
509
|
# Get History
|
494
510
|
history_params = {
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
511
|
+
"output": "extend",
|
512
|
+
"history": data_type,
|
513
|
+
"itemids": item_ids,
|
514
|
+
"time_from": time_from,
|
515
|
+
"time_till": time_till,
|
500
516
|
}
|
501
|
-
history = self.request(
|
517
|
+
history = self.request("history.get", history_params)
|
502
518
|
|
503
519
|
if history is None:
|
504
520
|
return None
|
505
521
|
|
506
522
|
# --------------------------------------------------------------------------------------------------
|
507
523
|
|
508
|
-
if not utils.isTrue(history.get(
|
524
|
+
if not utils.isTrue(history.get("result"), list):
|
509
525
|
logger.error(f"{info} [item history not find]")
|
510
526
|
return None
|
511
527
|
|
512
528
|
for item in item_history:
|
513
529
|
# 根据 itemid 提取数据
|
514
|
-
item_history_data = [
|
530
|
+
item_history_data = [
|
531
|
+
history_result
|
532
|
+
for history_result in history["result"]
|
533
|
+
if item["itemid"] == history_result["itemid"]
|
534
|
+
]
|
515
535
|
# 根据 clock 排序
|
516
|
-
item_history_data = utils.list_dict_sorted_by_key(
|
536
|
+
item_history_data = utils.list_dict_sorted_by_key(
|
537
|
+
item_history_data, "clock"
|
538
|
+
)
|
517
539
|
# 整合数据
|
518
|
-
item[
|
540
|
+
item["history"] = item_history_data
|
519
541
|
|
520
542
|
logger.success(f"{info} [succeeded]")
|
521
543
|
return item_history
|
@@ -533,7 +555,7 @@ class Zabbix():
|
|
533
555
|
interfaces: list,
|
534
556
|
time_from: int,
|
535
557
|
time_till: int,
|
536
|
-
direction: str
|
558
|
+
direction: str,
|
537
559
|
) -> list | None:
|
538
560
|
"""获取网卡历史数据"""
|
539
561
|
|
@@ -561,28 +583,35 @@ class Zabbix():
|
|
561
583
|
# return None
|
562
584
|
|
563
585
|
# 创建一个只有 网卡名称 的 列表
|
564
|
-
interfaces_names: set = set(
|
586
|
+
interfaces_names: set = set(
|
587
|
+
interface["interface"] for interface in interfaces
|
588
|
+
)
|
565
589
|
|
566
590
|
# 创建一个 Key 为 网卡名称 的 dictionary
|
567
591
|
interfaces_dict: dict = {key: [] for key in interfaces_names}
|
568
592
|
|
569
593
|
# 汇集 相同网卡名称 的 IP
|
570
594
|
for interface in interfaces:
|
571
|
-
interfaces_dict[interface[
|
595
|
+
interfaces_dict[interface["interface"]].append(interface["host"])
|
572
596
|
|
573
597
|
# 获取历史数据
|
574
598
|
history: list = []
|
575
599
|
|
576
600
|
for key, value in interfaces_dict.items():
|
577
601
|
|
578
|
-
hosts_by_ip = [
|
602
|
+
hosts_by_ip = [
|
603
|
+
host
|
604
|
+
for v in value
|
605
|
+
for host in hosts
|
606
|
+
if v == host["interfaces"][0]["ip"]
|
607
|
+
]
|
579
608
|
|
580
609
|
data = self.get_history_by_item_key(
|
581
610
|
hosts=hosts_by_ip,
|
582
611
|
time_from=time_from,
|
583
612
|
time_till=time_till,
|
584
613
|
item_key=f'net.if.{direction}["{key}"]',
|
585
|
-
data_type=3
|
614
|
+
data_type=3,
|
586
615
|
)
|
587
616
|
|
588
617
|
if data is None:
|
@@ -593,7 +622,7 @@ class Zabbix():
|
|
593
622
|
logger.success(f"{info} [succeeded]")
|
594
623
|
|
595
624
|
# 根据 name 排序
|
596
|
-
return utils.list_dict_sorted_by_key(history,
|
625
|
+
return utils.list_dict_sorted_by_key(history, "name")
|
597
626
|
|
598
627
|
except Exception as e:
|
599
628
|
logger.error(f"{info} [failed]")
|
@@ -618,7 +647,9 @@ class Zabbix():
|
|
618
647
|
|
619
648
|
hostids = [i["hostid"] for i in hosts]
|
620
649
|
|
621
|
-
hostinterface = self.request(
|
650
|
+
hostinterface = self.request(
|
651
|
+
method="hostinterface.get", params={"hostids": hostids}
|
652
|
+
)
|
622
653
|
|
623
654
|
if hostinterface is None:
|
624
655
|
return None
|
@@ -638,7 +669,7 @@ class Zabbix():
|
|
638
669
|
ips: list,
|
639
670
|
item: dict | None = None,
|
640
671
|
trigger: dict | None = None,
|
641
|
-
graph: bool | dict = False
|
672
|
+
graph: bool | dict = False,
|
642
673
|
) -> bool:
|
643
674
|
"""create object"""
|
644
675
|
|
@@ -720,7 +751,9 @@ class Zabbix():
|
|
720
751
|
|
721
752
|
logger.info(f"{info} [get host object]")
|
722
753
|
|
723
|
-
response = self.request(
|
754
|
+
response = self.request(
|
755
|
+
"hostinterface.get", {"filter": {"ip": ip}, "selectHosts": ["host"]}
|
756
|
+
)
|
724
757
|
|
725
758
|
if response is None:
|
726
759
|
continue
|
@@ -735,9 +768,9 @@ class Zabbix():
|
|
735
768
|
# logger.error(f"{info} [get host object] error: {ip}")
|
736
769
|
# continue
|
737
770
|
|
738
|
-
host = response[
|
739
|
-
host_id = response[
|
740
|
-
interface_id = response[
|
771
|
+
host = response["result"][0]["hosts"][0]["host"]
|
772
|
+
host_id = response["result"][0]["hostid"]
|
773
|
+
interface_id = response["result"][0]["interfaceid"]
|
741
774
|
|
742
775
|
# ----------------------------------------------------------------------------------
|
743
776
|
|
@@ -745,23 +778,23 @@ class Zabbix():
|
|
745
778
|
|
746
779
|
if isinstance(item, dict) and utils.isTrue(item, dict):
|
747
780
|
|
748
|
-
logger.info(f
|
781
|
+
logger.info(f"{info} [create item]")
|
749
782
|
|
750
783
|
params = {
|
751
784
|
# 'name': None,
|
752
785
|
# 'key_': None,
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
786
|
+
"hostid": host_id,
|
787
|
+
"type": 7,
|
788
|
+
"value_type": 3,
|
789
|
+
"interfaceid": interface_id,
|
790
|
+
"delay": "1m",
|
791
|
+
"history": "7d",
|
792
|
+
"trends": "7d",
|
760
793
|
} | item
|
761
794
|
|
762
|
-
response = self.request(
|
795
|
+
response = self.request("item.create", params)
|
763
796
|
|
764
|
-
if response is None or response.get(
|
797
|
+
if response is None or response.get("result") is None:
|
765
798
|
continue
|
766
799
|
|
767
800
|
# match True:
|
@@ -777,7 +810,7 @@ class Zabbix():
|
|
777
810
|
# logger.error(f"{log_prefix} error: {item.get('name')}")
|
778
811
|
# continue
|
779
812
|
|
780
|
-
item_id = response[
|
813
|
+
item_id = response["result"]["itemids"][0]
|
781
814
|
|
782
815
|
# ----------------------------------------------------------------------------------
|
783
816
|
|
@@ -785,13 +818,13 @@ class Zabbix():
|
|
785
818
|
|
786
819
|
if isinstance(trigger, dict) and utils.isTrue(trigger, dict):
|
787
820
|
|
788
|
-
logger.info(f
|
821
|
+
logger.info(f"{info} [create trigger]")
|
789
822
|
|
790
823
|
params = {
|
791
824
|
# 'description': None,
|
792
|
-
|
825
|
+
"priority": "2",
|
793
826
|
# 'expression': None,
|
794
|
-
|
827
|
+
"manual_close": "1",
|
795
828
|
} | trigger
|
796
829
|
|
797
830
|
# Trigger 的 expression 需要指定 HOST, 例如:
|
@@ -802,12 +835,12 @@ class Zabbix():
|
|
802
835
|
# 所以, 传递参数的时候, expression 中就必须要有 {host}, 用于定义 HOST
|
803
836
|
# 如果传递参数的时候使用了 f-strings, 要保留 {host}, 再套一层 {} 即可
|
804
837
|
# f'last(/{{host}}/system.uptime)<10m'
|
805
|
-
params[
|
838
|
+
params["expression"] = f"{params['expression']}".format(host=host)
|
806
839
|
|
807
840
|
# 注意: create trigger 的 params 的类型是 list
|
808
|
-
response = self.request(
|
841
|
+
response = self.request("trigger.create", [params])
|
809
842
|
|
810
|
-
if response is None or response.get(
|
843
|
+
if response is None or response.get("result") is None:
|
811
844
|
continue
|
812
845
|
|
813
846
|
# logger.warning(f'{log_prefix} response: {response}') if utils.isTrue(self.debug, bool) else next
|
@@ -829,11 +862,13 @@ class Zabbix():
|
|
829
862
|
|
830
863
|
# Create Graph
|
831
864
|
|
832
|
-
if utils.isTrue(graph, bool) or (
|
865
|
+
if utils.isTrue(graph, bool) or (
|
866
|
+
isinstance(graph, dict) and utils.isTrue(graph, dict)
|
867
|
+
):
|
833
868
|
|
834
|
-
log_prefix =
|
869
|
+
log_prefix = "create graph"
|
835
870
|
|
836
|
-
logger.info(f
|
871
|
+
logger.info(f"{log_prefix} ......")
|
837
872
|
|
838
873
|
# Graph object:
|
839
874
|
#
|
@@ -863,25 +898,29 @@ class Zabbix():
|
|
863
898
|
continue
|
864
899
|
|
865
900
|
params: dict = {
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
901
|
+
"name": item.get("name"),
|
902
|
+
"width": 900,
|
903
|
+
"height": 200,
|
904
|
+
"gitems": [{"itemid": item_id, "color": "0040FF"}],
|
870
905
|
}
|
871
906
|
|
872
907
|
if isinstance(graph, dict) and utils.isTrue(graph, dict):
|
873
908
|
|
874
909
|
params = params | graph
|
875
910
|
|
876
|
-
if utils.isTrue(params.get(
|
877
|
-
gitems = params.get(
|
911
|
+
if utils.isTrue(params.get("gitems"), list):
|
912
|
+
gitems = params.get("gitems")
|
878
913
|
if gitems is None:
|
879
914
|
continue
|
880
915
|
for gitem in gitems:
|
881
|
-
if
|
882
|
-
gitem
|
883
|
-
|
884
|
-
|
916
|
+
if (
|
917
|
+
isinstance(gitem, dict)
|
918
|
+
and utils.isTrue(gitem, dict)
|
919
|
+
and gitem.get("itemid") == "{}"
|
920
|
+
):
|
921
|
+
gitem["itemid"] = item_id
|
922
|
+
|
923
|
+
response = self.request("graph.create", params)
|
885
924
|
|
886
925
|
if response is None:
|
887
926
|
continue
|
@@ -0,0 +1,22 @@
|
|
1
|
+
ezKit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
+
ezKit/_file.py,sha256=0qRZhwYuagTgTGrhm-tzAMvEQT4HTJA_xZKqF2bo0ho,1207
|
3
|
+
ezKit/bottle.py,sha256=43h4v1kzz6qrLvCt5IMN0H-gFtaT0koG9wETqteXsps,181666
|
4
|
+
ezKit/bottle_extensions.py,sha256=27rogmfK7mL2qUSjXH79IMGZbCVULtYEikql_N9O6Zs,1165
|
5
|
+
ezKit/cipher.py,sha256=7jBarRH7ukSYzkz-Anl8B8JzluhnRz4CLHidPRRj_cg,2939
|
6
|
+
ezKit/database.py,sha256=6mfH--zRk2xwjlaqfxEWCeX-9HczMYk2dSnsRkjzpFk,12502
|
7
|
+
ezKit/dockerhub.py,sha256=j-wQO-71BsOgExHZhYynuy2k_hCX3on-vg0TH7QCit4,1996
|
8
|
+
ezKit/http.py,sha256=zhNxJF-x91UqGncXWxVXnhZVpFo_wmmpGnMXVT11y9E,1832
|
9
|
+
ezKit/markdown_to_html.template,sha256=21G2sSVGJn6aJvHd0NN4zY5YiDteKe4UtW36AzBwSdk,22274
|
10
|
+
ezKit/mongo.py,sha256=vsRCjJ2uWbNp-1bnGKICPohNYx25El8XnHp10o-lsM4,2397
|
11
|
+
ezKit/qywx.py,sha256=Nc4HTzWia6PsngUcoxJa8FX6-gzAo3XIqBC2IFTrbjA,10797
|
12
|
+
ezKit/redis.py,sha256=leAre527XDBmA_FsjlqQ2_JT1eqwM9uvpYid1Ir1Va4,1972
|
13
|
+
ezKit/sendemail.py,sha256=xqlFyRp96zggSN3eF3fCBXi0WMwGbOZxwDWkpQMCn9I,7412
|
14
|
+
ezKit/token.py,sha256=Ac-i9xfq4TqpGyfCzakjrh4NYzxHiN2sCQrMk1tzVi8,1716
|
15
|
+
ezKit/utils.py,sha256=wyh3lNTG2fJ-a-lszNZUoSluEC5V8Y9cs1JiAVI6D_A,44243
|
16
|
+
ezKit/xftp.py,sha256=-XQXyhMqeigT63P6sXkSS7r4GROXyqqlkzKxITLWG-g,8278
|
17
|
+
ezKit/zabbix.py,sha256=PkMnfu7mcuotwwIIsHaC9FsNg-gap6hD1xvm0AwSL1Y,33777
|
18
|
+
ezkit-1.12.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
19
|
+
ezkit-1.12.1.dist-info/METADATA,sha256=tNwfMN1cWo0bSyTv7WCBubgTscvf7f9HLDeJi74e6OM,316
|
20
|
+
ezkit-1.12.1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
21
|
+
ezkit-1.12.1.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
|
22
|
+
ezkit-1.12.1.dist-info/RECORD,,
|
ezkit-1.12.0.dist-info/RECORD
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
ezKit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
ezKit/_file.py,sha256=0qRZhwYuagTgTGrhm-tzAMvEQT4HTJA_xZKqF2bo0ho,1207
|
3
|
-
ezKit/bottle.py,sha256=43h4v1kzz6qrLvCt5IMN0H-gFtaT0koG9wETqteXsps,181666
|
4
|
-
ezKit/bottle_extensions.py,sha256=CwXKxVKxxtbyfeeOSp2xODUqJBo7ro2C88H9sUOVDJI,1161
|
5
|
-
ezKit/cipher.py,sha256=0T_StbjiNI4zgrjVgcfU-ffKgu1waBA9UDudAnqFcNM,2896
|
6
|
-
ezKit/database.py,sha256=r5YNoEzeOeVTlEWI99xXtHTmPZ73_DopS8DTzZk8Lts,12432
|
7
|
-
ezKit/dockerhub.py,sha256=a0v9Cdg2vIfUvSSf8gYS22mvQtUcJpJWGGM-nBphrOA,1958
|
8
|
-
ezKit/http.py,sha256=ysXzqXFi9zmuVKINbYGwmf9Q5xDVW_DZWrSh6HSVq8M,1800
|
9
|
-
ezKit/markdown_to_html.template,sha256=21G2sSVGJn6aJvHd0NN4zY5YiDteKe4UtW36AzBwSdk,22274
|
10
|
-
ezKit/mongo.py,sha256=l3jRMmoGrTm16OG4daSCn0JLU1nbYAmTtHokwjLXzoA,2390
|
11
|
-
ezKit/qywx.py,sha256=dGChIIf2V81MwufcPn6hwgSenPuxqK994KRH7ECT-CM,10387
|
12
|
-
ezKit/redis.py,sha256=tdiqfizPYQQTIUumkJGUJsJVlv0zVTSTYGQN0QutYs4,1963
|
13
|
-
ezKit/sendemail.py,sha256=47JTDFoLJKi0YtF3RAp9nFfo0ko2jlde3R_C1wr2E2w,7397
|
14
|
-
ezKit/token.py,sha256=HKREyZj_T2S8-aFoFIrBXTaCKExQq4zE66OHXhGHqQg,1750
|
15
|
-
ezKit/utils.py,sha256=uOUOCgx6WU6J2lTbHlL78Flk3oCZgdj8rBOFg2i0K7Q,44241
|
16
|
-
ezKit/xftp.py,sha256=9-ocFRH2SfmkP830J2RCkSIHZ6yLa3tKF7iXjHDiakc,7878
|
17
|
-
ezKit/zabbix.py,sha256=JELOKZMXOWSdq5NW-VNJ10vahhRWLAILDGebMi8VunM,33060
|
18
|
-
ezkit-1.12.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
19
|
-
ezkit-1.12.0.dist-info/METADATA,sha256=M6kMMDlVIa56bs6uoAbnaZSh4OaYhogeM5zSY7WM9cQ,316
|
20
|
-
ezkit-1.12.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
21
|
-
ezkit-1.12.0.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
|
22
|
-
ezkit-1.12.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|