package config import ( "sig-pub/pkg/zlog" "github.com/redis/go-redis/v9" clientv3 "go.etcd.io/etcd/client/v3" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) type Configuration struct { // App map[string]any Grpc GrpcConfig Etcd clientv3.Config // Consul api.Config Consul ConsulConfig Database Database Tsdb TsdbConfig } type GrpcConfig struct { Log bool Address string MaxSendMsgSize string MaxRecvMsgSize string ReadBufferSize string WriteBufferSize string keepalive GrpcKeepalive } type GrpcKeepalive struct { IdleTimeout string ForceCloseWait string KeepAliveInterval string KeepAliveTimeout string MaxLifeTime string } type ConsulConfig struct { Address string } // ============== Gate ============== type GateConf struct { HttpAddr string WsAddr string } // ============== database ============== type Database struct { Mysql MysqlConfig Postgres PostgresConfig Clickhouse ClickhouseConfig Kvrocks redis.Options } type MysqlConfig struct { LogMode string // silent error warn info gorm.Config Mysql mysql.Config } func (conf MysqlConfig) NewGormDB() (db *gorm.DB, err error) { logLevel := logger.Silent switch conf.LogMode { default: zlog.Errorf("unknow mysql gorm logmode: %s", conf.LogMode) case "": case "silent": logLevel = logger.Silent case "error": logLevel = logger.Error case "warn": logLevel = logger.Warn case "info": logLevel = logger.Info } conf.Logger = logger.Default.LogMode(logLevel) db, err = gorm.Open(mysql.New(conf.Mysql), &conf) return } type PostgresConfig struct { LogMode string // silent error warn info gorm.Config Postgres postgres.Config } func (conf PostgresConfig) NewGormDB() (db *gorm.DB, err error) { logLevel := logger.Silent switch conf.LogMode { default: zlog.Errorf("unknow mysql gorm logmode: %s", conf.LogMode) case "": case "silent": logLevel = logger.Silent case "error": logLevel = logger.Error case "warn": logLevel = logger.Warn case "info": logLevel = logger.Info } conf.Logger = logger.Default.LogMode(logLevel) db, err = gorm.Open(postgres.New(conf.Postgres), &conf) return } type ClickhouseConfig struct { Logsql bool Addr string Database string Username string Password string DialTimeout int // second ReadTimeout int // second NotAutoMigrateTable bool DsnParams map[string]any } // ============== tsdb ============== type TsdbConfig struct { Active string Victoriametrics VictoriaMetricsConfig } type VictoriaMetricsConfig struct { Addr string } // ============== exchange ============== type OkxExchange struct { ApiKey string SecretKey string Passphrase string ReceiveBuffer int MarketSubscribeLimit int ConsumeBatch int // 订阅 channel 单次处理消息数量 ConsumeLater int // 毫秒,时间到达later或者数据累计到batch触发consume HttpProxy string }