Files
Atay-Makhzan/modules/setting/cache.go
T

110 lines
2.7 KiB
Go
Raw Normal View History

2019-02-10 09:37:37 +08:00
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package setting
import (
"strings"
"time"
"code.gitea.io/gitea/modules/log"
)
// Cache represents cache settings
type Cache struct {
Enabled bool
2019-02-10 09:37:37 +08:00
Adapter string
Interval int
Conn string
TTL time.Duration `ini:"ITEM_TTL"`
2019-02-10 09:37:37 +08:00
}
2022-01-20 18:46:10 +01:00
// CacheService the global cache
var CacheService = struct {
Cache `ini:"cache"`
2022-01-20 18:46:10 +01:00
LastCommit struct {
Enabled bool
TTL time.Duration `ini:"ITEM_TTL"`
CommitsCount int64
} `ini:"cache.last_commit"`
}{
Cache: Cache{
Enabled: true,
Adapter: "memory",
Interval: 60,
TTL: 16 * time.Hour,
},
LastCommit: struct {
Enabled bool
TTL time.Duration `ini:"ITEM_TTL"`
CommitsCount int64
}{
2022-01-20 18:46:10 +01:00
Enabled: true,
TTL: 8760 * time.Hour,
CommitsCount: 1000,
},
}
2019-02-10 09:37:37 +08:00
// MemcacheMaxTTL represents the maximum memcache TTL
const MemcacheMaxTTL = 30 * 24 * time.Hour
2019-02-10 09:37:37 +08:00
func newCacheService() {
sec := Cfg.Section("cache")
if err := sec.MapTo(&CacheService); err != nil {
log.Fatal("Failed to map Cache settings: %v", err)
2019-02-10 09:37:37 +08:00
}
2021-07-10 22:54:15 +01:00
CacheService.Adapter = sec.Key("ADAPTER").In("memory", []string{"memory", "redis", "memcache", "twoqueue"})
2019-02-10 09:37:37 +08:00
switch CacheService.Adapter {
case "memory":
case "redis", "memcache":
CacheService.Conn = strings.Trim(sec.Key("HOST").String(), "\" ")
2021-07-10 22:54:15 +01:00
case "twoqueue":
CacheService.Conn = strings.TrimSpace(sec.Key("HOST").String())
if CacheService.Conn == "" {
CacheService.Conn = "50000"
}
case "": // disable cache
CacheService.Enabled = false
2019-02-10 09:37:37 +08:00
default:
2019-04-02 08:48:31 +01:00
log.Fatal("Unknown cache adapter: %s", CacheService.Adapter)
2019-02-10 09:37:37 +08:00
}
if CacheService.Enabled {
log.Info("Cache Service Enabled")
2021-01-27 22:56:54 +08:00
} else {
log.Warn("Cache Service Disabled so that captcha disabled too")
// captcha depends on cache service
Service.EnableCaptcha = false
}
sec = Cfg.Section("cache.last_commit")
if !CacheService.Enabled {
CacheService.LastCommit.Enabled = false
}
CacheService.LastCommit.CommitsCount = sec.Key("COMMITS_COUNT").MustInt64(1000)
if CacheService.LastCommit.Enabled {
log.Info("Last Commit Cache Service Enabled")
}
2019-02-10 09:37:37 +08:00
}
// TTLSeconds returns the TTLSeconds or unix timestamp for memcache
func (c Cache) TTLSeconds() int64 {
if c.Adapter == "memcache" && c.TTL > MemcacheMaxTTL {
return time.Now().Add(c.TTL).Unix()
}
return int64(c.TTL.Seconds())
}
// LastCommitCacheTTLSeconds returns the TTLSeconds or unix timestamp for memcache
func LastCommitCacheTTLSeconds() int64 {
if CacheService.Adapter == "memcache" && CacheService.LastCommit.TTL > MemcacheMaxTTL {
return time.Now().Add(CacheService.LastCommit.TTL).Unix()
}
return int64(CacheService.LastCommit.TTL.Seconds())
}