diff --git a/boot/acme.go b/boot/acme.go new file mode 100644 index 0000000..e016ef1 --- /dev/null +++ b/boot/acme.go @@ -0,0 +1,21 @@ +package boot + +import ( + "github.com/InazumaV/Ratte/acme" + "github.com/InazumaV/Ratte/conf" + log "github.com/sirupsen/logrus" +) + +type AcmeGroup map[string]*acme.Acme + +func initAcme(a []conf.ACME) AcmeGroup { + acmes := make(AcmeGroup, len(a)) + for _, a := range a { + ac, err := acme.NewAcme(&a) + if err != nil { + log.WithError(err).Fatal("New acme failed") + } + acmes[a.Name] = ac + } + return acmes +} diff --git a/boot/boot.go b/boot/boot.go new file mode 100644 index 0000000..11fad86 --- /dev/null +++ b/boot/boot.go @@ -0,0 +1,50 @@ +//go:build wireinject + +package boot + +import ( + "github.com/InazumaV/Ratte/conf" + "github.com/google/wire" +) + +var preSet = wire.NewSet( + wire.FieldsOf(new(*conf.Conf), "ACME", "Plugin"), + wire.FieldsOf(new(conf.Plugins), "Core", "Panel"), + initAcme, + initCores, + initPanels, +) +var mainSet = wire.NewSet( + wire.FieldsOf(new(*conf.Conf), "Node"), + initNode, +) + +type Boot struct { + Acmes AcmeGroup + Cores CoreGroup + Panels PanelGroup + Node *NodeGroup +} + +func (b *Boot) Start() error { + if err := b.Node.Start(); err != nil { + return err + } + return nil +} + +func (b *Boot) Close() error { + b.Node.Close() + b.Cores.Close() + b.Panels.Close() + return nil +} + +func InitBoot(c *conf.Conf) (*Boot, error) { + wire.Build( + preSet, + mainSet, + wire.Struct(new(Boot), "*"), + ) + return nil, nil +} diff --git a/boot/core.go b/boot/core.go new file mode 100644 index 0000000..dbcd55f --- /dev/null +++ b/boot/core.go @@ -0,0 +1,40 @@ +package boot + +import ( + "fmt" + "github.com/InazumaV/Ratte-Interface/core" + "github.com/InazumaV/Ratte/conf" + "os/exec" +) + +type CoreGroup map[string]*core.PluginClient + +func (c CoreGroup) Get(name string) *core.PluginClient { + if co, ok := c[name]; ok { + return co + } + return nil +} + +func (c CoreGroup) Close() { + for _, co := range c { + co.Close() + } +} + +func initCores(cc []conf.CorePlugin) (CoreGroup, error) { + cores := make(CoreGroup, len(cc)) + for _, co := range cc { + c, err := core.NewClient(nil, exec.Command(co.Path)) + if err != nil { + return nil, fmt.Errorf("new core error: %w", err) + } + err = c.Start(co.DataPath, co.Config) + if err != nil { + return nil, fmt.Errorf("start core error: %w", err) + } + cores[co.Name] = c + break + } + return cores, nil +} diff --git a/boot/node.go b/boot/node.go new file mode 100644 index 0000000..c5a2aee --- /dev/null +++ b/boot/node.go @@ -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 +} diff --git a/boot/panel.go b/boot/panel.go new file mode 100644 index 0000000..6027036 --- /dev/null +++ b/boot/panel.go @@ -0,0 +1,40 @@ +package boot + +import ( + "fmt" + "github.com/InazumaV/Ratte-Interface/panel" + "github.com/InazumaV/Ratte/conf" + log "github.com/sirupsen/logrus" + "os/exec" +) + +type PanelGroup map[string]*panel.PluginClient + +func (p *PanelGroup) Get(name string) *panel.PluginClient { + if pl, ok := (*p)[name]; ok { + return pl + } + return nil +} + +func (p *PanelGroup) Close() error { + for _, pl := range *p { + err := pl.Close() + if err != nil { + log.WithError(err).Warn() + } + } + return nil +} + +func initPanels(panelsP []conf.Plugin) (PanelGroup, error) { + panels := make(PanelGroup, len(panelsP)) + for _, p := range panelsP { + pn, err := panel.NewClient(nil, exec.Command(p.Path)) + if err != nil { + return nil, fmt.Errorf("new panel error: %w", err) + } + panels[p.Name] = pn + } + return panels, nil +} diff --git a/boot/wire_gen.go b/boot/wire_gen.go new file mode 100644 index 0000000..569b588 --- /dev/null +++ b/boot/wire_gen.go @@ -0,0 +1,72 @@ +// Code generated by Wire. DO NOT EDIT. + +//go:generate go run -mod=mod github.com/google/wire/cmd/wire +//go:build !wireinject +// +build !wireinject + +package boot + +import ( + "github.com/InazumaV/Ratte/conf" + "github.com/google/wire" +) + +// Injectors from boot.go: + +func InitBoot(c *conf.Conf) (*Boot, error) { + v := c.Acme + acmeGroup := initAcme(v) + plugins := c.Plugin + v2 := plugins.Core + coreGroup, err := initCores(v2) + if err != nil { + return nil, err + } + v3 := plugins.Panel + panelGroup, err := initPanels(v3) + if err != nil { + return nil, err + } + v4 := c.Node + nodeGroup, err := initNode(v4, acmeGroup, coreGroup, panelGroup) + if err != nil { + return nil, err + } + boot := &Boot{ + Acmes: acmeGroup, + Cores: coreGroup, + Panels: panelGroup, + Node: nodeGroup, + } + return boot, nil +} + +// boot.go: + +var preSet = wire.NewSet(wire.FieldsOf(new(*conf.Conf), "ACME", "Plugin"), wire.FieldsOf(new(conf.Plugins), "Core", "Panel"), initAcme, + initCores, + initPanels, +) + +var mainSet = wire.NewSet(wire.FieldsOf(new(*conf.Conf), "Node"), initNode) + +type Boot struct { + Acmes AcmeGroup + Cores CoreGroup + Panels PanelGroup + Node *NodeGroup +} + +func (b *Boot) Start() error { + if err := b.Node.Start(); err != nil { + return err + } + return nil +} + +func (b *Boot) Close() error { + b.Node.Close() + b.Cores.Close() + b.Panels.Close() + return nil +} diff --git a/cmd/ratte/run.go b/cmd/ratte/run.go index b56b832..23c7b01 100644 --- a/cmd/ratte/run.go +++ b/cmd/ratte/run.go @@ -1,17 +1,11 @@ package main import ( - "fmt" - "github.com/InazumaV/Ratte-Interface/core" - "github.com/InazumaV/Ratte-Interface/panel" - "github.com/InazumaV/Ratte/acme" + "github.com/InazumaV/Ratte/boot" "github.com/InazumaV/Ratte/conf" - "github.com/InazumaV/Ratte/handler" - "github.com/InazumaV/Ratte/trigger" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "os" - "os/exec" "os/signal" "runtime" "syscall" @@ -32,14 +26,6 @@ func init() { command.AddCommand(&runCommand) } -var ( - cores map[string]*core.PluginClient - panels map[string]*panel.PluginClient - acmes map[string]*acme.Acme - handlers []*handler.Handler - triggers []*trigger.Trigger -) - func runHandle(_ *cobra.Command, _ []string) { c := conf.New(config) log.WithField("path", config).Info("Load config...") @@ -49,74 +35,36 @@ func runHandle(_ *cobra.Command, _ []string) { } log.WithField("path", config).Info("Loaded.") - log.Info("Init core plugin...") - err = startCores(c.Plugin.Core, c.Core) + log.Info("Init...") + b, err := boot.InitBoot(c) if err != nil { - log.WithError(err).Fatal("Init core plugin failed") + log.WithError(err).Fatal("Init failed") } - log.Info("Done.") + log.Info("Init done.") - log.Info("Init panel plugin...") - err = startPanel(c.Plugin.Panel) + log.Info("Start...") + err = b.Start() if err != nil { - log.WithError(err).Fatal("Init panel plugin failed") + log.WithError(err).Fatal("Start failed") } - log.Info("Done.") - - log.Info("Init acme...") - // new acme - acmes = make(map[string]*acme.Acme) - for _, a := range c.Acme { - ac, err := acme.NewAcme(&a) - if err != nil { - log.WithError(err).Fatal("New acme failed") - } - acmes[a.Name] = ac - } - log.Info("Done.") - - log.Info("Starting...") - // new node - err = startTriggerAndHandler(c.Node) - if err != nil { - log.WithError(err).Fatal("Start trigger and handler failed") - } - log.Info("Started.") - c.SetErrorHandler(func(err error) { log.WithFields(map[string]interface{}{ "error": err, "Services": "ConfWatcher", - }).Error("") + }).Error("watch config error") }) c.SetEventHandler(func(event uint, target ...string) { l := log.WithFields(map[string]interface{}{ "Service": "ConfWatcher", }) l.Info("Config changed, restart...") - err := closeTriggerAndHandler() + b, err := boot.InitBoot(c) if err != nil { - log.WithError(err).Fatal("Close trigger and handler failed") + l.WithError(err).Fatal("Init boot failed") } - err = closeCore() + err = b.Start() if err != nil { - log.WithError(err).Fatal("Close core failed") - } - err = closePanel() - if err != nil { - log.WithError(err).Fatal("Close panel failed") - } - err = startCores(c.Plugin.Core, c.Core) - if err != nil { - log.WithError(err).Fatal("Start core failed") - } - err = startPanel(c.Plugin.Panel) - if err != nil { - log.WithError(err).Fatal("Start panel failed") - } - err = startTriggerAndHandler(c.Node) - if err != nil { - log.WithError(err).Fatal("Start trigger and handler failed") + l.WithError(err).Fatal("Start boot failed") } l.Info("Restart Done.") }) @@ -124,145 +72,14 @@ func runHandle(_ *cobra.Command, _ []string) { if err != nil { log.WithError(err).Fatal("Watch config failed") } + log.Info("Start done.") runtime.GC() - sig := make(chan os.Signal, 0) + sig := make(chan os.Signal) signal.Notify(sig, syscall.SIGINT, syscall.SIGKILL, syscall.SIGTERM) <-sig // clear log.Info("Shutting down...") - err = closeTriggerAndHandler() - if err != nil { - log.WithError(err).Fatal("Close trigger and handler failed") - } - err = closeCore() - if err != nil { - log.WithError(err).Fatal("Close core failed") - } - err = closePanel() - if err != nil { - log.WithError(err).Fatal("Close panel failed") - } + b.Close() log.Info("Done.") } - -func startCores(coresP []conf.Plugin, cc []conf.Core) error { - // new cores - cores = make(map[string]*core.PluginClient, len(coresP)) - for _, ccV := range cc { - for _, co := range coresP { - if co.Name != ccV.Type { - continue - } - c, err := core.NewClient(nil, exec.Command(co.Path)) - if err != nil { - return fmt.Errorf("new core error: %w", err) - } - err = c.Start(ccV.DataPath, ccV.Config) - if err != nil { - return fmt.Errorf("start core error: %w", err) - } - cores[co.Name] = c - break - } - } - return nil -} - -func closeCore() error { - for _, c := range cores { - err := c.Close() - if err != nil { - return err - } - } - return nil -} - -func startPanel(panelsP []conf.Plugin) error { - panels = make(map[string]*panel.PluginClient, len(panelsP)) - for _, p := range panelsP { - pn, err := panel.NewClient(nil, exec.Command(p.Path)) - if err != nil { - return fmt.Errorf("new panel error: %w", err) - } - panels[p.Name] = pn - } - return nil -} - -func closePanel() error { - for _, p := range panels { - err := p.Close() - if err != nil { - return err - } - } - return nil -} - -func startTriggerAndHandler(c []conf.Node) error { - triggers = make([]*trigger.Trigger, 0, len(c)) - handlers = make([]*handler.Handler, 0, len(c)) - for _, nd := range c { - var co core.Core - if c, ok := cores[nd.Options.Core]; ok { - co = c - } else { - return 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 fmt.Errorf("") - } - var ac *acme.Acme - if len(acmes) != 0 { - if a, ok := acmes[nd.Options.Acme]; ok { - ac = a - } else { - return 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.NewTrigger(log.WithFields( - map[string]interface{}{ - "node": nd.Name, - "service": "trigger", - }, - ), &nd.Trigger, h, pl, &nd.Remote) - if err != nil { - return fmt.Errorf("new trigger error: %w", err) - } - triggers = append(triggers, tr) - err = tr.Start() - if err != nil { - return fmt.Errorf("start trigger error: %w", err) - } - } - return nil -} - -func closeTriggerAndHandler() error { - for _, t := range triggers { - err := t.Close() - if err != nil { - return fmt.Errorf("close trigger error: %w", err) - } - } - for _, h := range handlers { - err := h.Close() - if err != nil { - return fmt.Errorf("close handler error: %w", err) - } - } - return nil -} diff --git a/common/starter/starter.go b/common/starter/starter.go new file mode 100644 index 0000000..02bc8a1 --- /dev/null +++ b/common/starter/starter.go @@ -0,0 +1,48 @@ +package starter + +import "github.com/hashicorp/go-multierror" + +type Starter interface { + Start() error + Close() error +} + +type Group struct { + Starters []Starter +} + +func NewGroup(starters ...Starter) *Group { + return &Group{ + Starters: starters, + } +} + +func (g *Group) Add(starter Starter) { + g.Starters = append(g.Starters, starter) +} + +func (g *Group) Clear(len int) { + g.Starters = nil +} + +func (g *Group) Start() error { + for _, starter := range g.Starters { + if err := starter.Start(); err != nil { + return err + } + } + return nil +} + +func (g *Group) Close() error { + var errs error + for i := len(g.Starters) - 1; i >= 0; i-- { + if err := g.Starters[i].Close(); err != nil { + errs = multierror.Append(errs, err) + } + } + if errs != nil { + return errs + } + return nil +} diff --git a/conf/conf.go b/conf/conf.go index 5fb2226..c61e21f 100644 --- a/conf/conf.go +++ b/conf/conf.go @@ -22,7 +22,6 @@ type Conf struct { Log Log `json:"Log,omitempty"` Watcher Watcher `json:"Watcher,omitempty"` Plugin Plugins `json:"Plugin,omitempty"` // Only accept from file path - Core []Core `json:"Core,omitempty"` Acme []ACME `json:"Acme,omitempty"` Node []Node `json:"Node,omitempty"` } @@ -35,7 +34,6 @@ func New(path string) *Conf { WatchRemoteConfig: true, }, Log: newLog(), - Core: make([]Core, 0), Acme: make([]ACME, 0), Plugin: Plugins{}, Node: make([]Node, 0), diff --git a/conf/node.go b/conf/node.go index a813d84..45b395e 100644 --- a/conf/node.go +++ b/conf/node.go @@ -23,7 +23,7 @@ type Remote struct { } type Options struct { - Core string `json:"Core"` + Core string `json:"CorePlugin"` Panel string `json:"Panel"` Acme string `json:"Acme"` Cert Cert `json:"Cert"` diff --git a/conf/plugin.go b/conf/plugin.go index 388877e..95d6b21 100644 --- a/conf/plugin.go +++ b/conf/plugin.go @@ -5,14 +5,14 @@ import ( "github.com/goccy/go-json" ) -type Core struct { - Type string `json:"type"` +type CorePlugin struct { DataPath string `json:"DataPath,omitempty"` Config json.RawMessage `json:"Config,omitempty"` + Plugin } -type _core Core +type _core CorePlugin -func (c *Core) UnmarshalJSON(data []byte) error { +func (c *CorePlugin) UnmarshalJSON(data []byte) error { err := json.Unmarshal(data, (*_core)(c)) if err != nil { return fmt.Errorf("failed to unmarshal core: %v", err) @@ -20,12 +20,17 @@ func (c *Core) UnmarshalJSON(data []byte) error { if len(c.Config) == 0 { c.Config = data } + + err = json.Unmarshal(c.Config, &c.Plugin) + if err != nil { + return fmt.Errorf("failed to unmarshal core config: %v", err) + } return nil } type Plugins struct { - Core []Plugin `json:"core"` - Panel []Plugin `json:"panel"` + Core []CorePlugin `json:"core"` + Panel []Plugin `json:"panel"` } type Plugin struct { diff --git a/go.mod b/go.mod index c944bd7..f8d6b5c 100644 --- a/go.mod +++ b/go.mod @@ -6,10 +6,13 @@ toolchain go1.24.2 require ( github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79 - github.com/InazumaV/Ratte-Interface v0.0.0-20250505045058-84e4bf9f70e4 + github.com/InazumaV/Ratte-Interface v0.0.0-20250505045848-a0068c2a9be9 + github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919 github.com/fsnotify/fsnotify v1.7.0 github.com/go-acme/lego/v4 v4.18.0 github.com/goccy/go-json v0.10.3 + github.com/google/wire v0.6.0 + github.com/hashicorp/go-multierror v1.1.1 github.com/orcaman/concurrent-map/v2 v2.0.1 github.com/robfig/cron/v3 v3.0.1 github.com/sirupsen/logrus v1.9.3 @@ -37,7 +40,6 @@ require ( github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect - github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919 // indirect github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect github.com/aliyun/alibaba-cloud-sdk-go v1.62.712 // indirect @@ -100,7 +102,6 @@ require ( github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect diff --git a/go.sum b/go.sum index c95ad69..66dde28 100644 --- a/go.sum +++ b/go.sum @@ -61,18 +61,10 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011040-52d1e89f5633 h1:qkKD34l8OoRQIu0eQA0ddYgFIt7qtuhbUT4aNOJiY8Y= -github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011040-52d1e89f5633/go.mod h1:ny/t4EsGaUHQMgCl99bAQ2WdXcg2k3exlaE9HxvU8aA= -github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011803-b1920b6e161d h1:rZ8GsMw8sn9Ip9DdAkUPm/iWuoLwAMeWQg2IgWFKeiU= -github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420011803-b1920b6e161d/go.mod h1:ny/t4EsGaUHQMgCl99bAQ2WdXcg2k3exlaE9HxvU8aA= -github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420015806-459021c808f7 h1:+Lq4O0LMR00QYlmDwdGr/BToRoFEaAtpFqMG5XzyXkQ= -github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420015806-459021c808f7/go.mod h1:GGt1mWh9rdkPD9jT/iKM170Oqk1xm8s1ujH+QIW1nGk= github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79 h1:PruEu6rjkVS0k877MzT5DdHxYdxoRtfotrr/e5XNofA= github.com/InazumaV/Ratte-Core-Xray v0.0.0-20250420021044-42b0d35bcd79/go.mod h1:GGt1mWh9rdkPD9jT/iKM170Oqk1xm8s1ujH+QIW1nGk= -github.com/InazumaV/Ratte-Interface v0.0.0-20250420010428-f7d66abcc4f6 h1:JCFwQG45pQAo33l3/msmeo9v0/XWQCNofCqubAopWto= -github.com/InazumaV/Ratte-Interface v0.0.0-20250420010428-f7d66abcc4f6/go.mod h1:UxqxslbpT8Q4qMldSNI6VCX5WFXWDbvE4fXpymp73kA= -github.com/InazumaV/Ratte-Interface v0.0.0-20250505045058-84e4bf9f70e4 h1:0xrpixO7Ux3EAHqitA8JgxOqM28I7RGyXa3+yEacXCk= -github.com/InazumaV/Ratte-Interface v0.0.0-20250505045058-84e4bf9f70e4/go.mod h1:UxqxslbpT8Q4qMldSNI6VCX5WFXWDbvE4fXpymp73kA= +github.com/InazumaV/Ratte-Interface v0.0.0-20250505045848-a0068c2a9be9 h1:+adxGP0iY0EYP8iuva/q0IUgUSwIBEz8ZXWVuW8PTTA= +github.com/InazumaV/Ratte-Interface v0.0.0-20250505045848-a0068c2a9be9/go.mod h1:UxqxslbpT8Q4qMldSNI6VCX5WFXWDbvE4fXpymp73kA= github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919 h1:+Fp5s8BVpk3vQC7N/x3a6sTRZNSU8Jd8G4MenyLnK3g= github.com/InazumaV/Ratte-Panel-V2b v0.0.0-20250420013203-72f8abe3e919/go.mod h1:5EkRRTlqZqG3rp3aP6QiPlrPJKpWtwt5gBtJduFv35E= github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0 h1:Wo41lDOevRJSGpevP+8Pk5bANX7fJacO2w04aqLiC5I= @@ -324,11 +316,14 @@ github.com/google/pprof v0.0.0-20240528025155-186aa0362fba/go.mod h1:K1liHPHnj73 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI= +github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -805,8 +800,10 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -838,6 +835,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -870,7 +869,9 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -890,6 +891,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -945,8 +948,10 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -954,8 +959,10 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1007,6 +1014,8 @@ golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/trigger/trigger.go b/trigger/trigger.go index b457475..cb5a86c 100644 --- a/trigger/trigger.go +++ b/trigger/trigger.go @@ -21,7 +21,7 @@ type Trigger struct { order chan int } -func NewTrigger( +func New( l *logrus.Entry, tc *conf.Trigger, h *handler.Handler,