perubahan
This commit is contained in:
@@ -23,6 +23,7 @@ type Config struct {
|
||||
Bpjs BpjsConfig
|
||||
SatuSehat SatuSehatConfig
|
||||
Swagger SwaggerConfig
|
||||
WebSocket WebSocketConfig // Tambahkan ini
|
||||
Validator *validator.Validate
|
||||
}
|
||||
|
||||
@@ -90,6 +91,38 @@ type SatuSehatConfig struct {
|
||||
Timeout time.Duration `json:"timeout"`
|
||||
}
|
||||
|
||||
type WebSocketConfig struct {
|
||||
// Timeout configurations
|
||||
ReadTimeout time.Duration `json:"read_timeout"`
|
||||
WriteTimeout time.Duration `json:"write_timeout"`
|
||||
PingInterval time.Duration `json:"ping_interval"`
|
||||
PongTimeout time.Duration `json:"pong_timeout"`
|
||||
HandshakeTimeout time.Duration `json:"handshake_timeout"`
|
||||
|
||||
// Buffer sizes
|
||||
ReadBufferSize int `json:"read_buffer_size"`
|
||||
WriteBufferSize int `json:"write_buffer_size"`
|
||||
ChannelBufferSize int `json:"channel_buffer_size"`
|
||||
MessageQueueSize int `json:"message_queue_size"`
|
||||
|
||||
// Connection limits
|
||||
MaxMessageSize int `json:"max_message_size"`
|
||||
QueueWorkers int `json:"queue_workers"`
|
||||
|
||||
// Monitoring
|
||||
ActivityLogSize int `json:"activity_log_size"`
|
||||
CleanupInterval time.Duration `json:"cleanup_interval"`
|
||||
InactiveTimeout time.Duration `json:"inactive_timeout"`
|
||||
|
||||
// Server info
|
||||
ServerID string `json:"server_id"`
|
||||
|
||||
// Features
|
||||
EnableCompression bool `json:"enable_compression"`
|
||||
EnableMetrics bool `json:"enable_metrics"`
|
||||
EnableMonitoring bool `json:"enable_monitoring"`
|
||||
}
|
||||
|
||||
// SetHeader generates required headers for BPJS VClaim API
|
||||
// func (cfg BpjsConfig) SetHeader() (string, string, string, string, string) {
|
||||
// timenow := time.Now().UTC()
|
||||
@@ -150,18 +183,23 @@ func (cfg ConfigBpjs) SetHeader() (string, string, string, string, string) {
|
||||
|
||||
func LoadConfig() *Config {
|
||||
config := &Config{
|
||||
// Configuration for the server
|
||||
Server: ServerConfig{
|
||||
Port: getEnvAsInt("PORT", 8080),
|
||||
Mode: getEnv("GIN_MODE", "debug"),
|
||||
},
|
||||
Databases: make(map[string]DatabaseConfig),
|
||||
// Configuration for the database
|
||||
Databases: make(map[string]DatabaseConfig),
|
||||
// Configuration for read replicas
|
||||
ReadReplicas: make(map[string][]DatabaseConfig),
|
||||
// Configuration for Keycloak authentication and authorization
|
||||
Keycloak: KeycloakConfig{
|
||||
Issuer: getEnv("KEYCLOAK_ISSUER", "https://keycloak.example.com/auth/realms/yourrealm"),
|
||||
Audience: getEnv("KEYCLOAK_AUDIENCE", "your-client-id"),
|
||||
JwksURL: getEnv("KEYCLOAK_JWKS_URL", "https://keycloak.example.com/auth/realms/yourrealm/protocol/openid-connect/certs"),
|
||||
Enabled: getEnvAsBool("KEYCLOAK_ENABLED", true),
|
||||
},
|
||||
// Configuration for BPJS service bridging API
|
||||
Bpjs: BpjsConfig{
|
||||
BaseURL: getEnv("BPJS_BASEURL", "https://apijkn.bpjs-kesehatan.go.id"),
|
||||
ConsID: getEnv("BPJS_CONSID", ""),
|
||||
@@ -169,6 +207,7 @@ func LoadConfig() *Config {
|
||||
SecretKey: getEnv("BPJS_SECRETKEY", ""),
|
||||
Timeout: parseDuration(getEnv("BPJS_TIMEOUT", "30s")),
|
||||
},
|
||||
// Configuration for Satu Sehat service bridging API
|
||||
SatuSehat: SatuSehatConfig{
|
||||
OrgID: getEnv("BRIDGING_SATUSEHAT_ORG_ID", ""),
|
||||
FasyakesID: getEnv("BRIDGING_SATUSEHAT_FASYAKES_ID", ""),
|
||||
@@ -180,6 +219,39 @@ func LoadConfig() *Config {
|
||||
KFAURL: getEnv("BRIDGING_SATUSEHAT_KFA_URL", "https://api-satusehat.kemkes.go.id/kfa-v2"),
|
||||
Timeout: parseDuration(getEnv("BRIDGING_SATUSEHAT_TIMEOUT", "30s")),
|
||||
},
|
||||
// Configuration for WebSocket server
|
||||
WebSocket: WebSocketConfig{ // Tambahkan ini
|
||||
// Timeout configurations
|
||||
ReadTimeout: parseDuration(getEnv("WS_READ_TIMEOUT", "300s")),
|
||||
WriteTimeout: parseDuration(getEnv("WS_WRITE_TIMEOUT", "30s")),
|
||||
PingInterval: parseDuration(getEnv("WS_PING_INTERVAL", "60s")),
|
||||
PongTimeout: parseDuration(getEnv("WS_PONG_TIMEOUT", "70s")),
|
||||
HandshakeTimeout: parseDuration(getEnv("WS_HANDSHAKE_TIMEOUT", "45s")),
|
||||
|
||||
// Buffer sizes
|
||||
ReadBufferSize: getEnvAsInt("WS_READ_BUFFER_SIZE", 8192),
|
||||
WriteBufferSize: getEnvAsInt("WS_WRITE_BUFFER_SIZE", 8192),
|
||||
ChannelBufferSize: getEnvAsInt("WS_CHANNEL_BUFFER_SIZE", 512),
|
||||
MessageQueueSize: getEnvAsInt("WS_MESSAGE_QUEUE_SIZE", 5000),
|
||||
|
||||
// Connection limits
|
||||
MaxMessageSize: getEnvAsInt("WS_MAX_MESSAGE_SIZE", 8192),
|
||||
QueueWorkers: getEnvAsInt("WS_QUEUE_WORKERS", 10),
|
||||
|
||||
// Monitoring
|
||||
ActivityLogSize: getEnvAsInt("WS_ACTIVITY_LOG_SIZE", 1000),
|
||||
CleanupInterval: parseDuration(getEnv("WS_CLEANUP_INTERVAL", "2m")),
|
||||
InactiveTimeout: parseDuration(getEnv("WS_INACTIVE_TIMEOUT", "5m")),
|
||||
|
||||
// Server info
|
||||
ServerID: getEnv("WS_SERVER_ID", "api-service-v1"),
|
||||
|
||||
// Features
|
||||
EnableCompression: getEnvAsBool("WS_ENABLE_COMPRESSION", true),
|
||||
EnableMetrics: getEnvAsBool("WS_ENABLE_METRICS", true),
|
||||
EnableMonitoring: getEnvAsBool("WS_ENABLE_MONITORING", true),
|
||||
},
|
||||
// Configuration for Swagger
|
||||
Swagger: SwaggerConfig{
|
||||
Title: getEnv("SWAGGER_TITLE", "SERVICE API"),
|
||||
Description: getEnv("SWAGGER_DESCRIPTION", "CUSTUM SERVICE API"),
|
||||
@@ -735,5 +807,193 @@ func (c *Config) Validate() error {
|
||||
log.Fatal("SatuSehat Base URL is required")
|
||||
}
|
||||
|
||||
// Validate WebSocket configuration
|
||||
if c.WebSocket.ReadTimeout <= 0 {
|
||||
log.Fatal("WebSocket Read Timeout must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.WriteTimeout <= 0 {
|
||||
log.Fatal("WebSocket Write Timeout must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.PingInterval <= 0 {
|
||||
log.Fatal("WebSocket Ping Interval must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.PongTimeout <= 0 {
|
||||
log.Fatal("WebSocket Pong Timeout must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.ReadBufferSize <= 0 {
|
||||
log.Fatal("WebSocket Read Buffer Size must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.WriteBufferSize <= 0 {
|
||||
log.Fatal("WebSocket Write Buffer Size must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.ChannelBufferSize <= 0 {
|
||||
log.Fatal("WebSocket Channel Buffer Size must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.MessageQueueSize <= 0 {
|
||||
log.Fatal("WebSocket Message Queue Size must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.MaxMessageSize <= 0 {
|
||||
log.Fatal("WebSocket Max Message Size must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.QueueWorkers <= 0 {
|
||||
log.Fatal("WebSocket Queue Workers must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.ActivityLogSize <= 0 {
|
||||
log.Fatal("WebSocket Activity Log Size must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.CleanupInterval <= 0 {
|
||||
log.Fatal("WebSocket Cleanup Interval must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.InactiveTimeout <= 0 {
|
||||
log.Fatal("WebSocket Inactive Timeout must be greater than 0")
|
||||
}
|
||||
if c.WebSocket.ServerID == "" {
|
||||
log.Fatal("WebSocket Server ID is required")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
//** WebSocket **//
|
||||
|
||||
// DefaultWebSocketConfig mengembalikan konfigurasi default untuk WebSocket
|
||||
func DefaultWebSocketConfig() WebSocketConfig {
|
||||
return WebSocketConfig{
|
||||
// Timeout configurations
|
||||
ReadTimeout: 300 * time.Second,
|
||||
WriteTimeout: 30 * time.Second,
|
||||
PingInterval: 60 * time.Second,
|
||||
PongTimeout: 70 * time.Second,
|
||||
HandshakeTimeout: 45 * time.Second,
|
||||
|
||||
// Buffer sizes
|
||||
ReadBufferSize: 8192,
|
||||
WriteBufferSize: 8192,
|
||||
ChannelBufferSize: 512,
|
||||
MessageQueueSize: 5000,
|
||||
|
||||
// Connection limits
|
||||
MaxMessageSize: 8192,
|
||||
QueueWorkers: 10,
|
||||
|
||||
// Monitoring
|
||||
ActivityLogSize: 1000,
|
||||
CleanupInterval: 2 * time.Minute,
|
||||
InactiveTimeout: 5 * time.Minute,
|
||||
|
||||
// Server info
|
||||
ServerID: "api-service-v1",
|
||||
|
||||
// Features
|
||||
EnableCompression: true,
|
||||
EnableMetrics: true,
|
||||
EnableMonitoring: true,
|
||||
}
|
||||
}
|
||||
|
||||
// HighPerformanceWebSocketConfig mengembalikan konfigurasi untuk performa tinggi
|
||||
func HighPerformanceWebSocketConfig() WebSocketConfig {
|
||||
return WebSocketConfig{
|
||||
// Timeout configurations
|
||||
ReadTimeout: 300 * time.Second,
|
||||
WriteTimeout: 30 * time.Second,
|
||||
PingInterval: 30 * time.Second,
|
||||
PongTimeout: 40 * time.Second,
|
||||
HandshakeTimeout: 30 * time.Second,
|
||||
|
||||
// Buffer sizes
|
||||
ReadBufferSize: 16384,
|
||||
WriteBufferSize: 16384,
|
||||
ChannelBufferSize: 1024,
|
||||
MessageQueueSize: 10000,
|
||||
|
||||
// Connection limits
|
||||
MaxMessageSize: 16384,
|
||||
QueueWorkers: 20,
|
||||
|
||||
// Monitoring
|
||||
ActivityLogSize: 2000,
|
||||
CleanupInterval: 1 * time.Minute,
|
||||
InactiveTimeout: 3 * time.Minute,
|
||||
|
||||
// Server info
|
||||
ServerID: "api-service-hp",
|
||||
|
||||
// Features
|
||||
EnableCompression: true,
|
||||
EnableMetrics: true,
|
||||
EnableMonitoring: true,
|
||||
}
|
||||
}
|
||||
|
||||
// LowResourceWebSocketConfig mengembalikan konfigurasi untuk sumber daya terbatas
|
||||
func LowResourceWebSocketConfig() WebSocketConfig {
|
||||
return WebSocketConfig{
|
||||
// Timeout configurations
|
||||
ReadTimeout: 300 * time.Second,
|
||||
WriteTimeout: 30 * time.Second,
|
||||
PingInterval: 120 * time.Second,
|
||||
PongTimeout: 130 * time.Second,
|
||||
HandshakeTimeout: 60 * time.Second,
|
||||
|
||||
// Buffer sizes
|
||||
ReadBufferSize: 4096,
|
||||
WriteBufferSize: 4096,
|
||||
ChannelBufferSize: 256,
|
||||
MessageQueueSize: 2500,
|
||||
|
||||
// Connection limits
|
||||
MaxMessageSize: 4096,
|
||||
QueueWorkers: 5,
|
||||
|
||||
// Monitoring
|
||||
ActivityLogSize: 500,
|
||||
CleanupInterval: 5 * time.Minute,
|
||||
InactiveTimeout: 10 * time.Minute,
|
||||
|
||||
// Server info
|
||||
ServerID: "api-service-lr",
|
||||
|
||||
// Features
|
||||
EnableCompression: false,
|
||||
EnableMetrics: false,
|
||||
EnableMonitoring: true,
|
||||
}
|
||||
}
|
||||
|
||||
// CustomWebSocketConfig memungkinkan kustomisasi konfigurasi
|
||||
func CustomWebSocketConfig(
|
||||
readTimeout, writeTimeout, pingInterval, pongTimeout time.Duration,
|
||||
readBufferSize, writeBufferSize, channelBufferSize, messageQueueSize int,
|
||||
maxMessageSize, queueWorkers int,
|
||||
activityLogSize int,
|
||||
cleanupInterval, inactiveTimeout time.Duration,
|
||||
serverID string,
|
||||
enableCompression, enableMetrics, enableMonitoring bool,
|
||||
) WebSocketConfig {
|
||||
return WebSocketConfig{
|
||||
ReadTimeout: readTimeout,
|
||||
WriteTimeout: writeTimeout,
|
||||
PingInterval: pingInterval,
|
||||
PongTimeout: pongTimeout,
|
||||
HandshakeTimeout: 45 * time.Second,
|
||||
|
||||
ReadBufferSize: readBufferSize,
|
||||
WriteBufferSize: writeBufferSize,
|
||||
ChannelBufferSize: channelBufferSize,
|
||||
MessageQueueSize: messageQueueSize,
|
||||
|
||||
MaxMessageSize: maxMessageSize,
|
||||
QueueWorkers: queueWorkers,
|
||||
|
||||
ActivityLogSize: activityLogSize,
|
||||
CleanupInterval: cleanupInterval,
|
||||
InactiveTimeout: inactiveTimeout,
|
||||
|
||||
ServerID: serverID,
|
||||
|
||||
EnableCompression: enableCompression,
|
||||
EnableMetrics: enableMetrics,
|
||||
EnableMonitoring: enableMonitoring,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user