Files
kairos-agent/internal/bus/bus.go
Ettore Di Giacinto 667fd76d9d seedling: Webui enhancements (#620)
* 🌱 Make sure webui starts on alpine

Also drop to shell when there are no providers

Signed-off-by: mudler <mudler@c3os.io>

* 🌱 Suppress verbose logging on tty

Signed-off-by: mudler <mudler@c3os.io>

* 🌱 Print WebUI address

Signed-off-by: mudler <mudler@c3os.io>

* 🎨 Update banner

Signed-off-by: mudler <mudler@c3os.io>

* 🌱 Refactor, display also interfaces

Signed-off-by: mudler <mudler@c3os.io>

* 🌱 Address feedback from review

Signed-off-by: mudler <mudler@c3os.io>

Signed-off-by: mudler <mudler@c3os.io>
2023-01-08 21:49:23 +01:00

74 lines
1.3 KiB
Go

package bus
import (
"fmt"
"os"
"github.com/kairos-io/kairos/sdk/bus"
"github.com/mudler/go-pluggable"
)
// Manager is the bus instance manager, which subscribes plugins to events emitted.
var Manager = NewBus()
func NewBus() *Bus {
return &Bus{
Manager: pluggable.NewManager(
bus.AllEvents,
),
}
}
func Reload() {
Manager = NewBus()
Manager.Initialize()
}
type Bus struct {
*pluggable.Manager
registered bool
}
func (b *Bus) LoadProviders() {
wd, _ := os.Getwd()
b.Manager.Autoload("agent-provider", "/system/providers", "/usr/local/system/providers", wd).Register()
}
func (b *Bus) HasRegisteredPlugins() bool {
return len(b.Plugins) > 0
}
func (b *Bus) Initialize() {
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)
} else {
if r.State != "" {
fmt.Println(fmt.Sprintf("[provider event: %s]", e), r.State)
}
}
})
}
b.registered = true
}