You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

manager.go 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package nosql
  5. import (
  6. "context"
  7. "strconv"
  8. "sync"
  9. "time"
  10. "code.gitea.io/gitea/modules/process"
  11. "github.com/go-redis/redis/v8"
  12. "github.com/syndtr/goleveldb/leveldb"
  13. )
  14. var manager *Manager
  15. // Manager is the nosql connection manager
  16. type Manager struct {
  17. ctx context.Context
  18. finished context.CancelFunc
  19. mutex sync.Mutex
  20. RedisConnections map[string]*redisClientHolder
  21. LevelDBConnections map[string]*levelDBHolder
  22. }
  23. type redisClientHolder struct {
  24. redis.UniversalClient
  25. name []string
  26. count int64
  27. }
  28. func (r *redisClientHolder) Close() error {
  29. return manager.CloseRedisClient(r.name[0])
  30. }
  31. type levelDBHolder struct {
  32. name []string
  33. count int64
  34. db *leveldb.DB
  35. }
  36. func init() {
  37. _ = GetManager()
  38. }
  39. // GetManager returns a Manager and initializes one as singleton is there's none yet
  40. func GetManager() *Manager {
  41. if manager == nil {
  42. ctx, _, finished := process.GetManager().AddTypedContext(context.Background(), "Service: NoSQL", process.SystemProcessType, false)
  43. manager = &Manager{
  44. ctx: ctx,
  45. finished: finished,
  46. RedisConnections: make(map[string]*redisClientHolder),
  47. LevelDBConnections: make(map[string]*levelDBHolder),
  48. }
  49. }
  50. return manager
  51. }
  52. func valToTimeDuration(vs []string) (result time.Duration) {
  53. var err error
  54. for _, v := range vs {
  55. result, err = time.ParseDuration(v)
  56. if err != nil {
  57. var val int
  58. val, err = strconv.Atoi(v)
  59. result = time.Duration(val)
  60. }
  61. if err == nil {
  62. return
  63. }
  64. }
  65. return
  66. }