aboutsummaryrefslogtreecommitdiffstats
path: root/telebot/main.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--telebot/main.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/telebot/main.go b/telebot/main.go
new file mode 100644
index 0000000..f6a3bf7
--- /dev/null
+++ b/telebot/main.go
@@ -0,0 +1,92 @@
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "flag"
+ "net/http"
+ "os"
+ "os/signal"
+ "time"
+
+ tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
+ "github.com/gorilla/mux"
+ "github.com/rs/zerolog/log"
+)
+
+var flagPort = flag.String("port", "8000", "determined the port the sercice runs on")
+
+// FIXME-the client should provide the channel ID
+var botChannelID = flag.Int64("botchannelid", 146328407, "determines the channel id the telgram bot should send messages to")
+
+const TELEGRAM_BOT_TOKEN_ENV_VAR = "TELEGRAM_BOT_TOKEN"
+
+func getTGBot() *tgbotapi.BotAPI {
+ token := os.Getenv(TELEGRAM_BOT_TOKEN_ENV_VAR)
+ bot, err := tgbotapi.NewBotAPI(token[1 : len(token)-1])
+ if err != nil {
+ log.Error().Err(err)
+ }
+ return bot
+}
+
+func sendMessage(bot *tgbotapi.BotAPI, msgText string) error {
+ msg := tgbotapi.NewMessage(*botChannelID, msgText)
+ bot.Send(msg)
+ return nil
+}
+
+func healthHandler(w http.ResponseWriter, r *http.Request) {
+ var telebotError string
+ IsTelebotOk := true
+
+ w.Header().Add("Content-Type", "application/json")
+ if r.Method != "GET" {
+ http.Error(w, "Method is not supported.", http.StatusNotFound)
+ }
+
+ w.WriteHeader(http.StatusOK)
+
+ json.NewEncoder(w).Encode(struct {
+ IsHivedOk bool `json:"isTelebotOK"`
+ TelebotError string `json:"telebotError"`
+ }{IsHivedOk: IsTelebotOk, TelebotError: telebotError})
+}
+
+func msgHandler(w http.ResponseWriter, r *http.Request) {
+
+}
+
+func startServer(gracefulWait time.Duration) {
+ r := mux.NewRouter()
+ srv := &http.Server{
+ Addr: "0.0.0.0:" + *flagPort,
+ WriteTimeout: time.Second * 15,
+ ReadTimeout: time.Second * 15,
+ Handler: r,
+ }
+ r.HandleFunc("/health", healthHandler)
+ r.HandleFunc("/msg", msgHandler)
+
+ go func() {
+ if err := srv.ListenAndServe(); err != nil {
+ log.Fatal().Err(err)
+ }
+ }()
+
+ c := make(chan os.Signal, 1)
+
+ signal.Notify(c, os.Interrupt)
+ <-c
+ ctx, cancel := context.WithTimeout(context.Background(), gracefulWait)
+ defer cancel()
+ srv.Shutdown(ctx)
+ log.Info().Msg("gracefully shut down the server")
+}
+
+func main() {
+ var gracefulWait time.Duration
+ flag.DurationVar(&gracefulWait, "gracefulwait", time.Second*15, "the duration to wait during the graceful shutdown")
+ flag.Parse()
+ startServer(gracefulWait)
+}