first commit
Some checks failed
ci / deploy (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled

This commit is contained in:
Vlastislav Svatek
2026-06-05 10:39:05 +02:00
commit 673e67106e
217 changed files with 76612 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
from dcim.choices import InterfaceTypeChoices
from django.db import models
from django.urls import reverse
from netbox.models import NetBoxModel
class LibreNMSSettings(models.Model):
"""
Model to store LibreNMS plugin settings, specifically which server to use
when multiple servers are configured.
"""
selected_server = models.CharField(
max_length=100,
default="default",
help_text="The key of the selected LibreNMS server from configuration",
)
vc_member_name_pattern = models.CharField(
max_length=100,
default="-M{position}",
help_text="Pattern for naming virtual chassis member devices. "
"Available placeholders: {position}, {serial}. "
"Example: '-M{position}' results in 'switch01-M2'",
)
use_sysname_default = models.BooleanField(
default=True,
help_text="Use SNMP sysName instead of LibreNMS hostname when importing devices",
)
strip_domain_default = models.BooleanField(
default=False,
help_text="Remove domain suffix from device names during import",
)
class Meta:
"""Meta options for LibreNMSSettings."""
verbose_name = "LibreNMS Settings"
verbose_name_plural = "LibreNMS Settings"
def get_absolute_url(self):
"""Return the URL for the settings page."""
return reverse("plugins:netbox_librenms_plugin:settings")
def __str__(self):
return f"LibreNMS Settings - Server: {self.selected_server}"
class InterfaceTypeMapping(NetBoxModel):
"""Map LibreNMS interface types and speeds to NetBox interface types."""
librenms_type = models.CharField(max_length=100)
netbox_type = models.CharField(
max_length=50,
choices=InterfaceTypeChoices,
default=InterfaceTypeChoices.TYPE_OTHER,
)
librenms_speed = models.BigIntegerField(null=True, blank=True)
description = models.TextField(
blank=True,
help_text="Optional description or notes about this interface type mapping",
)
def get_absolute_url(self):
"""Return the URL for this mapping's detail page."""
return reverse("plugins:netbox_librenms_plugin:interfacetypemapping_detail", args=[self.pk])
class Meta:
"""Meta options for InterfaceTypeMapping."""
unique_together = ["librenms_type", "librenms_speed"]
def __str__(self):
return f"{self.librenms_type} + {self.librenms_speed} -> {self.netbox_type}"