|
|
|
|
@ -35,7 +35,7 @@ type rateLogger struct { |
|
|
|
|
periodStart time.Time |
|
|
|
|
periodCount int64 |
|
|
|
|
now func() time.Time |
|
|
|
|
callback func(int64, time.Time) |
|
|
|
|
callback func(int64, time.Time, int64) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (rl *rateLogger) currentIntervalStart(now time.Time) time.Time { |
|
|
|
|
@ -43,12 +43,12 @@ func (rl *rateLogger) currentIntervalStart(now time.Time) time.Time { |
|
|
|
|
return now.Add(-(time.Duration(millisSince)) * time.Millisecond) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (rl *rateLogger) update() { |
|
|
|
|
func (rl *rateLogger) update(numRoutes int64) { |
|
|
|
|
now := rl.now() |
|
|
|
|
periodEnd := rl.periodStart.Add(rl.interval) |
|
|
|
|
if periodEnd.Before(now) { |
|
|
|
|
if rl.periodCount != 0 { |
|
|
|
|
rl.callback(rl.periodCount, rl.periodStart) |
|
|
|
|
rl.callback(rl.periodCount, rl.periodStart, numRoutes) |
|
|
|
|
} |
|
|
|
|
rl.periodCount = 0 |
|
|
|
|
rl.periodStart = rl.currentIntervalStart(now) |
|
|
|
|
@ -56,7 +56,7 @@ func (rl *rateLogger) update() { |
|
|
|
|
rl.periodCount++ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func newRateLogger(now func() time.Time, interval time.Duration, callback func(int64, time.Time)) *rateLogger { |
|
|
|
|
func newRateLogger(now func() time.Time, interval time.Duration, callback func(int64, time.Time, int64)) *rateLogger { |
|
|
|
|
nowTime := now() |
|
|
|
|
return &rateLogger{ |
|
|
|
|
callback: callback, |
|
|
|
|
@ -139,11 +139,11 @@ func NewAppConnector(logf logger.Logf, routeAdvertiser RouteAdvertiser, routeInf |
|
|
|
|
ac.wildcards = routeInfo.Wildcards |
|
|
|
|
ac.controlRoutes = routeInfo.Control |
|
|
|
|
} |
|
|
|
|
ac.writeRateMinute = newRateLogger(time.Now, time.Minute, func(c int64, s time.Time) { |
|
|
|
|
ac.logf("routeInfo write rate: %d in minute starting at %v", c, s) |
|
|
|
|
ac.writeRateMinute = newRateLogger(time.Now, time.Minute, func(c int64, s time.Time, l int64) { |
|
|
|
|
ac.logf("routeInfo write rate: %d in minute starting at %v (%d routes)", c, s, l) |
|
|
|
|
}) |
|
|
|
|
ac.writeRateDay = newRateLogger(time.Now, 24*time.Hour, func(c int64, s time.Time) { |
|
|
|
|
ac.logf("routeInfo write rate: %d in 24 hours starting at %v", c, s) |
|
|
|
|
ac.writeRateDay = newRateLogger(time.Now, 24*time.Hour, func(c int64, s time.Time, l int64) { |
|
|
|
|
ac.logf("routeInfo write rate: %d in 24 hours starting at %v (%d routes)", c, s, l) |
|
|
|
|
}) |
|
|
|
|
return ac |
|
|
|
|
} |
|
|
|
|
@ -159,8 +159,15 @@ func (e *AppConnector) storeRoutesLocked() error { |
|
|
|
|
if !e.ShouldStoreRoutes() { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
e.writeRateMinute.update() |
|
|
|
|
e.writeRateDay.update() |
|
|
|
|
|
|
|
|
|
// log write rate and write size
|
|
|
|
|
numRoutes := int64(len(e.controlRoutes)) |
|
|
|
|
for _, rs := range e.domains { |
|
|
|
|
numRoutes += int64(len(rs)) |
|
|
|
|
} |
|
|
|
|
e.writeRateMinute.update(numRoutes) |
|
|
|
|
e.writeRateDay.update(numRoutes) |
|
|
|
|
|
|
|
|
|
return e.storeRoutesFunc(&RouteInfo{ |
|
|
|
|
Control: e.controlRoutes, |
|
|
|
|
Domains: e.domains, |
|
|
|
|
|