mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Free/Used/Reserved ports overview in column table #7585
Closed
opened 2025-12-29 20:25:45 +01:00 by adam
·
14 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#7585
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @PieterL75 on GitHub (Feb 1, 2023).
NetBox version
v3.3.10
Feature type
Change to existing functionality
Proposed functionality
I would like to see a summary of all available/occupied ports on the device list page.
This could be added as a new column that can be added using the 'configure table'
Additionally, I would like to have an extra field in the 'Filter' to look for devices with at least X unconnected ports.
Use case
When provisioning a new environment, I need to pick the correct rack where to deploy it. This is mainly done by looking for the required network ports for that environment.
I have a custom report, but having this integrated (in a SavedFilter !!!) would be nice
Database changes
No response
External dependencies
No response
@jeremystretch commented on GitHub (Feb 1, 2023):
Unfortunately it's not as simple as this. First, what do you consider a "port?" Front ports, rear ports, interfaces? All of them combined? This will probably differ by device role (e.g. switch vs. PDU). And then you have to consider qualifiers: Do we count management or disabled interfaces, for example? Lots of caveats come into play here, and a one-size-fits-all solution seems unlikely.
@PieterL75 commented on GitHub (Feb 1, 2023):
I agree on that.. One other option is to create two column per port-type (interface, front, rear,...) with the 'occupied' and 'available' count?
Last option : the ability to create 'calculated' custom fields.. We could leverage a jinja2 template to process the object data and generate a output.. then I could write that field myself, and it is highly customizable
@jeremystretch commented on GitHub (Feb 1, 2023):
This has some overlap with #6347, which will cache the number of each of type component associated with a device/VM. It doesn't consider whether each is occupied, but it would provide one of the two variables we need. With that in place, it might be feasible to add an individual column for each component type, which would annotate a count of occupied components and compare it to the total number.
I'm going to mark this as blocked by #6347 (
which is planned for v3.5now planned for v3.6) for now, though happy to discuss further.@PieterL75 commented on GitHub (Feb 3, 2023):
What about the 'calculated custom field' ?
A jinja2 template could be used to create a return value that is shown in the column. Then we can use that for any purpose.
ex: when displaying an IP address on an interface, I would like to also display the vlan id.
That would give a great flexibility to what people want to see and how they want it.
Maybe some extra guidance on how to display things (progress bar, badge, ...) and you have a total customizable table view without any plugins or serverside coding
@jeremystretch commented on GitHub (Feb 3, 2023):
A custom field wouldn't be any different; the data still needs to come from the database. It can't be cached, because the count of free/total ports can change at any time.
@PieterL75 commented on GitHub (Feb 3, 2023):
I agree on that, it might be slow, but it will be able to create a table field at the convenience of the user.
And with #6347, there will be more direct-accessible counters to use.
This customfield is out of scope of my initial request, but rather an result of thinking how this can be customized.
I can create a separate FR for that
@coloHsq commented on GitHub (Apr 7, 2023):
Hi everyone, I've actually done something similar to have a "per rack" summary of patch panels and PDUs available ports.
All the count aggregations are done on demand, and for like 300 racks it runs fast enough to be usable.
The querysets I'm using for ports aggregations can probably be adapted for this request.
Let me know if you're interested.
@PieterL75 commented on GitHub (May 30, 2023):
@coloHsq How do you generate those fields ?
Is that through a plugin ?
Interesting to see that you got this working though :-)
@coloHsq commented on GitHub (May 30, 2023):
@PieterL75 It's a plugin I've done for the same use case you've said, except for the fact we're using EOR architecture in our data center, so an aggregate count of patch panels port per rack is enough.
Anyway all the ports count fields are generated with count aggregation subquerys annotated on a Rack queryset,
something like this:
Rack.objects.annotate(free_mm=Subquery(mm_free_port_count_qs)).annotate(total_mm=Subquery(mm_tot_port_count_qs))Anyway, I agree with @jeremystretch, while the calculations it's kinda easy to do, there's a lot of difficulty to define a general solution for this use case, as the parameters needed are strictly tied to user defined data and designs that differs one from another, so, in my opinion, this feature is more suited for a plugin.
I'm probably going to publish this, but it needs some polishing as it's heavily customizeds on my environment and i need to figure out how to make it open and customizable enough to be used by other people.
@jeremystretch commented on GitHub (Dec 27, 2023):
This is no longer blocked, however I still don't see a clear path to an implementation.
@coloHsq commented on GitHub (Jan 5, 2024):
I'm starting to see a practical implementation for this one.
By now, the main problem is to make it flexible enough to be used for most of the use cases, but i've managed to solve a big part of this problem so that i can dynamically filter the elements taken for count aggregations, and this solution can be used with stock tables and filters.
This would allow something like "show me all devices that have at least 5 enabled unconnected qsfp+ ports" (or whatever else filter conditions supported on models that are being counted), so one can define what and how to run the aggregations and save'em in a filter.
I still see this feature as best implemented in a specific plugin, as this relays on subqueries annotated on the main one, and it seems quite unlikely i'll be able to modify the core views querysets, unless we decide that this feature is worth to be placed in the core part.
@coloHsq commented on GitHub (Feb 21, 2024):
Hi, it's been a while since I said I would release a plugin for this.
but finally here it is : https://github.com/coloHsq/aggregatron.git
@github-actions[bot] commented on GitHub (May 21, 2024):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Do not attempt to circumvent this process by "bumping" the issue; doing so will result in its immediate closure and you may be barred from participating in any future discussions. Please see our contributing guide.
@jeremystretch commented on GitHub (May 22, 2024):
I'm going to close this out as no detailed implementation has been agreed upon. Happy to reopen if someone would like to invest the time and effort in drafting a detailed proposal.