pt_event_metrics.go 934 B

1234567891011121314151617181920212223242526272829303132333435
  1. package snowflake_proxy
  2. import (
  3. "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/event"
  4. )
  5. type EventCollector interface {
  6. TrackInBoundTraffic(value int64)
  7. TrackOutBoundTraffic(value int64)
  8. TrackNewConnection(country string)
  9. TrackFailedConnection()
  10. }
  11. type EventMetrics struct {
  12. collector EventCollector
  13. }
  14. func NewEventMetrics(collector EventCollector) *EventMetrics {
  15. return &EventMetrics{collector: collector}
  16. }
  17. func (em *EventMetrics) OnNewSnowflakeEvent(e event.SnowflakeEvent) {
  18. switch e.(type) {
  19. case event.EventOnProxyStats:
  20. e := e.(event.EventOnProxyStats)
  21. em.collector.TrackInBoundTraffic(e.InboundBytes)
  22. em.collector.TrackOutBoundTraffic(e.OutboundBytes)
  23. case event.EventOnProxyConnectionOver:
  24. e := e.(event.EventOnProxyConnectionOver)
  25. em.collector.TrackNewConnection(e.Country)
  26. case event.EventOnProxyConnectionFailed:
  27. em.collector.TrackFailedConnection()
  28. }
  29. }