Files
scrutiny/vendor/github.com/jaypipes/ghw/main.go
T
2020-08-21 06:31:48 +00:00

126 lines
3.1 KiB
Go

//
// Use and distribution licensed under the Apache license version 2.
//
// See the COPYING file in the root project directory for full text.
//
package ghw
import "fmt"
const (
UNKNOWN = "unknown"
)
// Concrete merged set of configuration switches that act as an execution
// context when calling internal discovery methods
type context struct {
chroot string
}
// HostInfo is a wrapper struct containing information about the host system's
// memory, block storage, CPU, etc
type HostInfo struct {
Memory *MemoryInfo `json:"memory"`
Block *BlockInfo `json:"block"`
CPU *CPUInfo `json:"cpu"`
Topology *TopologyInfo `json:"topology"`
Network *NetworkInfo `json:"network"`
GPU *GPUInfo `json:"gpu"`
Chassis *ChassisInfo `json:"chassis"`
BIOS *BIOSInfo `json:"bios"`
Baseboard *BaseboardInfo `json:"baseboard"`
Product *ProductInfo `json:"product"`
}
// Host returns a pointer to a HostInfo struct that contains fields with
// information about the host system's CPU, memory, network devices, etc
func Host(opts ...*WithOption) (*HostInfo, error) {
mergeOpts := mergeOptions(opts...)
ctx := &context{
chroot: *mergeOpts.Chroot,
}
mem := &MemoryInfo{}
if err := ctx.memFillInfo(mem); err != nil {
return nil, err
}
block := &BlockInfo{}
if err := ctx.blockFillInfo(block); err != nil {
return nil, err
}
cpu := &CPUInfo{}
if err := ctx.cpuFillInfo(cpu); err != nil {
return nil, err
}
topology := &TopologyInfo{}
if err := ctx.topologyFillInfo(topology); err != nil {
return nil, err
}
net := &NetworkInfo{}
if err := ctx.netFillInfo(net); err != nil {
return nil, err
}
gpu := &GPUInfo{}
if err := ctx.gpuFillInfo(gpu); err != nil {
return nil, err
}
chassis := &ChassisInfo{}
if err := ctx.chassisFillInfo(chassis); err != nil {
return nil, err
}
bios := &BIOSInfo{}
if err := ctx.biosFillInfo(bios); err != nil {
return nil, err
}
baseboard := &BaseboardInfo{}
if err := ctx.baseboardFillInfo(baseboard); err != nil {
return nil, err
}
product := &ProductInfo{}
if err := ctx.productFillInfo(product); err != nil {
return nil, err
}
return &HostInfo{
CPU: cpu,
Memory: mem,
Block: block,
Topology: topology,
Network: net,
GPU: gpu,
Chassis: chassis,
BIOS: bios,
Baseboard: baseboard,
Product: product,
}, nil
}
// String returns a newline-separated output of the HostInfo's component
// structs' String-ified output
func (info *HostInfo) String() string {
return fmt.Sprintf(
"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
info.Block.String(),
info.CPU.String(),
info.GPU.String(),
info.Memory.String(),
info.Network.String(),
info.Topology.String(),
info.Chassis.String(),
info.BIOS.String(),
info.Baseboard.String(),
info.Product.String(),
)
}
// YAMLString returns a string with the host information formatted as YAML
// under a top-level "host:" key
func (i *HostInfo) YAMLString() string {
return safeYAML(i)
}
// JSONString returns a string with the host information formatted as JSON
// under a top-level "host:" key
func (i *HostInfo) JSONString(indent bool) string {
return safeJSON(i, indent)
}