types.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package tui
  2. import "pingo/internal/ping"
  3. type Address struct {
  4. Address string
  5. results []float64
  6. max_results int
  7. }
  8. func (a *Address) Truncate() (truncated bool) {
  9. if len(a.results) > a.max_results {
  10. a.results = a.results[1:len(a.results)] // return modified slice missing first index
  11. return true
  12. }
  13. return false
  14. }
  15. // Wraps [ping.Ping]
  16. func (a *Address) Ping() (delay float64, err error) {
  17. return ping.Ping(a.Address)
  18. }
  19. // Poll pings the affiliated Address and appends it to a.results
  20. func (a *Address) Poll() (success bool, err error) {
  21. if delay, err := a.Ping(); err == nil {
  22. a.results = append(a.results, delay)
  23. a.Truncate() // enforce max length
  24. return true, nil
  25. } else {
  26. a.results = append(a.results, delay)
  27. a.Truncate() // enforce max length
  28. return false, err
  29. }
  30. }
  31. // Last returns the last result in [Address.results]. Returns -1 if no previous result
  32. func (a *Address) Last() (delay float64) {
  33. if len(a.results) > 0 {
  34. return a.results[len(a.results)-1]
  35. } else {
  36. return -1
  37. }
  38. }