2022-07-04 20:39:34 +00:00
|
|
|
package bus
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
|
2023-03-15 14:45:00 +00:00
|
|
|
"github.com/kairos-io/kairos-sdk/bus"
|
2022-08-09 06:01:54 +00:00
|
|
|
|
2022-07-04 20:39:34 +00:00
|
|
|
"github.com/mudler/go-pluggable"
|
|
|
|
)
|
|
|
|
|
2022-07-25 22:26:10 +00:00
|
|
|
// Manager is the bus instance manager, which subscribes plugins to events emitted.
|
2022-08-20 21:47:16 +00:00
|
|
|
var Manager = NewBus()
|
|
|
|
|
|
|
|
func NewBus() *Bus {
|
|
|
|
return &Bus{
|
|
|
|
Manager: pluggable.NewManager(
|
|
|
|
bus.AllEvents,
|
|
|
|
),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func Reload() {
|
|
|
|
Manager = NewBus()
|
|
|
|
Manager.Initialize()
|
2022-07-04 20:39:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type Bus struct {
|
|
|
|
*pluggable.Manager
|
2022-08-20 21:47:16 +00:00
|
|
|
registered bool
|
2022-07-04 20:39:34 +00:00
|
|
|
}
|
|
|
|
|
2022-07-18 22:02:49 +00:00
|
|
|
func (b *Bus) LoadProviders() {
|
2022-08-12 10:21:12 +00:00
|
|
|
wd, _ := os.Getwd()
|
2022-12-20 16:22:09 +00:00
|
|
|
b.Manager.Autoload("agent-provider", "/system/providers", "/usr/local/system/providers", wd).Register()
|
2022-07-18 22:02:49 +00:00
|
|
|
}
|
2022-07-04 20:39:34 +00:00
|
|
|
|
2023-01-08 20:49:23 +00:00
|
|
|
func (b *Bus) HasRegisteredPlugins() bool {
|
|
|
|
return len(b.Plugins) > 0
|
|
|
|
}
|
|
|
|
|
2022-07-18 22:02:49 +00:00
|
|
|
func (b *Bus) Initialize() {
|
2022-08-20 21:48:54 +00:00
|
|
|
if b.registered {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
b.LoadProviders()
|
|
|
|
for i := range b.Manager.Events {
|
|
|
|
e := b.Manager.Events[i]
|
|
|
|
b.Manager.Response(e, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
|
|
|
|
if os.Getenv("BUS_DEBUG") == "true" {
|
|
|
|
fmt.Println(
|
|
|
|
fmt.Sprintf("[provider event: %s]", e),
|
|
|
|
"received from",
|
|
|
|
p.Name,
|
|
|
|
"at",
|
|
|
|
p.Executable,
|
|
|
|
r,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
if r.Errored() {
|
|
|
|
err := fmt.Sprintf("Provider %s at %s had an error: %s", p.Name, p.Executable, r.Error)
|
|
|
|
fmt.Println(err)
|
|
|
|
os.Exit(1)
|
2023-03-30 14:42:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if r.State != "" {
|
|
|
|
fmt.Println(fmt.Sprintf("[provider event: %s]", e), r.State)
|
2022-08-20 21:48:54 +00:00
|
|
|
}
|
|
|
|
})
|
2022-07-04 20:39:34 +00:00
|
|
|
}
|
2022-08-20 21:48:54 +00:00
|
|
|
b.registered = true
|
2022-07-04 20:39:34 +00:00
|
|
|
}
|