mirror of
https://github.com/woodchen-ink/proxy-go.git
synced 2025-07-18 16:41:54 +08:00
- Updated docker-compose.yml to include resource limits and health checks for the service. - Modified go.mod and go.sum to include the new dependency on golang.org/x/time. - Enhanced main.go to add new metrics routes for monitoring. - Updated config.json to include metrics configuration with password and token expiry. - Refactored internal/config to implement a ConfigManager for dynamic configuration loading. - Improved internal/handler to utilize a shared HTTP client and added metrics tracking for requests.
55 lines
896 B
Go
55 lines
896 B
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
type ConfigManager struct {
|
|
config atomic.Value
|
|
configPath string
|
|
}
|
|
|
|
func NewConfigManager(path string) *ConfigManager {
|
|
cm := &ConfigManager{configPath: path}
|
|
cm.loadConfig()
|
|
go cm.watchConfig()
|
|
return cm
|
|
}
|
|
|
|
func (cm *ConfigManager) watchConfig() {
|
|
ticker := time.NewTicker(30 * time.Second)
|
|
for range ticker.C {
|
|
cm.loadConfig()
|
|
}
|
|
}
|
|
|
|
func Load(path string) (*Config, error) {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var config Config
|
|
if err := json.Unmarshal(data, &config); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &config, nil
|
|
}
|
|
|
|
func (cm *ConfigManager) loadConfig() error {
|
|
config, err := Load(cm.configPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
cm.config.Store(config)
|
|
return nil
|
|
}
|
|
|
|
func (cm *ConfigManager) GetConfig() *Config {
|
|
return cm.config.Load().(*Config)
|
|
}
|