Files
godoxy-yusing/internal/types/loadbalancer.go
yusing 35a3e3fef6 refactor(api): restructured API for type safety, maintainability and docs generation
- These changes makes the API incombatible with previous versions
- Added new types for error handling, success responses, and health checks.
- Updated health check logic to utilize the new types for better clarity and structure.
- Refactored existing handlers to improve response consistency and error handling.
- Updated Makefile to include a new target for generating API types from Swagger.
- Updated "new agent" API to respond an encrypted cert pair
2025-08-16 13:04:05 +08:00

55 lines
1.3 KiB
Go

package types
import (
"net/http"
nettypes "github.com/yusing/go-proxy/internal/net/types"
"github.com/yusing/go-proxy/internal/utils/strutils"
)
type (
LoadBalancerConfig struct {
Link string `json:"link"`
Mode LoadBalancerMode `json:"mode"`
Weight int `json:"weight"`
Options map[string]any `json:"options,omitempty"`
} // @name LoadBalancerConfig
LoadBalancerMode string // @name LoadBalancerMode
LoadBalancerServer interface {
http.Handler
HealthMonitor
Name() string
Key() string
URL() *nettypes.URL
Weight() int
SetWeight(weight int)
TryWake() error
}
LoadBalancerServers []LoadBalancerServer
)
const (
LoadbalanceModeUnset LoadBalancerMode = ""
LoadbalanceModeRoundRobin LoadBalancerMode = "roundrobin"
LoadbalanceModeLeastConn LoadBalancerMode = "leastconn"
LoadbalanceModeIPHash LoadBalancerMode = "iphash"
)
func (mode *LoadBalancerMode) ValidateUpdate() bool {
switch strutils.ToLowerNoSnake(string(*mode)) {
case "":
return true
case string(LoadbalanceModeRoundRobin):
*mode = LoadbalanceModeRoundRobin
return true
case string(LoadbalanceModeLeastConn):
*mode = LoadbalanceModeLeastConn
return true
case string(LoadbalanceModeIPHash):
*mode = LoadbalanceModeIPHash
return true
}
*mode = LoadbalanceModeRoundRobin
return false
}