@@ -39,9 +39,10 @@ var ErrSessionNotStarted = errors.New("session not started")
3939// LocationDetector detects the country for session stats
4040type LocationDetector func () location.Location
4141
42- // Retriever allows for retrieval of statistics
43- type Retriever interface {
42+ // StatsTracker allows for retrieval and resetting of statistics
43+ type StatsTracker interface {
4444 Retrieve () consumer.SessionStatistics
45+ Reset ()
4546}
4647
4748// Reporter defines method for sending stats outside
@@ -55,9 +56,9 @@ type Reporter interface {
5556type SessionStatisticsReporter struct {
5657 locationDetector LocationDetector
5758
58- signerFactory identity.SignerFactory
59- statisticsRetriever Retriever
60- remoteReporter Reporter
59+ signerFactory identity.SignerFactory
60+ statisticsTracker StatsTracker
61+ remoteReporter Reporter
6162
6263 sendInterval time.Duration
6364 done chan struct {}
@@ -67,12 +68,12 @@ type SessionStatisticsReporter struct {
6768}
6869
6970// NewSessionStatisticsReporter function creates new session stats sender by given options
70- func NewSessionStatisticsReporter (statisticsRetriever Retriever , remoteReporter Reporter , signerFactory identity.SignerFactory , locationDetector LocationDetector , interval time.Duration ) * SessionStatisticsReporter {
71+ func NewSessionStatisticsReporter (statisticsTracker StatsTracker , remoteReporter Reporter , signerFactory identity.SignerFactory , locationDetector LocationDetector , interval time.Duration ) * SessionStatisticsReporter {
7172 return & SessionStatisticsReporter {
72- locationDetector : locationDetector ,
73- signerFactory : signerFactory ,
74- statisticsRetriever : statisticsRetriever ,
75- remoteReporter : remoteReporter ,
73+ locationDetector : locationDetector ,
74+ signerFactory : signerFactory ,
75+ statisticsTracker : statisticsTracker ,
76+ remoteReporter : remoteReporter ,
7677
7778 sendInterval : interval ,
7879 done : make (chan struct {}),
@@ -101,6 +102,8 @@ func (sr *SessionStatisticsReporter) start(consumerID identity.Identity, service
101102 } else {
102103 log .Debug (statsSenderLogPrefix , "Final stats sent" )
103104 }
105+ // reset the stats in preparation for a new session
106+ sr .statisticsTracker .Reset ()
104107 return
105108 case <- time .After (sr .sendInterval ):
106109 if err := sr .send (serviceType , providerID , country , sessionID , signer ); err != nil {
@@ -131,7 +134,7 @@ func (sr *SessionStatisticsReporter) stop() {
131134}
132135
133136func (sr * SessionStatisticsReporter ) send (serviceType , providerID , country string , sessionID session.ID , signer identity.Signer ) error {
134- sessionStats := sr .statisticsRetriever .Retrieve ()
137+ sessionStats := sr .statisticsTracker .Retrieve ()
135138 return sr .remoteReporter .SendSessionStats (
136139 sessionID ,
137140 mysterium.SessionStats {
0 commit comments