# cesnet/inventory-monitor-plugin architecture

> Architecture diagram of the GitHub repository cesnet/inventory-monitor-plugin, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cesnet/inventory-monitor-plugin
- Repository: https://github.com/cesnet/inventory-monitor-plugin

## Overview

NetBox Inventory Monitor extends NetBox for asset lifecycle and related inventory operations. Users manage assets and associated records through NetBox views; the plugin provides forms, filters, and tables for that workflow, while models hold the domain records. Separate API and GraphQL surfaces, search, and UI extensions support integration and discovery-related use cases. The README documents probe monitoring, external inventory, contracts, invoices, services, and RMA capabilities; sampled source confirms some view/model wiring, but not every subsystem’s runtime connections.

Main entry points: [`inventory_monitor/views`](https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/views) (Record views), [`inventory_monitor/models/asset_service.py`](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/asset_service.py) (Asset services), [`inventory_monitor/template_content.py`](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/template_content.py) (NetBox UI extensions), [`inventory_monitor/forms`](https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/forms) (Record forms)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflows["NetBox workflows"]
  node_record_views["Record views"]
  node_record_forms["Record forms"]
  node_record_filters["Record filters"]
  node_record_tables["Record tables"]
end

subgraph group_domain["Inventory domain"]
  node_asset[("Assets and types<br/>[asset.py]")]
  node_service[("Asset services<br/>[asset_service.py]")]
  node_contract[("Contracts and invoices<br/>[contract.py]")]
  node_discovery_models[("Probes and RMA<br/>[probe.py]")]
  node_external_inventory[("External inventory")]
end

subgraph group_interfaces["Integration surfaces"]
  node_api["REST API<br/>[views.py]"]
  node_serializers["API serializers<br/>[serializers.py]"]
  node_graphql["GraphQL<br/>[schema.py]"]
  node_search["Search indexing<br/>[search.py]"]
end

subgraph group_discovery["Discovery and UI"]
  node_template_extensions["NetBox UI extensions"]
  node_status_helpers["Status display"]
end

node_user(("NetBox user"))
node_netbox(("NetBox platform"))
node_discovery_scripts(("Discovery scripts"))

node_user -->|"manages records"| node_record_views
node_record_views -->|"edits with"| node_record_forms
node_record_views -->|"filters lists"| node_record_filters
node_record_views -->|"renders lists"| node_record_tables
node_record_views -->|"queries records"| node_service
node_record_forms -->|"edits records"| node_service
node_record_filters -->|"filters records"| node_service
node_record_tables -->|"displays records"| node_service
node_netbox -->|"hosts API"| node_api
node_api --> node_serializers
node_netbox -->|"hosts GraphQL"| node_graphql
node_netbox -->|"registers search"| node_search
node_discovery_scripts -.->|"populate probes"| node_discovery_models
node_netbox -->|"renders extensions"| node_template_extensions
node_template_extensions -->|"looks up matches"| node_asset
node_template_extensions -->|"looks up matches"| node_discovery_models
node_status_helpers -->|"reads status"| node_external_inventory

click node_record_views "https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/views"
click node_record_forms "https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/forms"
click node_record_filters "https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/filtersets"
click node_record_tables "https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/tables"
click node_asset "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/asset.py"
click node_service "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/asset_service.py"
click node_contract "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/contract.py"
click node_discovery_models "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/probe.py"
click node_external_inventory "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/external_inventory.py"
click node_api "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/api/views.py"
click node_serializers "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/api/serializers.py"
click node_graphql "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/graphql/schema.py"
click node_search "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/search.py"
click node_template_extensions "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/template_content.py"
click node_status_helpers "https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/templatetags/inventory_monitor.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_record_views,node_record_forms,node_record_filters,node_record_tables,node_user toneBlue
class node_asset,node_service,node_contract,node_discovery_models,node_external_inventory toneAmber
class node_api,node_serializers,node_graphql,node_search toneMint
class node_template_extensions,node_status_helpers toneRose
class node_netbox,node_discovery_scripts toneIndigo
```

## Components

### NetBox workflows

- [Record views](https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/views): `inventory_monitor/views`
- [Record forms](https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/forms): `inventory_monitor/forms`
- [Record filters](https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/filtersets): `inventory_monitor/filtersets`
- [Record tables](https://github.com/cesnet/inventory-monitor-plugin/tree/main/inventory_monitor/tables): `inventory_monitor/tables`

### Inventory domain

- [Assets and types](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/asset.py): `inventory_monitor/models/asset.py`
- [Asset services](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/asset_service.py): `inventory_monitor/models/asset_service.py`
- [Contracts and invoices](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/contract.py): `inventory_monitor/models/contract.py`
- [Probes and RMA](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/probe.py): `inventory_monitor/models/probe.py`
- [External inventory](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/models/external_inventory.py): `inventory_monitor/models/external_inventory.py`

### Integration surfaces

- [REST API](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/api/views.py): `inventory_monitor/api/views.py`
- [API serializers](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/api/serializers.py): `inventory_monitor/api/serializers.py`
- [GraphQL](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/graphql/schema.py): `inventory_monitor/graphql/schema.py`
- [Search indexing](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/search.py): `inventory_monitor/search.py`

### Discovery and UI

- [NetBox UI extensions](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/template_content.py): `inventory_monitor/template_content.py`
- [Status display](https://github.com/cesnet/inventory-monitor-plugin/blob/main/inventory_monitor/templatetags/inventory_monitor.py): `inventory_monitor/templatetags/inventory_monitor.py`

### Other components

- **NetBox user**
- **NetBox platform**
- **Discovery scripts**

## Connections

- NetBox user → Record views: manages records
- Record views → Record forms: edits with
- Record views → Record filters: filters lists
- Record views → Record tables: renders lists
- Record views → Asset services: queries records
- Record forms → Asset services: edits records
- Record filters → Asset services: filters records
- Record tables → Asset services: displays records
- NetBox platform → REST API: hosts API
- REST API → API serializers
- NetBox platform → GraphQL: hosts GraphQL
- NetBox platform → Search indexing: registers search
- Discovery scripts → Probes and RMA: populate probes
- NetBox platform → NetBox UI extensions: renders extensions
- NetBox UI extensions → Assets and types: looks up matches
- NetBox UI extensions → Probes and RMA: looks up matches
- Status display → External inventory: reads status
