From e5a5f311ac26c67d2d5e522493c104c1e5d6f19c Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 19 Feb 2018 18:04:47 +0100 Subject: [PATCH 1/3] Reset rate limiting every 24 hours --- status.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/status.go b/status.go index f67cda28..cbd1cfe2 100644 --- a/status.go +++ b/status.go @@ -31,10 +31,11 @@ import ( // Status contains info about the sketches running on the device type Status struct { - id string - mqttClient mqtt.Client - Sketches map[string]*SketchStatus `json:"sketches"` - messagesSent int + id string + mqttClient mqtt.Client + Sketches map[string]*SketchStatus `json:"sketches"` + messagesSent int + firstMessageAt time.Time } // SketchBinding represents a pair (SketchName,SketchId) @@ -121,7 +122,18 @@ func (s *Status) Raw(topic, msg string) { if s.mqttClient == nil { return } + + if s.messagesSent < 10 { + // first 10 messages are virtually free + s.firstMessageAt = time.Now() + } + if s.messagesSent > 1000 { + // if started more than one day ago, reset the counter + if time.Since(s.firstMessageAt) > 24*time.Hour { + s.messagesSent = 0 + } + fmt.Println("rate limiting: " + strconv.Itoa(s.messagesSent)) introducedDelay := time.Duration(s.messagesSent/1000) * time.Second if introducedDelay > 20*time.Second { From 027606c0d770476e786a6c890a9232c43b1946d2 Mon Sep 17 00:00:00 2001 From: Luca Cipriani Date: Tue, 20 Feb 2018 11:18:32 +0100 Subject: [PATCH 2/3] Do no auto update during development --- main.go | 2 +- updater/updater.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 518976af..7df9860e 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,7 @@ const ( ) var ( - version = "x.x.x" + version = "0.0.0-dev" debugMqtt = false ) diff --git a/updater/updater.go b/updater/updater.go index 70bd628f..72760f33 100644 --- a/updater/updater.go +++ b/updater/updater.go @@ -232,9 +232,19 @@ func (u *Updater) update() error { return err } + // this is the version publically available (GA) v1, _ := semver.Make(u.Info.Version) + // this is the version of the actual binary at start v2, _ := semver.Make(u.CurrentVersion) + if len(v2.Pre) > 0 { + log.Println("Prerelease versions:") + for i, pre := range v2.Pre { + if pre.String() == "dev" { + return errors.New("dev version") + } + } + } if v1.Compare(v2) <= 0 { return errors.New("already at latest version") } From f2cb82b53ea3f66da8df17f75b4928071d199d9d Mon Sep 17 00:00:00 2001 From: Luca Cipriani Date: Tue, 20 Feb 2018 11:42:09 +0100 Subject: [PATCH 3/3] remove unused i var --- updater/updater.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/updater/updater.go b/updater/updater.go index 72760f33..bf59b12c 100644 --- a/updater/updater.go +++ b/updater/updater.go @@ -239,7 +239,7 @@ func (u *Updater) update() error { if len(v2.Pre) > 0 { log.Println("Prerelease versions:") - for i, pre := range v2.Pre { + for _, pre := range v2.Pre { if pre.String() == "dev" { return errors.New("dev version") }