Skip to content

Commit

Permalink
fix(senders): fix workers lock key in discord and telegram (#1027)
Browse files Browse the repository at this point in the history
  • Loading branch information
almostinf authored May 22, 2024
1 parent 0311b07 commit 6866623
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 22 deletions.
25 changes: 16 additions & 9 deletions senders/discord/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ import (
)

const (
messenger = "discord"
discordLockName = "moira-discord-users:moira-bot-host"
discordLockTTL = 30 * time.Second
workerName = "DiscordBot"
messenger = "discord"
discordLockPrefix = "moira-discord-users:moira-bot-host:"
discordLockTTL = 30 * time.Second
workerName = "DiscordBot"
)

// Structure that represents the Discord configuration in the YAML file.
type config struct {
Token string `mapstructure:"token"`
FrontURI string `mapstructure:"front_uri"`
ContactType string `mapstructure:"contact_type"`
Token string `mapstructure:"token"`
FrontURI string `mapstructure:"front_uri"`
}

// Sender implements moira sender interface for discord.
Expand Down Expand Up @@ -48,6 +49,7 @@ func (sender *Sender) Init(senderSettings interface{}, logger moira.Logger, loca
if err != nil {
return fmt.Errorf("error creating discord session: %w", err)
}

sender.logger = logger
sender.frontURI = cfg.FrontURI
sender.location = location
Expand All @@ -70,11 +72,12 @@ func (sender *Sender) Init(senderSettings interface{}, logger moira.Logger, loca
}
sender.session.AddHandler(handleMsg)

sender.runBot()
sender.runBot(cfg.ContactType)

return nil
}

func (sender *Sender) runBot() {
func (sender *Sender) runBot(contactType string) {
err := sender.session.Open()
if err != nil {
sender.logger.Error().
Expand All @@ -93,7 +96,11 @@ func (sender *Sender) runBot() {
worker.NewWorker(
workerName,
sender.logger,
sender.DataBase.NewLock(discordLockName, discordLockTTL),
sender.DataBase.NewLock(discordLockKey(contactType), discordLockTTL),
workerAction,
).Run(nil)
}

func discordLockKey(contactType string) string {
return discordLockPrefix + contactType
}
5 changes: 2 additions & 3 deletions senders/mattermost/sender.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,17 @@ func (sender *Sender) Init(senderSettings interface{}, logger moira.Logger, loca
if cfg.Url == "" {
return fmt.Errorf("can not read Mattermost url from config")
}

client := model.NewAPIv4Client(cfg.Url)

if err != nil {
return fmt.Errorf("can not parse insecure_tls: %w", err)
}
client.HTTPClient = &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: cfg.InsecureTLS,
},
},
}

sender.client = client

if cfg.APIToken == "" {
Expand Down
28 changes: 18 additions & 10 deletions senders/telegram/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ import (
)

const (
telegramLockName = "moira-telegram-users:moira-bot-host"
workerName = "Telebot"
messenger = "telegram"
telegramLockTTL = 30 * time.Second
hidden = "[DATA DELETED]"
telegramLockPrefix = "moira-telegram-users:moira-bot-host:"
workerName = "Telebot"
messenger = "telegram"
telegramLockTTL = 30 * time.Second
hidden = "[DATA DELETED]"
)

var (
Expand All @@ -33,8 +33,9 @@ var (

// Structure that represents the Telegram configuration in the YAML file.
type config struct {
APIToken string `mapstructure:"api_token"`
FrontURI string `mapstructure:"front_uri"`
ContactType string `mapstructure:"contact_type"`
APIToken string `mapstructure:"api_token"`
FrontURI string `mapstructure:"front_uri"`
}

// Sender implements moira sender interface via telegram.
Expand Down Expand Up @@ -69,6 +70,7 @@ func (sender *Sender) Init(senderSettings interface{}, logger moira.Logger, loca
if cfg.APIToken == "" {
return fmt.Errorf("can not read telegram api_token from config")
}

sender.apiToken = cfg.APIToken
sender.frontURI = cfg.FrontURI
sender.logger = logger
Expand All @@ -88,13 +90,15 @@ func (sender *Sender) Init(senderSettings interface{}, logger moira.Logger, loca
Msg("Error handling incoming message: %s")
}
})
go sender.runTelebot()

go sender.runTelebot(cfg.ContactType)

return nil
}

// runTelebot starts telegram bot and manages bot subscriptions
// to make sure there is always only one working Poller.
func (sender *Sender) runTelebot() {
func (sender *Sender) runTelebot(contactType string) {
workerAction := func(stop <-chan struct{}) error {
sender.bot.Start()
<-stop
Expand All @@ -105,7 +109,11 @@ func (sender *Sender) runTelebot() {
worker.NewWorker(
workerName,
sender.logger,
sender.DataBase.NewLock(telegramLockName, telegramLockTTL),
sender.DataBase.NewLock(telegramLockKey(contactType), telegramLockTTL),
workerAction,
).Run(nil)
}

func telegramLockKey(contactType string) string {
return telegramLockPrefix + contactType
}

0 comments on commit 6866623

Please sign in to comment.