visual

package
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 1, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2023-2024 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2023-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *

Index

Constants

View Source
const (
	SymSwitch  = 'S' // switch
	SymNode    = 'N' // node/server/blade
	SymBlade   = 'B' // blade (alias for node)
	SymPDU     = 'P' // PDU
	SymCDU     = 'C' // CDU
	SymChassis = '#' // chassis
	SymUnknown = '?' // unknown device type
	SymEmpty   = '·' // empty slot

	// Cable drawing characters
	CableHoriz    = "─"
	CableVertical = "│"
	CableLeft     = "┤"
	CableRight    = "├"
	CableCross    = "┼"
)

Device type symbols for compact display

View Source
const (
	ColName      = 30
	ColType      = 15
	ColModel     = 30
	ColStatus    = 10
	ColLocation  = 20
	ColRack      = 20
	ColDevice    = 20
	ColBay       = 15
	ColUPos      = 6
	ColCount     = 8
	ColLabel     = 25
	ColCableTyp  = 15
	ColTerm      = 25
	ColSerial    = 20
	ColConnected = 12
	ColRole      = 14
)

Column widths for fixed-width table output.

View Source
const (
	ColPrefix  = 20
	ColVID     = 6
	ColAddress = 20
	ColDNS     = 30
)

Column widths for IPAM tables.

View Source
const (
	ColMetaName = 25
	ColColor    = 10
	ColDesc     = 30
	ColCTypes   = 30
	ColWeight   = 8
)

Column widths for metadata tables.

View Source
const (
	IconRack              = "■"
	IconDevice            = "●"
	IconModule            = "◆"
	IconCable             = "═"
	IconCableDisconnected = "≄"
	IconInterface         = "○"
	IconFru               = "□"
	IconLocation          = "◇"
)

Tree icons per node type.

View Source
const (
	ColorReset   = "\033[0m"
	ColorRed     = "\033[31m"
	ColorGreen   = "\033[32m"
	ColorGray    = "\033[90m"
	ColorYellow  = "\033[33m"
	ColorCyan    = "\033[36m"
	ColorBlue    = "\033[34m"
	ColorMagenta = "\033[35m"
	ColorBold    = "\033[1m"
	ColorWhite   = "\033[97m"
)

ANSI color codes

Variables

This section is empty.

Functions

func CableAttachedToAnyDeviceInterface added in v0.6.1

func CableAttachedToAnyDeviceInterface(c *devicetypes.CaniCableType, inv *devicetypes.Inventory) bool

CableAttachedToAnyDeviceInterface returns true if a cable's termination port matches an interface on either termination device.

func CableMatchesAnyInterface added in v0.6.1

func CableMatchesAnyInterface(c *devicetypes.CaniCableType, dev *devicetypes.CaniDeviceType, inv *devicetypes.Inventory) bool

CableMatchesAnyInterface returns true if cable c is connected to one of dev's interfaces (meaning it is already shown inline on an interface line).

func Col added in v0.6.1

func Col(s string, width int) string

Col formats a value into a fixed-width column.

func CollectInterfacesForDevices added in v0.6.1

func CollectInterfacesForDevices(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory) []*devicetypes.InterfaceInstance

CollectInterfacesForDevices returns all InterfaceInstances belonging to the given devices.

func ColorInGray added in v0.6.1

func ColorInGray(s, color string, noColor bool) string

ColorInGray wraps text in a color then switches back to gray. When noColor is true, returns the text unchanged.

func CountLocationDescendants added in v0.6.1

func CountLocationDescendants(loc *devicetypes.CaniLocationType, inv *devicetypes.Inventory) (racks int, devices int)

CountLocationDescendants recursively counts racks and devices under a location.

func FindAllRacks

func FindAllRacks(inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType

FindAllRacks finds all rack-type devices in the inventory

func FindCableForInterface added in v0.6.1

func FindCableForInterface(iface devicetypes.InterfaceSpec, deviceID uuid.UUID, inv *devicetypes.Inventory) *devicetypes.CaniCableType

FindCableForInterface returns the cable connected to iface on deviceID, or nil.

func FindCablesForDevice added in v0.6.1

func FindCablesForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniCableType

FindCablesForDevice returns all cables where TerminationADevice matches deviceID.

func FindFrusForDevice added in v0.6.1

func FindFrusForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniFruType

FindFrusForDevice returns all FRUs whose Device matches deviceID.

func FindModulesForDevice added in v0.6.1

func FindModulesForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniModuleType

FindModulesForDevice returns all modules whose ParentDevice matches deviceID.

func FormatTermination added in v0.6.1

func FormatTermination(deviceID uuid.UUID, port string, inv *devicetypes.Inventory) string

FormatTermination builds a "device:port" string from a device UUID and port name.

func IntOrDash added in v0.6.1

func IntOrDash(n int) string

IntOrDash returns the integer as a string, or "-" if zero.

func JoinNonEmpty added in v0.6.1

func JoinNonEmpty(parts []string, sep string) string

JoinNonEmpty joins non-empty strings with sep.

func Pad added in v0.6.1

func Pad(s string, n int) string

Pad right-pads s with spaces to width n.

func PipeSep added in v0.6.1

func PipeSep(parts ...string) string

PipeSep joins non-empty strings with " | ".

func PrintAllTables added in v0.6.1

func PrintAllTables(inv *devicetypes.Inventory)

PrintAllTables renders all inventory sections as tables with section headers.

func PrintCSVRowStep

func PrintCSVRowStep(rowNum, totalRows int, rawData string, parsed string, tally StepTally, opts ETLOptions)

PrintCSVRowStep prints enhanced step info for a CSV row with raw data and tally

func PrintCSVRowStepRaw

func PrintCSVRowStepRaw(rowNum, totalRows int, rawData string, parsed string, opts ETLOptions)

PrintCSVRowStepRaw prints step info for a raw CSV row without tally (for extract phase)

func PrintCableDetails

func PrintCableDetails(index, total int, cable *devicetypes.CaniCableType, opts ETLOptions)

PrintCableDetails displays cable information during step mode

func PrintCableTable added in v0.6.1

func PrintCableTable(cables []*devicetypes.CaniCableType, inv *devicetypes.Inventory)

PrintCableTable renders cables as a fixed-width table.

func PrintCaniOperation

func PrintCaniOperation(msg string, opts ETLOptions)

PrintCaniOperation prints a cani framework operation message (cyan)

func PrintDeviceDetails

func PrintDeviceDetails(index, total int, device *devicetypes.CaniDeviceType, opts ETLOptions)

PrintDeviceDetails displays device information during step mode

func PrintDeviceTable added in v0.6.1

func PrintDeviceTable(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter)

PrintDeviceTable renders devices as a fixed-width table.

func PrintEntriesTable added in v0.6.1

func PrintEntriesTable(entries []devicetypes.MetadataEntry)

PrintEntriesTable renders metadata entries without a WEIGHT column.

func PrintError

func PrintError(msg string, opts ETLOptions)

PrintError prints an error message

func PrintFieldMappings

func PrintFieldMappings(mappings []FieldMapping, opts ETLOptions)

PrintFieldMappings prints a formatted table of CSV-to-target field mappings. Shows how each CSV field maps to the resulting inventory object field. Direct copies show "→", derived/computed fields show "→→".

func PrintFruTable added in v0.6.1

func PrintFruTable(frus []*devicetypes.CaniFruType, inv *devicetypes.Inventory)

PrintFruTable renders FRUs as a fixed-width table.

func PrintIPAddressTable added in v0.6.1

func PrintIPAddressTable(addrs []*devicetypes.CaniIPAddress, inv *devicetypes.Inventory)

PrintIPAddressTable renders IP addresses as a fixed-width table.

func PrintImportSummary

func PrintImportSummary(summary ImportSummary, opts ETLOptions, stepMode bool)

PrintImportSummary prints a summary of imported items and their relationships

func PrintInterfaceInstanceTable added in v0.6.1

func PrintInterfaceInstanceTable(ifaces []*devicetypes.InterfaceInstance, inv *devicetypes.Inventory)

PrintInterfaceInstanceTable renders interface instances as a fixed-width table.

func PrintLocationTable added in v0.6.1

func PrintLocationTable(locations []*devicetypes.CaniLocationType, inv *devicetypes.Inventory)

PrintLocationTable renders locations as a fixed-width table.

func PrintMetadataTable added in v0.6.1

func PrintMetadataTable(inv *devicetypes.Inventory)

PrintMetadataTable renders inventory metadata as grouped tables.

func PrintModuleTable added in v0.6.1

func PrintModuleTable(modules []*devicetypes.CaniModuleType, inv *devicetypes.Inventory)

PrintModuleTable renders modules as a fixed-width table.

func PrintNodeTransformStep

func PrintNodeTransformStep(info NodeStepInfo, tally StepTally, opts ETLOptions)

PrintNodeTransformStep shows raw HPCM node data and how fields map to CANI types. Includes per-node field mappings and a running tally.

func PrintPhaseComplete

func PrintPhaseComplete(phase string, opts ETLOptions)

PrintPhaseComplete prints a completion marker for an ETL phase

func PrintPhaseHeader

func PrintPhaseHeader(phase string, opts ETLOptions)

PrintPhaseHeader prints a boxed header for an ETL phase

func PrintPrefixTable added in v0.6.1

func PrintPrefixTable(prefixes []*devicetypes.CaniPrefix, inv *devicetypes.Inventory)

PrintPrefixTable renders prefixes as a fixed-width table.

func PrintPrefixTree added in v0.6.1

func PrintPrefixTree(prefixes []*devicetypes.CaniPrefix)

PrintPrefixTree renders prefixes as an indented hierarchy.

func PrintProviderOperation

func PrintProviderOperation(msg string, opts ETLOptions)

PrintProviderOperation prints a provider-specific operation message (yellow)

func PrintRackDetails

func PrintRackDetails(index, total int, rack *devicetypes.CaniRackType, opts ETLOptions)

PrintRackDetails displays rack information during step mode

func PrintRackTable added in v0.6.1

func PrintRackTable(racks []*devicetypes.CaniRackType, inv *devicetypes.Inventory)

PrintRackTable renders racks as a fixed-width table.

func PrintRecordStepRaw

func PrintRecordStepRaw(rowNum, totalRows int, rawData string, parsed string, identifier string, opts ETLOptions)

PrintRecordStepRaw prints step info for a record without tally (for extract phase). identifier is an optional line (e.g. hostname or serial) shown in gray below the header.

func PrintRolesTable added in v0.6.1

func PrintRolesTable(entries []devicetypes.MetadataEntry)

PrintRolesTable renders role entries with a WEIGHT column.

func PrintStepItem

func PrintStepItem(itemDesc string, opts ETLOptions)

PrintStepItem prints details about an item being processed (for step-through)

func PrintVLANTable added in v0.6.1

func PrintVLANTable(vlans []*devicetypes.CaniVLAN, inv *devicetypes.Inventory)

PrintVLANTable renders VLANs as a fixed-width table.

func PrintWarning

func PrintWarning(msg string, opts ETLOptions)

PrintWarning prints a warning message

func PromptCSVRowStep

func PromptCSVRowStep(rowNum, totalRows int, rawData string, parsed string, tally StepTally, opts ETLOptions) error

PromptCSVRowStep prints CSV row step info and waits for Enter

func PromptCSVRowStepRaw

func PromptCSVRowStepRaw(rowNum, totalRows int, rawData string, parsed string, opts ETLOptions) error

PromptCSVRowStepRaw prints raw CSV row step info and waits for Enter (no tally)

func PromptFieldMappingStep

func PromptFieldMappingStep(rowNum, totalRows int, hwType string, mappings []FieldMapping, tally StepTally, opts ETLOptions) error

PromptFieldMappingStep prints field mappings with tally and waits for Enter. Used for step-through mode during transform phase.

func PromptNodeTransformStep

func PromptNodeTransformStep(info NodeStepInfo, tally StepTally, opts ETLOptions) error

PromptNodeTransformStep prints node transform step info and waits for Enter.

func PromptRecordStepRaw

func PromptRecordStepRaw(rowNum, totalRows int, rawData string, parsed string, identifier string, opts ETLOptions) error

PromptRecordStepRaw prints record step info and waits for Enter (no tally). identifier is an optional line (e.g. hostname or serial) shown in gray below the header.

func PromptStep

func PromptStep(itemDesc string, opts ETLOptions) error

PromptStep prints item details and waits for user to press Enter

func PromptTransformStep

func PromptTransformStep(rowNum, totalRows int, info TransformStepInfo, tally StepTally, opts ETLOptions) error

PromptTransformStep prints detailed transform step info with quantity and created items.

func RemoteTermination added in v0.6.1

func RemoteTermination(c *devicetypes.CaniCableType, localDevice uuid.UUID, inv *devicetypes.Inventory) string

RemoteTermination returns the formatted device:port for the far end of a cable relative to localDevice.

func RenderAllRacks

func RenderAllRacks(inv *devicetypes.Inventory, opts RenderOptions) error

RenderAllRacks renders all racks (or filtered by name) to stdout

func RenderAllRacksTo

func RenderAllRacksTo(w io.Writer, inv *devicetypes.Inventory, opts RenderOptions) error

RenderAllRacksTo renders all racks to a specific writer

func RenderCompactRacks

func RenderCompactRacks(inv *devicetypes.Inventory, opts CompactRenderOptions) error

RenderCompactRacks renders all racks in a compact ASCII format

func RenderCompactRacksWithCables

func RenderCompactRacksWithCables(inv *devicetypes.Inventory, opts CompactRenderOptions) error

RenderCompactRacksWithCables renders racks one per line with chronyc-style cable visualization

func RenderMinimapDetail

func RenderMinimapDetail(inv *devicetypes.Inventory, rv *CompactRackView, opts CompactRenderOptions) error

RenderMinimapDetail renders a single rack with right-side annotations.

func RenderMinimapDetailAll

func RenderMinimapDetailAll(inv *devicetypes.Inventory, opts CompactRenderOptions) error

RenderMinimapDetailAll renders each rack one at a time with detail annotations.

func RenderMinimapRacks

func RenderMinimapRacks(inv *devicetypes.Inventory, opts CompactRenderOptions) error

RenderMinimapRacks renders all racks as ultra-compact 2-char-wide columns.

func RenderRack added in v0.6.1

func RenderRack(inv *devicetypes.Inventory, format RackFormat, opts CompactRenderOptions) error

RenderRack dispatches to the appropriate rack renderer for the given format.

func RenderRackASCII

func RenderRackASCII(w io.Writer, rv *RackView, opts RenderOptions) error

RenderRackASCII renders a single rack to a writer

func RenderRacklessInventory

func RenderRacklessInventory(w io.Writer, inv *devicetypes.Inventory, opts RenderOptions) error

RenderRacklessInventory renders inventory that has no racks - shows device summary and cables

func RenderRoutingView added in v0.6.1

func RenderRoutingView(inv *devicetypes.Inventory, opts CompactRenderOptions) error

RenderRoutingView renders minimap-width racks with a wiring diagram. Without a RackFilter it renders one rack at a time sequentially.

func RenderTree

func RenderTree(w io.Writer, roots []TreeNode, opts TreeOptions)

RenderTree writes a tree of nodes to w using box-drawing characters.

func RenderTreeOutput added in v0.6.1

func RenderTreeOutput(nodes []TreeNode, noColor bool)

RenderTreeOutput renders tree nodes to stdout.

func RenderTreeToStdout

func RenderTreeToStdout(roots []TreeNode, opts TreeOptions)

RenderTreeToStdout is a convenience wrapper that writes to stdout.

func ResolveDeviceChildren added in v0.6.1

func ResolveDeviceChildren(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType

ResolveDeviceChildren resolves child device UUIDs into sorted device pointers.

func ResolveDeviceName added in v0.6.1

func ResolveDeviceName(id uuid.UUID, inv *devicetypes.Inventory) string

ResolveDeviceName looks up a device name by UUID.

func ResolveDevices added in v0.6.1

func ResolveDevices(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType

ResolveDevices resolves a slice of device UUIDs into sorted device pointers.

func ResolveLocationChildren added in v0.6.1

func ResolveLocationChildren(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniLocationType

ResolveLocationChildren resolves a slice of location UUIDs into sorted location pointers.

func ResolveLocationName added in v0.6.1

func ResolveLocationName(id uuid.UUID, inv *devicetypes.Inventory) string

ResolveLocationName looks up a location name by UUID.

func ResolveRackName added in v0.6.1

func ResolveRackName(id uuid.UUID, inv *devicetypes.Inventory) string

ResolveRackName looks up a rack name by UUID.

func ResolveRacks added in v0.6.1

func ResolveRacks(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniRackType

ResolveRacks resolves a slice of rack UUIDs into sorted rack pointers.

func RunInteractiveRouting added in v0.6.1

func RunInteractiveRouting(inv *devicetypes.Inventory, opts CompactRenderOptions) error

RunInteractiveRouting enters a raw-mode loop for toggle-based cable filtering.

func StatusAnsi added in v0.6.1

func StatusAnsi(status string) string

StatusAnsi returns the ANSI color code for a status string.

func StatusColor

func StatusColor(status string) string

StatusColor returns a color key ("red", "green", "yellow", or "cyan") for the given device status string. The status is normalised via devicetypes.NormalizeStatus so callers may pass any casing.

func TreeIcon added in v0.6.1

func TreeIcon(icon, color, typeTag, name string, noColor bool) string

TreeIcon returns "icon (type) name" with the icon colored, type dimmed, and name bold white.

func TreeIconColored added in v0.6.1

func TreeIconColored(icon, iconColor, typeTag, name, nameColor string, noColor bool) string

TreeIconColored is like TreeIcon but colors the name with nameColor instead of white.

func Trunc added in v0.6.1

func Trunc(s string, max int) string

Trunc truncates s to max characters, appending "…" if needed.

func ValidRackFormats added in v0.6.1

func ValidRackFormats() []string

ValidRackFormats returns the rack-specific format names.

Types

type CableEndpoint

type CableEndpoint struct {
	U        int    // U position in rack
	Port     string // Port name
	DestName string // Destination device name
	DestPort string // Destination port
	DestU    int    // Destination U position
	GoingUp  bool   // True if cable goes up (dest U > src U)
}

CableEndpoint represents one end of a cable for routing

type CableRoute

type CableRoute struct {
	StartU   int
	EndU     int
	Column   int // Horizontal column for this cable's vertical segment
	Endpoint CableEndpoint
}

CableRoute tracks a cable's path through the grid

type CableSummary

type CableSummary struct {
	SourceDevice string
	SourcePort   string
	DestDevice   string
	DestPort     string
	CableType    string
}

CableSummary describes a cable connection for display

type CompactRackView

type CompactRackView struct {
	Rack    *devicetypes.CaniRackType
	RackID  uuid.UUID
	Height  int
	Devices map[int]*devicetypes.CaniDeviceType // U position -> device (start position only)
	Index   int                                 // Column index for cable drawing
}

CompactRackView holds pre-computed rack data for compact rendering

type CompactRenderOptions

type CompactRenderOptions struct {
	NoColor     bool                   // Disable ANSI colors
	RackFilter  string                 // Filter to specific rack name
	Columns     int                    // Number of rack columns before wrapping (0 = auto)
	Verbose     int                    // 0 = no legend, 1 = legend, 2 = all cables
	CableType   string                 // Filter cables by type (e.g., "dac", "cat6")
	Detail      bool                   // Show single-rack detail with annotations
	ShowLabels  bool                   // Show A/B termination labels on routing view
	Interactive bool                   // Enter interactive toggle mode for routing view
	Inventory   *devicetypes.Inventory // Full inventory for module/cable lookups
}

CompactRenderOptions controls compact rack visualization

type CreatedItemInfo

type CreatedItemInfo struct {
	ID   string // Short UUID (first 8 chars)
	Name string // Generated name
}

CreatedItemInfo holds info about items created from a single CSV record.

type ETLOptions

type ETLOptions struct {
	NoColor bool
	Writer  io.Writer
}

ETLOptions controls ETL visual output

type FieldMapping

type FieldMapping struct {
	SourceField string // CSV column name (e.g., "PartNumber", "Description")
	SourceValue string // Raw value from CSV
	TargetType  string // Target type (e.g., "CaniDeviceType", "CaniRackType")
	TargetField string // Target field name (e.g., "Name", "DeviceTypeSlug")
	TargetValue string // Transformed value (may differ from source)
	IsDerived   bool   // True if value is computed/derived (not a direct copy)
}

FieldMapping represents a single CSV field to target field mapping. Used for step-through display to show how raw CSV data maps to inventory objects.

type ImportSummary

type ImportSummary struct {
	RackNames     []string
	DevicesByRack map[string][]string // rack name -> device names
	Cables        []CableSummary
}

ImportSummary holds summary data for post-import display

type InterRackCable

type InterRackCable struct {
	Cable       *devicetypes.CaniCableType
	RackAIndex  int // Column index of rack A
	RackBIndex  int // Column index of rack B
	PositionA   int // U position in rack A
	PositionB   int // U position in rack B
	DeviceAName string
	DeviceBName string
	PortA       string
	PortB       string
}

InterRackCable represents a cable between two racks

type MinimapSlot

type MinimapSlot struct {
	Char1  rune // front/full-depth indicator
	Char2  rune // rear/module indicator
	Color1 string
	Color2 string
}

MinimapSlot holds the 2-character representation for one U position.

type NodeStepInfo

type NodeStepInfo struct {
	NodeNum         int
	Total           int
	RawName         string
	RawType         string
	RawUUID         string
	RawRack         string
	FruCount        int
	FruNames        []string // unique group IDs (e.g. "dimm.432890BE", "disk.disk0")
	Mappings        []FieldMapping
	LibMatch        string // slug of matched library entry, or ""
	MatchQuery      string // query string that produced the match
	MatchScore      int    // confidence score (0-100)
	LibModel        string // model field of matched library entry
	LibManufacturer string // manufacturer field of matched library entry

}

NodeStepInfo holds all info needed for an HPCM node transform step display.

type RackFormat added in v0.6.1

type RackFormat string

RackFormat identifies a rack-specific output format.

const (
	RackFormatClassic RackFormat = "classic"
	RackFormatMinimap RackFormat = "minimap"
	RackFormatDetail  RackFormat = "detail"
	RackFormatRouting RackFormat = "routing"
)

type RackSlot

type RackSlot struct {
	Device      *devicetypes.CaniDeviceType
	IsStart     bool // True if this is the starting U of a multi-U device
	IsContinued bool // True if this is a continuation of a multi-U device
}

RackSlot represents a single U position in a rack

type RackView

type RackView struct {
	Rack                *devicetypes.CaniDeviceType
	Height              int               // Total rack height in U
	Slots               map[int]*RackSlot // U position -> slot info (1-indexed)
	UnpositionedDevices []*devicetypes.CaniDeviceType
}

RackView represents a rack visualization

func BuildRackVisualization

func BuildRackVisualization(inv *devicetypes.Inventory, rackID uuid.UUID) (*RackView, error)

BuildRackVisualization creates a RackView from inventory for a specific rack

func NewRackView

func NewRackView(rack *devicetypes.CaniDeviceType, height int) *RackView

NewRackView creates a new RackView for the given rack

func (*RackView) AddDevice

func (rv *RackView) AddDevice(device *devicetypes.CaniDeviceType, position, uHeight int)

AddDevice adds a device to the rack view at the specified position

func (*RackView) AddUnpositionedDevice

func (rv *RackView) AddUnpositionedDevice(device *devicetypes.CaniDeviceType)

AddUnpositionedDevice adds a device that lacks rack position info

func (*RackView) DeviceCount

func (rv *RackView) DeviceCount() int

DeviceCount returns the number of unique devices in the rack

func (*RackView) EmptyCount

func (rv *RackView) EmptyCount() int

EmptyCount returns the number of empty U positions

func (*RackView) GetSlot

func (rv *RackView) GetSlot(u int) *RackSlot

GetSlot returns the slot at the given U position

func (*RackView) IsOccupied

func (rv *RackView) IsOccupied(u int) bool

IsOccupied returns true if the U position is occupied

func (*RackView) OccupiedCount

func (rv *RackView) OccupiedCount() int

OccupiedCount returns the number of occupied U positions

type RenderOptions

type RenderOptions struct {
	NoColor    bool
	RackFilter string                 // Filter to specific rack name
	ShowCables bool                   // Show cable connections
	Inventory  *devicetypes.Inventory // Full inventory for cable lookups
}

RenderOptions controls visual output

type StepTally

type StepTally struct {
	Racks   int
	Devices int
	Cables  int
}

StepTally tracks running counts during step-through import

type TransformStepInfo

type TransformStepInfo struct {
	Quantity     int               // CSV Quantity value
	HwType       string            // Hardware type classification
	Mappings     []FieldMapping    // Field mappings (from first item as template)
	CreatedItems []CreatedItemInfo // All items created from this record
}

TransformStepInfo holds all info needed for a transform step display.

type TreeFilter added in v0.6.1

type TreeFilter struct {
	Modules    bool
	Interfaces bool
	Cables     bool
	EmptyUs    bool
	Roles      bool
	NoColor    bool
}

TreeFilter controls which child types are included in tree output.

type TreeNode

type TreeNode struct {
	Label    string // Primary name (rendered in normal text)
	Detail   string // Additional metadata (rendered in gray/dimmed)
	Children []TreeNode
}

TreeNode represents a single node in a display tree.

func BuildCableTree added in v0.6.1

func BuildCableTree(cables []*devicetypes.CaniCableType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildCableTree groups cables by A-termination device as tree nodes.

func BuildDeviceTree added in v0.6.1

func BuildDeviceTree(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildDeviceTree builds tree nodes for devices → modules.

func BuildFruTree added in v0.6.1

func BuildFruTree(frus []*devicetypes.CaniFruType, inv *devicetypes.Inventory) []TreeNode

BuildFruTree groups FRUs by parent device as tree nodes.

func BuildFullTree added in v0.6.1

func BuildFullTree(inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildFullTree builds the complete inventory tree: Locations → Racks → Devices → Modules.

func BuildInterfaceInstanceTree added in v0.6.1

func BuildInterfaceInstanceTree(ifaces []*devicetypes.InterfaceInstance, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildInterfaceInstanceTree groups interface instances by device as tree nodes.

func BuildLocationTree added in v0.6.1

func BuildLocationTree(inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildLocationTree builds tree nodes for the location hierarchy.

func BuildModuleTree added in v0.6.1

func BuildModuleTree(modules []*devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildModuleTree groups modules by parent device as tree nodes.

func BuildRackTree added in v0.6.1

func BuildRackTree(racks []*devicetypes.CaniRackType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode

BuildRackTree builds tree nodes for racks → devices → modules.

func CableLeafNode added in v0.6.1

CableLeafNode converts a cable into a tree leaf showing the connection.

func DeviceToTreeNode added in v0.6.1

func DeviceToTreeNode(dev *devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode

DeviceToTreeNode converts a device and its modules/children into a tree node.

func DisconnectedCableNode added in v0.6.1

func DisconnectedCableNode(tf TreeFilter) TreeNode

DisconnectedCableNode returns a placeholder cable node for an unconnected interface.

func EmptyBayNode added in v0.6.1

func EmptyBayNode(bayName string, tf TreeFilter) TreeNode

EmptyBayNode renders an empty module bay in all-dim text.

func EmptyUNode added in v0.6.1

func EmptyUNode(u int, tf TreeFilter) TreeNode

EmptyUNode renders a dim placeholder for an unoccupied rack unit.

func FruToTreeNode added in v0.6.1

func FruToTreeNode(fru *devicetypes.CaniFruType, tf TreeFilter) TreeNode

FruToTreeNode converts a FRU into a tree leaf.

func InterfaceToTreeNode added in v0.6.1

func InterfaceToTreeNode(iface devicetypes.InterfaceSpec, deviceID uuid.UUID, inv *devicetypes.Inventory, tf TreeFilter) TreeNode

InterfaceToTreeNode converts an interface spec into a tree node.

func LocationToTreeNode added in v0.6.1

func LocationToTreeNode(loc *devicetypes.CaniLocationType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode

LocationToTreeNode recursively converts a location and its children into a tree node.

func ModuleBayNode added in v0.6.1

func ModuleBayNode(bayName string, mod *devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode

ModuleBayNode renders a module bay. When mod is non-nil, the bay is populated.

func ModuleToTreeNode added in v0.6.1

func ModuleToTreeNode(mod *devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode

ModuleToTreeNode converts a module into a tree node with its interfaces and FRUs.

func RackToTreeNode added in v0.6.1

func RackToTreeNode(rack *devicetypes.CaniRackType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode

RackToTreeNode converts a rack and its child devices into a tree node.

type TreeOptions

type TreeOptions struct {
	NoColor bool
	Writer  io.Writer
}

TreeOptions controls tree rendering output.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL