Compare commits

..
163 changed files with 11457 additions and 14423 deletions
-52
View File
@@ -1,52 +0,0 @@
---
name: 🐛 Bug Report
description: Report a reproducible bug in the current release of NetBox
labels: ["type: bug"]
body:
- type: markdown
attributes:
value: >
**NOTE:** This form is only for reporting _reproducible bugs_. If you're having
trouble with installation or just looking for assistance with using NetBox
Topology Views, please visit our
[discussion forum](https://github.com/mattieserver/netbox-topology-views/discussions) instead.
- type: input
attributes:
label: NetBox version
description: What version of NetBox are you currently running?
placeholder: v3.3.9
validations:
required: true
- type: input
attributes:
label: Topology Views version
description: What version of NetBox Topology Views are you currently running?
placeholder: v3.1.0
validations:
required: true
- type: textarea
attributes:
label: Steps to Reproduce
description: >
Describe in detail the exact steps that someone else can take to
reproduce this bug using the current stable release of NetBox Topology Views.
placeholder: |
1. Click on "create widget"
2. Set foo to 12 and bar to G
3. Click the "create" button
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: What did you expect to happen?
placeholder: A new widget should have been created with the specified attributes
validations:
required: true
- type: textarea
attributes:
label: Observed Behavior
description: What happened instead?
placeholder: A TypeError exception was raised
validations:
required: true
-5
View File
@@ -1,5 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: ❓ Discussion
url: https://github.com/mattieserver/netbox-topology-views/discussions
about: "If you're just looking for help, try starting a discussion instead"
@@ -1,58 +0,0 @@
---
name: ✨ Feature Request
description: Propose a new NetBox Topology Views feature or enhancement
labels: ["type: feature"]
body:
- type: markdown
attributes:
value: >
**NOTE:** This form is only for submitting well-formed proposals to extend or modify
NetBox Topology Views in some way. If you're trying to solve a problem but can't figure
out how, or if you still need time to work on the details of a proposed new feature,
please start a [discussion](https://github.com/mattieserver/netbox-topology-views/discussions) instead.
- type: input
attributes:
label: NetBox version
description: What version of NetBox are you currently running?
placeholder: v3.3.9
validations:
required: true
- type: input
attributes:
label: Topology Views version
description: What version of NetBox Topology Views are you currently running?
placeholder: v3.1.0
validations:
required: true
- type: dropdown
attributes:
label: Feature type
options:
- New functionality
- Change to existing functionality
validations:
required: true
- type: textarea
attributes:
label: Proposed functionality
description: >
Describe in detail the new feature or behavior you are proposing. Include any specific changes
to work flows and/or the user interface. The more detail you provide here, the
greater chance your proposal has of being discussed. Feature requests which don't include an
actionable implementation plan will be rejected.
validations:
required: true
- type: textarea
attributes:
label: Use case
description: >
Explain how adding this functionality would benefit NetBox Topology Views users. What need does it address?
validations:
required: true
- type: textarea
attributes:
label: External dependencies
description: >
List any new dependencies on external libraries or services that this new feature would
introduce. For example, does the proposal require the installation of a new Python package?
(Not all new features introduce new dependencies.)
-24
View File
@@ -1,24 +0,0 @@
<!--
IMPORTANT:
==========
Thank you for contributing to NetBox Topology Views! Please
note that our contribution guidelines require a feature
request or bug report to be labeled "status: accepted". This
helps avoid waste time and effort on a proposed change that
we might not be able to accept. If a feature request or bug
report is labeled "status: needs owner", feel free to raise
your hand if you'd like to take work on it and we will
happily assign you to the issue.
Please prefix the title of your pull request according to
it's type. You should use "Closes #FEATURE_ID: ..." for feature
requests and "Fixes #ISSUE_ID: ..." for issues. This helps
us closing issues automatically after merging.
To sum it up:
1. Create Bug Report or Feature Request
2. Wait until the issue has been labeled "status: accepted"
3. Start working on the issue in a seperate branch
3. Create a pull request and name the title with a prefix
according to the issue ID.
-->
-15
View File
@@ -1,15 +0,0 @@
name: NetBox plugin manifest modified
on:
push:
branches: [ develop ]
paths:
- netbox-plugin.yaml
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false
jobs:
manifest-modified:
uses: netboxlabs/public-workflows/.github/workflows/reusable-plugin-manifest-modified.yml@release
+11 -11
View File
@@ -5,7 +5,7 @@ name: Upload Python Package
on:
release:
types: [published]
types: [created]
jobs:
deploy:
@@ -13,19 +13,19 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v3
uses: actions/setup-python@v1
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build
- name: Build package
run: python -m build
- name: Publish package
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
+1 -2
View File
@@ -128,5 +128,4 @@ dmypy.json
# Pyre type checker
.pyre/
node_modules
app.js.map
node_modules
+71 -204
View File
@@ -1,234 +1,101 @@
# MRB NetBox Topology Views
# Netbox Topology Views Plugin
Ein angepasster Fork von **NetBox Topology Views** mit erweiterten Rack-Ansichten,
interaktiver Kabelverfolgung und zusätzlichen Netzwerk-Icons.
![Version](https://img.shields.io/pypi/v/netbox-topology-views) ![Downloads](https://img.shields.io/pypi/dm/netbox-topology-views)
Das Plugin erzeugt Topologien aus den in NetBox gepflegten Geräten, Ports und
Kabeln. Neben der klassischen Topologie bietet dieser Fork eine vollständige
Darstellung einzelner oder mehrerer Racks einschließlich Vorderseite,
Rückseite und Verkabelung.
Create topology views/maps from your devices in netbox.
The connections are based on the cables you created in netbox.
Support to filter on name, site, tag and device role.
## Vorteile dieses Forks
## Preview
- Ein oder mehrere Racks gemeinsam anzeigen
- Geräte positionsgenau anhand ihrer Höheneinheiten darstellen
- Vorder- und Rückseite eines Racks getrennt betrachten
- Auf- und absteigende HE-Nummerierung sowie individuelle Start-HE automatisch berücksichtigen
- Rackübergreifende und externe Kabelverbindungen erkennen
- Geräte in der Kabeltopologie frei verschieben
- Geräte in der Kabeltopologie innerhalb jedes Racks nach ihrer Rackposition sortieren
- Kabeltopologie in den Browser-Vollbildmodus schalten
- Kabeltopologie zwischen 50 und 200 Prozent zoomen und im Vollbild scrollen
- Geräte in der Kabeltopologie mit rund 5 mm Abstand darstellen
- P2P-WirelessLinks und Multi-Access-WLANs als violette, gestrichelte Funkstrecken darstellen
- Manuelle Positionen pro Rack-Auswahl im Browser speichern
- Verbindungen eines Geräts beim Hover weiß hervorheben
- Alle verbundenen Ports und Gegenstellen eines Geräts anzeigen
- Schnittstellen eines Kabels beim Hover anzeigen
- Geräte und Kabel direkt aus der Topologie in NetBox öffnen
- Einzelne Racks, alle Racks oder die Kabeltopologie als SVG, PNG und draw.io exportieren
- Exporte grundsätzlich mit transparentem Hintergrund erzeugen
- Farben von Rackansicht und Export an den aktiven Light- oder Dark-Mode anpassen
- Topologie als PNG oder diagrams.net/draw.io-XML exportieren
- Zusätzliche Icons für Network-, Leaf-, Spine- und Aggregation-Switche
- Unterstützung für helle und dunkle NetBox-Themes
![preview image](doc/img/preview.png?raw=true "preview")
## Änderungen gegenüber dem Original
## Install
Dieser Fork ergänzt insbesondere:
The plugin is available as a Python package and can be installed with pip.
1. Die neue Menükategorie **Weitere Ansichten**.
2. Eine Rack-Ansicht mit Filtern für Site, Location und mehrere Racks.
3. Positionsgenaue Rack-Elevations für Vorder- und Rückseite.
4. Eine Kabeltabelle mit A- und B-Terminierungen.
5. Eine interaktive, verschiebbare Kabeltopologie unter den Racks.
6. Hover-Hervorhebung und Port-zu-Port-Verfolgung für Geräte und Kabel.
7. Lokal gespeicherte Gerätepositionen und eine Funktion zum Zurücksetzen.
8. Ein erweitertes, skalierbares SVG-Iconset für Switch-Rollen.
9. Transparente SVG-, PNG- und draw.io-Exporte für Rack- und Topologieansichten.
10. Anpassungen für die Verwendung mit NetBox 4.6, darunter die geänderte
`Rack.units`-Property.
Run `pip install netbox-topology-views` in your virtual env.
## Vorschau
To ensure NetBox Topology Views plugin is automatically re-installed during future upgrades, create a file named `local_requirements.txt` (if not already existing) in the NetBox root directory (alongside `requirements.txt`) and list the `netbox-topology-views` package:
Die klassische Topologieansicht stammt aus dem ursprünglichen Plugin:
![Topology in light mode](doc/img/topology_light.png)
![Topology in dark mode](doc/img/topology_dark.png)
## Installation aus Gitea
Das Plugin kann direkt aus dem `develop`-Branch installiert werden:
```bash
/opt/netbox/venv/bin/pip install --upgrade --force-reinstall \
"git+https://git.mrblake.cc/MrBlake/mrb-netbox-topology-views.git@develop"
```no-highlight
# echo netbox-topology-views >> local_requirements.txt
```
Für eine reproduzierbare Produktivinstallation sollte statt `develop` ein
Release-Tag oder ein bestimmter Commit verwendet werden:
```bash
/opt/netbox/venv/bin/pip install --upgrade --force-reinstall \
"git+https://git.mrblake.cc/MrBlake/mrb-netbox-topology-views.git@v4.5.1-mrb.1"
```
Für automatische Neuinstallationen bei einem NetBox-Upgrade wird derselbe
Eintrag in `/opt/netbox/local_requirements.txt` hinterlegt:
```text
git+https://git.mrblake.cc/MrBlake/mrb-netbox-topology-views.git@develop
```
Bei einem privaten Gitea-Repository muss der NetBox-Server Zugriff über einen
Deploy-Token oder SSH-Key erhalten.
## NetBox-Konfiguration
In `netbox/configuration.py` wird das Python-Paket aktiviert:
Once installed, the plugin needs to be enabled in your `configuration.py`
```python
PLUGINS = [
"netbox_topology_views",
]
# In your configuration.py
PLUGINS = ["netbox_topology_views"]
```
Then run `python3 manage.py collectstatic --no-input`
### Versions
| netbox version | netbox-topology-views version |
| ------------- |-------------|
| >= 3.1.8 | >= v1.0.0a1 |
| >= 2.11.1 | >= v0.5.3 |
| >= 2.10.0 | >= v0.5.0 |
| < 2.10.0 | =< v0.4.10 |
### Custom field: coordinates
There is also support for custom fields.
If you create a custom field "coordinates" for "dcim > device" with type "text" and name "coordinates" you will see the same layout every time.
The coordinates can then be provided as: "X;Y"
## Configure
If you want to override the default values configure the `PLUGINS_CONFIG` in your `netbox configuration.py`.
Example:
```
PLUGINS_CONFIG = {
"netbox_topology_views": {
"static_image_directory": "netbox_topology_views/img",
"allow_coordinates_saving": True,
"always_save_coordinates": False,
},
'netbox_topology_views': {
'device_img': ['router','switch', 'firewall'],
'preselected_device_roles': ['Router', 'Firewall']
}
}
```
Danach werden Migrationen und statische Dateien verarbeitet:
| Setting | Default value | Description |
| ------------- |-------------| -----|
| device_img |['access-switch', 'core-switch', 'firewall', 'router', 'distribution-switch', 'backup', 'storage,wan-network', 'wireless-ap', 'server', 'internal-switch', 'isp-cpe-material', 'non-racked-devices', 'power-units'] | The slug of the device roles that you have a image for. |
| preselected_device_roles | ['Firewall', 'Router', 'Distribution Switch', 'Core Switch', 'Internal Switch', 'Access Switch', 'Server', 'Storage', 'Backup', 'Wireless AP'] | The full name of the device roles you want to pre select in the global view. Note that this is case sensitive|
| allow_coordinates_saving | False | (bool) Set to true if you use the custom coordinates fields and want to save the coordinates |
| ignore_cable_type | ['power outlet', 'power port'] | The cable types that you want to ignore in the views |
| preselected_tags | '[]' | The name of tags you want to preload |
| enable_circuit_terminations | False | (bool) Set to true if you want to see circuit terminations in the topology |
| draw_default_layout | False | (bool) Set to True if you want to load draw the topology on the initial load (when you go to the topology plugin page) |
```bash
cd /opt/netbox/netbox
/opt/netbox/venv/bin/python manage.py migrate
/opt/netbox/venv/bin/python manage.py collectstatic --no-input
sudo systemctl restart netbox netbox-rq
```
### Custom Images
Nach Änderungen an CSS oder Icons kann ein Hard-Reload des Browsers mit
`Strg+F5` erforderlich sein.
You upload you own custom images to the netbox static dir (`static/netbox_topology_views/img/`).
These images need to be named after de device role slug and have the .png format/extension.
If you add your own image you also need to add the slug to the `device_img` setting.
## Aktualisierung
## Use
```bash
/opt/netbox/venv/bin/pip install --upgrade --force-reinstall \
"git+https://git.mrblake.cc/MrBlake/mrb-netbox-topology-views.git@develop"
Go to the plugins tab in the navbar and click topology or go to `$NETBOX_URL/plugins/topology-views/` to view your topologies
cd /opt/netbox/netbox
/opt/netbox/venv/bin/python manage.py migrate
/opt/netbox/venv/bin/python manage.py collectstatic --no-input
sudo systemctl restart netbox netbox-rq
```
### Update
`--force-reinstall` ist derzeit sinnvoll, da der Fork intern noch die
Paketversion `4.5.1` verwendet.
Run `pip install netbox-topology-views --upgrade` in your venv.
## Verwendung
Run `python3 manage.py collectstatic --no-input`
### Klassische Topologie
Unter **Plugins → Topology Views → Topology** steht die ursprüngliche,
filterbare Topologieansicht zur Verfügung. Sie unterstützt unter anderem:
Clear you browser cache.
- physische Kabel
- logische Verbindungen
- Nachbargeräte
- Circuit-Terminations
- Power Feeds
- Wireless Links
- Coordinate Groups
- PNG- und XML-Export
### Rack-Ansicht
### Permissions
Die erweiterte Ansicht befindet sich unter:
**Plugins → Topology Views → Weitere Ansichten → Rack-Ansicht**
Über Site, Location und Rack können ein einzelnes Rack oder mehrere Racks
ausgewählt werden. Optional lassen sich auch leere Racks einblenden.
In der Elevation werden Geräte entsprechend ihrer Position, Gerätehöhe und
Rack-Seite dargestellt. Unter den Elevations folgen:
1. die interaktive Kabeltopologie und
2. eine tabellarische Übersicht sämtlicher betroffener Kabel.
In der Kabeltopologie können Geräte per Drag-and-drop verschoben werden. Beim
Hover über ein Gerät werden dessen Kabel hervorgehoben und alle verbundenen
Ports aufgelistet. Beim Hover über ein Kabel erscheinen beide Terminierungen.
Ein Klick öffnet das jeweilige NetBox-Objekt.
Über die Export-Schaltflächen können ein einzelnes Rack, alle aktuell
angezeigten Racks oder die interaktive Kabeltopologie als SVG, PNG oder
draw.io-Datei gespeichert werden. Sämtliche Exportformate werden ohne
Hintergrundfläche erzeugt. Im draw.io-Export bleiben Rack-Rahmen, Geräte und
Beschriftungen als einzelne Elemente bearbeitbar. Topologiekabel werden als
echte Kanten exportiert und folgen den Geräten beim Verschieben in draw.io.
Die Positionen werden im `localStorage` des Browsers gespeichert. Sie gelten
damit nur für den jeweiligen Browser und die konkrete Rack-/Filterauswahl.
## Geräte-Icons
Das Plugin ordnet Icons anhand des Slugs einer Device Role zu. Dieser Fork
liefert zusätzlich folgende SVG-Dateien aus:
| Device-Role-Slug | Icon-Datei |
| --- | --- |
| `network-switch` | `network-switch.svg` |
| `leaf-switch` | `leaf-switch.svg` |
| `spine-switch` | `spine-switch.svg` |
| `aggregation-switch` | `aggregation-switch.svg` |
Eigene Bilder können weiterhin über die Seite **Images** zugeordnet werden.
Der Standardpfad lautet `netbox_topology_views/img` innerhalb von
`STATIC_ROOT`.
## Berechtigungen
Für die klassische Topologie werden mindestens folgende Rechte benötigt:
- `dcim.view_site`
- `dcim.view_device`
Für die Rack-Ansicht werden benötigt:
- `dcim.view_rack`
- `dcim.view_device`
- `dcim.view_cable`
Für das Speichern klassischer Topologiekoordinaten werden zusätzlich die
entsprechenden Rechte auf `netbox_topology_views.coordinate` benötigt.
## Kompatibilität
Die Basis dieses Forks ist NetBox Topology Views `4.5.1`. Die neuen
Rack-Funktionen wurden für den Einsatz mit NetBox `4.6.5` angepasst. Da das
ursprüngliche Release offiziell für NetBox 4.5.x ausgewiesen ist, sollten
Updates auf neuere NetBox-Versionen zunächst in einer Testumgebung geprüft
werden.
## Ursprung und Danksagung
Dieses Projekt ist ein Fork des Open-Source-Plugins
[NetBox Topology Views](https://github.com/mattieserver/netbox-topology-views).
Das ursprüngliche Plugin wurde von **Mattijs Vanhaverbeke** erstellt. Der
größte Teil der klassischen Topologieansicht, Datenmodelle, Filter und
Exportfunktionen basiert auf seiner Arbeit und den Beiträgen des ursprünglichen
Projekts.
Dieser Fork wird unabhängig weiterentwickelt und ist nicht mit dem
ursprünglichen Autor oder dem NetBox-Projekt offiziell verbunden.
## Lizenz
Das Projekt steht wie das Original unter der
[Apache License 2.0](LICENSE). Bestehende Copyright-, Lizenz- und
Urheberhinweise des ursprünglichen Projekts bleiben erhalten.
To view `/plugins/topology-views/` you need the following permissions:
+ dcim | device | can view device
+ dcim | site | can view site
+ extras | tag | can view tag
+ dcim | device role | can view device role
-13
View File
@@ -1,13 +0,0 @@
# Security Policy
## Supported Versions
| Version | Supported |
| ------- | ------------------ |
| > 2.0 | :white_check_mark: |
| < 2.0 | :x: |
## Reporting a Vulnerability
Please create an issue when you encounter a Security issue.
+17 -138
View File
@@ -1,143 +1,22 @@
# Setup Dev
+ install docker
+ install docker compose
+ install npm
+ clone netbox repo
+ clone netbox_topology_views repo
+ create venv: `/usr/bin/python3 -m venv venv`
+ activate venv: `source venv/bin/activate`
+ install deps: `pip3 install -r requirements.txt`
+ install build tools: `python3 -m pip install --upgrade build setuptools wheel`
We will assume that you work in the folder `~/code/netbox_plugin/`, change this if you use another folder for your projects/code.
## Setup native prerequisites
**_NOTE:_** these requirements are needed if you want install Postgresql & Redis native. Check the steps for docker & docker-compose if you don't want this.
Make sure that you have already installed Postgresql and Redis. Also make sure that the database has already been created and privileges has been granted as described in the NetBox installation instructions at https://docs.netbox.dev/en/stable/installation/.
In short:
```
sudo apt update
sudo apt install -y postgresql
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo -u postgres psql
CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'J5brHrAXFLQSif0K';
GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
sudo apt install -y redis-server
```
## Setup docker prerequisites
**_NOTE:_** if you used the 'native' prerequisites you can skip these steps below
### Docker
This depends on your OS or how you want to install docker.
See https://docs.docker.com/engine/install/ to find the install steps.
### Docker compose
This also depends on your OS, see the link below:
https://docs.docker.com/compose/install/linux/
## Create the base folder
```
mkdir ~/code/netbox_plugin/
cd ~/code/netbox_plugin/
```
## Install requirements
### Python + deps
You will need the following packages installed:
+ python3-venv
+ python3
Install them with your OS package manager (apt, yum, ...)
### NPM (with nvm)
Follow the steps on the repo below to install npm:
https://github.com/nvm-sh/nvm#installing-and-updating
## Create venv
```
python3 -m venv ~/code/netbox_plugin/.venvs/netbox
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
```
## Setup netbox
### Clone netbox repo
```
cd ~/code/netbox_plugin/
git clone git@github.com:netbox-community/netbox.git netbox
```
### Install deps
```
cd netbox
python3 -m pip install -r requirements.txt
```
## Setup plugin
### Clone netbox-topology-views repo
```
cd ~/code/netbox_plugin/
git clone git@github.com:mattieserver/netbox-topology-views.git plugin
```
### Install deps
```
python3 -m pip install --upgrade build setuptools wheel
```
### Copy netbox config file
```
cd ~/code/netbox_plugin/
cp plugin/dev_setup/configuration.py netbox/netbox/netbox/configuration.py
```
## Start netbox
### Start docker compose
**_NOTE:_** if you used the 'native' prerequisites you can skip to 'Start netbox'
```
cd ~/code/netbox_plugin/
cd plugin/dev_setup
docker-compose up -d
```
### Start netbox
```
cd ~/code/netbox_plugin/
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
cd netbox/netbox/
python3 manage.py migrate
python3 manage.py runserver
```
You might need to create a superuser if you want to start with an empty database: `python3 manage.py createsuperuser`
# Build
+ build the package: `python3 setup.py develop`
+ build the resources `npm run resources`
## Build the plugin
```
cd ~/code/netbox_plugin/
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
cd plugin/
python3 setup.py develop
```
## Build javascript
```
cd plugin/netbox_topology_views/static_dev
npm install
npm run bundle
```
### Test
You can now browse to http://localhost:8000.
The plugin should be available in the menu.
# Import demo data
If you want to add demo data instead of your own data, there's an official Repository you can use. The following example shows how to add demo data for NetBox v3.4. You have to use the json file according to the version you are working on.
```
~/code/netbox_plugin/
git clone git@github.com:netbox-community/netbox-demo-data.git demodata
source ~/code/netbox_plugin/.venvs/netbox/bin/activate
cd netbox/netbox/
python3 manage.py loaddata -v 3 ~/src/netbox-demo-data/netbox-demo-v3.4.json
```
Please note that the demo data adds a superuser with credentials admin/admin.
# Test
+ copy configuration.py from dev_setup to the netbox/netbox/ folder
+ run in the netbox repo: `python3 netbox/manage.py migrate`
+ (first time only) run in the netbox repo: `python3 netbox/manage.py createsuperuser`
+ run in the netbox repo: `python3 netbox/manage.py runserver`
+ browse to http://127.0.0.1:8000
+3 -3
View File
@@ -1,7 +1,7 @@
version: '3.4'
services:
postgres:
image: postgres:16-alpine
image: postgres:12-alpine
environment:
POSTGRES_PASSWORD: J5brHrAXFLQSif0K #just for local dev
POSTGRES_DB: netbox
@@ -9,7 +9,7 @@ services:
ports:
- "5432:5432"
volumes:
- netbox-postgres-data-16:/var/lib/postgresql/data
- netbox-postgres-data:/var/lib/postgresql/data
redis:
image: redis:6-alpine
@@ -35,7 +35,7 @@ services:
- "6378:6379"
volumes:
netbox-postgres-data-16:
netbox-postgres-data:
driver: local
netbox-redis-data:
driver: local
Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 260 KiB

+78
View File
@@ -0,0 +1,78 @@
var gulp = require('gulp');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var cleanCss = require('gulp-clean-css');
var jsVendorFiles = [
'node_modules/vis-network/standalone/umd/vis-network.min.js',
];
var cssVendorFiles = [
'node_modules/vis-network/dist/dist/vis-network.min.css',
];
var sassFiles = './netbox_topology_views/static_dev/css/*.scss',
cssDest = './netbox_topology_views/static/netbox_topology_views/css/';
var jsLocalResourceFiles = './netbox_topology_views/static_dev/js/*.js',
jsDest = './netbox_topology_views/static/netbox_topology_views/js/';
function styles_local() {
return gulp.src(sassFiles)
.pipe(sass().on('error', sass.logError))
.pipe(concat('app.css'))
.pipe(cleanCss())
.pipe(gulp.dest(cssDest));
}
exports.styles_local = styles_local
function styles_vendor() {
return gulp.src(cssVendorFiles)
.pipe(concat('vendor.css'))
.pipe(cleanCss())
.pipe(gulp.dest(cssDest))
}
exports.styles_vendor = styles_vendor
function js_local() {
return gulp.src(jsLocalResourceFiles)
.pipe(concat('app.js'))
.pipe(uglify())
.pipe(gulp.dest(jsDest))
}
exports.js_local = js_local
function js_vendor() {
return gulp.src(jsVendorFiles)
.pipe(concat('vendor.js'))
.pipe(uglify())
.pipe(gulp.dest(jsDest))
}
exports.js_vendor = js_vendor
function js_local_dev() {
return gulp.src(jsLocalResourceFiles)
.pipe(concat('app.js'))
.pipe(gulp.dest(jsDest))
}
exports.js_local_dev = js_local_dev
function js_vendor_dev() {
return gulp.src(jsVendorFiles)
.pipe(concat('vendor.js'))
.pipe(gulp.dest(jsDest))
}
exports.js_vendor_dev = js_vendor_dev
exports.css = gulp.series(styles_local, styles_vendor);
exports.js = gulp.series(js_local, js_vendor);
exports.js_dev = gulp.series(js_local_dev, js_vendor_dev);
exports.build = gulp.series(exports.css, exports.js);
exports.build_dev = gulp.series(exports.css, exports.js_dev);
-36
View File
@@ -1,36 +0,0 @@
version: 0.1
package_name: netbox-topology-views
compatibility:
- release: 4.5.0
netbox_min: 4.5.0
netbox_max: 4.5.5
- release: 4.4.0
netbox_min: 4.4.0
netbox_max: 4.4.3
- release: 4.3.0
netbox_min: 4.3.0
netbox_max: 4.3.7
- release: 4.2.0
netbox_min: 4.2.0
netbox_max: 4.2.1
- release: 4.1.0
netbox_min: 4.1.0
netbox_max: 4.1.11
- release: 4.0.1
netbox_min: 4.0.9
netbox_max: 4.0.11
- release: 4.0.0
netbox_min: 4.0.0
netbox_max: 4.0.9
- release: 3.9.1
netbox_min: 3.7.1
netbox_max: 3.7.8
- release: 3.9.0
netbox_min: 3.7.1
netbox_max: 3.7.8
- release: 3.8.1
netbox_min: 3.6.9
netbox_max: 3.6.9
- release: 3.6.2
netbox_min: 3.5.1
netbox_max: 3.5.9
+15 -18
View File
@@ -1,25 +1,22 @@
from netbox.plugins import PluginConfig
from extras.plugins import PluginConfig
class TopologyViewsConfig(PluginConfig):
name = "netbox_topology_views"
verbose_name = "Topology views"
description = "A plugin to render topology maps"
version = "4.5.1"
author = "Mattijs Vanhaverbeke & LKE"
author_email = "author@example.com"
base_url = "netbox_topology_views"
name = 'netbox_topology_views'
verbose_name = 'Topology views'
description = 'An plugin to render topology maps'
version = '1.0.0-alpha.4'
author = 'Mattijs Vanhaverbeke'
author_email = 'author@example.com'
base_url = 'netbox_topology_views'
required_settings = []
default_settings = {
"static_image_directory": "netbox_topology_views/img",
"allow_coordinates_saving": False,
"always_save_coordinates": False,
'preselected_device_roles': ['Firewall', 'Router', 'Distribution Switch', 'Core Switch', 'Internal Switch', 'Access Switch', 'Server', 'Storage', 'Backup', 'Wireless AP'],
'ignore_cable_type': ['power outlet','power port'],
'device_img': ['access-switch', 'core-switch', 'firewall', 'router', 'distribution-switch', 'backup', 'storage,wan-network', 'wireless-ap', 'server', 'internal-switch', 'isp-cpe-material', 'non-racked-devices', 'power-units'],
'allow_coordinates_saving': False,
'preselected_tags' : [],
'enable_circuit_terminations': True,
'draw_default_layout': False
}
def ready(self):
from . import signals
super().ready()
config = TopologyViewsConfig
+3
View File
@@ -0,0 +1,3 @@
from django.contrib import admin
#no models yet
+1 -1
View File
@@ -1 +1 @@
"""REST API"""
"""REST API"""
+5 -49
View File
@@ -1,56 +1,12 @@
from dcim.models import Device, DeviceRole
from rest_framework.serializers import ModelSerializer
from netbox.api.serializers import NetBoxModelSerializer
from netbox_topology_views.models import RoleImage, IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
from dcim.models import DeviceRole, Device
from extras.models import Tag
class TopologyDummySerializer(ModelSerializer):
class Meta:
model = Device
fields = ("id", "name")
class RoleImageSerializer(ModelSerializer):
class Meta:
model = RoleImage
fields = ("role", "image")
class DeviceRoleSerializer(ModelSerializer):
class Meta:
model = DeviceRole
fields = ("name", "slug", "color", "vm_role", "description")
class CoordinateGroupSerializer(NetBoxModelSerializer):
class Meta:
model = CoordinateGroup
fields = ("name", "description")
class CoordinateSerializer(NetBoxModelSerializer):
class Meta:
model = Coordinate
fields = ("x", "y")
class CircuitCoordinateSerializer(NetBoxModelSerializer):
class Meta:
model = CircuitCoordinate
fields = ("x", "y")
class PowerPanelCoordinateSerializer(NetBoxModelSerializer):
class Meta:
model = PowerPanelCoordinate
fields = ("x", "y")
class PowerFeedCoordinateSerializer(NetBoxModelSerializer):
class Meta:
model = PowerFeedCoordinate
fields = ("x", "y")
class IndividualOptionsSerializer(NetBoxModelSerializer):
class Meta:
model = IndividualOptions
fields = ("ignore_cable_type", "save_coords", "show_unconnected", "show_cables", "show_logical_connections",
"show_single_cable_logical_conns", "show_neighbors", "show_circuit", "show_power", "show_wireless", "group_sites",
"group_locations", "group_racks", "group_virtualchassis", "draw_default_layout", "straight_cables",
"draw_termination_labels", "draw_cable_labels", "grid_size", "node_label_items")
fields = ('id', 'name')
+5 -13
View File
@@ -1,16 +1,8 @@
from netbox.api.routers import NetBoxRouter
from rest_framework import routers
from . import views
from netbox_topology_views.api import views
router = routers.DefaultRouter()
router = NetBoxRouter()
router.register('save-coords', views.SaveCoordsViewSet, basename='save_coords')
router.register("save-coords", views.SaveCoordsViewSet)
router.register("images", views.SaveRoleImageViewSet)
router.register("xml-export", views.ExportTopoToXML, "xml-export")
router.register("coordinate-groups", views.CoordinateGroupViewSet)
router.register("coordinate", views.CoordinateViewSet)
router.register("circuitcoordinate", views.CircuitCoordinateViewSet)
router.register("powerpanelcoordinate", views.PowerPanelCoordinateViewSet)
router.register("powerfeedcoordinate", views.PowerFeedCoordinateViewSet)
urlpatterns = router.urls
urlpatterns = router.urls
+46 -271
View File
@@ -1,285 +1,60 @@
from typing import Dict
import sys
from netbox.api.viewsets import BaseViewSet, NetBoxModelViewSet
from circuits.models import Circuit
from dcim.models import Device, DeviceRole, PowerFeed, PowerPanel
from extras.models import SavedFilter
from django.conf import settings
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.contenttypes.models import ContentType
from django.http import HttpResponse, JsonResponse
from rest_framework.viewsets import ModelViewSet, ViewSet, ReadOnlyModelViewSet, GenericViewSet
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.viewsets import ReadOnlyModelViewSet, ViewSet
from django.contrib.contenttypes.models import ContentType
from rest_framework.routers import APIRootView
from netbox_topology_views.api.serializers import (
RoleImageSerializer,
TopologyDummySerializer,
CoordinateGroupSerializer,
CoordinateSerializer,
CircuitCoordinateSerializer,
PowerPanelCoordinateSerializer,
PowerFeedCoordinateSerializer,
)
import netbox_topology_views.models
from netbox_topology_views.models import RoleImage, IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
from netbox_topology_views.views import get_topology_data
from netbox_topology_views.utils import get_image_from_url, export_data_to_xml, get_query_settings
from netbox_topology_views.filters import DeviceFilterSet
from .serializers import TopologyDummySerializer
from django.conf import settings
class SaveCoordsViewSet(BaseViewSet, ReadOnlyModelViewSet):
permission_required = 'netbox_topology_views.change_coordinate'
from dcim.models import DeviceRole, Device, Cable
from circuits.models import Circuit
from extras.models import Tag
queryset = Device.objects.none()
class TopologyViewsRootView(APIRootView):
def get_view_name(self):
return 'TopologyViews'
class SaveCoordsViewSet(ReadOnlyModelViewSet):
queryset = Device.objects.all()
serializer_class = TopologyDummySerializer
@action(detail=False, methods=["patch"])
@action(detail=False, methods=['patch'])
def save_coords(self, request):
if not settings.PLUGINS_CONFIG["netbox_topology_views"][
"allow_coordinates_saving"
]:
return Response({"status": "not allowed to save coords"}, status=500)
results = {}
if settings.PLUGINS_CONFIG["netbox_topology_views"]["allow_coordinates_saving"]:
device_id = None
x_coord = None
y_coord = None
if "node_id" in request.data:
if request.data["node_id"]:
device_id = request.data["node_id"]
if "x" in request.data:
if request.data["x"]:
x_coord = request.data["x"]
if "y" in request.data:
if request.data["y"]:
y_coord = request.data["y"]
device_id: str = request.data.get("node_id", None)
x_coord = request.data.get("x", None)
y_coord = request.data.get("y", None)
group_id = request.data.get("group", "None")
actual_device= Device.objects.get(id=device_id)
actual_device = None
if device_id.startswith("c"):
device_id = device_id.lstrip("c")
actual_device = Circuit.objects.get(id=device_id)
model_name = 'CircuitCoordinate'
elif device_id.startswith("p"):
device_id = device_id.lstrip("p")
actual_device = PowerPanel.objects.get(id=device_id)
model_name = 'PowerPanelCoordinate'
elif device_id.startswith("f"):
device_id = device_id.lstrip("f")
actual_device = PowerFeed.objects.get(id=device_id)
model_name = 'PowerFeedCoordinate'
elif device_id.isnumeric():
actual_device = Device.objects.get(id=device_id)
model_name = 'Coordinate'
if not actual_device:
return Response({"status": "invalid node_id in body"}, status=400)
model_class = getattr(netbox_topology_views.models, model_name)
if group_id is None or group_id == "default":
group_id = model_class.get_or_create_default_group(group_id)
if not group_id:
return Response(
{"status": "Error while creating default group."}, status=500
)
try:
if CoordinateGroup.objects.filter(pk=group_id):
group = CoordinateGroup.objects.get(pk=group_id)
# Hen-and-egg-problem. Thanks, Django! By default, Django updates records that
# already exist and inserts otherwise. This does not work with our
# unique_together key if no pk is given. But: No record, no pk.
if not model_class.objects.filter(group=group, device=actual_device):
# Unique group/device pair does not exist. Prepare new data set
coords = model_class(group=group, device=actual_device, x=x_coord, y=y_coord)
else:
# Unique group/device pair already exists. Update data
coords = model_class(pk=model_class.objects.get(group=group, device=actual_device).pk, group=group, device=actual_device, x=x_coord, y=y_coord)
coords.save()
except:
return Response(
{"status": "Coordinates could not be saved."}, status=500
)
return Response({"status": "saved coords"})
class ExportTopoToXML(BaseViewSet, ViewSet):
queryset = Device.objects.none()
serializer_class = TopologyDummySerializer
def list(self, request):
self.filterset = DeviceFilterSet
self.queryset = Device.objects.restrict(request.user, 'view').select_related(
"device_type", "role"
)
self.queryset = self.filterset(request.GET, self.queryset).qs
individualOptions, created = IndividualOptions.objects.get_or_create(
user_id=request.user.id,
)
if request.GET:
filter_id, ignore_cable_type, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, group_virtualchassis, group, show_neighbors, straight_cables, draw_termination_labels, draw_cable_labels, grid_size, node_label_items = get_query_settings(request)
# Read options from saved filters as NetBox does not handle custom plugin filters
if "filter_id" in request.GET and request.GET["filter_id"] != '':
try:
saved_filter = SavedFilter.objects.get(pk=filter_id)
saved_filter_params = getattr(saved_filter, 'parameters')
if ignore_cable_type == () and 'ignore_cable_type' in saved_filter_params: ignore_cable_type = saved_filter_params['ignore_cable_type']
if save_coords == False and 'save_coords' in saved_filter_params: save_coords = saved_filter_params['save_coords']
if show_unconnected == False and 'show_unconnected' in saved_filter_params: show_unconnected = saved_filter_params['show_unconnected']
if show_power == False and 'show_power' in saved_filter_params: show_power = saved_filter_params['show_power']
if show_circuit == False and 'show_circuit' in saved_filter_params: show_circuit = saved_filter_params['show_circuit']
if show_logical_connections == False and 'show_logical_connections' in saved_filter_params: show_logical_connections = saved_filter_params['show_logical_connections']
if show_single_cable_logical_conns == False and 'show_single_cable_logical_conns' in saved_filter_params: show_single_cable_logical_conns = saved_filter_params['show_single_cable_logical_conns']
if show_cables == False and 'show_cables' in saved_filter_params: show_cables = saved_filter_params['show_cables']
if show_wireless == False and 'show_wireless' in saved_filter_params: show_wireless = saved_filter_params['show_wireless']
if group_sites == False and 'group_sites' in saved_filter_params: group_sites = saved_filter_params['group_sites']
if group_locations == False and 'group_locations' in saved_filter_params: group_locations = saved_filter_params['group_locations']
if group_racks == False and 'group_racks' in saved_filter_params: group_racks = saved_filter_params['group_racks']
if group_virtualchassis == False and 'group_virtualchassis' in saved_filter_params: group_virtualchassis = saved_filter_params['group_virtualchassis']
if show_neighbors == False and 'show_neighbors' in saved_filter_params: show_neighbors = saved_filter_params['show_neighbors']
if straight_cables == False and 'straight_cables' in saved_filter_params: straight_cables = saved_filter_params['straight_cables']
if draw_termination_labels == False and 'draw_termination_labels' in saved_filter_params: draw_termination_labels = saved_filter_params['draw_termination_labels']
if draw_cable_labels == False and 'draw_cable_labels' in saved_filter_params: draw_cable_labels = saved_filter_params['draw_cable_labels']
if grid_size == 0 and 'grid_size' in saved_filter_params: grid_size = saved_filter_params['grid_size']
if node_label_items == () and 'node_label_items' in saved_filter_params: node_label_items = saved_filter_params['node_label_items']
except SavedFilter.DoesNotExist: # filter_id not found
pass
except Exception as inst:
print(type(inst))
if 'group' not in request.query_params:
if 'saved_filter_params' in locals() and "group" in saved_filter_params:
group_id = saved_filter_params['group'][0]
else:
group_id = "default"
if "coordinates" in actual_device.custom_field_data:
actual_device.custom_field_data["coordinates"] = "%s;%s" % (x_coord,y_coord)
actual_device.save()
results["status"] = "saved coords"
else:
group_id = request.query_params["group"]
topo_data = get_topology_data(
queryset=self.queryset,
individualOptions=individualOptions,
ignore_cable_type=ignore_cable_type,
save_coords=save_coords,
show_unconnected=show_unconnected,
show_cables=show_cables,
show_logical_connections=show_logical_connections,
show_single_cable_logical_conns=show_single_cable_logical_conns,
show_neighbors=show_neighbors,
show_circuit=show_circuit,
show_power=show_power,
show_wireless=show_wireless,
group_sites=group_sites,
group_locations=group_locations,
group_racks=group_racks,
group_virtualchassis=group_virtualchassis,
group_id=group_id,
straight_cables=straight_cables,
draw_termination_labels=draw_termination_labels,
draw_cable_labels=draw_cable_labels,
grid_size=grid_size,
node_label_items=node_label_items,
)
xml_data = export_data_to_xml(topo_data).decode('utf-8').replace('\n', '&#xa;')
try:
actual_device.custom_field_data["coordinates"] = "%s;%s" % (x_coord,y_coord)
actual_device.save()
results["status"] = "saved coords"
except :
results["status"] = "coords custom field not created"
return Response(status=500)
return HttpResponse(xml_data, content_type="application/xml; charset=utf-8")
return Response(results)
else:
return JsonResponse(
{"status": "Missing or malformed request parameters"}, status=400
)
results["status"] = "not allowed to save coords"
return Response(results, status=500)
class SaveRoleImageViewSet(BaseViewSet, ReadOnlyModelViewSet):
queryset = DeviceRole.objects.none()
serializer_class = RoleImageSerializer
permission_required = (
"dcim.add_devicerole",
"dcim.change_devicerole",
)
@action(detail=False, methods=["post"])
def save(self, request):
if not isinstance(request.data, dict):
return JsonResponse(
{"status": "Missing or malformed request body"}, status=400
)
if sys.version_info >= (3,9,0):
device_roles = {
k: v.removeprefix(settings.STATIC_URL)
for k, v in request.data.items()
if k.isnumeric()}
content_type_ids = {
k[2:]: v.removeprefix(settings.STATIC_URL)
for k, v in request.data.items()
if k.startswith("ct") and k[2:].isnumeric()
}
else:
device_roles = {}
for k, v in request.data.items():
if k.isdigit() and v.startswith(settings.STATIC_URL):
device_roles[k] = v[len(settings.STATIC_URL):]
content_type_ids = {}
for k, v in request.data.items():
if k.startswith("ct") and k[2:].isdigit() and v.startswith(settings.STATIC_URL):
content_type_ids[k[2:]] = v[len(settings.STATIC_URL):]
roles: Dict[int, DeviceRole] = DeviceRole.objects.in_bulk(device_roles.keys())
content_types: Dict[int, ContentType] = ContentType.objects.in_bulk(
content_type_ids.keys()
)
if len(roles) != len(device_roles):
difference = set(device_roles) - set(roles.keys())
return JsonResponse(
{"status": f"Got unknown device role ids: {difference}"},
status=400,
)
if len(content_types) != len(content_type_ids):
difference = set(content_type_ids) - set(content_types.keys())
return JsonResponse(
{"status": f"Got unknown content type ids: {difference}"},
status=400,
)
if device_roles:
device_role_ct = ContentType.objects.get_for_model(DeviceRole)
for id, url in device_roles.items():
RoleImage.objects.update_or_create(
{
"content_type_id": device_role_ct.pk,
"object_id": id,
"image": str(get_image_from_url(url)),
},
object_id=id,
)
for content_type_id, url in content_type_ids.items():
RoleImage.objects.update_or_create(
{
"content_type_id": content_type_id,
"image": str(get_image_from_url(url)),
},
content_type_id=content_type_id,
)
return JsonResponse({"status": "Ok"})
class CoordinateGroupViewSet(NetBoxModelViewSet):
queryset = CoordinateGroup.objects.all()
serializer_class = CoordinateGroupSerializer
class CoordinateViewSet(NetBoxModelViewSet):
queryset = Coordinate.objects.all()
serializer_class = CoordinateSerializer
class CircuitCoordinateViewSet(NetBoxModelViewSet):
queryset = CircuitCoordinate.objects.all()
serializer_class = CircuitCoordinateSerializer
class PowerPanelCoordinateViewSet(NetBoxModelViewSet):
queryset = PowerPanelCoordinate.objects.all()
serializer_class = PowerPanelCoordinateSerializer
class PowerFeedCoordinateViewSet(NetBoxModelViewSet):
queryset = PowerFeedCoordinate.objects.all()
serializer_class = PowerFeedCoordinateSerializer
-36
View File
@@ -1,36 +0,0 @@
from utilities.choices import ChoiceSet
class NodeLabelItems(ChoiceSet):
DEVICE_NAME = 'devicename'
DEVICE_TYPE = 'devicetype'
ROLE = 'role'
DESCRIPTION = 'description'
PRIMARY_IPV4 = 'primaryipv4'
PRIMARY_IPV6 = 'primaryipv6'
OUT_OF_BAND_IP = 'outofbandip'
PLATFORM = 'platform'
SERIAL = 'serial'
TENANT = 'tenant'
SITE = 'site'
LOCATION = 'location'
RACK = 'rack'
VIRTUAL_CHASSIS = 'virtualchassis'
ASSET_TAG = 'assettag'
CHOICES = [
(DEVICE_NAME, 'Device Name'),
(DEVICE_TYPE, 'Device Type'),
(ROLE, 'Role'),
(DESCRIPTION, 'Description'),
(PRIMARY_IPV4, 'Primary IPv4'),
(PRIMARY_IPV6, 'Primary IPv6'),
(OUT_OF_BAND_IP, 'Out-of-band IP'),
(PLATFORM, 'Platform'),
(SERIAL, 'Serial'),
(TENANT, 'Tenant'),
(SITE, 'Site'),
(LOCATION, 'Location'),
(RACK, 'Rack'),
(VIRTUAL_CHASSIS, 'Virtual Chassis'),
(ASSET_TAG, 'Asset Tag'),
]
+22 -229
View File
@@ -1,254 +1,47 @@
import django_filters
from circuits.models import Circuit
from dcim.choices import DeviceStatusChoices
from dcim.models import Device, DeviceRole, Location, Rack, Region, Site, SiteGroup, Manufacturer, DeviceType, Platform, PowerPanel, PowerFeed
from extras.filters import TagFilter
from dcim.models import Device, DeviceRole, Region, Site, Location
from utilities.filters import TreeNodeMultipleChoiceFilter
from django.db.models import Q
from extras.filtersets import LocalConfigContextFilterSet
from extras.models import ConfigTemplate
from netbox.filtersets import NetBoxModelFilterSet
from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
from utilities.filters import TreeNodeMultipleChoiceFilter, MultiValueCharFilter, MultiValueMACAddressFilter
from netbox_topology_views.models import CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet, LocalConfigContextFilterSet):
class DeviceFilterSet(django_filters.FilterSet):
q = django_filters.CharFilter(
method="search",
label="Search",
method='search',
label='Search',
)
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
field_name='device_type__manufacturer',
queryset=Manufacturer.objects.all(),
label="Manufacturer (ID)",
)
manufacturer = django_filters.ModelMultipleChoiceFilter(
field_name='device_type__manufacturer__slug',
queryset=Manufacturer.objects.all(),
to_field_name='slug',
label="Manufacturer (slug)",
)
device_type_id = django_filters.ModelMultipleChoiceFilter(
queryset=DeviceType.objects.all(),
label="Device type (ID)",
)
role_id = django_filters.ModelMultipleChoiceFilter(
field_name="role_id",
tag = TagFilter()
device_role_id = django_filters.ModelMultipleChoiceFilter(
field_name='device_role_id',
queryset=DeviceRole.objects.all(),
label="Role (ID)",
)
platform_id = django_filters.ModelMultipleChoiceFilter(
queryset=Platform.objects.all(),
label="Platform (ID)",
label='Role (ID)',
)
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
field_name="site__region",
lookup_expr="in",
label="Region (ID)",
)
site_group_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name="site__group",
lookup_expr="in",
label="Site Group (ID)",
field_name='site__region',
lookup_expr='in',
label='Region (ID)',
)
site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.all(),
label="Site (ID)",
label='Site (ID)',
)
location_id = TreeNodeMultipleChoiceFilter(
queryset=Location.objects.all(),
field_name="location",
lookup_expr="in",
label="Location (ID)",
)
rack_id = django_filters.ModelMultipleChoiceFilter(
queryset=Rack.objects.all(),
field_name="rack_id",
label="Rack (ID)",
)
status = django_filters.MultipleChoiceFilter(
choices=DeviceStatusChoices,
null_value=None,
)
mac_address = MultiValueMACAddressFilter(
field_name='interfaces__mac_addresses__mac_address',
label="MAC address",
)
serial = MultiValueCharFilter(
lookup_expr='iexact'
)
console_ports = django_filters.BooleanFilter(
method='_console_ports',
label="Has console ports",
)
console_server_ports = django_filters.BooleanFilter(
method='_console_server_ports',
label="Has console server ports",
)
power_ports = django_filters.BooleanFilter(
method='_power_ports',
label="Has power ports",
)
power_outlets = django_filters.BooleanFilter(
method='_power_outlets',
label="Has power outlets",
)
interfaces = django_filters.BooleanFilter(
method='_interfaces',
label="Has interfaces",
)
pass_through_ports = django_filters.BooleanFilter(
method='_pass_through_ports',
label="Has pass-through ports",
)
config_template_id = django_filters.ModelMultipleChoiceFilter(
queryset=ConfigTemplate.objects.all(),
label="Config template (ID)",
)
has_primary_ip = django_filters.BooleanFilter(
method='_has_primary_ip',
label="Has a primary IP",
)
has_oob_ip = django_filters.BooleanFilter(
method='_has_oob_ip',
label="Has an out-of-band IP",
)
virtual_chassis_member = django_filters.BooleanFilter(
method='_virtual_chassis_member',
label="Is a virtual chassis member",
field_name='location',
lookup_expr='in',
label='Location (ID)',
)
class Meta:
model = Device
fields = ["id", "name", "asset_tag", "airflow"]
fields = ['id', 'name', ]
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
qs_filter = Q(name__icontains=value)
return queryset.filter(qs_filter)
def _console_ports(self, queryset, name, value):
return queryset.exclude(consoleports__isnull=value)
def _console_server_ports(self, queryset, name, value):
return queryset.exclude(consoleserverports__isnull=value)
def _power_ports(self, queryset, name, value):
return queryset.exclude(powerports__isnull=value)
def _power_outlets(self, queryset, name, value):
return queryset.exclude(poweroutlets__isnull=value)
def _interfaces(self, queryset, name, value):
return queryset.exclude(interfaces__isnull=value)
def _pass_through_ports(self, queryset, name, value):
return queryset.exclude(
frontports__isnull=value,
rearports__isnull=value
)
def _has_primary_ip(self, queryset, name, value):
params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False)
if value:
return queryset.filter(params)
return queryset.exclude(params)
def _has_oob_ip(self, queryset, name, value):
params = Q(oob_ip__isnull=False)
if value:
return queryset.filter(params)
return queryset.exclude(params)
def _virtual_chassis_member(self, queryset, name, value):
return queryset.exclude(virtual_chassis__isnull=value)
class CircuitCoordinatesFilterSet(NetBoxModelFilterSet):
group = django_filters.ModelMultipleChoiceFilter(
queryset = CoordinateGroup.objects.all(),
)
device = django_filters.ModelMultipleChoiceFilter(
queryset = Circuit.objects.all(),
)
class Meta:
model = CircuitCoordinate
fields = ['id', 'group', 'device', 'x', 'y']
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
return queryset.filter(
Q(group__name__icontains=value) |
Q(device__name__icontains=value)
)
class PowerPanelCoordinatesFilterSet(NetBoxModelFilterSet):
group = django_filters.ModelMultipleChoiceFilter(
queryset = CoordinateGroup.objects.all(),
)
device = django_filters.ModelMultipleChoiceFilter(
queryset = PowerPanel.objects.all(),
)
class Meta:
model = PowerPanelCoordinate
fields = ['id', 'group', 'device', 'x', 'y']
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
return queryset.filter(
Q(group__name__icontains=value) |
Q(device__name__icontains=value)
)
class PowerFeedCoordinatesFilterSet(NetBoxModelFilterSet):
group = django_filters.ModelMultipleChoiceFilter(
queryset = CoordinateGroup.objects.all(),
)
device = django_filters.ModelMultipleChoiceFilter(
queryset = PowerFeed.objects.all(),
)
class Meta:
model = PowerFeedCoordinate
fields = ['id', 'group', 'device', 'x', 'y']
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
return queryset.filter(
Q(group__name__icontains=value) |
Q(device__name__icontains=value)
)
class CoordinatesFilterSet(NetBoxModelFilterSet):
group = django_filters.ModelMultipleChoiceFilter(
queryset = CoordinateGroup.objects.all(),
)
device = django_filters.ModelMultipleChoiceFilter(
queryset = Device.objects.all(),
)
class Meta:
model = Coordinate
fields = ['id', 'group', 'device', 'x', 'y']
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
return queryset.filter(
Q(group__name__icontains=value) |
Q(device__name__icontains=value)
qs_filter = (
Q(name__icontains=value)
)
return queryset.filter(qs_filter)
+21 -734
View File
@@ -1,766 +1,53 @@
from cProfile import label
from django import forms
from django.conf import settings
from django.utils.translation import gettext as _
from circuits.models import Circuit
from dcim.models import Device, Site, SiteGroup, Region, DeviceRole, Location, Rack, Manufacturer, DeviceType, Platform, PowerPanel, PowerFeed
from extras.models import Tag
from dcim.models import Device, Site, Region, DeviceRole, Location
from django import forms
from dcim.choices import DeviceStatusChoices, DeviceAirflowChoices
from tenancy.models import TenantGroup, Tenant
from extras.models import ConfigTemplate
from extras.forms import LocalConfigContextFilterForm
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from django.conf import settings
from netbox.forms import NetBoxModelFilterSetForm, NetBoxModelForm, NetBoxModelImportForm
from utilities.forms.rendering import FieldSet
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
from utilities.forms.fields import (
TagFilterField,
DynamicModelMultipleChoiceField
)
from netbox_topology_views.models import IndividualOptions, CoordinateGroup, Coordinate, CircuitCoordinate, PowerPanelCoordinate, PowerFeedCoordinate
from netbox_topology_views.choices import NodeLabelItems
from utilities.forms import (TagFilterField, DynamicModelMultipleChoiceField, FilterForm)
class DeviceFilterForm(
LocalConfigContextFilterForm,
TenancyFilterForm,
ContactModelFilterForm,
NetBoxModelFilterSetForm
):
class DeviceFilterForm(FilterForm):
model = Device
fieldsets = (
FieldSet('q', 'filter_id', 'tag'),
FieldSet(
'group', 'ignore_cable_type', 'save_coords', 'show_unconnected', 'show_cables', 'show_wireless',
'show_logical_connections', 'show_single_cable_logical_conns', 'show_neighbors',
'group_sites', 'group_locations', 'group_racks', 'group_virtualchassis', 'straight_cables',
'draw_termination_labels', 'draw_cable_labels', 'grid_size', 'node_label_items', name=_("Options")
),
FieldSet(
'show_circuit', 'show_power', name=_("Additional filter-independent types (non-devices)")
),
FieldSet('id', name=_("Device")),
FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_("Location")),
FieldSet('status', 'role_id', 'airflow', 'serial', 'asset_tag', 'mac_address', name=_("Operation")),
FieldSet('manufacturer_id', 'device_type_id', 'platform_id', name=_("Hardware")),
FieldSet('tenant_group_id', 'tenant_id', name=_("Tenant")),
FieldSet('contact', 'contact_role', 'contact_group', name=_("Contacts")),
FieldSet(
'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports', name=_("Components")
),
FieldSet(
'has_primary_ip', 'has_oob_ip', 'virtual_chassis_member', 'config_template_id', 'local_context_data', name=_("Miscellaneous")
),
)
group = forms.ModelChoiceField(
queryset=CoordinateGroup.objects.all(),
required=False,
label=_('Coordinate group'),
)
id = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(),
required=False,
label=_('Device'),
query_params={
'location_id': '$location_id',
'region_id': '$region_id',
'site_group_id': '$site_group_id',
'site_id': '$site_id',
'role_id': '$role_id',
'contact': '$contact',
'contact_role': '$contact_role',
'contact_group': '$contact_group',
},
)
field_groups = [
['q', 'hide_unconnected'],
['region_id', 'site_id', 'location_id'],
['device_role_id'],
['tag'],
]
region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
required=False,
label=_('Region')
)
site_group_id = DynamicModelMultipleChoiceField(
queryset=SiteGroup.objects.all(),
device_role_id = DynamicModelMultipleChoiceField(
queryset=DeviceRole.objects.all(),
required=False,
label=_('Site Group'),
label=_('Device Role')
)
site_id = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(),
required=False,
query_params={
'region_id': '$region_id',
'group_id': '$site_group_id',
},
label=_('Site'),
label=_('Site')
)
location_id = DynamicModelMultipleChoiceField(
queryset=Location.objects.all(),
required=False,
query_params={
'region_id': '$region_id',
'site_group_id': '$site_group_id',
'site_id': '$site_id',
},
label=_('Location'),
label=_('Location')
)
rack_id = DynamicModelMultipleChoiceField(
queryset=Rack.objects.all(),
hide_unconnected = forms.BooleanField(
label=_("Hide Unconnected"),
required=False,
query_params={
'region_id': '$region_id',
'site_group_id': '$site_group_id',
'site_id': '$site_id',
'location_id': '$location_id',
},
label=_('Rack'),
)
status = forms.MultipleChoiceField(
choices=DeviceStatusChoices,
required=False,
label=_('Device Status')
)
role_id = DynamicModelMultipleChoiceField(
queryset=DeviceRole.objects.all(),
required=False,
label=_('Role')
)
airflow = forms.MultipleChoiceField(
label=_('Airflow'),
choices=add_blank_choice(DeviceAirflowChoices),
required=False
)
serial = forms.CharField(
label=_('Serial'),
required=False
)
asset_tag = forms.CharField(
label=_('Asset tag'),
required=False
)
mac_address = forms.CharField(
required=False,
label=_('MAC address')
)
manufacturer_id = DynamicModelMultipleChoiceField(
queryset=Manufacturer.objects.all(),
required=False,
label=_('Manufacturer')
)
device_type_id = DynamicModelMultipleChoiceField(
queryset=DeviceType.objects.all(),
required=False,
query_params={
'manufacturer_id': '$manufacturer_id'
},
label=_('Model')
)
platform_id = DynamicModelMultipleChoiceField(
queryset=Platform.objects.all(),
required=False,
null_option='None',
label=_('Platform')
)
console_ports = forms.NullBooleanField(
required=False,
label=_('Has console ports'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
console_server_ports = forms.NullBooleanField(
required=False,
label=_('Has console server ports'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
power_ports = forms.NullBooleanField(
required=False,
label=_('Has power ports'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
power_outlets = forms.NullBooleanField(
required=False,
label=_('Has power outlets'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
interfaces = forms.NullBooleanField(
required=False,
label=_('Has interfaces'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
pass_through_ports = forms.NullBooleanField(
required=False,
label=_('Has pass-through ports'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
config_template_id = DynamicModelMultipleChoiceField(
queryset=ConfigTemplate.objects.all(),
required=False,
label=_('Config template')
)
has_primary_ip = forms.NullBooleanField(
required=False,
label=_('Has a primary IP'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
has_oob_ip = forms.NullBooleanField(
required=False,
label=_('Has an OOB IP'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
virtual_chassis_member = forms.NullBooleanField(
required=False,
label=_('Virtual chassis member'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
initial=False)
tag = TagFilterField(model)
# options
ignore_cable_type = forms.MultipleChoiceField(
label=_('Ignore Termination Types'),
required=False,
choices=IndividualOptions.CHOICES
)
save_coords = forms.NullBooleanField(
label=_('Save Coordinates'),
required=False,
disabled=(not settings.PLUGINS_CONFIG['netbox_topology_views']['allow_coordinates_saving'] or settings.PLUGINS_CONFIG['netbox_topology_views']['always_save_coordinates']),
initial=(settings.PLUGINS_CONFIG['netbox_topology_views']['always_save_coordinates']),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_unconnected = forms.NullBooleanField(
label=_('Show Unconnected'),
required=False,
initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_cables = forms.NullBooleanField(
required=False,
initial=False,
label=_('Show Cables'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_wireless = forms.NullBooleanField(
label =_('Show Wireless Links'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_logical_connections = forms.NullBooleanField(
label =_('Show Logical Connections'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_single_cable_logical_conns = forms.NullBooleanField(
label =_('Show redundant Cable and Logical Connection'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_neighbors = forms.NullBooleanField(
label =_('Show Neighbors'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
group_sites = forms.NullBooleanField(
label =_('Group Sites'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
group_locations = forms.NullBooleanField(
label =_('Group Locations'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
group_racks = forms.NullBooleanField(
label =_('Group Racks'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
group_virtualchassis = forms.NullBooleanField(
label =_('Group Virtual Chassis'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
straight_cables = forms.BooleanField(
label=_('Straight Cables'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
draw_termination_labels = forms.BooleanField(
label=_('Termination Labels'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
draw_cable_labels = forms.BooleanField(
label=_('Cable Labels'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
grid_size = forms.IntegerField(
label=_('Grid Size'),
required=False,
initial=0,
min_value=0,
max_value=1000,
help_text=_('Show grid and snap dragged icons to grid. Set to 0 to disable grid and snapping.')
)
node_label_items = forms.MultipleChoiceField(
label=_('Node Label Items'),
required=False,
choices=NodeLabelItems
)
# Additional types (non-devices)
show_circuit = forms.NullBooleanField(
label=_('Show Circuit Terminations'), required=False, initial=False,
help_text=_('All Circuits will be displayed. Circuits cannot be filtered.'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
show_power = forms.NullBooleanField(
label=_('Show Power Feeds'), required=False, initial=False,
help_text=_('All Power Feeds will be displayed. Power Feeds cannot be filtered.'),
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
class RackElevationFilterForm(forms.Form):
"""Compact selector for the rack elevation view."""
site_id = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(), required=False, label=_("Site")
)
location_id = DynamicModelMultipleChoiceField(
queryset=Location.objects.all(), required=False, label=_("Location"),
query_params={"site_id": "$site_id"},
)
rack_id = DynamicModelMultipleChoiceField(
queryset=Rack.objects.all(), required=False, label=_("Racks"),
query_params={"site_id": "$site_id", "location_id": "$location_id"},
help_text=_("Select one or more racks. If empty, all matching racks are shown."),
)
include_empty = forms.BooleanField(
required=False, initial=False, label=_("Include empty racks")
)
class CoordinateGroupsForm(NetBoxModelForm):
fieldsets = (
FieldSet('name', 'description', name=_("Group Details")),
)
class Meta:
model = CoordinateGroup
fields = ('name', 'description')
class CoordinateGroupsImportForm(NetBoxModelImportForm):
class Meta:
model = CoordinateGroup
fields = ('name', 'description')
class CircuitCoordinatesForm(NetBoxModelForm):
fieldsets = (
FieldSet('group', 'device', 'x', 'y', name=_("Circuit Coordinate")),
)
class Meta:
model = CircuitCoordinate
fields = ('group', 'device', 'x', 'y')
class PowerPanelCoordinatesForm(NetBoxModelForm):
fieldsets = (
FieldSet('group', 'device', 'x', 'y', name=_("Power Panel")),
)
class Meta:
model = PowerPanelCoordinate
fields = ('group', 'device', 'x', 'y')
class PowerFeedCoordinatesForm(NetBoxModelForm):
fieldsets = (
FieldSet('group', 'device', 'x', 'y', name=_("PowerFeed Coordinate")),
)
class Meta:
model = PowerFeedCoordinate
fields = ('group', 'device', 'x', 'y')
class CoordinatesForm(NetBoxModelForm):
fieldsets = (
FieldSet('group', 'device', 'x', 'y', name=_("Coordinate")),
)
class Meta:
model = Coordinate
fields = ('group', 'device', 'x', 'y')
class CircuitCoordinatesImportForm(NetBoxModelImportForm):
class Meta:
model = CircuitCoordinate
fields = ('group', 'device', 'x', 'y')
class PowerPanelCoordinatesImportForm(NetBoxModelImportForm):
class Meta:
model = PowerPanelCoordinate
fields = ('group', 'device', 'x', 'y')
class PowerFeedCoordinatesImportForm(NetBoxModelImportForm):
class Meta:
model = PowerFeedCoordinate
fields = ('group', 'device', 'x', 'y')
class CoordinatesImportForm(NetBoxModelImportForm):
class Meta:
model = Coordinate
fields = ('group', 'device', 'x', 'y')
class CircuitCoordinatesFilterForm(NetBoxModelFilterSetForm):
model = CircuitCoordinate
fieldsets = (
FieldSet('q', 'filter_id'),
FieldSet('group', 'device', 'x', 'y', name=_("Circuit Coordinates")),
)
group = forms.ModelMultipleChoiceField(
queryset=CoordinateGroup.objects.all(),
required=False
)
device = DynamicModelMultipleChoiceField(
queryset=Circuit.objects.all(),
required=False
)
x = forms.IntegerField(
required=False
)
y = forms.IntegerField(
required=False
)
class PowerPanelCoordinatesFilterForm(NetBoxModelFilterSetForm):
model = PowerPanelCoordinate
fieldsets = (
FieldSet('q', 'filter_id'),
FieldSet('group', 'device', 'x', 'y', name=_('PowerPanel Coordinates')),
)
group = forms.ModelMultipleChoiceField(
queryset=CoordinateGroup.objects.all(),
required=False
)
device = DynamicModelMultipleChoiceField(
queryset=PowerPanel.objects.all(),
required=False
)
x = forms.IntegerField(
required=False
)
y = forms.IntegerField(
required=False
)
class PowerFeedCoordinatesFilterForm(NetBoxModelFilterSetForm):
model = Coordinate
fieldsets = (
FieldSet('q', 'filter_id'),
FieldSet('group', 'device', 'x', 'y', name=_("PowerFeed Coordinates")),
)
group = forms.ModelMultipleChoiceField(
queryset=CoordinateGroup.objects.all(),
required=False
)
device = DynamicModelMultipleChoiceField(
queryset=PowerFeed.objects.all(),
required=False
)
x = forms.IntegerField(
required=False
)
y = forms.IntegerField(
required=False
)
class CoordinatesFilterForm(NetBoxModelFilterSetForm):
model = Coordinate
fieldsets = (
FieldSet('q', 'filter_id'),
FieldSet('group', 'device', 'x', 'y', name=_("Coordinates")),
)
group = forms.ModelMultipleChoiceField(
queryset=CoordinateGroup.objects.all(),
required=False
)
device = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(),
required=False
)
x = forms.IntegerField(
required=False
)
y = forms.IntegerField(
required=False
)
class IndividualOptionsForm(NetBoxModelForm):
fieldsets = (
FieldSet
(
'ignore_cable_type',
'preselected_device_roles',
'preselected_tags',
'save_coords',
'show_unconnected',
'show_cables',
'show_wireless',
'show_logical_connections',
'show_single_cable_logical_conns',
'show_neighbors',
'group_sites',
'group_locations',
'group_racks',
'group_virtualchassis',
'draw_default_layout',
'straight_cables',
'draw_termination_labels',
'draw_cable_labels',
'grid_size',
'node_label_items',
),
FieldSet
(
'show_circuit',
'show_power',
name=_("Additional filter-independent types (non-devices)")
),
)
user_id = forms.CharField(widget=forms.HiddenInput())
ignore_cable_type = forms.MultipleChoiceField(
label=_('Ignore Termination Types'),
required=False,
choices=IndividualOptions.CHOICES,
help_text=_('Choose Termination Types that you want to be ignored. '
'If any ignored Termination Type is part of a connection, the '
'cable is not displayed.')
)
preselected_device_roles = DynamicModelMultipleChoiceField(
label=_('Preselected Device Role'),
queryset=DeviceRole.objects.all(),
required=False,
help_text=_('Select Device Roles that you want to have '
'preselected in the filter tab.')
)
preselected_tags = forms.ModelMultipleChoiceField(
label=_('Preselected Tags'),
queryset=Device.tags.all(),
required=False,
help_text=_('Select Tags that you want to have '
'preselected in the filter tab.')
)
save_coords = forms.BooleanField(
label=_('Save Coordinates'),
required=False,
initial=False,
help_text=_('Coordinates of nodes will be saved if dragged to a different '
'position. This option depends on parameters set in the config file. '
'It has no effect if \'allow_coordinates_saving\' has not been set or '
' \'always_save_coordinates\' has been set.')
)
show_unconnected = forms.BooleanField(
label=_('Show Unconnected'),
required=False,
initial=False,
help_text=_('Draws devices that have no connections or for which no '
'connection is displayed. This option depends on other parameters '
'like \'Show Cables\' and \'Show Logical Connections\'.')
)
show_cables = forms.BooleanField(
label =_('Show Cables'),
required=False,
initial=False,
help_text=_('Displays connections between interfaces that are connected '
'with one or more cables. These connections are displayed as solid '
'lines in the color of the cable.')
)
show_wireless = forms.BooleanField(
label =_('Show Wireless Links'),
required=False,
initial=False,
help_text=_('Displays wireless connections. These connections are '
'displayed as blue dotted lines.')
)
show_logical_connections = forms.BooleanField(
label =_('Show Logical Connections'),
required=False,
initial=False,
help_text=_('Displays connections between devices that are not '
'directly connected (e.g. via patch panels). These connections '
'are displayed as yellow dotted lines.')
)
show_single_cable_logical_conns = forms.BooleanField(
label = ('Show redundant Cable and Logical Connection'),
required = False,
initial=False,
help_text=_('Shows a logical connection (in addition to a cable), '
'even if a cable is directly connected. Leaving this option '
'disabled prevents that redundant display. This option only '
'has an effect if \'Show Logical Connections\' is activated.')
)
show_neighbors = forms.BooleanField(
label =_('Show Neighbors'),
required=False,
initial=False,
help_text=_('Adds neighbors to the filter result set automatically. '
'Link peers will be added if \'Show Cables\' is ticked, far-end '
'terminations will be added if \'Show Logical Connections\' is ticked.')
)
group_sites = forms.BooleanField(
label =_('Group Sites'),
required=False,
initial=False,
help_text=_('Draws a rectangle around Devices that belong to the '
'same site.')
)
group_locations = forms.BooleanField(
label =_('Group Locations'),
required=False,
initial=False,
help_text=_('Draws a rectangle around Devices that belong to the '
'same location.')
)
group_racks = forms.BooleanField(
label =_('Group Racks'),
required=False,
initial=False,
help_text=_('Draws a rectangle around Devices that belong to the '
'same rack.')
)
group_virtualchassis = forms.BooleanField(
label =_('Group Virtual Chassis'),
required=False,
initial=False,
help_text=_('Draws a rectangle around Devices that belong to the '
'same virtual chassis.')
)
draw_default_layout = forms.BooleanField(
label = ('Draw Default Layout'),
required=False,
initial=False,
help_text=_('Enable this option if you want to draw the topology on '
'the initial load (when you go to the topology plugin page).')
)
straight_cables = forms.BooleanField(
label=('Use Straight Cables'),
required=False,
initial=False,
help_text=_('Enable this option if you want to draw cables as straight lines '
'instead of curves.')
)
draw_termination_labels = forms.BooleanField(
label=('Termination Labels'),
required=False,
initial=False,
help_text=_('Enable this option if you want to draw a label on each '
'cable end.')
)
draw_cable_labels = forms.BooleanField(
label=('Cable Labels'),
required=False,
initial=False,
help_text=_('Enable this option if you want to draw a cable labels.')
)
grid_size = forms.IntegerField(
label=_('Grid Size'),
required=True,
initial=0,
min_value=0,
max_value=1000,
help_text=_('Default grid value. Set to 0 to disable grid. '
'Integers between 0 and 1000 are allowed. Snap to grid will be '
'automatically enabled for values > 0.')
)
node_label_items = forms.MultipleChoiceField(
label=_('Node Label Items'),
required=False,
choices=NodeLabelItems,
help_text=_('Choose Label Items that you want to be displayed.')
)
show_circuit = forms.BooleanField(
label=_('Show Circuit Terminations'),
required=False,
initial=False,
help_text=_('Displays connections between circuit terminations. '
'These connections are displayed as blue dashed lines. '
'Be aware that Circuits cannot be filtered.')
)
show_power = forms.BooleanField(
label=_('Show Power Feeds'),
required=False,
initial=False,
help_text=_('Displays connections between power outlets and power '
'ports. These connections are displayed as solid lines in the '
'color of the cable. This option depends on \'Show Cables\'. '
'Be aware that Power Feeds cannot be filtered.')
)
class Meta:
model = IndividualOptions
fields = [
'user_id', 'ignore_cable_type', 'preselected_device_roles', 'preselected_tags',
'save_coords', 'show_unconnected', 'show_cables', 'show_wireless',
'show_logical_connections', 'show_single_cable_logical_conns', 'show_neighbors',
'group_sites', 'group_locations', 'group_racks', 'group_virtualchassis',
'draw_default_layout', 'straight_cables', 'draw_termination_labels', 'draw_cable_labels',
'grid_size', 'node_label_items', 'show_circuit', 'show_power'
]
@@ -1,31 +0,0 @@
# Generated by Django 4.0.8 on 2022-12-06 13:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
]
operations = [
migrations.CreateModel(
name='RoleImage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('image', models.CharField(max_length=255)),
('object_id', models.PositiveIntegerField(blank=True, null=True)),
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')),
],
),
migrations.AddIndex(
model_name='roleimage',
index=models.Index(fields=['content_type', 'object_id'], name='netbox_topo_content_9d87d4_idx'),
),
]
@@ -1,42 +0,0 @@
# Generated by Django 4.1.4 on 2023-03-19 14:13
from django.db import migrations, models
import taggit.managers
import utilities.json
class Migration(migrations.Migration):
dependencies = [
('dcim', '0167_module_status'),
('extras', '0084_staging'),
('netbox_topology_views', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='IndividualOptions',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
('user_id', models.IntegerField(null=True, unique=True)),
('ignore_cable_type', models.CharField(blank=True, max_length=255)),
('show_unconnected', models.BooleanField(default=False)),
('show_cables', models.BooleanField(default=False)),
('show_logical_connections', models.BooleanField(default=False)),
('show_single_cable_logical_conns', models.BooleanField(default=False)),
('show_circuit', models.BooleanField(default=False)),
('show_power', models.BooleanField(default=False)),
('show_wireless', models.BooleanField(default=False)),
('draw_default_layout', models.BooleanField(default=False)),
('preselected_device_roles', models.ManyToManyField(blank=True, db_table='netbox_topology_views_individualoptions_preselected_device', related_name='+', to='dcim.devicerole')),
('preselected_tags', models.ManyToManyField(blank=True, db_table='netbox_topology_views_individualoptions_preselected_tag', related_name='+', to='extras.tag')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'abstract': False,
},
),
]
@@ -1,18 +0,0 @@
# Generated by Django 4.1.8 on 2023-04-29 09:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0002_individualoptions'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='show_neighbors',
field=models.BooleanField(default=False),
),
]
@@ -1,49 +0,0 @@
# Generated by Django 4.1.8 on 2023-05-01 16:13
from django.db import migrations, models
import django.db.models.deletion
import taggit.managers
import utilities.json
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0003_individualoptions_show_neighbors'),
]
operations = [
migrations.CreateModel(
name='CoordinateGroup',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
('name', models.CharField(max_length=100, unique=True)),
('description', models.CharField(blank=True, max_length=255)),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'ordering': ['name'],
},
),
migrations.CreateModel(
name='Coordinate',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
('x', models.IntegerField()),
('y', models.IntegerField()),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.device')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'ordering': ['group', 'device'],
'unique_together': {('device', 'group')},
},
),
]
@@ -1,18 +0,0 @@
# Generated by Django 4.1.8 on 2023-05-23 20:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0004_coordinategroup_coordinate'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='save_coords',
field=models.BooleanField(default=False),
),
]
@@ -1,70 +0,0 @@
# Generated by Django 4.1.8 on 2023-09-25 21:18
from django.db import migrations, models
import django.db.models.deletion
import taggit.managers
import utilities.json
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0005_individualoptions_save_coords'),
]
operations = [
migrations.CreateModel(
name='PowerPanelCoordinate',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
('x', models.IntegerField()),
('y', models.IntegerField()),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.powerpanel')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'ordering': ['group', 'device'],
'unique_together': {('device', 'group')},
},
),
migrations.CreateModel(
name='PowerFeedCoordinate',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
('x', models.IntegerField()),
('y', models.IntegerField()),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.powerfeed')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'ordering': ['group', 'device'],
'unique_together': {('device', 'group')},
},
),
migrations.CreateModel(
name='CircuitCoordinate',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder)),
('x', models.IntegerField()),
('y', models.IntegerField()),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuit')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'ordering': ['group', 'device'],
'unique_together': {('device', 'group')},
},
),
]
@@ -1,28 +0,0 @@
# Generated by Django 4.2.10 on 2024-03-02 16:26
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0006_powerpanelcoordinate_powerfeedcoordinate_and_more'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='group_locations',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='individualoptions',
name='group_racks',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='individualoptions',
name='group_sites',
field=models.BooleanField(default=False),
),
]
@@ -1,18 +0,0 @@
# Generated by Django 4.2.10 on 2024-04-29 14:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0007_individualoptions_group_locations_and_more'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='straight_cables',
field=models.BooleanField(default=False),
),
]
@@ -1,18 +0,0 @@
# Generated by Django 5.0.6 on 2024-07-29 08:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0008_straight_cables'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='group_virtualchassis',
field=models.BooleanField(default=False),
),
]
@@ -1,18 +0,0 @@
# Generated by Django 5.0.6 on 2024-08-14 09:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0009_individualoptions_group_virtualchassis'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='grid_size',
field=models.PositiveSmallIntegerField(default=0),
),
]
@@ -1,18 +0,0 @@
# Generated by Django 5.0.9 on 2024-09-27 18:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0010_individualoptions_grid_size'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='node_label_items',
field=models.CharField(blank=True, max_length=255),
),
]
@@ -1,18 +0,0 @@
# Generated by Django 5.2.9 on 2026-02-19 18:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0011_individualoptions_node_label_items'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='draw_termination_labels',
field=models.BooleanField(default=False),
),
]
@@ -1,18 +0,0 @@
# Generated by Django 5.2.12 on 2026-03-26 07:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('netbox_topology_views', '0012_individualoptions_draw_termination_labels'),
]
operations = [
migrations.AddField(
model_name='individualoptions',
name='draw_cable_labels',
field=models.BooleanField(default=False),
),
]
+1 -423
View File
@@ -1,425 +1,3 @@
from pathlib import Path
from typing import Optional
from circuits.models import Circuit
from dcim.models import Device, DeviceRole, PowerPanel, PowerFeed
from extras.models import Tag
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.templatetags.static import static
from django.urls import reverse
from netbox.models import NetBoxModel
from netbox.models.features import (
ChangeLoggingMixin,
ExportTemplatesMixin,
EventRulesMixin,
)
from netbox_topology_views.utils import (
CONF_IMAGE_DIR,
IMAGE_DIR,
Role,
find_image_url,
get_model_role,
image_static_url,
)
from netbox_topology_views.choices import NodeLabelItems
class RoleImage(ChangeLoggingMixin, ExportTemplatesMixin, EventRulesMixin):
class Meta:
indexes = [
models.Index(fields=["content_type", "object_id"]),
]
objects: "models.Manager[RoleImage]"
image = models.CharField("Path within the netbox static directory", max_length=255)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField(null=True, blank=True)
__role: Optional[Role] = None
_netbox_private = True
@property
def role(self) -> Role:
if self.__role:
return self.__role
model_class = self.content_type.model_class()
if not model_class:
raise ValueError(f"Invalid content type: {self.content_type}")
if model_class == DeviceRole:
device_role: DeviceRole = DeviceRole.objects.get(pk=self.object_id)
self.__role = Role(slug=device_role.slug, name=device_role.name)
return self.__role
self.__role = get_model_role(model_class)
return self.__role
def __str__(self):
return f"{self.role} - {self.image}"
def get_image(self) -> Path:
"""Get Icon
returns the model's image's absolute path in the filesystem
raises ValueError if the file cannot be found
"""
path = Path(settings.STATIC_ROOT) / self.image
if not path.exists():
raise ValueError(f"{self.role} path '{path}' does not exists")
return path
def get_default_image(self, dir: Path = CONF_IMAGE_DIR):
"""Get default image
will attempt to find image in given directory with any file extension,
otherwise will try to find a `role-unknown` image
fallback is `STATIC_ROOT/netbox_topology_views/img/role-unknown.png`
"""
if url := find_image_url(self.role.slug, dir):
return url
# fallback to default role unknown image
return image_static_url(IMAGE_DIR / "role-unknown.png")
def get_image_url(self, dir: Path = CONF_IMAGE_DIR) -> str:
try:
self.get_image()
except ValueError:
return self.get_default_image(dir)
return static(f"/{self.image}")
class CoordinateGroup(NetBoxModel):
"""
A coordinate group is used to display the topology for a particular group.
This allows different visualizations with the same devices.
"""
name = models.CharField(
max_length=100,
unique=True,
)
description = models.CharField(
max_length=255,
blank = True,
)
_netbox_private = True
class Meta:
ordering = ['name']
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:coordinategroup', args=[self.pk])
class Coordinate(NetBoxModel):
"""
Coordinates are being used to place devices in a topology view onto a certain
position. Devices belong to one or more coordinate groups. They have to
be unique together.
"""
device = models.ForeignKey(Device, on_delete=models.CASCADE)
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
x = models.IntegerField(
help_text='X-coordinate of the device (horizontal) on the canvas. '
'Smaller values correspond to a position further to the left on the monitor.',
)
y = models.IntegerField(
help_text='Y-coordinate of the device (vertical) on the canvas. '
'Smaller values correspond to a position further up on the monitor.',
)
_netbox_private = True
def get_or_create_default_group(group_id):
# Default group named "default" must always exist in order to make sure
# that coordinate values can be stored even if no coordinate group has been
# selected. The default group will be added automatically if it does not exist.
try:
if CoordinateGroup.objects.filter(name="default"):
group = CoordinateGroup.objects.get(name="default")
group_id = group.pk
else:
group = CoordinateGroup(
name="default",
description="Automatically generated default group. If you delete "
"this group, all default coordinates are gone for good but "
"the group itself will be re-created."
)
group.save()
group_id = group.pk
except:
return False
return group_id
class Meta:
ordering = ['group', 'device']
unique_together = ('device', 'group')
def __str__(self):
return f'{self.x};{self.y}'
def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:coordinate', args=[self.pk])
class CircuitCoordinate(NetBoxModel):
"""
Coordinates are being used to place devices in a topology view onto a certain
position. Devices belong to one or more coordinate groups. They have to
be unique together.
"""
device = models.ForeignKey(Circuit, on_delete=models.CASCADE)
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
x = models.IntegerField(
help_text='X-coordinate of the device (horizontal) on the canvas. '
'Smaller values correspond to a position further to the left on the monitor.',
)
y = models.IntegerField(
help_text='Y-coordinate of the device (vertical) on the canvas. '
'Smaller values correspond to a position further up on the monitor.',
)
_netbox_private = True
def get_or_create_default_group(group_id):
# Default group named "default" must always exist in order to make sure
# that coordinate values can be stored even if no coordinate group has been
# selected. The default group will be added automatically if it does not exist.
try:
if CoordinateGroup.objects.filter(name="default"):
group = CoordinateGroup.objects.get(name="default")
group_id = group.pk
else:
group = CoordinateGroup(
name="default",
description="Automatically generated default group. If you delete "
"this group, all default coordinates are gone for good but "
"the group itself will be re-created."
)
group.save()
group_id = group.pk
except:
return False
return group_id
class Meta:
ordering = ['group', 'device']
unique_together = ('device', 'group')
def __str__(self):
return f'{self.x};{self.y}'
def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:circuitcoordinate', args=[self.pk])
class PowerPanelCoordinate(NetBoxModel):
"""
Coordinates are being used to place devices in a topology view onto a certain
position. Devices belong to one or more coordinate groups. They have to
be unique together.
"""
device = models.ForeignKey(PowerPanel, on_delete=models.CASCADE)
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
x = models.IntegerField(
help_text='X-coordinate of the device (horizontal) on the canvas. '
'Smaller values correspond to a position further to the left on the monitor.',
)
y = models.IntegerField(
help_text='Y-coordinate of the device (vertical) on the canvas. '
'Smaller values correspond to a position further up on the monitor.',
)
_netbox_private = True
def get_or_create_default_group(group_id):
# Default group named "default" must always exist in order to make sure
# that coordinate values can be stored even if no coordinate group has been
# selected. The default group will be added automatically if it does not exist.
try:
if CoordinateGroup.objects.filter(name="default"):
group = CoordinateGroup.objects.get(name="default")
group_id = group.pk
else:
group = CoordinateGroup(
name="default",
description="Automatically generated default group. If you delete "
"this group, all default coordinates are gone for good but "
"the group itself will be re-created."
)
group.save()
group_id = group.pk
except:
return False
return group_id
class Meta:
ordering = ['group', 'device']
unique_together = ('device', 'group')
def __str__(self):
return f'{self.x};{self.y}'
def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:powerpanelcoordinate', args=[self.pk])
class PowerFeedCoordinate(NetBoxModel):
"""
Coordinates are being used to place devices in a topology view onto a certain
position. Devices belong to one or more coordinate groups. They have to
be unique together.
"""
device = models.ForeignKey(PowerFeed, on_delete=models.CASCADE)
group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
x = models.IntegerField(
help_text='X-coordinate of the device (horizontal) on the canvas. '
'Smaller values correspond to a position further to the left on the monitor.',
)
y = models.IntegerField(
help_text='Y-coordinate of the device (vertical) on the canvas. '
'Smaller values correspond to a position further up on the monitor.',
)
_netbox_private = True
def get_or_create_default_group(group_id):
# Default group named "default" must always exist in order to make sure
# that coordinate values can be stored even if no coordinate group has been
# selected. The default group will be added automatically if it does not exist.
try:
if CoordinateGroup.objects.filter(name="default"):
group = CoordinateGroup.objects.get(name="default")
group_id = group.pk
else:
group = CoordinateGroup(
name="default",
description="Automatically generated default group. If you delete "
"this group, all default coordinates are gone for good but "
"the group itself will be re-created."
)
group.save()
group_id = group.pk
except:
return False
return group_id
class Meta:
ordering = ['group', 'device']
unique_together = ('device', 'group')
def __str__(self):
return f'{self.x};{self.y}'
def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:powerfeedcoordinate', args=[self.pk])
class IndividualOptions(NetBoxModel):
CHOICES = (
('interface', 'interface'),
('frontport', 'frontport'),
('rearport', 'rearport'),
('poweroutlet', 'poweroutlet'),
('powerport', 'powerport'),
('consoleport', 'consoleport'),
('consoleserverport', 'consoleserverport'),
)
user_id = models.IntegerField(
null=True,
unique=True
)
ignore_cable_type = models.CharField(
max_length = 255,
blank = True,
)
preselected_device_roles = models.ManyToManyField(
to='dcim.DeviceRole',
related_name='+',
blank=True,
db_table='netbox_topology_views_individualoptions_preselected_device',
)
preselected_tags = models.ManyToManyField(
to='extras.Tag',
related_name='+',
blank=True,
db_table='netbox_topology_views_individualoptions_preselected_tag',
)
save_coords = models.BooleanField(
default=False
)
show_unconnected = models.BooleanField(
default=False
)
show_cables = models.BooleanField(
default=False
)
show_logical_connections = models.BooleanField(
default=False
)
show_single_cable_logical_conns = models.BooleanField(
default=False
)
show_neighbors = models.BooleanField(
default=False
)
show_circuit = models.BooleanField(
default=False
)
show_power = models.BooleanField(
default=False
)
show_wireless = models.BooleanField(
default=False
)
group_sites = models.BooleanField(
default=False
)
group_locations = models.BooleanField(
default=False
)
group_racks = models.BooleanField(
default=False
)
group_virtualchassis = models.BooleanField(
default=False
)
draw_default_layout = models.BooleanField(
default=False
)
straight_cables = models.BooleanField(
default=False
)
draw_termination_labels = models.BooleanField(
default=False
)
draw_cable_labels = models.BooleanField(
default=False
)
grid_size = models.PositiveSmallIntegerField(
default=0
)
node_label_items = models.CharField(
max_length=255,
blank=True
)
_netbox_private = True
def __str___(self):
return f"{self.user_id}"
# no modeles yet
+14 -105
View File
@@ -1,108 +1,17 @@
from netbox.plugins import PluginMenu, PluginMenuItem, PluginMenuButton
from extras.plugins import PluginMenuButton, PluginMenuItem
from utilities.choices import ButtonColorChoices
coordinategroup_buttons = (
PluginMenuButton(
link='plugins:netbox_topology_views:coordinategroup_add',
title='Add',
icon_class='mdi mdi-plus-thick',
permissions=['netbox_topology_views.add_coordinategroup']
),
PluginMenuButton(
link='plugins:netbox_topology_views:coordinategroup_import',
title='Import',
icon_class='mdi mdi-upload',
permissions=['netbox_topology_views.add_coordinategroup']
)
)
circuitcoordinate_buttons = (
PluginMenuButton(
link='plugins:netbox_topology_views:circuitcoordinate_add',
title='Add',
icon_class='mdi mdi-plus-thick',
permissions=['netbox_topology_views.add_coordinate']
),
PluginMenuButton(
link='plugins:netbox_topology_views:circuitcoordinate_import',
title='Import',
icon_class='mdi mdi-upload',
permissions=['netbox_topology_views.add_coordinate']
)
)
powerpanelcoordinate_buttons = (
PluginMenuButton(
link='plugins:netbox_topology_views:powerpanelcoordinate_add',
title='Add',
icon_class='mdi mdi-plus-thick',
permissions=['netbox_topology_views.add_coordinate']
),
PluginMenuButton(
link='plugins:netbox_topology_views:powerpanelcoordinate_import',
title='Import',
icon_class='mdi mdi-upload',
permissions=['netbox_topology_views.add_coordinate']
)
)
powerfeedcoordinate_buttons = (
PluginMenuButton(
link='plugins:netbox_topology_views:powerfeedcoordinate_add',
title='Add',
icon_class='mdi mdi-plus-thick',
permissions=['netbox_topology_views.add_coordinate']
),
PluginMenuButton(
link='plugins:netbox_topology_views:powerfeedcoordinate_import',
title='Import',
icon_class='mdi mdi-upload',
permissions=['netbox_topology_views.add_coordinate']
)
)
coordinate_buttons = (
PluginMenuButton(
link='plugins:netbox_topology_views:coordinate_add',
title='Add',
icon_class='mdi mdi-plus-thick',
permissions=['netbox_topology_views.add_coordinate']
),
PluginMenuButton(
link='plugins:netbox_topology_views:coordinate_import',
title='Import',
icon_class='mdi mdi-upload',
permissions=['netbox_topology_views.add_coordinate']
)
)
menu = PluginMenu(
label='Topology Views',
icon_class="mdi mdi-sitemap",
groups=(
('TOPOLOGY',
(
PluginMenuItem(link="plugins:netbox_topology_views:home", link_text="Topology", permissions=["dcim.view_site", "dcim.view_device"]),
menu_items = (
PluginMenuItem(
link='plugins:netbox_topology_views:home',
link_text='Topology',
buttons=(
PluginMenuButton(
link='plugins:netbox_topology_views:home',
title='Topology View',
icon_class='mdi mdi-plus-thick',
permissions=[],
),
),
('WEITERE ANSICHTEN',
(
PluginMenuItem(link="plugins:netbox_topology_views:rack_elevation", link_text="Rack-Ansicht", permissions=["dcim.view_rack", "dcim.view_device", "dcim.view_cable"]),
),
),
('COORDINATES',
(
PluginMenuItem(link="plugins:netbox_topology_views:coordinategroup_list", link_text="Coordinate Groups", buttons=coordinategroup_buttons, permissions=['netbox_topology_views.view_coordinategroup']),
PluginMenuItem(link="plugins:netbox_topology_views:coordinate_list", link_text="Device Coordinates", buttons=coordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
PluginMenuItem(link="plugins:netbox_topology_views:powerfeedcoordinate_list", link_text="Power Feed Coords", buttons=powerfeedcoordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
PluginMenuItem(link="plugins:netbox_topology_views:powerpanelcoordinate_list", link_text="Power Panel Coords", buttons=powerpanelcoordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
PluginMenuItem(link="plugins:netbox_topology_views:circuitcoordinate_list", link_text="Circuit Coordinates", buttons=circuitcoordinate_buttons, permissions=['netbox_topology_views.view_coordinate']),
),
),
('PREFERENCES',
(
PluginMenuItem(link="plugins:netbox_topology_views:images", link_text="Images", permissions=[ "dcim.view_site","dcim.view_devicerole"]),
PluginMenuItem(link="plugins:netbox_topology_views:individualoptions", link_text="Individual Options", permissions=['netbox_topology_views.change_individualoptions']),
),
),
)
),
)
)
-18
View File
@@ -1,18 +0,0 @@
from netbox.search import SearchIndex, register_search
from .models import CoordinateGroup, Coordinate
@register_search
class CoordinateGroupsIndex(SearchIndex):
model = CoordinateGroup
fields = (
('name', 100),
('description', 2000),
)
@register_search
class CoordinatesIndex(SearchIndex):
model = Coordinate
fields = (
('group', 100),
('device', 200),
)
-14
View File
@@ -1,14 +0,0 @@
from typing import Type
from dcim.models import DeviceRole
from django.contrib.contenttypes.models import ContentType
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from netbox_topology_views.models import RoleImage
@receiver(pre_delete, sender=DeviceRole, dispatch_uid="delete_hanging_role_image")
def delete_hanging_role_image(sender: Type[DeviceRole], instance: DeviceRole, **kwargs):
ct = ContentType.objects.get_for_model(sender)
RoleImage.objects.filter(content_type=ct, object_id=instance.id).delete()
@@ -1 +1 @@
#visgraph{height:64vh;border:1px solid #ced4da}html[data-netbox-color-mode=dark] #visgraph{background-color:#212529;border:1px solid #495057}.image-dropdown img{width:64px;height:64px}.image-dropdown-content{display:flex;flex-wrap:wrap;gap:.5rem;padding-inline:.5rem;width:50vw;max-width:32rem}.image-dropdown-content>img{cursor:pointer}.rack-elevation-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(34rem,1fr));gap:1rem}.rack-card{border:1px solid var(--tblr-border-color,#ced4da);border-radius:.4rem;background:var(--tblr-bg-surface,#fff);padding:1rem}.rack-card>header{display:flex;justify-content:space-between;margin-bottom:.75rem}.rack-faces{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.rack-face-title{text-align:center;font-size:.75rem;text-transform:uppercase;margin-bottom:.25rem}.rack-frame{display:flex;height:calc(var(--rack-units)*14px);min-height:280px;max-height:70vh;border:4px solid #3b4654;background:repeating-linear-gradient(to top,rgba(127,127,127,.14) 0,rgba(127,127,127,.14) 1px,transparent 1px,transparent calc(100%/var(--rack-units)))}.rack-unit-labels{width:2rem;display:flex;flex-direction:column;justify-content:space-around;font-size:.55rem;text-align:center;color:var(--tblr-secondary,#667382)}.rack-device-area{position:relative;flex:1;border-left:1px solid #3b4654}.rack-device{position:absolute;left:3px;right:3px;min-height:2px;overflow:hidden;padding:1px 5px;border:2px solid #1685fc;border-radius:3px;background:#162e45;color:#fff;line-height:1.1;text-decoration:none}.rack-device:hover{filter:brightness(1.25);color:#fff;z-index:2}.rack-device span,.rack-device small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rack-device small{font-size:.6rem;opacity:.8}@media(max-width:700px){.rack-elevation-grid{grid-template-columns:1fr}.rack-faces{grid-template-columns:1fr}}
#visgraph{height:70vh}
@@ -1,155 +0,0 @@
.rack-frame {
height: calc(var(--rack-units) * 22px);
max-height: none;
}
.rack-device {
padding: 2px 6px;
font-size: .78rem;
line-height: 1.15;
background: #eef6ff;
color: #132238;
}
.rack-device:hover {
min-height: 2.8rem;
overflow: visible;
z-index: 3;
}
.rack-device:hover span { white-space: normal; }
.rack-frame {
border-color: #718096;
background-color: #fff;
background-image: repeating-linear-gradient(to top, rgba(56, 73, 89, .16) 0, rgba(56, 73, 89, .16) 1px, transparent 1px, transparent calc(100% / var(--rack-units)));
}
.rack-device:hover { color: #132238; }
html[data-bs-theme="dark"] .rack-frame,
body[data-bs-theme="dark"] .rack-frame,
html[data-netbox-color-mode="dark"] .rack-frame {
border-color: #3b4654;
background-color: #212b36;
background-image: repeating-linear-gradient(to top, rgba(200, 215, 230, .14) 0, rgba(200, 215, 230, .14) 1px, transparent 1px, transparent calc(100% / var(--rack-units)));
}
html[data-bs-theme="dark"] .rack-device,
body[data-bs-theme="dark"] .rack-device,
html[data-netbox-color-mode="dark"] .rack-device {
background: #162e45;
color: #fff;
}
.rack-topology {
position: relative;
min-height: 18rem;
overflow: auto;
padding: 1rem;
background: var(--tblr-bg-surface-secondary, rgba(127, 127, 127, .05));
}
.rack-topology-lines {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
}
.rack-topology-columns {
position: relative;
z-index: 2;
display: flex;
align-items: flex-start;
justify-content: space-around;
gap: 5rem;
min-width: max-content;
pointer-events: none;
}
.rack-topology-column {
display: flex;
flex-direction: column;
gap: .75rem;
width: 15rem;
}
.rack-topology-column h4 { text-align: center; font-size: .85rem; }
.rack-topology-device-list { display: flex; flex-direction: column; gap: 40px; }
.rack-topology-node {
display: block;
padding: .55rem .75rem;
border: 2px solid var(--node-color);
border-radius: .35rem;
background: var(--tblr-bg-surface, #fff);
color: inherit;
text-decoration: none;
box-shadow: 0 2px 6px rgba(0, 0, 0, .12);
cursor: grab;
touch-action: none;
user-select: none;
pointer-events: auto;
}
.rack-topology-node.is-dragging { cursor: grabbing; z-index: 5; }
.rack-topology-node:hover { color: inherit; filter: brightness(.95); }
.rack-topology-node strong,
.rack-topology-node small {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.rack-topology-node small { opacity: .7; }
.rack-topology-edge {
fill: none;
stroke-width: 3;
opacity: .8;
pointer-events: stroke;
cursor: pointer;
transition: opacity .12s, stroke .12s, filter .12s, stroke-width .12s;
}
.rack-topology-edge.is-highlighted {
stroke: var(--topology-highlight-color, #16a34a) !important;
stroke-width: 5;
opacity: 1;
filter: drop-shadow(0 0 5px var(--topology-highlight-color, #16a34a));
}
.rack-topology-edge.is-dimmed { opacity: .12; }
.rack-topology-edge.is-wireless {
stroke-dasharray: 7 7;
stroke-linecap: round;
}
#rack-topology-card:fullscreen {
margin: 0 !important;
border: 0;
border-radius: 0;
background: var(--tblr-bg-surface, #fff);
display: flex;
flex-direction: column;
overflow: hidden;
}
#rack-topology-card:fullscreen .card-body { min-height: 0; flex: 1; overflow: hidden; }
#rack-topology-card:fullscreen .rack-topology { height: calc(100vh - 5.5rem); }
.rack-topology-tooltip {
display: none;
position: absolute;
z-index: 10;
width: max-content;
max-width: 28rem;
padding: .65rem .8rem;
border: 1px solid var(--tblr-border-color, #ced4da);
border-radius: .35rem;
background: var(--tblr-bg-surface, #fff);
box-shadow: 0 4px 18px rgba(0, 0, 0, .25);
pointer-events: none;
}
.rack-topology-tooltip.is-visible { display: block; }
.rack-topology-tooltip > strong,
.rack-topology-tooltip > span,
.rack-topology-tooltip li span,
.rack-topology-tooltip li small { display: block; }
.rack-topology-tooltip ul { margin: .4rem 0 0; padding: 0; list-style: none; }
.rack-topology-tooltip li + li {
margin-top: .45rem;
padding-top: .45rem;
border-top: 1px solid var(--tblr-border-color, #ced4da);
}
.rack-topology-tooltip small { opacity: .65; }
.rack-cable-count {
min-width: 2rem;
margin-left: .35rem;
background-color: #52606d !important;
color: #fff !important;
text-align: center;
}
File diff suppressed because one or more lines are too long
@@ -1,427 +0,0 @@
Attribution-ShareAlike 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-ShareAlike 4.0 International Public
License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at
creativecommons.org/compatiblelicenses, approved by Creative
Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
e. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name
of a Creative Commons Public License. The License Elements of this
Public License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
i. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
k. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
m. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public licenses.
Notwithstanding, Creative Commons may elect to apply one of its public
licenses to material it publishes and in those instances will be
considered the “Licensor.” The text of the Creative Commons public
licenses is dedicated to the public domain under the CC0 Public Domain
Dedication. Except for the limited purpose of indicating that material
is shared under a Creative Commons public license or as otherwise
permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the public
licenses.
Creative Commons may be contacted at creativecommons.org.
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

@@ -1,141 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465637mm"
height="35.465633mm"
viewBox="0 0 35.465637 35.465634"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-202.61996,-22.619956)">
<g
id="access-switch"
transform="translate(196.25972,-67.88785)"
inkscape:label="access-switch"
style="display:inline">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle4091"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g4107"
transform="translate(-29.678837,-5.8881735)">
<path
sodipodi:type="star"
style="fill:#9cc8f8;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4093"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
inkscape:transform-center-x="0.85152345"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#9cc8f8;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4095"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
inkscape:transform-center-x="-0.85152352"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4097"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,0.26458333,0.26458333,0,-52.821766,59.783164)"
inkscape:transform-center-x="1.6998618e-06"
inkscape:transform-center-y="-0.85152379"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4099"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,-0.26458333,-0.26458333,0,160.57654,168.47443)"
inkscape:transform-center-x="-3.173315e-06"
inkscape:transform-center-y="0.85152188"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 47.416672,114.30099 h 12.88312"
id="path4101" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 53.877389,107.83714 v 12.85223"
id="path4103" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.0 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><circle cx="64" cy="64" r="59" fill="#fff4e5" stroke="#e58a16" stroke-width="6"/><rect x="20" y="48" width="88" height="42" rx="7" fill="#513717"/><g fill="#ffc66f"><path d="M28 58h10v8H28zm14 0h10v8H42zm14 0h10v8H56zm14 0h10v8H70zm14 0h16v8H84zM28 71h10v8H28zm14 0h10v8H42zm14 0h10v8H56zm14 0h10v8H70zm14 0h16v8H84z"/></g><path d="M34 27h25m10 0h25M59 27l10 0M64 27v17" fill="none" stroke="#e58a16" stroke-width="7" stroke-linecap="round"/></svg>

Before

Width:  |  Height:  |  Size: 510 B

@@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-82.620002,-142.61999)">
<g
id="backhaul"
transform="translate(76.25972,52.112147)"
style="display:inline"
inkscape:label="backhaul">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle9736"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g10642"
transform="translate(0.15073904,0.61767034)">
<path
id="path17429-2"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 30.899474,97.531295 a 9.8385399,9.8385399 0 0 1 2.88139,6.956635 9.8385399,9.8385399 0 0 1 -2.88164,6.9569" />
<path
id="path17432-3"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 28.424474,100.00604 a 6.33854,6.33854 0 0 1 1.85638,4.48189 6.33854,6.33854 0 0 1 -1.85651,4.48203" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path17457-7"
cx="104.48794"
cy="-23.942322"
r="2.8385401"
transform="rotate(90)" />
<path
id="path17429-2-2"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 16.985167,97.531292 a 9.8385399,9.8385399 0 0 0 -2.88139,6.956638 9.8385399,9.8385399 0 0 0 2.88164,6.9569" />
<path
id="path17432-3-8"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 19.460167,100.00603 a 6.33854,6.33854 0 0 0 -1.85638,4.4819 6.33854,6.33854 0 0 0 1.85651,4.48202" />
<path
id="path15912-7"
style="display:inline;fill:#ffffff;stroke:#1685fc;stroke-width:1.32292"
inkscape:transform-center-x="1.6998618e-06"
inkscape:transform-center-y="-0.85152379"
d="m 27.748467,119.25886 c 0.380613,-0.65925 -3.044918,-11.34935 -3.806145,-11.34935 -0.76123,0 -4.186759,10.6901 -3.806145,11.34935 0.380616,0.65924 7.231676,0.65924 7.61229,0 z"
sodipodi:nodetypes="ssss" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

@@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-382.62001,-262.61999)">
<g
id="backup"
transform="translate(347.33749,116.17059)"
style="display:inline"
inkscape:label="backup">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle81430"
cx="53.015301"
cy="164.18217"
r="17.071318" />
<g
id="g98236"
transform="matrix(0.7811087,0,0,0.78113868,12.067916,36.740975)"
style="stroke-width:1.28021">
<g
id="g19286-6-61"
transform="matrix(1.265502,0,0,1.2637797,55.375145,30.655237)"
style="display:inline;stroke-width:1.01231">
<path
id="path16767-5-1-1"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.33929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -12.045714,96.794806 -0.0069,10.697154 m 12.9588723,0 -6.7e-7,-10.613908 m 6.7e-7,10.613908 c -4.58e-6,0.99351 -2.9009553,1.7989 -6.4794574,1.7989 -3.5785015,0 -6.4794509,-0.80539 -6.4794559,-1.7989 m 12.95891263,-3.53797 c -4.58e-6,0.99351 -2.90095473,1.7989 -6.47945643,1.7989 -3.5785016,0 -6.4794512,-0.80539 -6.4794562,-1.7989 m 12.95891263,-3.53797 c 1.532e-5,0.99351 -2.90094063,1.79891 -6.47945643,1.79891 -3.5785157,0 -6.4794712,-0.8054 -6.4794562,-1.79891 M 0.90625763,96.878052 c -6e-7,0.993506 -2.90095193,1.798902 -6.47945643,1.798902 -3.5785045,0 -6.4794552,-0.805396 -6.4794562,-1.798902 -1e-6,-0.993507 2.9009503,-1.798903 6.4794562,-1.798903 3.578506,0 6.47945782,0.805396 6.47945643,1.798903 z"
sodipodi:nodetypes="cccccsccsccscsssss" />
</g>
<g
id="g19286-6-61-5"
transform="matrix(1.265502,0,0,1.2637797,66.229729,28.075526)"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.01231">
<path
id="path16767-5-1-1-9-8"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.33929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -7.6710428,102.42738 c 3.5785,0 6.47946,0.80539 6.47945,1.7989 v 10.6139 c 0,0.99351 -2.90095,1.7989 -6.47945,1.7989 -3.5785002,0 -6.4794502,-0.80539 -6.4794602,-1.7989 l 0.007,-10.69715 -0.007,0.0833 c 0,-0.9935 2.90095,-1.7989 6.4794602,-1.7989"
sodipodi:nodetypes="cccscccc" />
</g>
<g
id="g19286-6-61-4"
transform="matrix(1.265502,0,0,1.2637797,63.57491,37.36206)"
style="display:inline;stroke-width:1.01231">
<path
id="path16767-5-1-1-8"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.33929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -12.045714,96.794806 -0.0069,10.697154 m 12.9588723,0 -6.7e-7,-10.613908 m 6.7e-7,10.613908 c -4.58e-6,0.99351 -2.9009553,1.7989 -6.4794574,1.7989 -3.5785015,0 -6.4794509,-0.80539 -6.4794559,-1.7989 m 12.95891263,-3.53797 c -4.58e-6,0.99351 -2.90095473,1.7989 -6.47945643,1.7989 -3.5785016,0 -6.4794512,-0.80539 -6.4794562,-1.7989 m 12.95891263,-3.53797 c 1.532e-5,0.99351 -2.90094063,1.79891 -6.47945643,1.79891 -3.5785157,0 -6.4794712,-0.8054 -6.4794562,-1.79891 M 0.90625763,96.878052 c -6e-7,0.993506 -2.90095193,1.798902 -6.47945643,1.798902 -3.5785045,0 -6.4794552,-0.805396 -6.4794562,-1.798902 -1e-6,-0.993507 2.9009503,-1.798903 6.4794562,-1.798903 3.578506,0 6.47945782,0.805396 6.47945643,1.798903 z"
sodipodi:nodetypes="cccccsccsccscsssss" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.4 KiB

@@ -1,99 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-382.62,-202.61999)">
<g
id="cable-doubler"
transform="translate(376.25972,112.11214)"
style="display:inline"
inkscape:label="cable-doubler">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle83563"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g83900">
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect83589"
width="18.16176"
height="3.6323516"
x="15.01218"
y="106.42445"
rx="0.29990521"
ry="0.29990521" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-4"
cx="24.093061"
cy="119.53722"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-30"
cx="17.540743"
cy="99.301231"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-7"
cx="30.644741"
cy="99.301231"
r="1.4622281" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 24.093061,110.55105 v 7.52394"
id="path83757" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 17.540742,100.42446 v 5.99999"
id="path83757-8" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 30.644742,100.42445 v 6"
id="path83757-8-6" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

@@ -1,117 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-322.62002,-262.61999)">
<g
id="camera-server"
transform="translate(267.97706,-72.029954)"
style="display:inline"
inkscape:label="camera-server">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle133170"
cx="72.37574"
cy="352.38272"
r="17.071318" />
<g
id="g135417">
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect133172"
width="9.2296114"
height="15.469597"
x="62.566021"
y="342.61298"
rx="0.29990521"
ry="0.29990521" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 64.43339,344.68782 h 5.494876"
id="path133174" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 64.43339,350.34776 h 5.494876"
id="path133176" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 64.43339,347.51779 h 5.494876"
id="path133178" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle133180"
cx="67.180824"
cy="353.56537"
r="0.44411153" />
</g>
<g
id="g22475-8"
style="display:inline;stroke-width:1.44351"
transform="matrix(0.69275915,0,0,0.69275915,59.475621,281.63296)">
<path
id="rect18871-9"
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.90975;stop-color:#000000"
d="m 14.911958,102.93399 h 5.735691 v -1.64713 c -0.02609,-0.68921 7.260357,-0.8024 7.271608,0 v 1.64713 h 5.354904 c 0.217132,0 0.391935,0.13376 0.391935,0.29991 v 11.63694 c 0,0.16615 -0.174803,0.29991 -0.391935,0.29991 H 14.911958 c -0.217132,0 -0.391935,-0.13376 -0.391935,-0.29991 V 103.2339 c 0,-0.16615 0.174803,-0.29991 0.391935,-0.29991 z"
sodipodi:nodetypes="sccccssssssss" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.90964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18975-3"
cx="24.09306"
cy="110.50864"
r="5.245965" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.90975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 29.548807,105.08623 h 2.045021"
id="path22272-6" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.90975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 17.239354,102.67873 v -1.32799"
id="path22274-8" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.90964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path22384-0"
cx="24.09306"
cy="110.50864"
r="2.7517517" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

@@ -1,85 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-322.61999,-202.61999)">
<g
id="camera"
transform="translate(316.25971,112.11214)"
style="display:inline"
inkscape:label="camera">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle18843"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g22475">
<path
id="rect18871"
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stop-color:#000000"
d="m 14.911958,102.93399 h 5.735691 v -1.64713 c -0.02609,-0.68921 7.260357,-0.8024 7.271608,0 v 1.64713 h 5.354904 c 0.217132,0 0.391935,0.13376 0.391935,0.29991 v 11.63694 c 0,0.16615 -0.174803,0.29991 -0.391935,0.29991 H 14.911958 c -0.217132,0 -0.391935,-0.13376 -0.391935,-0.29991 V 103.2339 c 0,-0.16615 0.174803,-0.29991 0.391935,-0.29991 z"
sodipodi:nodetypes="sccccssssssss" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18975"
cx="24.09306"
cy="110.50864"
r="5.245965" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 29.548807,105.08623 h 2.045021"
id="path22272" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 17.239354,102.67873 v -1.32799"
id="path22274" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path22384"
cx="24.09306"
cy="110.50864"
r="2.7517517" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

@@ -1,208 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect19394-9"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="8"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect19394-65-3"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="8"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect19394-2-7"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="8"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect20311-4"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="8"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,2.1166667,0,1 @ F,0,0,1,0,0,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-442.62002,-202.62)">
<g
id="circuit"
transform="translate(436.25974,112.11215)"
style="display:inline"
inkscape:label="circuit">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle18767"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g20833">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 14.065394,106.83296 h 2.654946 a 2.1166667,2.1166667 135 0 0 2.116667,-2.11667 v -7.132546"
id="path18804"
sodipodi:nodetypes="ccc"
inkscape:original-d="m 14.065394,106.83296 h 4.771613 v -9.249216"
inkscape:path-effect="#path-effect19394-9" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 34.485764,109.52303 h -2.654946 a 2.1166667,2.1166667 135 0 0 -2.116667,2.11667 v 6.9639"
id="path18804-6"
sodipodi:nodetypes="ccc"
inkscape:original-d="m 34.485764,109.52303 h -4.771613 v 9.08057"
inkscape:path-effect="#path-effect19394-65-3" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32299;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 18.699598,110.71392 h 2.654946 a 2.1166667,2.1166667 135 0 0 2.116667,-2.11667 V 96.282484"
id="path18804-0"
sodipodi:nodetypes="ccc"
inkscape:original-d="m 18.699598,110.71392 h 4.771613 V 96.282484"
inkscape:path-effect="#path-effect19394-2-7" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 22.254741,120.04698 v -4.75769 a 2.1166667,2.1166667 135 0 1 2.116667,-2.11667 h 0.217414 a 2.1166667,2.1166667 135 0 0 2.116667,-2.11667 v -4.30433 a 2.1166667,2.1166667 135 0 1 2.116667,-2.11667 h 2.363756"
id="path20181"
inkscape:original-d="m 22.254741,120.04698 v -6.87436 h 4.450748 v -8.53767 h 4.480423"
inkscape:path-effect="#path-effect20311-4" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path20353"
cx="14.065394"
cy="106.83296"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-9"
cx="18.699598"
cy="110.71392"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-3"
cx="31.185911"
cy="104.63495"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7"
cx="34.485764"
cy="109.52303"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5"
cx="29.714151"
cy="118.6036"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-2"
cx="18.837008"
cy="97.58374"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-54"
cx="23.47121"
cy="96.282486"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-7"
cx="22.254742"
cy="120.04698"
r="1.4622281" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

@@ -1,188 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect105690-6"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1"
unit="px"
method="auto"
mode="F"
radius="7"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1 @ F,0,0,1,0,1.0583333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-262.61999,-262.61999)">
<g
id="console-server"
transform="translate(207.97703,-72.029954)"
style="display:inline"
inkscape:label="console-server">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle99845"
cx="72.37574"
cy="352.38272"
r="17.071318" />
<g
id="g105857"
transform="translate(-44.96434,2.3640395)">
<g
id="g105712"
transform="matrix(0.74706177,0,0,0.74706177,47.075033,96.696391)"
style="stroke-width:1.33858">
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect19922-4"
width="12.354549"
height="20.707253"
x="80.924133"
y="326.01392"
rx="0.40144634"
ry="0.40144634" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 83.423753,328.79127 H 90.77907"
id="path19957-7" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 83.423753,336.36754 H 90.77907"
id="path19957-0-6" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.77094;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 83.423753,332.57941 H 90.77907"
id="path19957-3-3" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.77083;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17"
cx="87.10141"
cy="340.67456"
r="0.59447765" />
</g>
<path
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 126.98427,357.8261 h -11.77004 a 1.34475,1.34475 38.203142 0 1 -1.30708,-1.02869 l -1.3349,-5.52049 a 0.83292016,0.83292016 128.20314 0 1 0.80958,-1.02869 l 15.43485,0 a 0.83291909,0.83291909 51.796894 0 1 0.80958,1.02869 l -1.33491,5.52049 a 1.3447517,1.3447517 141.79689 0 1 -1.30708,1.02869 z"
id="path104407"
sodipodi:nodetypes="ccccc"
inkscape:original-d="m 128.0426,357.8261 h -13.8867 l -1.8324,-7.57787 h 17.55151 z"
inkscape:path-effect="#path-effect105690-6" />
<g
id="g105688"
transform="matrix(0.79805577,0,0,0.79805577,22.763649,81.818574)"
style="stroke-width:1.25305">
<g
id="g105442"
transform="translate(64.620413,228.56428)"
style="stroke-width:1.25305">
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-4"
cx="51.186554"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-1"
cx="54.892548"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-8"
cx="58.598576"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-5"
cx="62.30452"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-9"
cx="66.010551"
cy="110.86858"
r="0.59447765" />
</g>
<g
id="g105442-1"
transform="translate(62.767416,231.90299)"
style="display:inline;stroke-width:1.25305">
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-1-9"
cx="54.892548"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-8-6"
cx="58.598576"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-5-4"
cx="62.30452"
cy="110.86858"
r="0.59447765" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.65768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-17-9-3"
cx="66.010551"
cy="110.86858"
r="0.59447765" />
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

@@ -1,111 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465633mm"
height="35.465637mm"
viewBox="0 0 35.465633 35.465637"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-322.62001,-22.619956)">
<g
id="g1153"
inkscape:label="core-router"
style="display:inline"
transform="translate(227.33747,-3.8293975)">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle977"
cx="113.01536"
cy="44.182171"
r="17.071318" />
<g
id="g1145">
<g
id="g1158"
transform="translate(0,-0.68712819)">
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path979"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.26458333,0,0,0.26458333,62.296384,-70.236637)"
inkscape:transform-center-x="0.85152345"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path981"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(-0.26458333,0,0,0.26458333,163.73434,-53.423074)"
inkscape:transform-center-x="-0.85152352"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 110.1575,36.497284 c 25.26437,-0.477736 -15.691945,16.149717 0.5946,16.683167 l 5.04786,0.165337"
id="path983"
sodipodi:nodetypes="csc" />
</g>
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path16050-36"
cx="113.01536"
cy="44.182171"
r="2.5286407" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

@@ -1,147 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465633mm"
height="35.465633mm"
viewBox="0 0 35.465633 35.465634"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-82.619962,-22.619957)">
<g
id="core-switch"
transform="translate(76.25972,-67.887849)"
style="display:inline"
inkscape:label="core-switch">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle15906"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g16139"
transform="translate(-29.678837,-5.8881735)">
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15908"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
inkscape:transform-center-x="0.85152345"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15910"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
inkscape:transform-center-x="-0.85152352"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15912"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,0.26458333,0.26458333,0,-52.821766,59.783164)"
inkscape:transform-center-x="1.6998618e-06"
inkscape:transform-center-y="-0.85152379"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15914"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,-0.26458333,-0.26458333,0,160.57654,168.47443)"
inkscape:transform-center-x="-3.173315e-06"
inkscape:transform-center-y="0.85152188"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 47.416672,114.30099 h 12.88312"
id="path15916" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 53.877389,107.83714 v 12.85223"
id="path15918" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path16050"
cx="53.877388"
cy="114.30099"
r="2.5286407" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

@@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-82.620002,-262.61999)">
<g
id="database-server"
transform="translate(76.25972,172.11214)"
style="display:inline"
inkscape:label="database-server">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle20337"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g22247"
transform="matrix(0.74763892,0,0,0.74759268,32.764696,30.639803)"
style="stroke-width:1.33759">
<path
id="rect19922-6"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:6.68834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -80.251467,79.095818 -36.089533,-2e-6 c -0.62796,0 -1.1335,-0.505541 -1.1335,-1.1335 V 1.9656847 c 0,-0.627959 0.50554,-1.13350002 1.1335,-1.13350002 v 0 h 44.427356 c 0.627959,0 1.1335,0.50554102 1.1335,1.13350002 V 34.179928"
transform="matrix(0.26458333,0,0,0.26458333,6.360242,90.507807)" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -22.221938,93.505349 h 7.355317"
id="path19957-32" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -22.221938,101.08162 h 7.355317"
id="path19957-0-0" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -22.221938,97.293489 h 7.355317"
id="path19957-3-6" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.76952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20101-1"
cx="-18.544279"
cy="105.38864"
r="0.59447765" />
<path
id="path20339-5"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.76963;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -14.866621,101.08162 -0.0087,13.51885 m 16.3994782,0 -1e-6,-13.41365 m 1e-6,13.41365 c -6e-6,1.25558 -3.671164,2.27341 -8.199766,2.27341 -4.5286012,0 -8.1997582,-1.01783 -8.1997642,-2.27341 m 16.3995272,-4.47122 c -5e-6,1.25558 -3.671163,2.27342 -8.199765,2.27342 -4.5286012,0 -8.1997582,-1.01784 -8.1997642,-2.27342 m 16.3995292,-4.47121 c 2e-5,1.25558 -3.671145,2.27342 -8.199765,2.27342 -4.5286192,0 -8.1997832,-1.01784 -8.1997642,-2.27342 m 16.3995292,-4.47122 c 0,1.25558 -3.671161,2.27342 -8.199765,2.27342 -4.5286052,0 -8.1997632,-1.01784 -8.1997642,-2.27342 -10e-7,-1.255569 3.671158,-2.273412 8.1997642,-2.273412 4.528607,0 8.199768,1.017843 8.199765,2.273412 z"
sodipodi:nodetypes="cccccsccsccscsssss" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.2 KiB

@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-142.62001,-262.61999)">
<g
id="database"
transform="translate(136.25973,172.11214)"
style="display:inline"
inkscape:label="database">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle20208"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g19286-6"
transform="matrix(1.265502,0,0,1.2637797,31.145953,-20.898708)"
style="display:inline;stroke-width:0.790738">
<path
id="path16767-5-1"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.04615;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -12.045714,96.794806 -0.0069,10.697154 m 12.9588723,0 -6.7e-7,-10.613908 m 6.7e-7,10.613908 c -4.58e-6,0.99351 -2.9009553,1.7989 -6.4794574,1.7989 -3.5785015,0 -6.4794509,-0.80539 -6.4794559,-1.7989 m 12.95891263,-3.53797 c -4.58e-6,0.99351 -2.90095473,1.7989 -6.47945643,1.7989 -3.5785016,0 -6.4794512,-0.80539 -6.4794562,-1.7989 m 12.95891263,-3.53797 c 1.532e-5,0.99351 -2.90094063,1.79891 -6.47945643,1.79891 -3.5785157,0 -6.4794712,-0.8054 -6.4794562,-1.79891 M 0.90625763,96.878052 c -6e-7,0.993506 -2.90095193,1.798902 -6.47945643,1.798902 -3.5785045,0 -6.4794552,-0.805396 -6.4794562,-1.798902 -1e-6,-0.993507 2.9009503,-1.798903 6.4794562,-1.798903 3.578506,0 6.47945782,0.805396 6.47945643,1.798903 z"
sodipodi:nodetypes="cccccsccsccscsssss" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

@@ -1,122 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect16898-8-6"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-202.62001,-142.62)">
<g
id="dect-station"
style="display:inline"
transform="translate(227.33747,-3.8293975)"
inkscape:label="dect-station">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle934-9"
cx="-6.9846783"
cy="164.18217"
r="17.071318" />
<g
id="g10034-1"
transform="translate(-31.077738,55.941548)">
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 14.418108,115.90978 H 33.76802"
id="path942-9" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.093064,114.8012 v -6.00466"
id="path5756-9" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path16050-3-33"
cx="24.093063"
cy="115.90978"
r="2.5286407" />
</g>
<g
id="g10642-0"
transform="translate(-30.927015,56.127067)"
style="display:inline">
<path
id="path17429-2-8"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 30.899474,97.531295 a 9.8385399,9.8385399 0 0 1 2.88139,6.956635 9.8385399,9.8385399 0 0 1 -2.88164,6.9569" />
<path
id="path17432-3-1"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 28.424474,100.00604 a 6.33854,6.33854 0 0 1 1.85638,4.48189 6.33854,6.33854 0 0 1 -1.85651,4.48203" />
<path
id="path17429-2-2-1"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 16.985167,97.531292 a 9.8385399,9.8385399 0 0 0 -2.88139,6.956638 9.8385399,9.8385399 0 0 0 2.88164,6.9569" />
<path
id="path17432-3-8-1"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 19.460167,100.00603 a 6.33854,6.33854 0 0 0 -1.85638,4.4819 6.33854,6.33854 0 0 0 1.85651,4.48202" />
</g>
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -7.5536212,164.41077 c -0.2846637,-0.49945 -0.9201464,-1.79725 -1.034094,-3.59636 -0.00917,-0.14474 -0.017152,-0.38071 -0.017047,-0.52682 0.00128,-1.7963 0.6315279,-3.0729 0.919632,-3.56272 0.073414,-0.12481 0.2571414,-0.2431 0.4007546,-0.27008 l 1.5176457,-0.2851 a 0.22306614,0.22306614 39.226836 0 1 0.2642224,0.2157 l 0.02121,1.33988 a 0.18993774,0.18993774 143.41949 0 1 -0.2478062,0.18391 l -0.4790348,-0.15331 c -0.1391724,-0.0445 -0.3371064,0.002 -0.4303679,0.11489 -0.2983088,0.36003 -0.8714107,1.20575 -0.92698,2.44154 -0.00655,0.14567 -0.00278,0.3826 0.00836,0.52827 0.095463,1.24786 0.7042702,2.11631 1.011943,2.48125 0.093298,0.11067 0.2889819,0.15286 0.4265274,0.10352 l 0.4781933,-0.17151 a 0.18933683,0.18933683 34.680743 0 1 0.253236,0.17522 l 0.02258,1.42644 a 0.20619403,0.20619403 141.16323 0 1 -0.2533697,0.20398 l -1.5401023,-0.36217 c -0.1422451,-0.0335 -0.3231029,-0.1595 -0.3955033,-0.28653 z"
id="path16892-5"
sodipodi:nodetypes="czcccczcccc"
inkscape:original-d="m -7.4156754,164.63673 c 0,0 -1.1015015,-1.60214 -1.1847397,-4.08461 -0.083243,-2.48247 1.0560045,-4.04848 1.0560045,-4.04848 l 2.0377151,-0.3828 0.029585,1.86898 -0.9830226,-0.31459 c 0,0 -1.1383056,1.0598 -1.1091632,2.90108 0.029147,1.8413 1.2015925,2.93836 1.2015925,2.93836 l 0.9762897,-0.35017 0.030956,1.95554 z"
inkscape:path-effect="#path-effect16898-8-6" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.7 KiB

@@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465553mm"
height="35.465553mm"
viewBox="0 0 35.465553 35.465553"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-142.62001,-322.61998)">
<g
id="desktop"
transform="matrix(0.8695205,0,0,0.8695205,216.08081,53.553877)"
style="display:inline;stroke-width:1.15006"
inkscape:label="desktop">
<g
id="g22531"
transform="translate(-25.161923,-109.952)">
<circle
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle126519-1"
cx="-45.105873"
cy="439.78769"
r="17.071318"
transform="matrix(1.1500591,0,0,1.1500591,12.945821,-65.994159)" />
<g
id="g126531-8"
transform="translate(-67.856764,331.98443)"
style="stroke-width:1.15006">
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect126521-7"
width="12.354549"
height="20.707253"
x="16.573616"
y="97.449631"
rx="0.34490871"
ry="0.34490871" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 19.073232,100.22699 h 7.355317"
id="path126523-9" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52144;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="circle126529-2"
cx="22.750891"
cy="112.11028"
r="0.59447765" />
</g>
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect22382"
width="16.474653"
height="11.775289"
x="-42.013367"
y="435.73035"
rx="0.34501827"
ry="0.34501827" />
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect22384"
width="1.367956"
height="2.6356843"
x="-34.460018"
y="447.50565"
rx="0.34501827"
ry="0.34501827" />
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.52153;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect22386"
width="10.305123"
height="1.5857563"
x="-38.9286"
y="450.14133"
rx="0.34501827"
ry="0.34501827" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

@@ -1,196 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465637mm"
height="35.465633mm"
viewBox="0 0 35.465637 35.465634"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-142.61997,-22.619957)">
<g
id="distribution-switch"
transform="translate(136.25973,-67.887849)"
style="display:inline"
inkscape:label="distribution-switch">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle6199"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g6215"
transform="translate(-29.678837,-5.8881735)">
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6205"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,0.26458333,0.26458333,0,-52.821766,59.783164)"
inkscape:transform-center-x="1.6998618e-06"
inkscape:transform-center-y="-0.85152379"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6207"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,-0.26458333,-0.26458333,0,160.57654,168.47443)"
inkscape:transform-center-x="-3.173315e-06"
inkscape:transform-center-y="0.85152188"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<g
id="g6222"
transform="translate(0.10549237,-3.7787718)">
<path
sodipodi:type="star"
style="fill:#c5e0f1;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6201"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
inkscape:transform-center-x="0.85152345"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6203"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
inkscape:transform-center-x="-0.85152352"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 47.416672,114.30099 h 12.88312"
id="path6209" />
</g>
<g
id="g6222-6"
style="display:inline"
transform="translate(0.10549237,3.8314071)">
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6201-2"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.26458333,0,0,0.26458333,-0.61228761,7.6018354)"
inkscape:transform-center-x="0.85152345"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#c5e0f1;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path6203-6"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(-0.26458333,0,0,0.26458333,108.15608,7.6018354)"
inkscape:transform-center-x="-0.85152352"
inkscape:transform-center-y="-1.3442414e-06"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 47.416672,114.30099 h 12.88312"
id="path6209-1" />
</g>
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 53.877389,107.83714 v 12.85223"
id="path6211" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="circle6213"
cx="53.877388"
cy="114.30098"
r="4.3025455" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.9 KiB

@@ -1,112 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect108851-0-7"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="7"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,0,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-22.620006,-322.61998)">
<g
id="docking-station"
transform="translate(287.82013,-4.5667938)"
style="display:inline"
inkscape:label="docking-station">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle107097-8"
cx="-247.46735"
cy="344.91956"
r="17.071318" />
<g
id="g39153"
transform="translate(0,0.98568786)">
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -257.37511,337.96442 0.87607,13.06213 a 1.9804625,1.9804625 43.081474 0 0 1.97602,1.84793 h 14.11084 a 1.9786923,1.9786923 136.89296 0 0 1.97437,-1.84804 l 0.87821,-13.27136"
id="path108086-4"
sodipodi:nodetypes="cccc"
inkscape:original-d="m -257.37511,337.96442 1.00001,14.91006 h 17.815 l 1.0005,-15.1194"
inkscape:path-effect="#path-effect108851-0-7" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect107103-4-7"
width="7.5298009"
height="4.5139198"
x="-251.23225"
y="337.29099"
rx="0.30000001"
ry="0.29999998" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect107103-4-9-2"
width="1.7212976"
height="2.2977409"
x="-248.328"
y="334.99326"
rx="0.30000001"
ry="0.29999998" />
<path
id="path37804-7"
style="display:inline;vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stop-color:#000000"
inkscape:transform-center-x="4.6614787e-06"
inkscape:transform-center-y="-0.65464484"
d="m -247.46736,339.1069 c 0.0828,0 6.67621,3.6315 6.70181,3.7103 0.0256,0.0788 -2.49285,7.82974 -2.55986,7.87845 -0.067,0.0487 -8.21687,0.0487 -8.28389,-2e-5 -0.067,-0.0487 -2.58546,-7.79965 -2.55986,-7.87843 0.0256,-0.0788 6.61896,-3.7103 6.7018,-3.7103 z"
sodipodi:nodetypes="ssssss" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-322.62001,-322.61998)">
<g
id="environment-monitor"
style="display:inline"
transform="translate(227.33747,-3.8293975)"
inkscape:label="environment-monitor">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle158112"
cx="113.01532"
cy="344.18216"
r="17.071318" />
<g
id="g163978"
transform="matrix(0.38772659,0,0,0.39176299,70.312955,169.9459)"
style="stroke-width:2.56582">
<path
id="path161072"
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:12.8291;stop-color:#000000;stop-opacity:1"
d="m 1208.627,1520.4863 c -17.2806,0 -31.1934,14.2722 -31.1934,32.002 v 90.4238 c 0,1.059 0.053,2.1047 0.1504,3.1367 a 53.854311,53.854311 0 0 0 -22.8125,43.9746 53.854311,53.854311 0 0 0 53.8555,53.8555 53.854311,53.854311 0 0 0 53.8535,-53.8555 53.854311,53.854311 0 0 0 -22.8125,-43.9746 c 0.097,-1.032 0.1504,-2.0777 0.1504,-3.1367 v -90.4238 c 0,-17.7298 -13.9109,-32.002 -31.1914,-32.002 z"
transform="matrix(0.26458333,0,0,0.26458333,-217.33747,13.829394)" />
<path
id="path161891"
style="display:inline;opacity:1;vector-effect:none;fill:#9cc8f8;fill-rule:evenodd;stroke:#9cc8f8;stroke-width:3.39437;stop-color:#000000;stop-opacity:1"
d="m 101.86165,441.59087 c -0.73295,0.019 -1.36152,0.69016 -1.33585,1.42213 0.003,3.76598 -0.007,7.53232 0.005,11.29803 0.0233,0.22939 0.0868,0.45249 0.12793,0.67903 -0.807617,0.27474 -1.601949,0.61737 -2.281849,1.14154 -1.67886,1.24291 -2.717006,3.29695 -2.715895,5.38657 -0.02868,2.04026 0.937657,4.05898 2.534603,5.3267 1.574615,1.28643 3.746021,1.78522 5.726531,1.33408 2.13945,-0.45958 3.99384,-2.03192 4.80735,-4.06196 0.83471,-2.01062 0.6095,-4.41711 -0.58327,-6.23816 -0.83556,-1.30871 -2.13802,-2.29886 -3.61127,-2.78223 -0.1305,-0.0662 -0.38878,-0.0611 -0.2694,-0.26683 0.14734,-0.51906 0.0849,-1.05995 0.0974,-1.59165 -0.003,-3.44657 0.005,-6.89343 -0.004,-10.33984 -0.0319,-0.73118 -0.71363,-1.34694 -1.44386,-1.30895 -0.35118,0 -0.70241,-0.003 -1.05357,0.003 z" />
<path
id="path162198"
style="display:inline;vector-effect:none;fill:#9cc8f8;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:3.39439;stop-color:#000000"
d="m 133.55266,436.8736 c 0,4.27221 -3.5037,7.73553 -7.82573,7.73553 -4.32204,0 -7.82575,-3.46332 -7.82575,-7.73553 0,-2.13611 2.67833,-5.08325 4.63476,-8.08117 1.95644,-2.99791 3.19099,-6.04661 3.19099,-6.04661 0,0 1.3673,2.9374 3.32373,5.93532 1.95643,2.99792 4.502,6.05635 4.502,8.19246 z"
sodipodi:nodetypes="sssscss" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

@@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.46492mm"
height="35.465557mm"
viewBox="0 0 35.46492 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-382.62033,-322.61998)">
<g
id="fire-alarm-control-panel"
style="display:inline"
transform="translate(227.33747,-3.8293975)"
inkscape:label="fire-alarm-control-panel">
<ellipse
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle1449"
cx="173.01532"
cy="344.18216"
rx="17.070999"
ry="17.071318" />
<g
id="g15356"
transform="matrix(0.49091543,0,0,0.48990893,93.774879,143.01642)"
style="stroke-width:2.0391">
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#1685fc;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path14112"
cx="167.2079"
cy="432.0451"
r="1.9124098" />
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect14238"
width="27.194416"
height="36.502495"
x="140.09747"
y="391.06808"
rx="0.61110324"
ry="0.61235875" />
<path
id="path9959"
style="opacity:1;vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stop-color:#000000;stop-opacity:1"
d="m 167.2082,405.51415 c -5.57982,0.003 -10.22708,4.71741 -10.45962,8.7485 0,0 0,0 -0.23254,12.69217 -0.0307,1.67507 -2.14526,4.43526 -2.14526,4.43526 h 25.67423 c 0,0 -2.11427,-2.76027 -2.1448,-4.43526 -0.23113,-12.68402 -0.23113,-12.68402 -0.23113,-12.68402 -0.23112,-4.04001 -4.87948,-8.75607 -10.46002,-8.75663 z"
sodipodi:nodetypes="ccsccsccc" />
<g
id="g14457"
transform="rotate(-60,184.81905,406.29514)"
style="stroke-width:2.0391">
<path
id="path168565-3"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 186.44982,396.6327 a 11.631045,11.626711 89.99885 0 1 -1.06195,8.83799 11.631045,11.626711 89.99885 0 1 -6.99822,5.4986" />
<path
id="path168567-6"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 182.46691,397.74844 a 7.4933726,7.49058 89.99885 0 1 -0.68416,5.69399 7.4933726,7.49058 89.99885 0 1 -4.50864,3.54251" />
</g>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 145.49468,396.53567 h 16.40001"
id="path14492" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 145.49468,400.58073 h 16.40001"
id="path14492-7" />
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect14841"
width="1.7260052"
height="1.7260052"
x="145.49467"
y="405.26038"
rx="0.61110419"
ry="0.61235964" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect14841-5"
width="1.7260052"
height="1.7260052"
x="152.83168"
y="405.26038"
rx="0.61110419"
ry="0.61235964" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect14841-3"
width="1.7260052"
height="1.7260052"
x="160.16869"
y="405.26038"
rx="0.61110419"
ry="0.61235964" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect14841-5-3"
width="1.7260052"
height="1.7260052"
x="145.49467"
y="412.19992"
rx="0.61110419"
ry="0.61235964" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect14841-3-6"
width="1.7260052"
height="1.7260052"
x="152.83168"
y="412.19992"
rx="0.61110419"
ry="0.61235964" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect14841-5-6"
width="1.7260052"
height="1.7260052"
x="145.49467"
y="419.13943"
rx="0.61110419"
ry="0.61235964" />
<rect
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect14841-3-2"
width="1.7260052"
height="1.7260052"
x="152.83168"
y="419.13943"
rx="0.61110419"
ry="0.61235964" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -1,113 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-22.620003,-82.619993)">
<g
id="firewall"
style="display:inline"
transform="translate(60.59722,-354.60885)"
inkscape:label="firewall">
<g
id="g15605-2-3"
transform="translate(-126.55536,395.20866)"
style="display:inline">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle15595-3-7"
cx="106.31092"
cy="59.75296"
r="17.071318" />
</g>
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect15597-5-4"
width="13.135721"
height="7.8575616"
x="-31.615744"
y="448.41177"
ry="0.29990518"
rx="0.29990515" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32291;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect15599-9-5"
width="8.0613489"
height="7.8575616"
x="-18.480019"
y="448.41177"
ry="0.29990518"
rx="0.29990521" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect15601-2-2"
width="8.1029577"
height="7.8575616"
x="-30.415871"
y="456.26932"
ry="0.29990518"
rx="0.29990521" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect15603-2-5"
width="13.171134"
height="7.8575616"
x="-22.312912"
y="456.26932"
ry="0.29990518"
rx="0.29990515" />
<g
id="g11678-0-1-8-4"
transform="matrix(0.83042871,0.00860843,-0.00861735,0.83354649,-38.397176,362.64277)"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.20188">
<path
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.59009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.932088,114.71995 c -1.040858,-2.7249 -1.685872,-5.2348 2.117779,-8.20285 3.826063,-2.98554 5.460915,-7.256745 5.750884,-7.965348 0.661583,-1.616724 2.08784,-3.008197 2.08784,-3.008197 0,0 1.351189,6.510735 1.411254,7.636245 0.120128,2.25101 3.490819,-1.87182 3.490819,-1.87182 0,0 2.450777,4.31864 2.936272,6.71087 0.433182,2.13446 -0.07887,6.53284 -0.07887,6.53284 z"
id="path1014-9-9-9-7"
sodipodi:nodetypes="csscscscc" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#9cc8f8;fill-opacity:1;stroke:#1685fc;stroke-width:1.59009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 18.076691,114.65527 c 0,0 -0.484877,-1.84178 0.168533,-3.54456 0.569041,-1.48292 3.891012,-4.07272 3.891012,-4.07272 0,0 0.544111,2.90123 1.285102,4.14274 0.815246,1.36593 3.340512,3.40798 3.340512,3.40798 z"
id="path7258-3-4-7-4"
sodipodi:nodetypes="cscscc" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

@@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-442.62002,-22.619997)">
<g
id="patch-panel-fc"
transform="translate(436.25974,-67.887849)"
style="display:inline;image-rendering:auto"
inkscape:export-filename="patch-panel-fc.svg"
inkscape:export-xdpi="89.523453"
inkscape:export-ydpi="89.523453"
inkscape:label="fo-patch-panel">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle843"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g3322"
transform="translate(-1.2254715e-4)">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect845"
width="6.9177623"
height="6.9177623"
x="14.755642"
y="99.068886"
ry="3.4588811"
rx="3.4588811" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect847"
width="6.9180002"
height="6.9177623"
x="26.512722"
y="99.068886"
ry="3.4588811"
rx="3.4588811" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect849"
width="6.9177623"
height="6.9177623"
x="14.755642"
y="110.4946"
ry="3.4588811"
rx="3.4588811" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect851"
width="6.9177623"
height="6.9177623"
x="26.512722"
y="110.4946"
ry="3.4588811"
rx="3.4588811" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,125 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.46492mm"
height="35.465557mm"
viewBox="0 0 35.46492 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect21916-5"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="true"
hide_knots="true"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,1,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect21819-4"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="true"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-442.62033,-142.61999)">
<g
id="intrusion-alarm-system"
transform="translate(167.46714,-0.9814871)"
style="display:inline"
inkscape:label="intrusion-alarm-system">
<ellipse
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="ellipse8007-6"
cx="292.88565"
cy="161.33426"
rx="17.070999"
ry="17.071318" />
<g
id="g25612">
<g
id="g8019-2"
transform="matrix(0.24545772,-0.42427358,0.42514523,0.24495447,85.890791,132.44208)"
style="stroke-width:2.0391">
<path
id="path8015-0"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 186.44982,396.6327 a 11.631045,11.626711 89.99885 0 1 -1.06195,8.83799 11.631045,11.626711 89.99885 0 1 -6.99822,5.4986" />
<path
id="path8017-2"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:2.69757;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 182.46691,397.74844 a 7.4933726,7.49058 89.99885 0 1 -0.68416,5.69399 7.4933726,7.49058 89.99885 0 1 -4.50864,3.54251" />
</g>
<path
id="rect15798"
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stop-color:#000000"
d="m 288.87703,152.3074 v 2.82786 l 3.34193,-3.72839 a 0.8962662,0.8962662 0.0025884 0 1 1.33485,7e-5 l 7.28796,8.13219 a 2.6142078,2.6142078 69.066895 0 1 0.66739,1.74471 v 10.09382 c 0,0.1662 -0.13404,0.29972 -0.30025,0.29972 h -16.64705 c -0.16619,0 -0.29972,-0.13352 -0.29972,-0.29972 v -10.09382 a 2.6138579,2.6138579 110.93566 0 1 0.66746,-1.74465 l 1.47175,-1.64194 v -5.58985 z"
sodipodi:nodetypes="ccsssscccccc"
inkscape:original-d="m 288.87703,152.3074 v 2.82786 l 4.00939,-4.47303 8.62274,9.62161 v 11.09382 c 0,0.1662 -0.13404,0.29972 -0.30025,0.29972 h -16.64705 c -0.16619,0 -0.29972,-0.13352 -0.29972,-0.29972 v -11.09382 l 2.13921,-2.38659 v -5.58985 z"
inkscape:path-effect="#path-effect21916-5" />
<path
id="path18341"
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stop-color:#000000"
d="m 290.12355,160.32162 c 7e-4,1.02157 0.56518,1.95933 1.46761,2.4381 l -1.63028,5.51242 a 0.19766209,0.19766209 53.237719 0 0 0.18954,0.25372 h 5.47048 a 0.19766379,0.19766379 126.76252 0 0 0.18955,-0.25372 l -1.62978,-5.51087 c 0.90271,-0.47917 1.46706,-1.41764 1.46708,-2.43965 -8.8e-4,-1.49626 -1.19299,-2.71976 -2.7621,-2.71976 -1.56911,0 -2.76122,1.2235 -2.7621,2.71976 z"
sodipodi:nodetypes="cccccccc"
inkscape:original-d="m 290.12355,160.32162 c 7e-4,1.02157 0.56518,1.95933 1.46761,2.4381 l -1.70532,5.76614 h 5.99964 l -1.70481,-5.76459 c 0.90271,-0.47917 1.46706,-1.41764 1.46708,-2.43965 -8.8e-4,-1.49626 -1.19299,-2.71976 -2.7621,-2.71976 -1.56911,0 -2.76122,1.2235 -2.7621,2.71976 z"
inkscape:path-effect="#path-effect21819-4" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

@@ -1,129 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-442.62001,-82.619985)">
<g
id="kvm-over-ip"
transform="translate(287.33747,-63.829394)"
style="display:inline"
inkscape:label="kvm-over-ip">
<g
id="g149418"
transform="translate(148.92226,55.941533)">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle149390"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g149416" />
</g>
<g
id="g152789">
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 34.874886,104.72669 24.09306,108.24063"
id="path149394"
sodipodi:nodetypes="cc"
transform="translate(148.92225,55.941533)" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 24.09306,96.887266 V 108.24063"
id="path149396"
sodipodi:nodetypes="cc"
transform="translate(148.92225,55.941533)" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 13.311234,104.72669 10.781826,3.51393"
id="path149398"
sodipodi:nodetypes="cc"
transform="translate(148.92225,55.941533)" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect149402"
width="6.9177623"
height="6.9177623"
x="20.634178"
y="104.78175"
ry="0.29990521"
rx="0.29990521"
transform="translate(148.92225,55.941533)" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle149410"
cx="13.311234"
cy="104.72669"
r="1.4622281"
transform="translate(148.92225,55.941533)" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle149412"
cx="24.09306"
cy="96.887268"
r="1.4622281"
transform="translate(148.92225,55.941533)" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle149414"
cx="34.874886"
cy="104.72669"
r="1.4622281"
transform="translate(148.92225,55.941533)" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 163.34037,171.85131 h 19.34991"
id="path11152-2" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 173.01532,170.74273 v -3.10168"
id="path11156-1" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle11158-0"
cx="173.0153"
cy="171.85132"
r="2.5286407" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.5 KiB

@@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-382.62,-82.619997)">
<g
id="kvm"
transform="translate(376.25972,-7.8878491)"
style="display:inline"
inkscape:label="kvm">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle7756"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g1387">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 24.09306,108.24063 6.663534,9.17052"
id="path8541"
sodipodi:nodetypes="cc" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 34.874886,104.72669 24.09306,108.24063"
id="path8541-6"
sodipodi:nodetypes="cc" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 24.09306,96.887266 V 108.24063"
id="path8541-6-1"
sodipodi:nodetypes="cc" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 13.311234,104.72669 10.781826,3.51393"
id="path8541-6-8"
sodipodi:nodetypes="cc" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.09306,108.24062 -6.663535,9.17053"
id="path8541-6-7"
sodipodi:nodetypes="cc" />
<g
id="g7766"
style="fill:#ffffff;fill-opacity:1">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7758"
width="6.9177623"
height="6.9177623"
x="20.634178"
y="104.78175"
ry="0.29990521"
rx="0.29990521" />
</g>
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-9"
cx="30.756594"
cy="117.41115"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-3"
cx="17.429525"
cy="117.41115"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-6"
cx="13.311234"
cy="104.72669"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-0"
cx="24.09306"
cy="96.887268"
r="1.4622281" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path20353-7-5-62"
cx="34.874886"
cy="104.72669"
r="1.4622281" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.6 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><circle cx="64" cy="64" r="59" fill="#eafff4" stroke="#20a86b" stroke-width="6"/><rect x="20" y="49" width="88" height="39" rx="7" fill="#174637"/><g fill="#8cf0bf"><path d="M29 59h9v7h-9zm13 0h9v7h-9zm13 0h9v7h-9zm13 0h9v7h-9zm13 0h9v7h-9zm13 0h6v7h-6zM29 70h9v7h-9zm13 0h9v7h-9zm13 0h9v7h-9zm13 0h9v7h-9zm13 0h9v7h-9zm13 0h6v7h-6z"/></g><path d="M64 20c-14 8-22 17-22 27 14 1 23-5 26-19 7 9 12 15 20 18-1-12-9-21-24-26z" fill="#20a86b"/></svg>

Before

Width:  |  Height:  |  Size: 508 B

@@ -1,107 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-82.620002,-82.619997)">
<g
id="load-balancer"
transform="translate(76.25972,-7.8878491)"
style="display:inline"
inkscape:label="load-balancer">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle18020"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g18669"
transform="translate(0,0.55776946)">
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect18022"
width="6.9177623"
height="6.9177623"
x="14.755642"
y="99.068886"
ry="0.29990521"
rx="0.29990521" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect18024"
width="6.9177623"
height="6.9177623"
x="26.512722"
y="99.068886"
ry="0.29990521"
rx="0.29990521" />
<path
style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="M 14.418108,108.63255 H 33.76802"
id="path18441" />
<circle
style="font-variation-settings:normal;display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path18578"
cx="24.093063"
cy="108.63255"
r="1.5129391" />
<path
sodipodi:type="star"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2160-6-2-2-3"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,0.26458333,0.26458333,0,-82.606091,69.496694)"
inkscape:transform-center-x="1.6998618e-06"
inkscape:transform-center-y="-0.85152379"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

@@ -1,109 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect168587-5"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-382.62003,-142.62)">
<g
id="mobile-phone"
transform="translate(407.3375,-3.8293975)"
style="display:inline"
inkscape:label="mobile-phone">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle168561"
cx="-6.9846935"
cy="164.18217"
r="17.071318" />
<g
id="g168575"
transform="matrix(1.1817516,0,0,1.1821922,1.2694795,-29.91271)"
style="stroke-width:0.846044">
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.11932;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -9.8910108,166.79888 c 0.00317,-0.57469 0.1016442,-2.0164 0.9025055,-3.63156 0.064493,-0.13006 0.1756206,-0.33852 0.2487699,-0.46501 0.8992851,-1.55504 2.0834393,-2.34548 2.577829,-2.6256 0.125963,-0.0714 0.3441979,-0.0819 0.4820601,-0.0335 l 1.456866,0.51192 a 0.22306597,0.22306597 69.226816 0 1 0.120973,0.31891 l -0.651568,1.17097 a 0.18993996,0.18993996 173.41918 0 1 -0.3065618,0.0354 l -0.3382034,-0.37228 c -0.098259,-0.10815 -0.2931113,-0.16653 -0.4301565,-0.11568 -0.4383564,0.16263 -1.3575393,0.6085 -2.0235562,1.65094 -0.078512,0.12289 -0.1937103,0.32995 -0.2568977,0.46168 -0.5411865,1.12826 -0.4482564,2.18465 -0.3642859,2.65463 0.025475,0.14258 0.1738689,0.27704 0.317654,0.30308 l 0.499884,0.0906 a 0.18933523,0.18933523 64.680504 0 1 0.1316977,0.27836 l -0.6936614,1.24662 a 0.20619372,0.20619372 171.16326 0 1 -0.3214155,0.05 l -1.1526798,-1.08371 c -0.1064624,-0.10009 -0.2000598,-0.29958 -0.199253,-0.44567 z"
id="path168563"
sodipodi:nodetypes="czcccczcccc"
inkscape:original-d="m -9.884525,167.06332 c 0,0 -0.152861,-1.93823 1.0162872,-4.12974 1.169148,-2.19151 2.93877,-2.97808 2.93877,-2.97808 l 1.956109,0.68734 -0.908865,1.63337 -0.69403,-0.76394 c 0,0 -1.515701,0.34865 -2.411105,1.95783 -0.895404,1.60917 -0.42857,3.14549 -0.42857,3.14549 l 1.020576,0.18488 -0.950958,1.70902 z"
inkscape:path-effect="#path-effect168587-5" />
<g
id="g168573"
transform="rotate(29.353187,-12.969556,162.61463)"
style="stroke-width:0.846044">
<path
id="path168565"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -0.02754,154.09051 a 9.8385399,9.8385399 0 0 1 2.88139,6.95663 9.8385399,9.8385399 0 0 1 -2.88164,6.95691" />
<path
id="path168567"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -2.50254,156.56525 a 6.33854,6.33854 0 0 1 1.85638,4.48189 6.33854,6.33854 0 0 1 -1.85651,4.48203" />
<path
id="path168569"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -13.941847,154.09051 a 9.8385399,9.8385399 0 0 0 -2.88139,6.95663 9.8385399,9.8385399 0 0 0 2.88164,6.9569" />
<path
id="path168571"
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.11925;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m -11.466847,156.56524 a 6.33854,6.33854 0 0 0 -1.85638,4.4819 6.33854,6.33854 0 0 0 1.85651,4.48202" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

@@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-262.61999,-202.61999)">
<g
id="network-socket"
transform="translate(74.49431,50.112763)"
style="display:inline"
inkscape:label="network-socket">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle1915"
cx="205.85846"
cy="170.24001"
r="17.071318" />
<g
id="g2837"
transform="matrix(0.76974836,0,0,0.76740612,47.388839,39.34684)"
style="stroke-width:1.30111">
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect2745"
width="22.035437"
height="18.680389"
x="194.85426"
y="161.22551"
rx="0.38961461"
ry="0.39080378" />
<path
id="path1917"
style="vector-effect:none;fill:#ffffff;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.72136;stop-color:#000000"
d="m 198.33761,166.02536 h 4.70693 v -1.49132 c -0.0214,-0.62401 5.95813,-0.7265 5.96737,0 v 1.49132 h 4.39444 c 0.17819,0 0.32164,0.12111 0.32164,0.27154 v 10.53614 c 0,0.15043 -0.14345,0.27154 -0.32164,0.27154 h -15.06874 c -0.17819,0 -0.32164,-0.12111 -0.32164,-0.27154 V 166.2969 c 0,-0.15043 0.14345,-0.27154 0.32164,-0.27154 z"
sodipodi:nodetypes="sccccssssssss" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 202.06826,173.54774 v 2.04502"
id="path1921-9" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 204.59507,173.54774 v 2.04502"
id="path1921-1" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 207.12185,173.54774 v 2.04502"
id="path1921-2" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.72136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 209.64866,173.54774 v 2.04502"
id="path1921-7" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><circle cx="64" cy="64" r="59" fill="#e8f4ff" stroke="#1685fc" stroke-width="6"/><rect x="22" y="42" width="84" height="45" rx="7" fill="#183a5a"/><path d="M28 52h72v25H28z" fill="#10283e"/><g fill="#52d273"><circle cx="34" cy="64" r="3"/><circle cx="43" cy="64" r="3"/></g><g fill="#8fc8ff"><path d="M55 55h10v7H55zm14 0h10v7H69zm14 0h10v7H83zM55 67h10v7H55zm14 0h10v7H69zm14 0h10v7H83z"/></g><path d="m35 33 9-8v6h40v-6l9 8-9 8v-6H44v6z" fill="#1685fc"/></svg>

Before

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

@@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-82.620005,-322.61998)">
<g
id="notebook"
style="display:inline"
transform="translate(227.33747,-3.8293975)"
inkscape:label="notebook">
<circle
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle123367"
cx="-126.98469"
cy="344.18216"
r="17.071318" />
<g
id="g126064"
transform="translate(0,0.86686945)">
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect123516"
width="16.102165"
height="11.965014"
x="-135.03577"
y="335.84027"
rx="0.30000046"
ry="0.30000046" />
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect123518"
width="21.102962"
height="2.9850111"
x="-137.53616"
y="347.8053"
rx="0.30000046"
ry="0.30000046" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

@@ -1,144 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect16898-5"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-262.50953,-142.28008)">
<g
id="pabx"
transform="translate(256.14925,51.772232)"
style="display:inline"
inkscape:label="pabx">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle16890"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g18684">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="M 24.183889,108.58054 18.299187,97.908988"
id="path17039"
sodipodi:nodetypes="cc" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 24.183889,108.58054 7.752897,-7.75289"
id="path18327" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 24.168351,108.61697 12.139972,4.64452"
id="path18419" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 24.203515,108.58054 -11.263185,2.6793"
id="path17041" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 24.183889,108.5705 -0.584631,11.22725"
id="path17043"
sodipodi:nodetypes="cc" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18578-6"
cx="31.936787"
cy="100.82765"
r="1.5129391" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18578-7"
cx="18.299187"
cy="97.908989"
r="1.5129391" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18578-5"
cx="12.94033"
cy="111.25984"
r="1.5129391" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18578-3"
cx="23.599258"
cy="119.79775"
r="1.5129391" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path18578-56"
cx="36.308323"
cy="113.26149"
r="1.5129391" />
<circle
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="path16922"
cx="24.183889"
cy="108.58054"
r="7.1289177" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 21.251327,111.22285 c 0.0032,-0.57469 0.101644,-2.0164 0.902505,-3.63156 0.06449,-0.13006 0.175621,-0.33852 0.24877,-0.46501 0.899259,-1.555 2.083369,-2.34544 2.577785,-2.62559 0.125987,-0.0714 0.344242,-0.082 0.482104,-0.0335 l 1.456867,0.51193 a 0.223067,0.223067 69.226947 0 1 0.120973,0.31891 l -0.651569,1.17097 a 0.18993865,0.18993865 173.41937 0 1 -0.30656,0.0354 l -0.338206,-0.37227 c -0.09826,-0.10816 -0.293009,-0.16656 -0.429939,-0.11577 -0.438239,0.16256 -1.357516,0.60835 -2.023631,1.6508 -0.0786,0.123 -0.193851,0.33017 -0.257039,0.4619 -0.541252,1.12841 -0.448234,2.18491 -0.364256,2.6548 0.02547,0.14249 0.173839,0.27687 0.317624,0.30291 l 0.499884,0.0906 a 0.18933713,0.18933713 64.680776 0 1 0.131698,0.27836 l -0.693662,1.24662 a 0.20619371,0.20619371 171.16327 0 1 -0.321415,0.05 l -1.15268,-1.08371 c -0.106462,-0.10009 -0.20006,-0.29958 -0.199253,-0.44567 z"
id="path16892"
sodipodi:nodetypes="czcccczcccc"
inkscape:original-d="m 21.257813,111.48729 c 0,0 -0.152861,-1.93824 1.016287,-4.12974 1.169148,-2.19151 2.93877,-2.97809 2.93877,-2.97809 l 1.956109,0.68735 -0.908865,1.63337 -0.69403,-0.76395 c 0,0 -1.515701,0.34866 -2.411105,1.95783 -0.895404,1.60918 -0.42857,3.14549 -0.42857,3.14549 l 1.020576,0.18489 -0.950958,1.70902 z"
inkscape:path-effect="#path-effect16898-5" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.2 KiB

@@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-382.56627,-22.619992)">
<g
id="patch-panel"
transform="translate(376.20599,-67.887854)"
style="display:inline"
inkscape:label="patch-panel">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path846-2-0"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g3311">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1796-0-6"
width="6.9177623"
height="6.9177623"
x="14.755642"
y="99.068886"
ry="0.29990521"
rx="0.29990521" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1796-7-9-2"
width="6.9177623"
height="6.9177623"
x="26.512722"
y="99.068886"
ry="0.29990521"
rx="0.29990521" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1796-5-3-6"
width="6.9177623"
height="6.9177623"
x="14.755642"
y="110.4946"
ry="0.29990521"
rx="0.29990521" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1796-7-3-6-1"
width="6.9177623"
height="6.9177623"
x="26.512722"
y="110.4946"
ry="0.29990521"
rx="0.29990521" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

@@ -1,186 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect24335-0"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect24335-1-6"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect24335-6-1"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-82.620002,-202.61999)">
<g
id="pdu"
transform="translate(76.25972,112.11214)"
style="display:inline"
inkscape:label="pdu">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle22642"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g24446">
<g
id="g24341"
transform="translate(2.2022783,-3.6624277)">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
id="path22955"
sodipodi:nodetypes="ccccccc"
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
inkscape:path-effect="#path-effect24335-0" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 19.079996,104.59475 v -1.44816"
id="path24187" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.551977,104.59475 v -1.44816"
id="path24187-2" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 21.815986,102.48599 v -1.44816"
id="path24187-9" />
</g>
<g
id="g24341-2"
transform="translate(2.2770735,5.4312056)"
style="display:inline">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
id="path22955-7"
sodipodi:nodetypes="ccccccc"
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
inkscape:path-effect="#path-effect24335-1-6" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 19.079996,104.59475 v -1.44816"
id="path24187-0" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.551977,104.59475 v -1.44816"
id="path24187-2-9" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 21.815986,102.48599 v -1.44816"
id="path24187-9-3" />
</g>
<g
id="g24341-0"
transform="translate(2.5183965,14.524838)"
style="display:inline">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
id="path22955-6"
sodipodi:nodetypes="ccccccc"
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
inkscape:path-effect="#path-effect24335-6-1" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 19.079996,104.59475 v -1.44816"
id="path24187-26" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.551977,104.59475 v -1.44816"
id="path24187-2-1" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 21.815986,102.48599 v -1.44816"
id="path24187-9-8" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -1,67 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-322.50953,-142.28008)">
<g
id="phone"
transform="translate(41.18722,-3.1780004)"
style="display:inline"
inkscape:label="phone">
<g
id="g1288-3"
transform="translate(274.96203,54.950231)"
style="display:inline">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle10171-0"
cx="24.09306"
cy="108.24062"
r="17.071318" />
</g>
<path
id="path24122-6"
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 302.39344,153.21469 c -1.1842,0.28549 -5.74371,1.67315 -8.56123,6.62596 -2.70891,4.76175 -1.93418,9.48519 -1.59525,10.94713 0.10649,0.57254 0.53414,1.20121 0.97255,1.48885 l 1.29554,0.75964 c 1.00147,0.58629 2.3155,0.16508 2.94708,-0.94516 l 0.64236,-1.12913 c 0.63172,-1.11016 0.33409,-2.47619 -0.66715,-3.06286 0,0 -0.84997,-0.5314 -1.29553,-0.75965 -0.12832,-0.066 -0.42349,-0.0336 -0.39584,-0.17518 0.003,-0.011 0.0341,-0.001 0.0341,-0.001 0.93988,-3.27574 2.26817,-6.33757 4.94853,-8.65477 0,0 -0.014,-0.009 -0.0103,-0.0129 0.0929,-0.0948 0.20413,0.16719 0.32092,0.23565 l 1.295,0.75964 c 1.0015,0.58629 2.31603,0.16558 2.94762,-0.94465 l 0.64235,-1.13016 c 0.63172,-1.11016 0.33412,-2.47618 -0.66715,-3.06286 0,0 -0.83444,-0.56602 -1.29656,-0.75861 -0.53983,-0.19948 -1.10651,-0.26833 -1.55702,-0.17987 z"
sodipodi:nodetypes="cscccscccccccccccccc" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

@@ -1,137 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect7489-2"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-202.62,-202.62)">
<g
id="power-panel"
transform="translate(196.25972,112.11215)"
style="display:inline"
inkscape:label="power-panel">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle2068"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g1414">
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect2094"
width="15.32574"
height="19.166155"
x="16.430189"
y="98.657547"
rx="0.30000046"
ry="0.29990521" />
<path
style="color:#000000;fill:#1685fc;stroke-width:1;-inkscape-stroke:none"
d="m 22.076952,100.95276 -1.773928,7.28642 a 0.20789687,0.20789687 51.841439 0 0 0.201996,0.25707 h 3.066085 a 0.221025,0.221025 50.125627 0 1 0.217496,0.26036 l -1.224111,6.76858 a 0.04607116,0.04607116 20.128973 0 0 0.08523,0.0312 l 5.163643,-8.94128 a 0.15273666,0.15273666 60.003345 0 0 -0.132265,-0.22912 h -4.139801 a 0.15100299,0.15100299 60.285734 0 1 -0.130013,-0.22781 l 3.092294,-5.23472 a 0.15100299,0.15100299 60.285734 0 0 -0.130013,-0.22781 h -3.969444 a 0.33672627,0.33672627 141.84144 0 0 -0.32717,0.25707 z"
id="path4653"
sodipodi:nodetypes="cccccccc"
inkscape:original-d="m 22.139539,100.69569 -1.899102,7.80056 h 3.595251 l -1.318285,7.2893 5.428279,-9.39952 h -4.668967 l 3.361434,-5.69034 z"
inkscape:path-effect="#path-effect7489-2" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 14.21149,102.65731 h 2.218699"
id="path6295" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 14.227575,108.24031 h 2.202614"
id="path6295-6" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 14.227575,113.82331 h 2.202614"
id="path6295-2" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 31.755929,102.65731 h 2.21899"
id="path6295-9" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 31.755929,108.24031 h 2.21899"
id="path6295-1" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.32301;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 31.755929,113.82331 h 2.21899"
id="path6295-27" />
<path
sodipodi:type="star"
style="display:inline;fill:#1685fc;fill-opacity:1;stroke:#1685fc;stroke-width:11.9506;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15914-0"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.02240769,-0.10760072,-0.10922004,-0.02240223,63.72173,141.13463)"
inkscape:transform-center-x="-0.17209272"
inkscape:transform-center-y="0.25890207"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect6748-3"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-142.62001,-202.61999)">
<g
id="power-units"
transform="translate(136.25973,112.11214)"
style="display:inline"
inkscape:label="power-units">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle6706"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g6726"
transform="matrix(1.4471257,0,0,1.4672614,-7.4774153,-42.540705)"
style="display:inline;stroke-width:0.686267">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 16.341201,106.66306 h 10.949571 a 0.26458333,0.26458333 135 0 0 0.264583,-0.26458 v -4.70286 a 0.62852139,0.62852139 67.170779 0 0 -0.189226,-0.44951 l -2.447661,-2.392037 a 0.64928801,0.64928801 22.170779 0 0 -0.453809,-0.184926 l -5.296834,0 a 0.64937198,0.64937198 157.83181 0 0 -0.453826,0.184909 l -2.448138,2.392074 a 0.62844198,0.62844198 112.83181 0 0 -0.189243,0.44949 v 4.70286 a 0.26458333,0.26458333 45 0 0 0.264583,0.26458 z"
id="path6718"
sodipodi:nodetypes="ccccccc"
inkscape:original-d="m 16.076618,106.66306 h 11.478737 v -5.23202 l -2.826113,-2.761893 h -5.826 l -2.826624,2.761893 z"
inkscape:path-effect="#path-effect6748-3" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 19.079996,104.59475 v -1.44816"
id="path6720" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.551977,104.59475 v -1.44816"
id="path6722" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:0.907931;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 21.815986,102.48599 v -1.44816"
id="path6724" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

@@ -1,88 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-202.62,-322.61998)">
<g
id="printer"
style="display:inline"
transform="translate(227.33747,-3.8293975)"
inkscape:label="printer">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle129423"
cx="-6.9846935"
cy="344.18216"
r="17.071318" />
<g
id="g132091"
transform="translate(1.156126,-2.0886092)">
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect131999"
width="21.57835"
height="9.9095459"
x="-18.929995"
y="341.31516"
rx="0.30000046"
ry="0.30000046" />
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect132001"
width="11.098689"
height="7.5224638"
x="-13.690165"
y="348.52966"
rx="0.30000046"
ry="0.30000046" />
<rect
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
id="rect132003"
width="11.099"
height="4.8257442"
x="-13.69032"
y="336.48941"
rx="0.30000046"
ry="0.30000046" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

@@ -1,109 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465557mm"
height="35.465557mm"
viewBox="0 0 35.465557 35.465557"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect8622-6"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.1701912,0,1 @ F,0,0,1,0,1.0582838,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.3202113,0,1 @ F,0,0,1,0,1.2869827,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false"
nodesatellites_param="F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.1701912,0,1 @ F,0,0,1,0,1.0582838,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,1.3202113,0,1 @ F,0,0,1,0,1.2869827,0,1 @ F,0,0,1,0,0.26458333,0,1 @ F,0,0,1,0,0.26458333,0,1" />
</defs>
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-262.62,-82.619997)">
<g
id="provider-networks"
transform="translate(256.25972,-7.8878491)"
style="display:inline"
inkscape:label="provider-networks">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.32292;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle5949"
cx="24.09306"
cy="108.24062"
r="17.071318" />
<g
id="g10028">
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 14.418108,115.90978 H 33.76802"
id="path5953" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 24.093064,114.8012 v -4.69409"
id="path5957" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle5959"
cx="24.093063"
cy="115.90978"
r="2.5286407" />
<path
style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 16.124233,101.66588 4.306528,-0.93182 a 0.66402692,0.66402692 9.5159396 0 1 0.484816,0.0813 l 3.639421,2.20767 a 1.121744,1.121744 77.451828 0 1 0.351866,1.58087 l -0.08243,0.12377 a 1.1256229,1.1256229 166.89666 0 1 -1.501904,0.34959 l -2.752341,-1.59744 a 0.00178664,0.00178664 120.51744 0 0 -0.0018,0.003 l 4.75525,2.84645 a 0.56329859,0.56329859 5.7447264 0 0 0.476557,0.0479 l 7.918524,-2.79086 a 1.4048376,1.4048376 23.806369 0 1 1.760401,0.77666 l 0.02398,0.0566 a 1.2370418,1.2370418 113.16114 0 1 -0.701565,1.63995 l -10.460968,3.95398 a 0.77079343,0.77079343 178.24001 0 1 -0.500265,0.0154 l -7.705946,-2.38324 a 0.35980213,0.35980213 53.51455 0 1 -0.253493,-0.34275 l -0.0145,-5.31654 a 0.32704092,0.32704092 128.81737 0 1 0.257877,-0.32053 z"
id="path6127"
sodipodi:nodetypes="ccccccccccc"
inkscape:original-d="m 15.865634,101.72183 4.823726,-1.04372 4.866145,2.95179 -1.317679,1.97856 -3.896468,-2.26148 5.209288,3.11823 9.413201,-3.31766 1.041537,2.457 -11.91232,4.50256 -8.211488,-2.53958 z"
inkscape:path-effect="#path-effect8622-6" />
<rect
style="font-variation-settings:normal;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="rect9091"
width="2.3879888"
height="7.0936403"
x="13.736244"
y="101.08244"
rx="0.30000046"
ry="0.29990518" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.9 KiB

@@ -1,144 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="35.465mm"
height="35.465633mm"
viewBox="0 0 35.465 35.465634"
version="1.1"
id="svg20924"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="netbox-topology-views-icons.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview20926"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.4723932"
inkscape:cx="1020.3364"
inkscape:cy="643.5317"
inkscape:window-width="1920"
inkscape:window-height="1133"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs20921" />
<g
inkscape:label="Icons"
inkscape:groupmode="layer"
id="layer1"
inkscape:highlight-color="#1685fc"
transform="translate(-142.62029,-82.619957)">
<g
id="proxy"
transform="translate(136.25973,-7.8878491)"
style="display:inline"
inkscape:label="proxy">
<ellipse
style="fill:#ffffff;fill-opacity:1;stroke:#9cc8f8;stroke-width:1.323;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle1225"
cx="24.09306"
cy="108.24062"
rx="17.070999"
ry="17.071318" />
<g
id="g1859">
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path1227"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(-0.25556787,0.0684792,-0.0684792,-0.25556787,104.12602,197.11675)"
inkscape:transform-center-x="0.52162088"
inkscape:transform-center-y="-0.52161841"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path1229"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0.25556787,0.0684792,0.0684792,-0.25556787,-56.334102,197.08613)"
inkscape:transform-center-y="-0.52161841"
inkscape:transform-center-x="-0.52161956"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
sodipodi:type="star"
style="fill:#ffffff;fill-opacity:1;stroke:#1685fc;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path1233"
inkscape:flatsided="true"
sodipodi:sides="3"
sodipodi:cx="170.92444"
sodipodi:cy="403.2724"
sodipodi:r1="16.610861"
sodipodi:r2="8.3054304"
sodipodi:arg1="1.0471976"
sodipodi:arg2="2.0943951"
inkscape:rounded="0.1"
inkscape:randomized="0"
transform="matrix(0,0.26458333,0.26458333,0,-82.711582,53.89499)"
inkscape:transform-center-x="-3.173315e-06"
inkscape:transform-center-y="0.85152188"
d="m 179.22987,417.65783 c -2.49163,1.43854 -24.91629,-11.50835 -24.91629,-14.38543 0,-2.87709 22.42466,-15.82397 24.91629,-14.38543 2.49163,1.43855 2.49163,27.33232 0,28.77086 z" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 30.305158,106.5761 -6.212098,1.66452"
id="path1235" />
<path
style="display:inline;fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 17.775471,106.40391 6.212098,1.66452"
id="path1235-6" />
<path
style="fill:none;stroke:#1685fc;stroke-width:1.323;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 24.09306,114.66674 V 101.81451"
id="path1237" />
<circle
style="font-variation-settings:normal;vector-effect:none;fill:#9cc8f8;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="circle1239"
cx="-23.987566"
cy="-108.06844"
r="2.5286407"
transform="scale(-1)" />
<path
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:none;fill-opacity:1;stroke:#1685fc;stroke-width:1.323;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="M 14.418108,115.90978 H 33.76802"
id="path942-5" />
<circle
style="font-variation-settings:normal;display:inline;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#1685fc;stroke-width:1.32292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
id="path16050-3-3"
cx="24.093063"
cy="115.90978"
r="2.5286407" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Some files were not shown because too many files have changed in this diff Show More