Ability to enable/disable locks

This commit is contained in:
Jacob Gunther 2023-07-19 21:16:22 -05:00
parent 8554fd2064
commit 3b63c32f08
No known key found for this signature in database
GPG Key ID: 9E6F3F4BF45EC433
3 changed files with 16 additions and 9 deletions

View File

@ -3,6 +3,7 @@ host: 0.0.0.0
port: 3001
redis: ${REDIS_URL} # Use an environment variable to define the Redis URL
cache:
enable_locks: true
java_status_duration: 1m
bedrock_status_duration: 1m
icon_duration: 24h

View File

@ -17,6 +17,7 @@ var (
Port: 3001,
Redis: nil,
Cache: ConfigCache{
EnableLocks: true,
JavaStatusDuration: time.Minute,
BedrockStatusDuration: time.Minute,
IconDuration: time.Minute * 15,
@ -35,9 +36,10 @@ type Config struct {
// ConfigCache represents the caching durations of various responses.
type ConfigCache struct {
JavaStatusDuration time.Duration `yaml:"java_status_duration" json:"java_status_duration"`
BedrockStatusDuration time.Duration `yaml:"bedrock_status_duration" json:"bedrock_status_duration"`
IconDuration time.Duration `yaml:"icon_duration" json:"icon_duration"`
EnableLocks bool `yaml:"enable_locks"`
JavaStatusDuration time.Duration `yaml:"java_status_duration"`
BedrockStatusDuration time.Duration `yaml:"bedrock_status_duration"`
IconDuration time.Duration `yaml:"icon_duration"`
}
// ReadFile reads the configuration from the given file and overrides values using environment variables.

View File

@ -116,10 +116,12 @@ type Plugin struct {
func GetJavaStatus(host string, port uint16, enableQuery bool) (*JavaStatusResponse, time.Duration, error) {
cacheKey := fmt.Sprintf("java:%v-%s-%d", enableQuery, host, port)
mutex := r.NewMutex(fmt.Sprintf("java-lock:%v-%s-%d", enableQuery, host, port))
mutex.Lock()
if conf.Cache.EnableLocks {
mutex := r.NewMutex(fmt.Sprintf("java-lock:%v-%s-%d", enableQuery, host, port))
mutex.Lock()
defer mutex.Unlock()
defer mutex.Unlock()
}
cache, ttl, err := r.Get(cacheKey)
@ -154,10 +156,12 @@ func GetJavaStatus(host string, port uint16, enableQuery bool) (*JavaStatusRespo
func GetBedrockStatus(host string, port uint16) (*BedrockStatusResponse, time.Duration, error) {
cacheKey := fmt.Sprintf("bedrock:%s-%d", host, port)
mutex := r.NewMutex(fmt.Sprintf("bedrock-lock:%s-%d", host, port))
mutex.Lock()
if conf.Cache.EnableLocks {
mutex := r.NewMutex(fmt.Sprintf("bedrock-lock:%s-%d", host, port))
mutex.Lock()
defer mutex.Unlock()
defer mutex.Unlock()
}
cache, ttl, err := r.Get(cacheKey)