| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package kubemodel
- import (
- "fmt"
- "time"
- )
- // Device holds identification for an accelerator device (e.g. an Nvidia GPU) attached to the
- // cluster via the k8s Device Plugin API or DRAs. The shape is vendor-agnostic, but the only
- // populating source currently implemented is the DCGM exporter. Usage of a Device by a specific
- // container is recorded on Container.DeviceUsages, keyed by Device.UUID.
- // @bingen:generate:Device
- type Device struct {
- UUID string `json:"uuid"`
- Start time.Time `json:"start"`
- End time.Time `json:"end"`
- Device string `json:"device"`
- ModelName string `json:"modelName"`
- }
- func (d *Device) ValidateDevice(window Window) error {
- if d.UUID == "" {
- return fmt.Errorf("UUID is missing for Device with device '%s'", d.Device)
- }
- if err := checkWindow(window, d.Start, d.End); err != nil {
- return err
- }
- return nil
- }
- // RegisterDevice validates and adds a Device to the set, keyed by UUID.
- func (kms *KubeModelSet) RegisterDevice(device *Device) error {
- if err := device.ValidateDevice(kms.Window); err != nil {
- err = fmt.Errorf("RegisterDevice: invalid device: %w", err)
- kms.Error(err)
- return err
- }
- if _, ok := kms.Devices[device.UUID]; !ok {
- if kms.Cluster == nil {
- kms.Warnf("RegisterDevice: Cluster is nil")
- }
- kms.Devices[device.UUID] = device
- kms.Metadata.ObjectCount++
- }
- return nil
- }
|