state.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package client
  2. import (
  3. metrics "github.com/rcrowley/go-metrics"
  4. "ngrok/client/ui"
  5. )
  6. // client state
  7. type State struct {
  8. id string
  9. ui *ui.Ui
  10. publicUrl string
  11. protocol string
  12. history *RequestHistory
  13. opts *Options
  14. metrics *ClientMetrics
  15. // just for UI purposes
  16. status string
  17. historyEntries []*RequestHistoryEntry
  18. stopping bool
  19. }
  20. // implement client.ui.State
  21. func (s State) GetVersion() string { return "" }
  22. func (s State) GetPublicUrl() string { return s.publicUrl }
  23. func (s State) GetLocalAddr() string { return s.opts.localaddr }
  24. func (s State) GetStatus() string { return s.status }
  25. func (s State) GetProtocol() string { return s.protocol }
  26. func (s State) GetHistory() []ui.HttpRequest {
  27. // go sucks
  28. historyEntries := make([]ui.HttpRequest, len(s.historyEntries))
  29. for i, entry := range s.historyEntries {
  30. historyEntries[i] = entry
  31. }
  32. return historyEntries
  33. }
  34. func (s State) IsStopping() bool { return s.stopping }
  35. func (s State) GetConnectionMetrics() (metrics.Meter, metrics.Timer) {
  36. return s.metrics.connMeter, s.metrics.connTimer
  37. }
  38. func (s State) GetRequestMetrics() (metrics.Meter, metrics.Timer) {
  39. return s.metrics.reqMeter, s.metrics.reqTimer
  40. }
  41. func (s State) GetBytesInMetrics() (metrics.Counter, metrics.Histogram) {
  42. return s.metrics.bytesInCount, s.metrics.bytesIn
  43. }
  44. func (s State) GetBytesOutMetrics() (metrics.Counter, metrics.Histogram) {
  45. return s.metrics.bytesOutCount, s.metrics.bytesOut
  46. }
  47. func (s *State) Update() {
  48. s.ui.Updates.In() <- *s
  49. }