time_range.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package tsdb
  2. import (
  3. "fmt"
  4. "strings"
  5. "time"
  6. )
  7. func NewTimerange(from, to string) TimeRange {
  8. return TimeRange{
  9. From: from,
  10. To: to,
  11. Now: time.Now(),
  12. }
  13. }
  14. type TimeRange struct {
  15. From string
  16. To string
  17. Now time.Time
  18. }
  19. func (tr TimeRange) FromUnix() (int64, error) {
  20. fromRaw := strings.Replace(tr.From, "now-", "", 1)
  21. diff, err := time.ParseDuration("-" + fromRaw)
  22. if err != nil {
  23. return 0, err
  24. }
  25. return tr.Now.Add(diff).Unix(), nil
  26. }
  27. func (tr TimeRange) FromTime() (time.Time, error) {
  28. fromRaw := strings.Replace(tr.From, "now-", "", 1)
  29. diff, err := time.ParseDuration("-" + fromRaw)
  30. if err != nil {
  31. return time.Time{}, err
  32. }
  33. return tr.Now.Add(diff), nil
  34. }
  35. func (tr TimeRange) ToUnix() (int64, error) {
  36. if tr.To == "now" {
  37. return tr.Now.Unix(), nil
  38. } else if strings.HasPrefix(tr.To, "now-") {
  39. withoutNow := strings.Replace(tr.To, "now-", "", 1)
  40. diff, err := time.ParseDuration("-" + withoutNow)
  41. if err != nil {
  42. return 0, nil
  43. }
  44. return tr.Now.Add(diff).Unix(), nil
  45. }
  46. return 0, fmt.Errorf("cannot parse to value %s", tr.To)
  47. }
  48. func (tr TimeRange) ToTime() (time.Time, error) {
  49. if tr.To == "now" {
  50. return tr.Now, nil
  51. } else if strings.HasPrefix(tr.To, "now-") {
  52. withoutNow := strings.Replace(tr.To, "now-", "", 1)
  53. diff, err := time.ParseDuration("-" + withoutNow)
  54. if err != nil {
  55. return time.Time{}, nil
  56. }
  57. return tr.Now.Add(diff), nil
  58. }
  59. return time.Time{}, fmt.Errorf("cannot parse to value %s", tr.To)
  60. }