Skip to content

Commit

Permalink
chore: Update httpclient client configuration options
Browse files Browse the repository at this point in the history
  • Loading branch information
ShocOne committed Jun 20, 2024
1 parent 769a8a1 commit 44e5f6e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 35 deletions.
24 changes: 12 additions & 12 deletions httpclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,18 @@ type Client struct {

// Options/Variables for Client
type ClientConfig struct {
Integration APIIntegration
HideSensitiveData bool
CustomCookies []*http.Cookie
MaxRetryAttempts int
MaxConcurrentRequests int
EnableDynamicRateLimiting bool
CustomTimeout time.Duration
TokenRefreshBufferPeriod time.Duration
TotalRetryDuration time.Duration // TODO do we need this now it's in the integration?
FollowRedirects bool
MaxRedirects int
ConcurrencyManagementEnabled bool
Integration APIIntegration
HideSensitiveData bool
CustomCookies []*http.Cookie
MaxRetryAttempts int
MaxConcurrentRequests int
EnableDynamicRateLimiting bool
CustomTimeout time.Duration
TokenRefreshBufferPeriod time.Duration
TotalRetryDuration time.Duration // TODO do we need this now it's in the integration?
FollowRedirects bool
MaxRedirects int
EnableConcurrencyManagement bool
}

// BuildClient creates a new HTTP client with the provided configuration.
Expand Down
66 changes: 43 additions & 23 deletions httpclient/config_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,28 @@ import (
"errors"
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)

const (
DefaultLogLevelString = "LogLevelInfo"
DefaultLogOutputFormatString = "pretty"
DefaultLogConsoleSeparator = " "
DefaultLogExportPath = "/defaultlogs"
DefaultMaxRetryAttempts = 3
DefaultMaxConcurrentRequests = 1
DefaultExportLogs = false
DefaultHideSensitiveData = false
DefaultEnableDynamicRateLimiting = false
DefaultCustomTimeout = 5 * time.Second
DefaultTokenRefreshBufferPeriod = 2 * time.Minute
DefaultTotalRetryDuration = 5 * time.Minute
DefaultFollowRedirects = false
DefaultMaxRedirects = 5
DefaultLogLevelString = "LogLevelInfo"
DefaultLogOutputFormatString = "pretty"
DefaultLogConsoleSeparator = " "
DefaultLogExportPath = "/defaultlogs"
DefaultMaxRetryAttempts = 3
DefaultMaxConcurrentRequests = 1
DefaultExportLogs = false
DefaultHideSensitiveData = false
DefaultEnableDynamicRateLimiting = false
DefaultCustomTimeout = 5 * time.Second
DefaultTokenRefreshBufferPeriod = 2 * time.Minute
DefaultTotalRetryDuration = 5 * time.Minute
DefaultFollowRedirects = false
DefaultMaxRedirects = 5
DefaultEnableConcurrencyManagement = false
)

// LoadConfigFromFile loads http client configuration settings from a JSON file.
Expand Down Expand Up @@ -62,15 +65,32 @@ func LoadConfigFromFile(filepath string) (*ClientConfig, error) {
// If any environment variables are not set, the default values defined in the constants are used instead.
func LoadConfigFromEnv() (*ClientConfig, error) {
config := &ClientConfig{
HideSensitiveData: getEnvAsBool("HIDE_SENSITIVE_DATA", DefaultHideSensitiveData),
MaxRetryAttempts: getEnvAsInt("MAX_RETRY_ATTEMPTS", DefaultMaxRetryAttempts),
MaxConcurrentRequests: getEnvAsInt("MAX_CONCURRENT_REQUESTS", DefaultMaxConcurrentRequests),
EnableDynamicRateLimiting: getEnvAsBool("ENABLE_DYNAMIC_RATE_LIMITING", DefaultEnableDynamicRateLimiting),
CustomTimeout: getEnvAsDuration("CUSTOM_TIMEOUT", DefaultCustomTimeout),
TokenRefreshBufferPeriod: getEnvAsDuration("TOKEN_REFRESH_BUFFER_PERIOD", DefaultTokenRefreshBufferPeriod),
TotalRetryDuration: getEnvAsDuration("TOTAL_RETRY_DURATION", DefaultTotalRetryDuration),
FollowRedirects: getEnvAsBool("FOLLOW_REDIRECTS", DefaultFollowRedirects),
MaxRedirects: getEnvAsInt("MAX_REDIRECTS", DefaultMaxRedirects),
HideSensitiveData: getEnvAsBool("HIDE_SENSITIVE_DATA", DefaultHideSensitiveData),
MaxRetryAttempts: getEnvAsInt("MAX_RETRY_ATTEMPTS", DefaultMaxRetryAttempts),
MaxConcurrentRequests: getEnvAsInt("MAX_CONCURRENT_REQUESTS", DefaultMaxConcurrentRequests),
EnableDynamicRateLimiting: getEnvAsBool("ENABLE_DYNAMIC_RATE_LIMITING", DefaultEnableDynamicRateLimiting),
CustomTimeout: getEnvAsDuration("CUSTOM_TIMEOUT", DefaultCustomTimeout),
TokenRefreshBufferPeriod: getEnvAsDuration("TOKEN_REFRESH_BUFFER_PERIOD", DefaultTokenRefreshBufferPeriod),
TotalRetryDuration: getEnvAsDuration("TOTAL_RETRY_DURATION", DefaultTotalRetryDuration),
FollowRedirects: getEnvAsBool("FOLLOW_REDIRECTS", DefaultFollowRedirects),
MaxRedirects: getEnvAsInt("MAX_REDIRECTS", DefaultMaxRedirects),
EnableConcurrencyManagement: getEnvAsBool("ENABLE_CONCURRENCY_MANAGEMENT", DefaultEnableConcurrencyManagement),
}

// Load custom cookies from environment variables.
customCookies := getEnvAsString("CUSTOM_COOKIES", "")
if customCookies != "" {
cookies := []*http.Cookie{}
for _, cookie := range strings.Split(customCookies, ";") {
parts := strings.SplitN(cookie, "=", 2)
if len(parts) == 2 {
cookies = append(cookies, &http.Cookie{
Name: parts[0],
Value: parts[1],
})
}
}
config.CustomCookies = cookies
}

return config, nil
Expand Down

0 comments on commit 44e5f6e

Please sign in to comment.