diff options
Diffstat (limited to 'modules/setting/cache.go')
-rw-r--r-- | modules/setting/cache.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/modules/setting/cache.go b/modules/setting/cache.go new file mode 100644 index 00000000..bfa6ca0e --- /dev/null +++ b/modules/setting/cache.go @@ -0,0 +1,85 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package setting + +import ( + "strings" + "time" + + "code.gitea.io/gitea/modules/log" +) + +// Cache represents cache settings +type Cache struct { + Adapter string + Interval int + Conn string + TTL time.Duration `ini:"ITEM_TTL"` +} + +// CacheService the global cache +var CacheService = struct { + Cache `ini:"cache"` + + LastCommit struct { + TTL time.Duration `ini:"ITEM_TTL"` + CommitsCount int64 + } `ini:"cache.last_commit"` +}{ + Cache: Cache{ + Adapter: "memory", + Interval: 60, + TTL: 16 * time.Hour, + }, + LastCommit: struct { + TTL time.Duration `ini:"ITEM_TTL"` + CommitsCount int64 + }{ + TTL: 8760 * time.Hour, + CommitsCount: 1000, + }, +} + +// MemcacheMaxTTL represents the maximum memcache TTL +const MemcacheMaxTTL = 30 * 24 * time.Hour + +func loadCacheFrom(rootCfg ConfigProvider) { + sec := rootCfg.Section("cache") + if err := sec.MapTo(&CacheService); err != nil { + log.Fatal("Failed to map Cache settings: %v", err) + } + + CacheService.Adapter = sec.Key("ADAPTER").In("memory", []string{"memory", "redis", "memcache", "twoqueue"}) + switch CacheService.Adapter { + case "memory": + case "redis", "memcache": + CacheService.Conn = strings.Trim(sec.Key("HOST").String(), "\" ") + case "twoqueue": + CacheService.Conn = strings.TrimSpace(sec.Key("HOST").String()) + if CacheService.Conn == "" { + CacheService.Conn = "50000" + } + default: + log.Fatal("Unknown cache adapter: %s", CacheService.Adapter) + } + + sec = rootCfg.Section("cache.last_commit") + CacheService.LastCommit.CommitsCount = sec.Key("COMMITS_COUNT").MustInt64(1000) +} + +// 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()) +} |