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.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. "strconv"
  7. "sync"
  8. "time"
  9. "github.com/go-redis/redis/v8"
  10. "github.com/syndtr/goleveldb/leveldb"
  11. )
  12. var manager *Manager
  13. // Manager is the nosql connection manager
  14. type Manager struct {
  15. mutex sync.Mutex
  16. RedisConnections map[string]*redisClientHolder
  17. LevelDBConnections map[string]*levelDBHolder
  18. }
  19. type redisClientHolder struct {
  20. redis.UniversalClient
  21. name []string
  22. count int64
  23. }
  24. func (r *redisClientHolder) Close() error {
  25. return manager.CloseRedisClient(r.name[0])
  26. }
  27. type levelDBHolder struct {
  28. name []string
  29. count int64
  30. db *leveldb.DB
  31. }
  32. func init() {
  33. _ = GetManager()
  34. }
  35. // GetManager returns a Manager and initializes one as singleton is there's none yet
  36. func GetManager() *Manager {
  37. if manager == nil {
  38. manager = &Manager{
  39. RedisConnections: make(map[string]*redisClientHolder),
  40. LevelDBConnections: make(map[string]*levelDBHolder),
  41. }
  42. }
  43. return manager
  44. }
  45. func valToTimeDuration(vs []string) (result time.Duration) {
  46. var err error
  47. for _, v := range vs {
  48. result, err = time.ParseDuration(v)
  49. if err != nil {
  50. var val int
  51. val, err = strconv.Atoi(v)
  52. result = time.Duration(val)
  53. }
  54. if err == nil {
  55. return
  56. }
  57. }
  58. return
  59. }