mirror of
https://github.com/InazumaV/Ratte.git
synced 2026-02-04 04:30:09 +00:00
feat: use wire
This commit is contained in:
95
boot/node.go
Normal file
95
boot/node.go
Normal file
@@ -0,0 +1,95 @@
|
||||
package boot
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/InazumaV/Ratte-Interface/core"
|
||||
"github.com/InazumaV/Ratte-Interface/panel"
|
||||
"github.com/InazumaV/Ratte/conf"
|
||||
"github.com/InazumaV/Ratte/handler"
|
||||
"github.com/InazumaV/Ratte/trigger"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type NodeGroup struct {
|
||||
t []*trigger.Trigger
|
||||
h []*handler.Handler
|
||||
}
|
||||
|
||||
func (n NodeGroup) Start() error {
|
||||
for _, t := range n.t {
|
||||
err := t.Start()
|
||||
if err != nil {
|
||||
return fmt.Errorf("start trigger error: %w", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (n NodeGroup) Close() error {
|
||||
for _, t := range n.t {
|
||||
err := t.Close()
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln("Close trigger error")
|
||||
}
|
||||
}
|
||||
for _, h := range n.h {
|
||||
err := h.Close()
|
||||
if err != nil {
|
||||
log.WithError(err).Errorln("Close handler error")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func initNode(
|
||||
n []conf.Node,
|
||||
acme AcmeGroup,
|
||||
cores CoreGroup,
|
||||
panels PanelGroup) (*NodeGroup, error) {
|
||||
triggers := make([]*trigger.Trigger, 0, len(n))
|
||||
handlers := make([]*handler.Handler, 0, len(n))
|
||||
for _, nd := range n {
|
||||
var co core.Core
|
||||
if c, ok := cores[nd.Options.Core]; ok {
|
||||
co = c
|
||||
} else {
|
||||
return nil, fmt.Errorf("unknown core name: %s", nd.Options.Core)
|
||||
}
|
||||
var pl panel.Panel
|
||||
if p, ok := panels[nd.Options.Panel]; ok {
|
||||
pl = p
|
||||
} else {
|
||||
return nil, fmt.Errorf("")
|
||||
}
|
||||
ac, e := acme[nd.Options.Acme]
|
||||
if !e {
|
||||
return nil, fmt.Errorf("unknown acme name: %s", nd.Options.Acme)
|
||||
}
|
||||
h := handler.New(co, pl, nd.Name, ac, log.WithFields(
|
||||
map[string]interface{}{
|
||||
"node": nd.Name,
|
||||
"service": "handler",
|
||||
},
|
||||
), &nd.Options)
|
||||
handlers = append(handlers, h)
|
||||
tr, err := trigger.New(log.WithFields(
|
||||
map[string]interface{}{
|
||||
"node": nd.Name,
|
||||
"service": "trigger",
|
||||
},
|
||||
), &nd.Trigger, h, pl, &nd.Remote)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("new trigger error: %w", err)
|
||||
}
|
||||
triggers = append(triggers, tr)
|
||||
err = tr.Start()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("start trigger error: %w", err)
|
||||
}
|
||||
}
|
||||
return &NodeGroup{
|
||||
t: triggers,
|
||||
h: handlers,
|
||||
},
|
||||
nil
|
||||
}
|
||||
Reference in New Issue
Block a user