util.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package common
  2. import (
  3. "bytes"
  4. "errors"
  5. "flag"
  6. "fmt"
  7. "github.com/dgraph-io/badger"
  8. "github.com/sirupsen/logrus"
  9. "os"
  10. "time"
  11. )
  12. const LogLocation = "stream.log"
  13. var (
  14. Log *logrus.Logger
  15. Env string
  16. logFile *os.File
  17. )
  18. type logRedirect struct {
  19. }
  20. func (l *logRedirect) Errorf(f string, v ...interface{}) {
  21. Log.Error(fmt.Sprintf(f, v...))
  22. }
  23. func (l *logRedirect) Infof(f string, v ...interface{}) {
  24. Log.Info(fmt.Sprintf(f, v...))
  25. }
  26. func (l *logRedirect) Warningf(f string, v ...interface{}) {
  27. Log.Warning(fmt.Sprintf(f, v...))
  28. }
  29. func (l *logRedirect) Debugf(f string, v ...interface{}) {
  30. Log.Debug(fmt.Sprintf(f, v...))
  31. }
  32. func init(){
  33. flag.StringVar(&Env, "env", "dev", "set environment to prod or test")
  34. flag.Parse()
  35. Log = logrus.New()
  36. if Env == "prod"{
  37. logFile, err := os.OpenFile(LogLocation, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
  38. if err == nil {
  39. Log.Out = logFile
  40. } else {
  41. Log.Infof("Failed to log to file, using default stderr")
  42. }
  43. }
  44. }
  45. func DbOpen(dir string) (*badger.DB, error) {
  46. opts := badger.DefaultOptions
  47. opts.Dir = dir
  48. opts.ValueDir = dir
  49. opts.Logger = &logRedirect{}
  50. db, err := badger.Open(opts)
  51. return db, err
  52. }
  53. func DbClose(db *badger.DB) error {
  54. return db.Close()
  55. }
  56. func DbSet(db *badger.DB, key string, value string) error {
  57. err := db.Update(func(txn *badger.Txn) error {
  58. _, err := txn.Get([]byte(key))
  59. //key not found
  60. if err != nil {
  61. err = txn.Set([]byte(key), []byte(value))
  62. }else{
  63. err = errors.New(fmt.Sprintf("key %s already exist, delete it before creating a new one", key))
  64. }
  65. return err
  66. })
  67. return err
  68. }
  69. func DbGet(db *badger.DB, key string) (value string, err error) {
  70. err = db.View(func(txn *badger.Txn) error {
  71. item, err := txn.Get([]byte(key))
  72. if err != nil {
  73. return err
  74. }
  75. err = item.Value(func(val []byte) error {
  76. value = string(val)
  77. return nil
  78. })
  79. return err
  80. })
  81. return
  82. }
  83. func DbDelete(db *badger.DB, key string) error {
  84. err := db.Update(func(txn *badger.Txn) error {
  85. _, err := txn.Get([]byte(key))
  86. //key not found
  87. if err != nil {
  88. return err
  89. }else{
  90. err = txn.Delete([]byte(key))
  91. }
  92. return err
  93. })
  94. return err
  95. }
  96. func DbKeys(db *badger.DB) (keys []string, err error) {
  97. err = db.View(func(txn *badger.Txn) error {
  98. opts := badger.DefaultIteratorOptions
  99. opts.PrefetchSize = 10
  100. it := txn.NewIterator(opts)
  101. defer it.Close()
  102. for it.Rewind(); it.Valid(); it.Next() {
  103. item := it.Item()
  104. k := item.Key()
  105. keys = append(keys, string(k))
  106. }
  107. return nil
  108. })
  109. return
  110. }
  111. func PrintMap(m map[string]string, buff *bytes.Buffer) {
  112. for k, v := range m {
  113. buff.WriteString(fmt.Sprintf("%s: %s\n", k, v))
  114. }
  115. }
  116. func CloseLogger(){
  117. if logFile != nil {
  118. logFile.Close()
  119. }
  120. }
  121. func GetConfLoc()(string, error) {
  122. dir, err := os.Getwd()
  123. if err != nil {
  124. return "", err
  125. }
  126. confDir := dir + "/conf/"
  127. if _, err := os.Stat(confDir); os.IsNotExist(err) {
  128. return "", err
  129. }
  130. return confDir, nil
  131. }
  132. func GetDataLoc() (string, error) {
  133. dir, err := os.Getwd()
  134. if err != nil {
  135. return "", err
  136. }
  137. dataDir := dir + "/data/"
  138. if _, err := os.Stat(dataDir); os.IsNotExist(err) {
  139. if err := os.Mkdir(dataDir, os.ModePerm); err != nil {
  140. return "", fmt.Errorf("Find error %s when trying to locate xstream data folder.\n", err)
  141. }
  142. }
  143. return dataDir, nil
  144. }
  145. func TimeToUnixMilli(time time.Time) int64 {
  146. return time.UnixNano() / 1e6;
  147. }