diff --git a/module/log/iml.go b/module/log/iml.go index ded0a013..96a8daee 100644 --- a/module/log/iml.go +++ b/module/log/iml.go @@ -85,7 +85,7 @@ func (i *imlLogModule) Save(ctx context.Context, driver string, input *log_dto.S cfg = &tmp } return i.transaction.Transaction(ctx, func(txCtx context.Context) error { - err := i.service.UpdateLogSource(ctx, driver, &log.Save{ + err := i.service.UpdateLogSource(txCtx, driver, &log.Save{ ID: input.ID, Cluster: &input.Cluster, Config: cfg, @@ -93,7 +93,7 @@ func (i *imlLogModule) Save(ctx context.Context, driver string, input *log_dto.S if err != nil { return err } - info, err := i.service.GetLogSource(ctx, driver) + info, err := i.service.GetLogSource(txCtx, driver) if err != nil { return err } @@ -102,10 +102,11 @@ func (i *imlLogModule) Save(ctx context.Context, driver string, input *log_dto.S return err } - client, err := i.clusterService.GatewayClient(ctx, input.Cluster) + client, err := i.clusterService.GatewayClient(txCtx, input.Cluster) if err != nil { return err } + defer client.Close(txCtx) dynamicClient, err := client.Dynamic(driver) if err != nil { return err @@ -118,7 +119,7 @@ func (i *imlLogModule) Save(ctx context.Context, driver string, input *log_dto.S for k, v := range c { attr[k] = v } - err = dynamicClient.Online(ctx, &gateway.DynamicRelease{ + err = dynamicClient.Online(txCtx, &gateway.DynamicRelease{ BasicItem: &gateway.BasicItem{ ID: driver, Description: "collect access log", @@ -159,3 +160,53 @@ func (i *imlLogModule) Get(ctx context.Context, driver string) (*log_dto.LogSour UpdateAt: auto.TimeLabel(info.UpdateAt), }, nil } + +func (i *imlLogModule) initGateway(ctx context.Context, clusterId string, clientDriver gateway.IClientDriver) error { + drivers := log_driver.Drivers() + if len(drivers) < 1 { + return nil + } + + for _, driver := range drivers { + factory, has := log_driver.GetFactory(driver) + if !has { + continue + } + info, err := i.service.GetLogSource(ctx, driver) + if err != nil { + continue + } + d, c, err := factory.Create(info.Config) + if err != nil { + continue + } + + dynamicClient, err := clientDriver.Dynamic(driver) + if err != nil { + continue + } + attr := make(map[string]interface{}) + attr["driver"] = driver + attr["formatter"] = logFormatter + attr["labels"] = labels + attr["method"] = "POST" + for k, v := range c { + attr[k] = v + } + err = dynamicClient.Online(ctx, &gateway.DynamicRelease{ + BasicItem: &gateway.BasicItem{ + ID: driver, + Description: "collect access log", + Version: time.Now().Format("20060102150405"), + Resource: gateway.ProfessionOutput, + }, + Attr: attr, + }) + if err != nil { + continue + } + log_driver.SetDriver(driver, d) + } + + return nil +} diff --git a/module/log/module.go b/module/log/module.go index 548e3db3..bdafdc0c 100644 --- a/module/log/module.go +++ b/module/log/module.go @@ -6,6 +6,7 @@ import ( "github.com/eolinker/go-common/autowire" + "github.com/APIParkLab/APIPark/gateway" log_dto "github.com/APIParkLab/APIPark/module/log/dto" ) @@ -15,7 +16,11 @@ type ILogModule interface { } func init() { + logModule := new(imlLogModule) + autowire.Auto[ILogModule](func() reflect.Value { - return reflect.ValueOf(new(imlLogModule)) + + gateway.RegisterInitHandleFunc(logModule.initGateway) + return reflect.ValueOf(logModule) }) } diff --git a/module/strategy/iml.go b/module/strategy/iml.go index c0b1ec84..b36b9511 100644 --- a/module/strategy/iml.go +++ b/module/strategy/iml.go @@ -359,3 +359,36 @@ func (i *imlStrategyModule) Delete(ctx context.Context, id string) error { } return i.strategyService.SortDelete(ctx, id) } + +func (i *imlStrategyModule) initGateway(ctx context.Context, clusterId string, clientDriver gateway.IClientDriver) error { + commits, err := i.strategyService.ListLatestStrategyCommit(ctx, strategy_dto.ScopeGlobal, "") + if err != nil { + return err + } + publishStrategies := make([]*eosc.Base[gateway.StrategyRelease], 0, len(commits)) + for _, c := range commits { + l := c.Data + if l.IsDelete { + err = i.strategyService.Delete(ctx, l.Id) + if err != nil { + return err + } + } + d, has := strategy_driver.GetDriver(l.Driver) + if !has { + continue + } + publishStrategies = append(publishStrategies, d.ToRelease(strategy_dto.ToStrategy(&strategy.Strategy{ + Id: l.Id, + Name: l.Name, + Priority: l.Priority, + Filters: l.Filters, + Config: l.Config, + Driver: l.Driver, + IsStop: l.IsStop, + IsDelete: l.IsDelete, + }), nil, 5000)) + } + + return clientDriver.Strategy().Online(ctx, publishStrategies...) +} diff --git a/module/strategy/module.go b/module/strategy/module.go index c716f9c0..1dffecae 100644 --- a/module/strategy/module.go +++ b/module/strategy/module.go @@ -5,6 +5,8 @@ import ( "reflect" "time" + "github.com/APIParkLab/APIPark/gateway" + "github.com/eolinker/go-common/autowire" _ "github.com/APIParkLab/APIPark/module/strategy/driver/data-masking" @@ -32,6 +34,7 @@ type IStrategyModule interface { func init() { strategyModule := new(imlStrategyModule) autowire.Auto[IStrategyModule](func() reflect.Value { + gateway.RegisterInitHandleFunc(strategyModule.initGateway) return reflect.ValueOf(strategyModule) }) } diff --git a/service/log/iml.go b/service/log/iml.go index e0ff4b56..9943a15a 100644 --- a/service/log/iml.go +++ b/service/log/iml.go @@ -25,23 +25,7 @@ type imlLogService struct { } func (i *imlLogService) OnComplete() { - drivers := log_driver.Drivers() - for _, d := range drivers { - factory, has := log_driver.GetFactory(d) - if !has { - continue - } - s, err := i.GetLogSource(context.Background(), d) - if err != nil { - continue - } - driver, _, err := factory.Create(s.Config) - if err != nil { - continue - } - log_driver.SetDriver(d, driver) - } } func (i *imlLogService) UpdateLogSource(ctx context.Context, driver string, input *Save) error { @@ -80,6 +64,11 @@ func (i *imlLogService) UpdateLogSource(ctx context.Context, driver string, inpu s.UpdateAt = time.Now() } + err = i.store.Save(ctx, s) + if err != nil { + return err + } + return nil }