Zabbix API is the way to go when you need to manage Zabbix configurations or get data from Zabbix programmatically. For Python applications one of the community-based libraries is PyZabbix. Note: There is also a package called py-zabbix. That is a different one, not handled in this post. In this post I’ll show: How to […]
Configuring Logging in NetBox
Creating the log file and setting the permissions: $ sudo mkdir /var/log/netbox $ sudo touch /var/log/netbox/netbox.log $ sudo chown -R netbox.netbox /var/log/netbox $ Configuring NetBox (in /opt/netbox/netbox/netbox/configuration.py): You can set the level for the loggers as needed, in this setup the file handler accepts DEBUG and higher but the actual loggers (“django” and “netbox”) only […]
Basic Mocking with Pytest
Since I always seem to search for these examples over and over again, here it is, basic mocking with pytest. My example code is this (testmodule.py): It can be run: $ python3 testmodule.py In testfunc, sleeping $ Not surprisingly, running it takes about five seconds. The time.sleep() call simulates some long-running operation in the code. […]
Graph Filtering Gotcha When Upgrading from Zabbix 5.0 to 6.0
The current Long Term Support (LTS) version series of Zabbix is 6.0, released in February 2022. The previous LTS version was 5.0, released in May 2020. Many of us are upgrading the Zabbix installation from 5.0 to 6.0 series these days, here is one catch to be aware of. In 5.0, when viewing graphs of […]
Tag Guidelines in Zabbix
This is a tag-specific summary from the official Zabbix guidelines documentation, based on the situation as of Zabbix 6.0 LTS. Note: “Please note that this model might become enforced in the future Zabbix releases. Templates that do not follow specified rules will need to be updated.“ Tag name and value format lowercase only allowed characters: […]
Handling Retries in Python Requests
In my previous post we handled timeouts with requests. This post deals with making it easier to react to the errors using the built-in retry features. In this context let’s limit the retry-requiring cases in two categories: Cases that timed out (no response from the server) Cases that returned a transient error from the server […]
Handling Timeouts with Python Requests
The most usual way of making HTTP/HTTPS requests in Python applications is using the requests library. By default it doesn’t define any timeouts for the operations. It means that in specific circumstances a simple requests.get() call might not return at all. Depending on the nature of the application this is not desirable. This post demonstrates […]
Saving Gzip Files in Python
I have various Python applications that run periodically and deal with data in lists and dictionaries, and they save the processed and/or discovered data as JSON in text files for logging purposes or other later use. Typically the files are quite large and take up substantial amount of disk space. Since the applications run on […]
Using Forks in GitHub
I use Git almost daily but I need my memos for the uncommon operations. Therefore the posts: Part 1: Git Configurations Part 2: Using Forks in GitHub (this post) This is a short memo about using a forked repository in GitHub to submit a pull request (PR) to the upstream repository. First of all, I […]
Selecting Pynetbox Version
If you have: And you need: Then you need to use: Because: NetBox 3.7.0 or newer VPNs pynetbox 7.3.3 or newer vpn app was added in pynetbox NetBox 3.5.0 or newer ASN ranges pynetbox 7.1.0 or newer asn_ranges.available_asns was added in pynetbox NetBox 3.3.0 or newer Cable terminations pynetbox 7.0.0 or newer Cable terminations were […]