Files
pig-farm-controller/internal/config/config.go

145 lines
3.2 KiB
Go

// Package config 提供配置文件读取和解析功能
// 支持YAML格式的配置文件解析
// 包含服务器和数据库相关配置
package config
import (
"fmt"
"os"
"gopkg.in/yaml.v2"
)
// Config 代表应用的完整配置结构
type Config struct {
// Server 服务器配置
Server ServerConfig `yaml:"server"`
// Database 数据库配置
Database DatabaseConfig `yaml:"database"`
// WebSocket WebSocket配置
WebSocket WebSocketConfig `yaml:"websocket"`
// Heartbeat 心跳配置
Heartbeat HeartbeatConfig `yaml:"heartbeat"`
}
// ServerConfig 代表服务器配置
type ServerConfig struct {
// Host 服务器监听IP
Host string `yaml:"host"`
// Port 服务器监听端口
Port int `yaml:"port"`
// ReadTimeout 读取超时(秒)
ReadTimeout int `yaml:"read_timeout"`
// WriteTimeout 写入超时(秒)
WriteTimeout int `yaml:"write_timeout"`
// IdleTimeout 空闲超时(秒)
IdleTimeout int `yaml:"idle_timeout"`
}
// DatabaseConfig 代表数据库配置
type DatabaseConfig struct {
// Host 数据库主机地址
Host string `yaml:"host"`
// Port 数据库端口
Port int `yaml:"port"`
// Username 数据库用户名
Username string `yaml:"username"`
// Password 数据库密码
Password string `yaml:"password"`
// DBName 数据库名称
DBName string `yaml:"dbname"`
// SSLMode SSL模式
SSLMode string `yaml:"sslmode"`
// MaxOpenConns 最大开放连接数
MaxOpenConns int `yaml:"max_open_conns"`
// MaxIdleConns 最大空闲连接数
MaxIdleConns int `yaml:"max_idle_conns"`
// ConnMaxLifetime 连接最大生命周期(秒)
ConnMaxLifetime int `yaml:"conn_max_lifetime"`
}
// WebSocketConfig 代表WebSocket配置
type WebSocketConfig struct {
// Timeout WebSocket请求超时时间(秒)
Timeout int `yaml:"timeout"`
}
// HeartbeatConfig 代表心跳配置
type HeartbeatConfig struct {
// Interval 心跳间隔(秒)
Interval int `yaml:"interval"`
// Concurrency 请求并发数
Concurrency int `yaml:"concurrency"`
}
// NewConfig 创建并返回一个新的配置实例
func NewConfig() *Config {
return &Config{
WebSocket: WebSocketConfig{
Timeout: 5, // 默认5秒超时
},
Heartbeat: HeartbeatConfig{
Interval: 30, // 默认30秒心跳间隔
},
}
}
// Load 从指定路径加载配置文件
func (c *Config) Load(path string) error {
// 读取配置文件
data, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("配置文件读取失败: %v", err)
}
// 解析YAML配置
if err := yaml.Unmarshal(data, c); err != nil {
return fmt.Errorf("配置文件解析失败: %v", err)
}
return nil
}
// GetDatabaseConnectionString 获取数据库连接字符串
func (c *Config) GetDatabaseConnectionString() string {
// 构建PostgreSQL连接字符串
return fmt.Sprintf(
"user=%s password=%s dbname=%s host=%s port=%d sslmode=%s",
c.Database.Username,
c.Database.Password,
c.Database.DBName,
c.Database.Host,
c.Database.Port,
c.Database.SSLMode,
)
}
// GetWebSocketTimeout 获取WebSocket超时时间(秒)
func (c *Config) GetWebSocketTimeout() int {
if c.WebSocket.Timeout <= 0 {
return 5 // 默认5秒超时
}
return c.WebSocket.Timeout
}
// GetHeartbeatConfig 获取心跳配置
func (c *Config) GetHeartbeatConfig() HeartbeatConfig {
return c.Heartbeat
}