github.com/dbernstein1/tyk@v2.9.0-beta9-dl-apic+incompatible/gateway/monitor.go (about) 1 package gateway 2 3 import ( 4 "time" 5 6 "github.com/TykTechnologies/tyk/config" 7 "github.com/TykTechnologies/tyk/user" 8 ) 9 10 type Monitor struct{} 11 12 func (Monitor) Enabled() bool { 13 return config.Global().Monitor.EnableTriggerMonitors 14 } 15 16 func (Monitor) Fire(sessionData *user.SessionState, key string, triggerLimit, usagePercentage float64) { 17 em := config.EventMessage{ 18 Type: EventTriggerExceeded, 19 Meta: EventTriggerExceededMeta{ 20 EventMetaDefault: EventMetaDefault{Message: "Quota trigger reached"}, 21 OrgID: sessionData.OrgID, 22 Key: key, 23 TriggerLimit: int64(triggerLimit), 24 UsagePercentage: int64(usagePercentage), 25 }, 26 TimeStamp: time.Now().String(), 27 } 28 29 go MonitoringHandler.HandleEvent(em) 30 } 31 32 func (m Monitor) Check(sessionData *user.SessionState, key string) { 33 if !m.Enabled() || sessionData.QuotaMax == -1 { 34 return 35 } 36 37 remainder := sessionData.QuotaMax - sessionData.QuotaRemaining 38 usagePerc := (float64(remainder) / float64(sessionData.QuotaMax)) * 100.0 39 40 log.Debug("Perc is: ", usagePerc) 41 renewalDate := time.Unix(sessionData.QuotaRenews, 0) 42 43 log.Debug("Now is: ", time.Now()) 44 log.Debug("Renewal is: ", renewalDate) 45 if time.Now().After(renewalDate) { 46 // Make sure that renewal is still in the future, If renewal is in the past, 47 // then the quota can expire and will auto-renew 48 log.Debug("Renewal date is in the past, skipping") 49 return 50 } 51 52 if config.Global().Monitor.GlobalTriggerLimit > 0.0 && usagePerc >= config.Global().Monitor.GlobalTriggerLimit { 53 log.Info("Firing...") 54 m.Fire(sessionData, key, config.Global().Monitor.GlobalTriggerLimit, usagePerc) 55 } 56 57 for _, triggerLimit := range sessionData.Monitor.TriggerLimits { 58 if usagePerc >= triggerLimit && triggerLimit != config.Global().Monitor.GlobalTriggerLimit { 59 log.Info("Firing...") 60 m.Fire(sessionData, key, triggerLimit, usagePerc) 61 break 62 } 63 } 64 }