@@ -25,7 +25,6 @@ import (
2525
2626 "github.com/digitalocean/go-libvirt"
2727 "github.com/digitalocean/go-libvirt/socket/dialers"
28- "github.com/google/uuid"
2928 "sigs.k8s.io/controller-runtime/pkg/client"
3029 "sigs.k8s.io/controller-runtime/pkg/log"
3130
@@ -38,6 +37,7 @@ type LibVirt struct {
3837 migrationJobs map [string ]context.CancelFunc
3938 migrationLock sync.Mutex
4039 version string
40+ domains map [libvirt.ConnectListAllDomainsFlags ][]libvirt.Domain
4141}
4242
4343func NewLibVirt (k client.Client ) * LibVirt {
@@ -52,6 +52,7 @@ func NewLibVirt(k client.Client) *LibVirt {
5252 make (map [string ]context.CancelFunc ),
5353 sync.Mutex {},
5454 "N/A" ,
55+ make (map [libvirt.ConnectListAllDomainsFlags ][]libvirt.Domain , 2 ),
5556 }
5657}
5758
@@ -74,6 +75,10 @@ func (l *LibVirt) Connect() error {
7475 // Run the migration listener in a goroutine
7576 ctx := log .IntoContext (context .Background (), log .Log .WithName ("libvirt-migration-listener" ))
7677 go l .runMigrationListener (ctx )
78+
79+ // Periodic status thread
80+ ctx = log .IntoContext (context .Background (), log .Log .WithName ("libvirt-status-thread" ))
81+ go l .runStatusThread (ctx )
7782 }
7883
7984 return err
@@ -92,12 +97,7 @@ func (l *LibVirt) GetInstances() ([]v1alpha1.Instance, error) {
9297
9398 flags := []libvirt.ConnectListAllDomainsFlags {libvirt .ConnectListDomainsActive , libvirt .ConnectListDomainsInactive }
9499 for _ , flag := range flags {
95- domains , _ , err := l .virt .ConnectListAllDomains (1 , flag )
96- if err != nil {
97- return nil , err
98- }
99-
100- for _ , domain := range domains {
100+ for _ , domain := range l .domains [flag ] {
101101 instances = append (instances , v1alpha1.Instance {
102102 ID : GetOpenstackUUID (domain ),
103103 Name : domain .Name ,
@@ -109,36 +109,13 @@ func (l *LibVirt) GetInstances() ([]v1alpha1.Instance, error) {
109109}
110110
111111func (l * LibVirt ) GetDomainsActive () ([]libvirt.Domain , error ) {
112- domains , _ , err := l .virt .ConnectListAllDomains (1 , libvirt .ConnectListDomainsActive )
113- if err != nil {
114- return nil , err
115- }
116- return domains , nil
112+ return l .domains [libvirt .ConnectListDomainsActive ], nil
117113}
118114
119115func (l * LibVirt ) IsConnected () bool {
120116 return l .virt .IsConnected ()
121117}
122118
123- func GetOpenstackUUID (domain libvirt.Domain ) string {
124- u , err := uuid .FromBytes (domain .UUID [:])
125- if err != nil {
126- return ""
127- }
128-
129- return u .String ()
130- }
131-
132- func ByteCountIEC (b uint64 ) string {
133- const unit = 1024
134- if b < unit {
135- return fmt .Sprintf ("%d B" , b )
136- }
137- div , exp := int64 (unit ), 0
138- for n := b / unit ; n >= unit ; n /= unit {
139- div *= unit
140- exp ++
141- }
142- return fmt .Sprintf ("%.1f %ciB" ,
143- float64 (b )/ float64 (div ), "KMGTPE" [exp ])
119+ func (l * LibVirt ) GetNumInstances () int {
120+ return len (l .domains [libvirt .ConnectListDomainsActive ])
144121}
0 commit comments