Skip to content

Commit

Permalink
wip: cleanup code
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-karan committed Feb 18, 2022
1 parent 33cb34a commit eabfd62
Show file tree
Hide file tree
Showing 25 changed files with 374 additions and 771 deletions.
15 changes: 13 additions & 2 deletions cmd/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,25 +49,36 @@ func sendErrorResponse(w http.ResponseWriter, message string, code int, data int
w.Write(out)
}

// Index page.
func handleIndex(w http.ResponseWriter, r *http.Request) {
sendResponse(w, "welcome to cAlerts!")
}

// Health check.
func handleHealthCheck(w http.ResponseWriter, r *http.Request) {
sendResponse(w, "pong")
}

// Handle dispatching new alerts to upstream providers.
func handleDispatchNotif(w http.ResponseWriter, r *http.Request) {
var (
app = r.Context().Value("app").(*App)
payload = alertmgrtmpl.Data{}
)

// Unmarshall POST Body.
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
app.lo.WithError(err).Error("error decoding request body")
sendErrorResponse(w, "Error decoding payload.", http.StatusBadRequest, nil)
return
}
app.notifier.Dispatch(payload.Alerts)

sendResponse(w, "dispatched!")
// Dispatch a list of alerts via Notifier.
if err := app.notifier.Dispatch(payload.Alerts); err != nil {
app.lo.WithError(err).Error("error dispatching alerts")
sendErrorResponse(w, "Error dispatching alerts.", http.StatusInternalServerError, nil)
return
}

sendResponse(w, "dispatched")
}
17 changes: 12 additions & 5 deletions cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,25 @@ import (
"github.com/knadh/koanf/providers/file"
"github.com/mr-karan/calert/internal/notifier"
prvs "github.com/mr-karan/calert/internal/providers"
"github.com/mr-karan/calert/internal/providers/google_chat"
"github.com/sirupsen/logrus"
flag "github.com/spf13/pflag"
)

// initLogger initializes logger instance.
func initLogger(ko *koanf.Koanf) *logrus.Logger {
logger := logrus.New()

logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
DisableLevelTruncation: true,
})

// Enable debug mode if specified.
if ko.String("app.log") == "debug" {
logger.SetLevel(logrus.DebugLevel)
}

return logger
}

Expand Down Expand Up @@ -76,16 +81,15 @@ func initConfig(cfgDefault string, envPrefix string) (*koanf.Koanf, error) {
func initProviders(ko *koanf.Koanf, lo *logrus.Logger) []prvs.Provider {
provs := make([]prvs.Provider, 0)

// Load all providers.
// Loop over all providers listed in config.
for _, name := range ko.MapKeys("providers") {
cfgKey := fmt.Sprintf("providers.%s", name)

provType := ko.String(fmt.Sprintf("%s.type", cfgKey))

switch provType {
case "google_chat":
gchat, err := prvs.NewGoogleChat(
prvs.GoogleChatOpts{
gchat, err := google_chat.NewGoogleChat(
google_chat.GoogleChatOpts{
Log: lo,
Timeout: ko.MustDuration(fmt.Sprintf("%s.timeout", cfgKey)),
MaxIdleConn: ko.MustInt(fmt.Sprintf("%s.max_idle_conns", cfgKey)),
Expand All @@ -99,14 +103,17 @@ func initProviders(ko *koanf.Koanf, lo *logrus.Logger) []prvs.Provider {
if err != nil {
lo.WithError(err).Fatal("error initialising google chat provider")
}

// Start a background worker to cleanup alerts based on TTL mechanism.
go gchat.InitPruner(1 * time.Hour)

lo.WithField("room", gchat.GetRoom()).Info("initialised provider")
provs = append(provs, gchat)
}
}

if len(provs) == 0 {
lo.Fatal("no providers initialised. please check config")
lo.Fatal("no providers listed in config")
}

return provs
Expand Down
15 changes: 6 additions & 9 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ var (
buildString = "unknown"
)

// App is the global container that holds
// objects of various routines that run on boot.
// App is the global contains
// instances of various objects used in the lifecyle of program.
type App struct {
lo *logrus.Logger
notifier notifier.Notifier
Expand All @@ -26,22 +26,21 @@ func main() {
// Initialise and load the config.
ko, err := initConfig("config.sample.toml", "CALERTS_")
if err != nil {
// Need to use `panic` since logger can only be initialised once config is initialised.
// Need to `panic` since logger can only be initialised once config is initialised.
panic(err.Error())
}

var (
lo = initLogger(ko)
provs = initProviders(ko, lo)
notifier = initNotifier(ko, lo, provs)
)

// Initialise a new instance of app.
app := &App{
lo: lo,
notifier: notifier,
}

// Start an instance of app.
app.lo.WithField("version", buildString).Info("booting calerts")

// Initialise HTTP Router.
Expand All @@ -53,21 +52,19 @@ func main() {
r.Use(middleware.Logger)
}

// Register Handlers
r.Get("/", wrap(app, handleIndex))
r.Get("/ping", wrap(app, handleHealthCheck))
// TODO: Add metrics handler.
// r.Get("/metrics", wrap(app, handleMetrics))
r.Post("/dispatch", wrap(app, handleDispatchNotif))

// Start HTTP Server.
app.lo.WithField("addr", ko.MustString("app.address")).Info("starting http server")
srv := &http.Server{
Addr: ko.MustString("app.address"),
ReadTimeout: ko.MustDuration("app.server_timeout"),
WriteTimeout: ko.MustDuration("app.server_timeout"),
Handler: r,
}

app.lo.WithField("addr", ko.MustString("app.address")).Info("starting http server")
if err := srv.ListenAndServe(); err != nil {
app.lo.WithError(err).Fatal("couldn't start server")
}
Expand Down
2 changes: 1 addition & 1 deletion config.sample.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ max_size = 4000
address = "0.0.0.0:6000"
server_timeout = "5s"
enable_request_logs = true
log_level = "debug"
log = "debug"

[providers.prod_alerts]
endpoint = "https://chat.googleapis.com/v1/spaces/xxx/messages?key=key&token=token%3D"
Expand Down
22 changes: 0 additions & 22 deletions deploy/helm/.helmignore

This file was deleted.

12 changes: 0 additions & 12 deletions deploy/helm/Chart.yaml

This file was deleted.

70 changes: 0 additions & 70 deletions deploy/helm/README.md

This file was deleted.

15 changes: 0 additions & 15 deletions deploy/helm/templates/NOTES.txt

This file was deleted.

45 changes: 0 additions & 45 deletions deploy/helm/templates/_helpers.tpl

This file was deleted.

37 changes: 0 additions & 37 deletions deploy/helm/templates/configmap.yaml

This file was deleted.

0 comments on commit eabfd62

Please sign in to comment.