Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1,224 Commits

Linuxfabrik Python Libraries

Python 3.9+ modules for Linuxfabrik projects: DB access, SQLite KVS caching, WinRM, SMB, shell execution, 15+ API integrations (Icinga2, Veeam, Nextcloud, ...). Available on PyPI. made by Linuxfabrik

GitHub StarsLicenseVersionPyPIPythonGitHub IssuesGitHubSponsorsPayPal


Linuxfabrik Python Libraries

A mature, production-grade Python library collection providing 40 modules with 300+ functions for system administration, monitoring, and infrastructure automation. These libraries are used across several Linuxfabrik projects -- most prominently the Linuxfabrik Monitoring Plugins (Nagios/Icinga check plugins), but also in ChecklistFabrik and other tools.

If these libraries help you developing your own monitoring plugins, system tools or infrastructure automation, please give it a star.

The library requires Python 3.9+ and runs on every platform.

Documentation

Full documentation is available at linuxfabrik.github.io/lib. It is automatically built and deployed on every push to main.

Installation

Add linuxfabrik-lib as a dependency to your project, or install it manually:

pip install --user linuxfabrik-lib

Design Principles

These libraries are built with a clear set of priorities:

  • Procedural by design. The libraries deliberately use a procedural/functional style rather than object-oriented programming. Pure functions with explicit inputs and outputs are easier to read, test, and reason about. This is especially true for the most prominent use case -- monitoring plugins -- which are short-lived, linear processes with no complex state to manage over time, where unnecessary abstraction layers would add overhead without tangible benefit.
  • Broad compatibility. Python 3.9+ is the minimum, ensuring the libraries work on RHEL 8 and every major distribution without requiring newer runtimes.
  • Cross-platform. Core functions behave identically on Linux, Windows, and macOS. Platform-specific code (WinRM, PowerShell, SMB) is cleanly separated.
  • Minimal dependencies. We avoid pulling in large dependency trees. External packages are used only when the alternative would be unreliable or significantly more complex.
  • Consistent error handling. Most functions return (success, result) tuples. The caller decides whether to continue or exit -- the library never exits on its own. The base.coe() ("Continue or Exit") helper makes this pattern concise.
  • Automatic redaction. Sensitive data (passwords, tokens, API keys) in error messages is automatically sanitized before output.
  • Nagios/Icinga conventions. State constants, threshold evaluation, performance data formatting, and range parsing follow the Monitoring Plugins Development Guidelines.
  • Defensive defaults. Functions use sensible timeouts, safe SSL settings, and locked-down defaults so that plugins work out of the box without extensive configuration.

Library Index

Core Utilities

ModuleDescriptionKey Functions
args.pyExtends argparse with custom input types for monitoring thresholds, a registry of reusable --help texts, and reading a secret from a file instead of the command line.csv(), float_or_none(), help(), int_or_none(), load_secret(), number_unit_method()
base.pyThe central library for plugin development. Provides state evaluation, threshold comparison, performance data formatting, ASCII table output, and the coe() error-handling pattern.coe(), cu(), get_perfdata(), get_state(), get_table(), get_worst(), oao(), state2str()
globals.pyDefines the four Nagios/Icinga plugin states: STATE_OK (0), STATE_WARN (1), STATE_CRIT (2), STATE_UNKNOWN (3).--
human.pyConverts raw numbers, byte sizes, bit rates, and durations to human-readable representations and back. Supports binary/SI prefixes and Nagios range syntax with units.bits2human(), bps2human(), bytes2human(), human2bytes(), human2seconds(), humanrange2bytes(), number2human(), seconds2human()
lftest.pyTest harness for data-driven plugin unit tests, spinning up throwaway containers (including MySQL/MariaDB) as fixtures.attach_each(), attach_tests(), run(), run_container(), run_mysql_compatible_from_containerfile(), test(), test_json()
openmetrics.pyReads the OpenMetrics and Prometheus text exposition formats served by a /metrics endpoint into plain samples, and selects a metric by name and labels.get_samples(), get_value(), parse()
time.pyDate/time conversions between UNIX epochs, ISO strings, and datetime objects, plus time-macro expansion and time differences. Timezone-aware.epoch2iso(), now(), timestr2datetime(), timestrdiff()
txt.pyText processing: regex compilation, substring extraction, multi-line parsing, sensitive data redaction, pluralization, shortening for display, HTML character reference resolution, and byte/text encoding conversion.compile_regex(), extract_str(), match_regex(), mltext2array(), pluralize(), shorten(), to_bytes(), to_text(), unescape()
version.pySoftware version parsing, comparison, and End-of-Life checking against endoflife.date.check_eol(), version(), version2float()

Data Access & Caching

ModuleDescriptionKey Functions
cache.pyA simple SQLite-based key-value store with optional key expiration. Used for persisting state between plugin runs.get(), set()
db_mysql.pyMySQL/MariaDB client with connection management, query execution, privilege checking, and server flavor/status/variable/replication inspection.check_privileges(), connect(), get_all_variables(), get_engines(), get_replica_status(), lod2dict(), select()
db_sqlite.pyFull SQLite interface: table/index creation, CRUD operations, CSV import, regex support, and per-second counter deltas for time-series data.connect(), create_index(), create_table(), cut(), delete(), insert(), per_second_deltas(), select()

System & OS

ModuleDescriptionKey Functions
disk.pyFile I/O, directory walking, CSV/environment file parsing, block device and partition listing, and temp directory management.dir_exists(), file_exists(), get_real_disks(), get_tmpdir(), grep_file(), read_file()
distro.pyLinux distribution detection. Returns normalized facts including distribution name, version, and Ansible-compatible os_family.get_distribution_facts()
dmidecode.pyParses dmidecode output into structured data. Extracts CPU, RAM, firmware, serial number, manufacturer, and model information.cpu_speed(), cpu_type(), firmware(), get_data(), manufacturer(), model(), ram(), serno()
endoflifedate.pyBundled End-of-Life data from endoflife.date for offline version checks when internet access is unavailable.--
psutil.pyWrapper around psutil for retrieving mounted disk partitions with device, mount point, and filesystem type.get_partitions()
shell.pyRuns external commands from an argv list without a shell, guards option-style CLI values, and locates executables in PATH.safe_cli_value(), shell_exec(), which()

Networking & HTTP

ModuleDescriptionKey Functions
feedparser.pyParses Atom and RSS feeds from URLs using BeautifulSoup.parse()
mail.pySends email over SMTP, with an optional HTML body alongside the plain-text one and inline images referenced by Content-ID. Authenticates when a password is given.send()
net.pyLow-level networking: TCP/UDP/TLS and Unix domain sockets, public IP lookup, subnet enumeration, netmask conversion, and hostname validation.cidr_to_hosts(), fetch(), fetch_socket(), get_public_ip(), get_subnet_hosts(), ip_to_cidr()
ssh.pyRuns commands and copies files over SSH by building shell-free ssh/scp/rsync argument lists.build_options(), rsync(), run(), scp(), target()
url.pyHTTP/1.x and HTTP/2 client (httpx) for HTML, JSON, or raw data. Supports GET/POST, Basic/Digest authentication, TLS version pinning, proxy control, and connection telemetry.fetch(), fetch_json(), get_latest_version_from_github(), split_basic_auth(), strip_tags()

Windows Integration

ModuleDescriptionKey Functions
powershell.pyExecutes PowerShell commands locally (on Windows hosts).run_ps()
smb.pyNative SMB/CIFS file access: list, glob, and open files on remote shares with encryption support.glob(), open_file()
winrm.pyExecutes commands and PowerShell scripts on remote Windows hosts via WinRM/PSRP, preferring pypsrp with a pywinrm fallback.run_cmd(), run_ps()

API Integrations

ModuleDescriptionKey Functions
bexio.pyBexio business software REST API (contacts, invoices, projects, items, timesheets, and more).call_api(), fetch_accounts(), fetch_contacts(), fetch_invoices(), fetch_projects(), get_all()
grassfish.pyGrassfish digital signage REST API.fetch_json(), set_player_defaults(), set_screen_defaults()
huawei_dorado.pyHuawei OceanStor Dorado storage DeviceManager REST API: session handling with device ID discovery, paged list walks, current performance counters, sector-to-byte capacity conversion, and the numeric status, model and hardware codes it reports.as_code(), assert_ok(), field(), get_all_data(), get_data(), get_health_status(), get_health_status_state(), get_performance(), get_running_status(), get_running_status_state(), get_uuid(), sectors2bytes()
huawei_pacific.pyHuawei OceanStor Pacific storage REST API, including the older endpoint generation below /dsware/service/, the batch performance interface, and the status codes it reports as numbers and as strings.as_code(), assert_ok(), get_all_data(), get_data(), get_disk_status(), get_disk_status_state(), get_management_ips(), get_performance(), get_pool_status(), get_pool_status_state(), get_result_code()
icinga.pyIcinga2 REST API client for querying services and managing acknowledgements and downtimes.get_service(), remove_ack(), remove_downtime(), set_ack(), set_downtime()
infomaniak.pyInfomaniak Swiss Backup REST API for events, backup products, and slots.get_events(), get_swiss_backup_products(), get_swiss_backup_slots()
jitsi.pyJitsi Meet server statistics endpoint, with optional HTTP Basic auth.get_data()
keycloak.pyKeycloak identity provider with OIDC discovery, admin-token retrieval, and Admin REST API access.discover_oidc_endpoints(), get_data(), obtain_admin_token()
librenms.pyLibreNMS monitoring API, mapping its alert states to Nagios states.get_data(), get_prop(), get_state()
nextcloud.pyNextcloudocc command execution as the config.php owner, parsing JSON or text output.run_occ()
nodebb.pyNodeBB forum API, using a Bearer user token.get_data()
qts.pyQNAP QTS NAS API with session authentication.get_auth_sid()
redfish.pyRedfish BMC API for chassis, systems, storage, managers, and sensors, deriving Nagios states and perfdata.get_auth_header(), get_perfdata(), get_state(), get_systems()
rocket.pyRocket.Chat REST API for login, room/group history, statistics, and incoming webhooks.get_groups_history(), get_rooms_get(), get_rooms_info(), get_stats(), get_token(), send2webhook()
uptimerobot.pyUptimeRobot API for monitors, alert contacts, maintenance windows, and status pages.delete_monitor(), edit_monitor(), get_account_details(), get_alert_contacts(), get_monitors(), get_mwindows(), get_psps(), new_monitor()
veeam.pyVeeam Backup & Replication Enterprise Manager REST API.get_token()
wildfly.pyWildFly/JBoss management API with digest auth (standalone and domain mode).get_data()
wordpress.pyWordPress installation read straight from the filesystem: core version, installed plugins and themes, the configured site URL, and any file header field. Needs no database, no HTTP request and no wp-cli.get_header_value(), get_plugins(), get_site_url(), get_themes(), get_version(), is_installation()

Usage Example

A typical monitoring plugin using these libraries:

importlib.argsimportlib.baseimportlib.urlfromlib.globalsimport (STATE_CRIT, STATE_OK, STATE_UNKNOWN, STATE_WARN)
defmain():
# Parse arguments with custom threshold typesparser=lib.args.ArgumentParser()
parser.add_argument('--url', required=True)
parser.add_argument('--warning', type=lib.args.float_or_none, default=80)
parser.add_argument('--critical', type=lib.args.float_or_none, default=90)
args=parser.parse_args()
# Fetch data (coe = "Continue or Exit")result=lib.base.coe(lib.url.fetch_json(args.url))
# Evaluate thresholdsstate=lib.base.get_state(result['usage'], args.warning, args.critical)
perfdata=lib.base.get_perfdata('usage', result['usage'], '%', args.warning, args.critical, 0, 100)
# Output and exitlib.base.oao('Usage is {}%'.format(result['usage']), state, perfdata)
if__name__=='__main__':
main()

Tips & Tricks

Count the function calls to any "lib" library in your project and sort by frequency:

grep -rhoP '\Wlib\.[a-zA-Z0-9_\.]+'*| sed 's/^[^a-zA-Z0-9]*//'| sort | uniq -c | sort -nr

About

Python 3.9+ modules for Linuxfabrik projects: DB access, SQLite KVS caching, WinRM, SMB, shell execution, 15+ API integrations (Icinga2, Veeam, Nextcloud, ...). Available on PyPI.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

14 stars

Watchers

7 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages