compute/pkg/api/domain/events.go

86 lines
2.1 KiB
Go

package domain
import (
"context"
"deevirt.fr/compute/pkg/api/proto"
"libvirt.org/go/libvirt"
)
type Events struct {
NodeID string
CompanyID string
DatacenterID string
Config []byte
DomainID string
State int
Event *libvirt.DomainQemuMonitorEvent
}
type EventsDetail map[string]string
func (d *Domain) Event(ctx context.Context, req *proto.DomainEventRequest) (*proto.DomainEventResponse, error) {
/*var events Events
err := json.Unmarshal(req.Event, &events)
if err != nil {
fmt.Println("Erreur lors du décodage JSON:", err)
}
var edetail EventsDetail
if events.Event.Event == "MIGRATION" {
err = json.Unmarshal([]byte(events.Event.Details), &edetail)
if err != nil {
fmt.Println("Erreur lors du décodage JSON:", err)
}
if edetail["status"] == "setup" {
r, _ := d.Store.Get(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID))
if r != nil {
var j raft.DomainStore
json.Unmarshal(r, &j)
j.Migrate = true
new, _ := json.Marshal(j)
d.Store.Set(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID), new)
} else {
new, _ := json.Marshal(raft.DomainStore{
Config: string(events.Config),
State: events.State,
Migrate: false,
})
d.Store.Set(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID), new)
}
fmt.Printf("%s => %v\n", events.NodeID, edetail)
} else if edetail["status"] == "completed" {
r, _ := d.Store.Get(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID))
if r != nil {
var j raft.DomainStore
json.Unmarshal(r, &j)
if j.Migrate {
d.Store.Delete(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID))
}
}
fmt.Printf("%s => %v\n", events.NodeID, edetail)
}
}
// AMQP - On envoi l'évènement brut
/*e, _ := json.Marshal(events.Event)
a, _ := amqp.NewAMQP()
a.Publisher("vmcenter",
"events."+events.CompanyID+
"."+events.DatacenterID+
"."+events.DomainID,
e)
defer a.Close()*/
return &proto.DomainEventResponse{}, nil
}