kis-flow/config/kis_func_config.go

99 lines
2.6 KiB
Go
Raw Normal View History

2023-12-31 15:26:53 +08:00
package config
2023-12-30 17:38:08 +08:00
import (
2024-01-09 17:30:58 +08:00
"errors"
2024-03-26 14:54:50 +08:00
"github.com/aceld/kis-flow/common"
"github.com/aceld/kis-flow/log"
2023-12-30 17:38:08 +08:00
)
// FParam 在当前Flow中Function定制固定配置参数类型
type FParam map[string]string
// KisSource 表示当前Function的业务源
type KisSource struct {
2024-03-01 16:29:07 +08:00
Name string `yaml:"name"` // 本层Function的数据源描述
Must []string `yaml:"must"` // source必传字段
2023-12-30 17:38:08 +08:00
}
// KisFuncOption 可选配置
type KisFuncOption struct {
2024-03-01 16:29:07 +08:00
CName string `yaml:"cname"` // 连接器Connector名称
RetryTimes int `yaml:"retry_times"` // 选填,Function调度重试(不包括正常调度)最大次数
RetryDuration int `yaml:"return_duration"` // 选填,Function调度每次重试最大时间间隔(单位:ms)
Params FParam `yaml:"default_params"` // 选填,在当前Flow中Function定制固定配置参数
2023-12-30 17:38:08 +08:00
}
2023-12-31 10:50:01 +08:00
// KisFuncConfig 一个KisFunction策略配置
2023-12-30 17:38:08 +08:00
type KisFuncConfig struct {
2024-01-09 17:30:58 +08:00
KisType string `yaml:"kistype"`
FName string `yaml:"fname"`
FMode string `yaml:"fmode"`
Source KisSource `yaml:"source"`
Option KisFuncOption `yaml:"option"`
connConf *KisConnConfig
2023-12-30 17:38:08 +08:00
}
// NewFuncConfig 创建一个Function策略配置对象, 用于描述一个KisFunction信息
func NewFuncConfig(
2024-01-03 10:16:54 +08:00
funcName string, mode common.KisMode,
2023-12-30 17:38:08 +08:00
source *KisSource, option *KisFuncOption) *KisFuncConfig {
config := new(KisFuncConfig)
2024-01-03 10:16:54 +08:00
config.FName = funcName
2023-12-30 17:38:08 +08:00
if source == nil {
2024-03-26 14:41:49 +08:00
defaultSource := KisSource{
Name: "unNamedSource",
}
source = &defaultSource
2024-04-07 22:39:21 +08:00
log.Logger().Info("funcName NewConfig source is nil, use default unNamed Source.", "funcName", funcName)
2023-12-30 17:38:08 +08:00
}
config.Source = *source
2024-01-03 10:16:54 +08:00
config.FMode = string(mode)
2023-12-30 17:38:08 +08:00
/*
// FunctionS 和 L 需要必传KisConnector参数,原因是S和L需要通过Connector进行建立流式关系
if mode == common.S || mode == common.L {
if option == nil {
2024-04-07 22:39:21 +08:00
log.Logger().Error("Funcion S/L need option->Cid\n")
return nil
} else if option.CName == "" {
2024-04-07 22:39:21 +08:00
log.Logger().Error("Funcion S/L need option->Cid\n")
return nil
}
2023-12-30 17:38:08 +08:00
}
*/
2023-12-30 17:38:08 +08:00
if option != nil {
config.Option = *option
}
return config
}
2024-01-09 17:30:58 +08:00
func (fConf *KisFuncConfig) AddConnConfig(cConf *KisConnConfig) error {
if cConf == nil {
return errors.New("KisConnConfig is nil")
}
// Function需要和Connector进行关联
fConf.connConf = cConf
// Connector需要和Function进行关联
_ = cConf.WithFunc(fConf)
// 更新Function配置中的CName
fConf.Option.CName = cConf.CName
2024-01-09 17:30:58 +08:00
return nil
}
func (fConf *KisFuncConfig) GetConnConfig() (*KisConnConfig, error) {
if fConf.connConf == nil {
return nil, errors.New("KisFuncConfig.connConf not set")
}
return fConf.connConf, nil
}