From 95a50ca20e058aa41d32b090e76e56f15312a4f2 Mon Sep 17 00:00:00 2001 From: Scott Lee Davis Date: Sun, 19 May 2019 17:29:05 -0700 Subject: [PATCH] check hostname on occurrence trigger, and only output from source. --- plugin.json | 2 +- server/manifest.go | 2 +- server/occurrence.go | 5 +++++ server/reminder.go | 5 +++++ server/reminder_test.go | 3 +++ server/scheduler.go | 23 +---------------------- 6 files changed, 16 insertions(+), 24 deletions(-) diff --git a/plugin.json b/plugin.json index 60579b2..b46a3e0 100755 --- a/plugin.json +++ b/plugin.json @@ -2,7 +2,7 @@ "id": "com.github.scottleedavis.mattermost-plugin-remind", "name": "Remind Bot Mattermost Plugin", "description": "Sets Reminders", - "version": "0.2.6", + "version": "0.2.7", "server": { "executables": { "linux-amd64": "server/dist/plugin-linux-amd64", diff --git a/server/manifest.go b/server/manifest.go index 8da0aa1..54a2ecf 100755 --- a/server/manifest.go +++ b/server/manifest.go @@ -5,5 +5,5 @@ var manifest = struct { Version string }{ Id: "com.github.scottleedavis.mattermost-plugin-remind", - Version: "0.2.6", + Version: "0.2.7", } diff --git a/server/occurrence.go b/server/occurrence.go index da4dc3d..a61285d 100755 --- a/server/occurrence.go +++ b/server/occurrence.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "os" "strconv" "strings" "time" @@ -12,6 +13,8 @@ import ( ) type Occurrence struct { + Hostname string + Id string Username string @@ -215,7 +218,9 @@ func (p *Plugin) addOccurrences(request *ReminderRequest, occurrences []time.Tim } } + hostname, _ := os.Hostname() occurrence := Occurrence{ + Hostname: hostname, Id: model.NewId(), Username: request.Username, ReminderId: request.Reminder.Id, diff --git a/server/reminder.go b/server/reminder.go index 126768e..70f016e 100755 --- a/server/reminder.go +++ b/server/reminder.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "fmt" + "os" "strings" "time" @@ -53,9 +54,13 @@ func (p *Plugin) TriggerReminders() { p.API.LogError("Failed to unmarshal reminder occurrences " + fmt.Sprintf("%v", oErr)) return } + hostname, _ := os.Hostname() for _, occurrence := range occurrences { + if hostname != occurrence.Hostname { + continue + } user, uErr := p.API.GetUserByUsername(occurrence.Username) if uErr != nil { p.API.LogError("failed to query user %s", user.Id) diff --git a/server/reminder_test.go b/server/reminder_test.go index 8befc97..22829c9 100755 --- a/server/reminder_test.go +++ b/server/reminder_test.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "fmt" + "os" "testing" "time" @@ -24,8 +25,10 @@ func TestTriggerReminders(t *testing.T) { } testTime := time.Now().UTC().Round(time.Second) + hostname, _ := os.Hostname() occurrences := []Occurrence{ { + Hostname: hostname, Id: model.NewId(), ReminderId: model.NewId(), Occurrence: testTime, diff --git a/server/scheduler.go b/server/scheduler.go index 0d1186c..5062eb4 100755 --- a/server/scheduler.go +++ b/server/scheduler.go @@ -2,15 +2,12 @@ package main import ( "fmt" - "os" "strings" "time" "github.com/mattermost/mattermost-server/model" ) -const TriggerHostName = "__TRIGGERHOST__" - func (p *Plugin) ScheduleReminder(request *ReminderRequest, channelId string) (*model.Post, error) { user, uErr := p.API.GetUserByUsername(request.Username) @@ -176,7 +173,6 @@ func (p *Plugin) InteractiveSchedule(triggerId string, user *model.User) { func (p *Plugin) Run() { p.Stop() - p.getAndSetLock() if !p.running { p.running = true p.runner() @@ -184,33 +180,16 @@ func (p *Plugin) Run() { } func (p *Plugin) Stop() { - p.API.KVSet(TriggerHostName, []byte("")) p.running = false } func (p *Plugin) runner() { go func() { <-time.NewTimer(time.Second).C - if !p.running && !p.getAndSetLock() { + if !p.running { return } p.TriggerReminders() p.runner() }() } - -func (p *Plugin) getAndSetLock() bool { - hostname, _ := os.Hostname() - bytes, bErr := p.API.KVGet(TriggerHostName) - if bErr != nil { - p.API.LogError("failed KVGet %s", bErr) - return false - } - if string(bytes) != "" && string(bytes) != hostname { - return false - } else if string(bytes) == hostname { - return true - } - p.API.KVSet(TriggerHostName, []byte(hostname)) - return true -}