github.com/Tyktechnologies/tyk@v2.9.5+incompatible/gateway/redis_analytics_purger.go (about)

     1  package gateway
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/TykTechnologies/tyk/config"
     7  	"github.com/TykTechnologies/tyk/storage"
     8  )
     9  
    10  // Purger is an interface that will define how the in-memory store will be purged
    11  // of analytics data to prevent it growing too large
    12  type Purger interface {
    13  	PurgeCache()
    14  	PurgeLoop(<-chan time.Time)
    15  }
    16  
    17  type RedisPurger struct {
    18  	Store storage.Handler
    19  }
    20  
    21  func (r RedisPurger) PurgeLoop(ticker <-chan time.Time) {
    22  	for {
    23  		<-ticker
    24  		r.PurgeCache()
    25  	}
    26  }
    27  
    28  func (r *RedisPurger) PurgeCache() {
    29  	expireAfter := config.Global().AnalyticsConfig.StorageExpirationTime
    30  	if expireAfter == 0 {
    31  		expireAfter = 60 // 1 minute
    32  	}
    33  
    34  	exp, _ := r.Store.GetExp(analyticsKeyName)
    35  	if exp <= 0 {
    36  		r.Store.SetExp(analyticsKeyName, int64(expireAfter))
    37  	}
    38  }