Skip to content

lduchosal/check_bitdefender

Repository files navigation

πŸ›‘οΈ Check BitDefender GravityZone

Python Version License: MIT Build Status

A comprehensive Nagios plugin for monitoring BitDefender GravityZone for Endpoint API endpoints. Built with modern Python practices and designed for enterprise monitoring environments.

✨ Features

  • πŸ” Authentication - Support for API Token
  • 🎯 Multiple Endpoints - Monitor onboarding status, last seen, last scan, and endpoint details
  • πŸ“Š Nagios Compatible - Standard exit codes and performance data output
  • πŸ—οΈ Clean Architecture - Modular design with testable components
  • πŸ”§ Flexible Configuration - File-based configuration with sensible defaults
  • πŸ“ˆ Verbose Logging - Multi-level debugging support
  • 🐍 Modern Python - Built with Python 3.9+ using type hints and async patterns

πŸš€ Quick Start

Installation

# Create virtual environment (recommended)
python -m venv /usr/local/libexec/nagios/check_bitdefender
source /usr/local/libexec/nagios/check_bitdefender/bin/activate

# Install from source
pip install git+https://github.com/lduchosal/check_bitdefender.git

Basic Usage

# List all endpoints
check_bitdefender endpoints

# Check onboarding status
check_bitdefender onboarding -d endpoint.domain.tld

# Check last seen (days since endpoint last connected)
check_bitdefender lastseen -d endpoint.domain.tld

# Check last scan (days since last antivirus scan)
check_bitdefender lastscan -d endpoint.domain.tld

# Get detailed endpoint info
check_bitdefender detail -d endpoint.domain.tld

πŸ“‹ Available Commands

Command Description Default Thresholds
endpoints List all endpoints W:10, C:25
onboarding Check endpoint onboarding status W:2, C:1
lastseen Check days since endpoint was last seen W:7, C:30
lastscan Check days since endpoint was last scanned W:7, C:30
detail Get detailed endpoint information -

Onboarding Status Values

  • 0 - Onboarded βœ…
  • 1 - InsufficientInfo ⚠️
  • 2 - Unknown ❌

βš™οΈ Configuration

Authentication Setup

Create check_bitdefender.ini in your Nagios directory or current working directory:

API Token Authentication

[auth]
token = your-api-token-here

[settings]
timeout = 5
parent_id = your-company-id-here  # Optional: specify company/parent ID

BitDefender GravityZone API Setup

  1. Log into GravityZone Control Center
  2. Navigate to My Account > API Keys
  3. Generate a new API key with appropriate permissions
  4. Copy the API token to your configuration file

πŸ“š Complete API Setup Guide

πŸ”§ Command Line Options

Option Description Example
-c, --config Configuration file path -c /custom/path/config.ini
-m, --endpointId Endpoint ID (GUID) -m "12345678-1234-1234-1234-123456789abc"
-d, --fqdn Computer DNS Name (FQDN) -d "server.domain.com"
-W, --warning Warning threshold -W 10
-C, --critical Critical threshold -C 100
-v, --verbose Verbosity level -v, -vv, -vvv
--version Show version --version

🏒 Nagios Integration

Command Definitions

# BitDefender GravityZone Commands
define command {
    command_name    check_bitdefender_onboarding
    command_line    $USER1$/check_bitdefender/bin/check_bitdefender onboarding -d $HOSTALIAS$
}

define command {
    command_name    check_bitdefender_lastseen
    command_line    $USER1$/check_bitdefender/bin/check_bitdefender lastseen -d $HOSTALIAS$ -W 7 -C 30
}

define command {
    command_name    check_bitdefender_lastscan
    command_line    $USER1$/check_bitdefender/bin/check_bitdefender lastscan -d $HOSTALIAS$ -W 7 -C 30
}

Service Definitions

# BitDefender GravityZone Services
define service {
    use                     generic-service
    service_description     BITDEFENDER_ONBOARDING
    check_command           check_bitdefender_onboarding
    hostgroup_name          bitdefender
}

define service {
    use                     generic-service
    service_description     BITDEFENDER_LASTSEEN
    check_command           check_bitdefender_lastseen
    hostgroup_name          bitdefender
}

define service {
    use                     generic-service
    service_description     BITDEFENDER_LASTSCAN
    check_command           check_bitdefender_lastscan
    hostgroup_name          bitdefender
}

πŸ—οΈ Architecture

This plugin follows clean architecture principles with clear separation of concerns:

check_bitdefender/
β”œβ”€β”€ πŸ“ cli/                     # Command-line interface
β”‚   β”œβ”€β”€ commands/               # Individual command handlers
β”‚   β”‚   β”œβ”€β”€ endpoints.py        # List endpoints command
β”‚   β”‚   β”œβ”€β”€ onboarding.py       # Onboarding status command
β”‚   β”‚   β”œβ”€β”€ lastseen.py         # Last seen command
β”‚   β”‚   β”œβ”€β”€ lastscan.py         # Last scan command
β”‚   β”‚   └── detail.py           # Endpoint detail command
β”‚   └── decorators.py           # Common CLI decorators
β”œβ”€β”€ πŸ“ core/                    # Core business logic
β”‚   β”œβ”€β”€ auth.py                 # Authentication management
β”‚   β”œβ”€β”€ config.py               # Configuration handling
β”‚   β”œβ”€β”€ defender.py             # BitDefender API client
β”‚   β”œβ”€β”€ exceptions.py           # Custom exceptions
β”‚   └── nagios.py               # Nagios plugin framework
β”œβ”€β”€ πŸ“ services/                # Business services
β”‚   β”œβ”€β”€ endpoint_service.py     # Endpoints business logic
β”‚   β”œβ”€β”€ onboarding_service.py   # Onboarding check logic
β”‚   β”œβ”€β”€ lastseen_service.py     # Last seen check logic
β”‚   β”œβ”€β”€ lastscan_service.py     # Last scan check logic
β”‚   β”œβ”€β”€ detail_service.py       # Detail retrieval logic
β”‚   └── models.py               # Data models
└── πŸ“ tests/                   # Comprehensive test suite
    β”œβ”€β”€ unit/                   # Unit tests
    └── integration/            # Integration tests

Key Design Principles

  • 🎯 Single Responsibility - Each module has one clear purpose
  • πŸ”Œ Dependency Injection - Easy testing and mocking
  • πŸ§ͺ Testable - Comprehensive test coverage
  • πŸ“ˆ Extensible - Easy to add new commands and features
  • πŸ”’ Secure - No secrets in code, proper credential handling

πŸ§ͺ Development

Development Setup

# Clone repository
git clone https://github.com/lduchosal/check_bitdefender.git
cd check_bitdefender

# Create development environment
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# Install in development mode
pip install -e .

Code Quality Tools

# Format code
black check_bitdefender/

# Lint code
flake8 check_bitdefender/

# Type checking
mypy check_bitdefender/

# Run tests
pytest tests/ -v --cov=check_bitdefender

Building & Publishing

# Build package
python -m build

# Test installation
pip install dist/*.whl

# Publish to PyPI
python -m twine upload dist/*

πŸ” Output Examples

Successful Check

DEFENDER OK - Onboarding status: 0 (Onboarded) | onboarding=0;1;2;0;2

Warning State

DEFENDER WARNING - Last seen: 10 days ago | lastseen=10;7;30;0;

Critical State

DEFENDER CRITICAL - Last scan: 35 days ago | lastscan=35;7;30;0;

πŸ”§ Troubleshooting

Common Issues

Issue Solution
Authentication Errors Verify BitDefender GravityZone API token
Network Connectivity Check firewall rules for cloudgz.gravityzone.bitdefender.com
Import Errors Ensure all dependencies are installed
Configuration Issues Validate config file syntax and paths

Debug Mode

Enable verbose logging for detailed troubleshooting:

# Maximum verbosity
check_bitdefender lastseen -d endpoint.domain.tld -vvv

# Check specific configuration
check_bitdefender onboarding -c /path/to/config.ini -d endpoint.domain.tld -vv

Required Network Access

Ensure connectivity to:

  • cloudgz.gravityzone.bitdefender.com

πŸ“Š Exit Codes

Code Status Description
0 OK Value within acceptable range
1 WARNING Value exceeds warning threshold
2 CRITICAL Value exceeds critical threshold
3 UNKNOWN Error occurred during execution

🀝 Contributing

We welcome contributions! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Guidelines

  • Follow PEP 8 style guide
  • Add tests for new features
  • Update documentation as needed
  • Ensure all tests pass before submitting

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments


About

Nagios plugin for BitDefender GravityZone API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published