Track maintenance and outage events across various NetBox models from vendors and internal sources.
Project description
NetBox Notices
Repository: github.com/jsenecal/netbox-notices
Documentation: jsenecal.github.io/netbox-notices
PyPI: pypi.org/project/netbox-notices
Original Project: Forked and inspired from jasonyates/netbox-circuitmaintenance, differs in the ability to track more than just maintenances, and circuits.
A NetBox plugin built to track maintenance and outage events across various NetBox models. This plugin is agnostic in that it is only built to store data surrounding maintenance/outage events and provide an overview of historical, active and upcoming events. The plugin tracks events at the provider level and associates impact across multiple NetBox object types (circuits, devices, virtual machines, power feeds, sites, etc.).
The plugin does not directly provide an automated approach to ingesting provider notifications, instead it extends NetBox's extensive REST API and provides GET/POST/PUT/PATCH methods to manage events. The plugin is intended to be coupled with an automated parser to handle the parsing of provider notifications and the delivery of the events to the plugin's REST API. Several example parsers are documented here.
Important Note: This is a significant refactoring from the original netbox-circuitmaintenance plugin. There is no upgrade path from the original plugin. If you are using the original plugin, you will need to migrate your data manually.
Features
- Track provider maintenance events
- Track impact from provider maintenance across multiple NetBox object types
- Configurable allowed object types (circuits, devices, virtual machines, power feeds, sites, etc.)
- Provides a consolidated view of active, upcoming and historical maintenance events at the provider and object level
- Track unplanned outage events with optional end times and ETR tracking
- Unified event notification tracking
- Quick action buttons for common maintenance operations:
- Acknowledge maintenance events
- Reschedule maintenance (only before start time)
- Mark maintenance as in-progress or completed
- Cancel maintenance with confirmation
- Event timeline with status-specific icons and colors
- Maintenance rescheduling with automatic status updates
- Interactive calendar view with FullCalendar
- iCalendar feed for external calendar integration (Google Calendar, Outlook, Apple Calendar)
- Maintenance overlap detection (coming soon)
Compatibility
This plugin requires NetBox 4.4.1 or higher.
| NetBox Version | Plugin Version |
|---|---|
| 4.4.1+ | 0.2.x |
Installing
A working installation of Netbox 4.4.1+ is required - see official documentation.
Package Installation
Activate your virtual env and install via pip:
$ source /opt/netbox/venv/bin/activate
(venv) $ pip install netbox-notices
To ensure the plugin is automatically re-installed during future upgrades, add the package to your local_requirements.txt:
# echo netbox-notices >> local_requirements.txt
Enable the Plugin
In the Netbox configuration.py configuration file add or update the PLUGINS parameter, adding vendor_notification:
PLUGINS = [
'notices'
]
PLUGINS_CONFIG = {
"notices": {},
}
Configuration
The plugin supports configuration of which NetBox object types can be linked to maintenance and outage events. By default, the plugin allows linking to circuits, power feeds, and sites.
Default Configuration
If you don't specify any configuration, the plugin uses these defaults:
PLUGINS_CONFIG = {
"notices": {
"allowed_content_types": [
"circuits.Circuit",
"dcim.PowerFeed",
"dcim.Site",
]
}
}
Custom Configuration
You can customize which object types are allowed by specifying the allowed_content_types setting. Content types are specified in the format app_label.model_name.
Example: Add Devices and Virtual Machines
PLUGINS_CONFIG = {
"notices": {
"allowed_content_types": [
"circuits.Circuit",
"dcim.Device",
"dcim.PowerFeed",
"dcim.Site",
"virtualization.VirtualMachine",
]
}
}
Example: Minimal Configuration (Circuits Only)
PLUGINS_CONFIG = {
"notices": {
"allowed_content_types": [
"circuits.Circuit",
]
}
}
Example: Extended Configuration
PLUGINS_CONFIG = {
"notices": {
"allowed_content_types": [
"circuits.Circuit",
"dcim.Device",
"dcim.Interface",
"dcim.PowerFeed",
"dcim.Rack",
"dcim.Site",
"ipam.IPAddress",
"ipam.Prefix",
"virtualization.VirtualMachine",
"virtualization.VMInterface",
]
}
}
How Configuration Affects Behavior
- Only object types listed in
allowed_content_typeswill appear in the Impact creation forms - The API will reject attempts to create impacts for non-allowed object types
- Changing the configuration requires a NetBox restart
- This setting controls which objects can be linked via the
Impactmodel to maintenance and outage events
Common NetBox Object Types
| Content Type | Description |
|---|---|
circuits.Circuit |
Network circuits |
circuits.Provider |
Service providers |
dcim.Device |
Physical network devices |
dcim.Interface |
Device network interfaces |
dcim.PowerFeed |
Power supply connections |
dcim.PowerPanel |
Power distribution panels |
dcim.Rack |
Equipment racks |
dcim.Site |
Physical locations |
ipam.IPAddress |
IP addresses |
ipam.Prefix |
IP prefixes/subnets |
virtualization.VirtualMachine |
Virtual machines |
virtualization.VMInterface |
VM network interfaces |
Apply Database Migrations
Apply database migrations with Netbox manage.py:
(venv) $ python manage.py migrate
Restart Netbox
Restart the Netbox service to apply changes:
sudo systemctl restart netbox
Outage Tracking
In addition to planned maintenance, this plugin supports tracking unplanned outage events:
Key Features
- Optional End Time: Outages can be created without an end time, which becomes required when marking as resolved
- ETR Tracking: Track Estimated Time to Repair with full revision history via NetBox's changelog
- Outage Status Workflow:
- REPORTED: Initial state when outage is reported
- INVESTIGATING: Team is investigating root cause
- IDENTIFIED: Root cause identified, working on fix
- MONITORING: Fix applied, monitoring for stability
- RESOLVED: Outage fully resolved (requires end time)
- Shared Impact Model: Uses the same impact tracking as maintenance events (Impact model)
- Unified View: View both maintenance and outages together in a single interface
- Flexible Object Support: Link outages to any configured NetBox object type
Calendar & iCal Integration
The plugin provides an interactive calendar view and iCal feed for integrating maintenance events with external calendar applications.
Calendar View
Access the calendar at Plugins → Notices → Calendar. Features include:
- Interactive FullCalendar: Month, week, and day views
- Color-coded events: Different colors for maintenance vs outage, and by status
- Click-to-view: Click any event to see details and navigate to full view
- Drag navigation: Navigate between time periods
iCal Feed
Subscribe to maintenance events in your preferred calendar application:
Subscription URL:
https://your-netbox/api/plugins/notices/ical/?token=YOUR_API_TOKEN
Supported Calendar Apps:
- Google Calendar: Settings → Add calendar → From URL
- Outlook: Calendar → Add calendar → Subscribe from web
- Apple Calendar: File → New Calendar Subscription
Query Parameters:
token: Your NetBox API token (required)provider: Filter by provider IDstatus: Filter by status (e.g.,CONFIRMED,IN-PROCESS)days_past: Include events from N days ago (default: 30)days_future: Include events up to N days ahead (default: 90)
Example filtered subscription:
/api/plugins/notices/ical/?token=YOUR_TOKEN&provider=1&status=CONFIRMED
API Endpoints
Maintenance Events:
GET /api/plugins/notices/maintenance/
POST /api/plugins/notices/maintenance/
GET /api/plugins/notices/maintenance/{id}/
PATCH /api/plugins/notices/maintenance/{id}/
DELETE /api/plugins/notices/maintenance/{id}/
Outage Events:
GET /api/plugins/notices/outage/
POST /api/plugins/notices/outage/
GET /api/plugins/notices/outage/{id}/
PATCH /api/plugins/notices/outage/{id}/
DELETE /api/plugins/notices/outage/{id}/
Impact Tracking:
GET /api/plugins/notices/impact/
POST /api/plugins/notices/impact/
GET /api/plugins/notices/impact/{id}/
PATCH /api/plugins/notices/impact/{id}/
DELETE /api/plugins/notices/impact/{id}/
Example: Creating an Outage
POST /api/plugins/notices/outage/
{
"name": "OUT-2024-001",
"summary": "Fiber cut on Main Street",
"provider": 1,
"start": "2024-10-29T14:30:00Z",
"estimated_time_to_repair": "2024-10-29T18:00:00Z",
"status": "INVESTIGATING"
}
Example: Creating Impact for a Circuit
POST /api/plugins/notices/impact/
{
"maintenance": 1,
"content_type": "circuits.circuit",
"object_id": 42,
"impact": "OUTAGE"
}
Example: Creating Impact for a Device
POST /api/plugins/notices/impact/
{
"outage": 1,
"content_type": "dcim.device",
"object_id": 123,
"impact": "DEGRADED"
}
Data Models
The plugin uses four main models to track maintenance and outage events:
Maintenance
Represents a planned maintenance event from a provider. Key fields:
name: Event identifiersummary: Description of the maintenanceprovider: Foreign key to NetBox Providerstart,end: Maintenance window timesstatus: TENTATIVE, CONFIRMED, CANCELLED, IN-PROCESS, COMPLETED, RE-SCHEDULED, UNKNOWNinternal_ticket: Your organization's tracking ticket referenceacknowledged: Whether the event has been acknowledged
Outage
Represents an unplanned outage event from a provider. Key fields:
name: Event identifiersummary: Description of the outageprovider: Foreign key to NetBox Providerstart,end: Outage window times (end is optional until resolved)status: REPORTED, INVESTIGATING, IDENTIFIED, MONITORING, RESOLVEDestimated_time_to_repair: ETR timestamp (tracked with changelog history)internal_ticket: Your organization's tracking ticket referenceacknowledged: Whether the event has been acknowledged
Impact
Links maintenance or outage events to affected NetBox objects using Django's Generic Foreign Key pattern:
maintenanceoroutage: Foreign key to the event (mutually exclusive)content_type: The type of affected object (e.g., "circuits.circuit", "dcim.device")object_id: The ID of the affected objectimpact: Impact level - NO-IMPACT, REDUCED-REDUNDANCY, DEGRADED, OUTAGE
The Impact model allows linking events to any NetBox object type configured in allowed_content_types.
EventNotification
Stores raw email notifications received from providers:
maintenanceoroutage: Foreign key to the associated eventemail: Binary email dataemail_body: Extracted body textsubject: Email subject lineemail_from: Sender addressemail_received: Receipt timestamp
Screenshots
Maintenance Event Detail
The maintenance detail view shows comprehensive information about a maintenance event including the event timeline, impacted objects, and received notifications.
Key Features Shown:
- Operations dropdown with quick actions (Acknowledge, Reschedule, Mark In-Progress, Mark Completed, Cancel)
- Maintenance details with timezone conversion display
- Generic impact tracking showing any configured NetBox object type
- Received notifications from providers
- Event timeline with color-coded status changes
Outage Event Detail
The outage detail view tracks unplanned incidents with ETR (Estimated Time to Repair) and flexible status workflow.
Key Features Shown:
- Outage-specific status workflow (Reported → Investigating → Identified → Monitoring → Resolved)
- ETR tracking with changelog history
- Optional end time (required only when resolving)
- Impact and notification tracking
Calendar View
Interactive calendar view for visualizing maintenance and outage events with iCal subscription support.
Click any event to see a quick summary modal with key details:
Key Features Shown:
- FullCalendar integration with month/week/day views
- Color-coded events by type (maintenance vs outage) and status
- Click-to-view event details modal with status, provider, timing, and summary
- iCal Subscribe and Download buttons for calendar integration
Provider Events Widget
A "Maintenance & Outage Events" widget appears on Provider detail pages, showing all events from that provider.
Key Features Shown:
- All maintenance and outage events for the provider
- Tabbed view with event counts
- Event status, timing, and impact count
- ETR tracking for outages
Object Event History Widget
A "Maintenance & Outage History" widget automatically appears on the detail pages of any impacted NetBox objects (circuits, devices, sites, etc.). This provides quick visibility into events affecting specific infrastructure.
Key Features Shown:
- Tabbed view separating maintenances and outages
- Event counts in tab badges
- Links to event details
- Status and impact level badges
Credits
Forked from jasonyates/netbox-circuitmaintenance with significant enhancements including multi-object type support and outage tracking.
Based on the NetBox plugin tutorial:
This package was created with Cookiecutter and the netbox-community/cookiecutter-netbox-plugin project template.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netbox_notices-0.2.4.tar.gz.
File metadata
- Download URL: netbox_notices-0.2.4.tar.gz
- Upload date:
- Size: 3.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7061600d643b3536597627822c5a0fbb4ed791e00f8e991a930ca230f04d1fa3
|
|
| MD5 |
5a18c4c2cf2dcbde4ffc1c56d2861e10
|
|
| BLAKE2b-256 |
50875ce0603671a46850ce773445c17b359dcf441a90cf43bf7b787080156932
|
Provenance
The following attestation bundles were made for netbox_notices-0.2.4.tar.gz:
Publisher:
publish.yml on jsenecal/netbox-notices
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_notices-0.2.4.tar.gz -
Subject digest:
7061600d643b3536597627822c5a0fbb4ed791e00f8e991a930ca230f04d1fa3 - Sigstore transparency entry: 868654638
- Sigstore integration time:
-
Permalink:
jsenecal/netbox-notices@ff0c4f9aabe867f13fe9680cb7ddada7d9628e7f -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ff0c4f9aabe867f13fe9680cb7ddada7d9628e7f -
Trigger Event:
release
-
Statement type:
File details
Details for the file netbox_notices-0.2.4-py3-none-any.whl.
File metadata
- Download URL: netbox_notices-0.2.4-py3-none-any.whl
- Upload date:
- Size: 142.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d10fd1085708102d58d1948e7687821448b70997defd67cb3a75bcbe3f4c71b
|
|
| MD5 |
672040b1b8c9ed6a61ce071ca2d9dba5
|
|
| BLAKE2b-256 |
b37db52c8b578c06c210d90b796297db9b79feaa4188efa2efd4d1ceed34e9c8
|
Provenance
The following attestation bundles were made for netbox_notices-0.2.4-py3-none-any.whl:
Publisher:
publish.yml on jsenecal/netbox-notices
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_notices-0.2.4-py3-none-any.whl -
Subject digest:
2d10fd1085708102d58d1948e7687821448b70997defd67cb3a75bcbe3f4c71b - Sigstore transparency entry: 868654646
- Sigstore integration time:
-
Permalink:
jsenecal/netbox-notices@ff0c4f9aabe867f13fe9680cb7ddada7d9628e7f -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ff0c4f9aabe867f13fe9680cb7ddada7d9628e7f -
Trigger Event:
release
-
Statement type: