netcache.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package netcache
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "github.com/gravitl/netmaker/database"
  7. "github.com/gravitl/netmaker/models"
  8. )
  9. const (
  10. expirationTime = time.Minute * 5
  11. )
  12. // CValue - the cache object for a network
  13. type CValue struct {
  14. Network string `json:"network,omitempty"`
  15. Value string `json:"value"`
  16. Host models.Host `json:"host"`
  17. Pass string `json:"pass,omitempty"`
  18. User string `json:"user,omitempty"`
  19. ALL bool `json:"all,omitempty"`
  20. Expiration time.Time `json:"expiration"`
  21. }
  22. var ErrExpired = fmt.Errorf("expired")
  23. // Set - sets a value to a key in db
  24. func Set(k string, newValue *CValue) error {
  25. newValue.Expiration = time.Now().Add(expirationTime)
  26. newData, err := json.Marshal(newValue)
  27. if err != nil {
  28. return err
  29. }
  30. return database.Insert(k, string(newData), database.CACHE_TABLE_NAME)
  31. }
  32. // Get - gets a value from db, if expired, return err
  33. func Get(k string) (*CValue, error) {
  34. record, err := database.FetchRecord(database.CACHE_TABLE_NAME, k)
  35. if err != nil {
  36. return nil, err
  37. }
  38. var entry CValue
  39. if err := json.Unmarshal([]byte(record), &entry); err != nil {
  40. return nil, err
  41. }
  42. if time.Now().After(entry.Expiration) {
  43. return nil, ErrExpired
  44. }
  45. return &entry, nil
  46. }
  47. // Del - deletes a value from db
  48. func Del(k string) error {
  49. return database.DeleteRecord(database.CACHE_TABLE_NAME, k)
  50. }