112 lines
3.0 KiB
Go
112 lines
3.0 KiB
Go
package lib
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func getConfig() Config {
|
|
return Config{
|
|
WikiBaseURL: os.Getenv("WIKI_BASE_URL"),
|
|
WikiToken: os.Getenv("WIKI_TOKEN"),
|
|
WikiContentLimit: envToInteger("WIKI_CONTENT_LIMIT", 10),
|
|
RedmineBaseURL: os.Getenv("REDMINE_BASE_URL"),
|
|
RedmineKey: os.Getenv("REDMINE_KEY"),
|
|
RedmineContentLimit: envToInteger("REDMINE_CONTENT_LIMIT", 10),
|
|
GiteaToken: os.Getenv("GITEA_TOKEN"),
|
|
GiteaBaseURL: os.Getenv("GITEA_BASE_URL"),
|
|
GiteaRepos: strings.Split(os.Getenv("GITEA_REPOS"), ","),
|
|
GiteaContentLimit: envToInteger("GITEA_CONTENT_LIMIT", 10),
|
|
DiscordWebhook: os.Getenv("DISCORD_WEBHOOK"),
|
|
DiscordFake: os.Getenv("DISCORD_FAKE") == "true",
|
|
Interval: time.Duration(envToInteger("INTERVAL_MINUTES", 5)) * time.Minute,
|
|
}
|
|
}
|
|
|
|
func getFetchers(config *Config, cache *Cache) []Fetcher {
|
|
return []Fetcher{
|
|
&GiteaFetcher{
|
|
BaseFetcher: BaseFetcher{
|
|
BaseURL: config.GiteaBaseURL,
|
|
Token: config.GiteaToken,
|
|
Cache: cache,
|
|
ContentLimit: config.GiteaContentLimit,
|
|
},
|
|
Repos: config.GiteaRepos,
|
|
},
|
|
&WikiFetcher{
|
|
BaseFetcher: BaseFetcher{
|
|
BaseURL: config.WikiBaseURL,
|
|
Token: config.WikiToken,
|
|
Cache: cache,
|
|
ContentLimit: config.WikiContentLimit,
|
|
},
|
|
},
|
|
&RedmineFetcher{
|
|
BaseFetcher: BaseFetcher{
|
|
BaseURL: config.RedmineBaseURL,
|
|
Token: config.RedmineKey,
|
|
Cache: cache,
|
|
ContentLimit: config.RedmineContentLimit,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func getCache() Cache {
|
|
cache := *NewCache()
|
|
cache.Load()
|
|
return cache
|
|
}
|
|
|
|
func getMessages(fetchers []Fetcher) []Message {
|
|
messages := []Message{}
|
|
for _, fetcher := range fetchers {
|
|
fetchedMessages := fetcher.Fetch()
|
|
for _, message := range fetchedMessages {
|
|
messages = append(messages, message)
|
|
}
|
|
}
|
|
return messages
|
|
}
|
|
|
|
func sendMessageToDiscord(sender DiscordSender, message Message) {
|
|
log.Printf("[SCHEDULED] [SEND] (%s) %s\n", message.Channel, message.ToDiscord())
|
|
if sender.Fake {
|
|
return
|
|
}
|
|
sender.Send(message.ToDiscord())
|
|
}
|
|
|
|
func Runner() {
|
|
loadEnv()
|
|
config := getConfig()
|
|
cache := getCache()
|
|
fetchers := getFetchers(&config, &cache)
|
|
|
|
default_discord_sender := NewDiscordSender(config.DiscordWebhook, config.DiscordFake)
|
|
wiki_discord_sender := NewDiscordSender(config.WikiDiscordWebhook, config.DiscordFake)
|
|
redmine_discord_sender := NewDiscordSender(config.RedmineDiscordWebhook, config.DiscordFake)
|
|
gita_discord_sender := NewDiscordSender(config.GiteaDiscordWebhook, config.DiscordFake)
|
|
for {
|
|
log.Println("[SCHEDULED] Run updater...")
|
|
messages := getMessages(fetchers)
|
|
for _, message := range messages {
|
|
switch message.Channel {
|
|
case "wiki":
|
|
sendMessageToDiscord(wiki_discord_sender, message)
|
|
case "redmine":
|
|
sendMessageToDiscord(redmine_discord_sender, message)
|
|
case "gitea":
|
|
sendMessageToDiscord(gita_discord_sender, message)
|
|
default:
|
|
sendMessageToDiscord(default_discord_sender, message)
|
|
}
|
|
}
|
|
cache.Save()
|
|
time.Sleep(config.Interval)
|
|
}
|
|
}
|