main.go (63 lines of code) (raw):
package main
import (
"flag"
"github.com/go-redis/redis/v8"
"gitlab.com/codmill/customer-projects/guardian/deliverable-receiver/helpers"
"log"
"net/http"
"context"
)
type MyHttpApp struct {
index IndexHandler
healthcheck HealthcheckHandler
initiate InitiateHandler
uploadFile UploadHandler
validateChecksum ValidateChecksumHandler
}
func SetupRedis(config *helpers.Config) (*redis.Client, error) {
log.Printf("Connecting to Redis on %s", config.Redis.Address)
client := redis.NewClient(&redis.Options{
Addr: config.Redis.Address,
Password: config.Redis.Password,
DB: config.Redis.DBNum,
})
_, err := client.Ping(context.TODO()).Result()
if err != nil {
log.Printf("Could not contact Redis: %s", err)
return nil, err
}
log.Printf("Done.")
return client, nil
}
func main() {
var app MyHttpApp
configPathPtr := flag.String("config", "config/serverconfig.yaml", "path to the yaml config file")
flag.Parse()
/*
read in config and establish connection to persistence layer
*/
log.Printf("Reading config from %s", *configPathPtr)
config, configReadErr := helpers.ReadConfig(*configPathPtr)
log.Print("Done.")
if configReadErr != nil {
log.Fatal("No configuration, can't continue")
}
redisClient, redisErr := SetupRedis(config)
if redisErr != nil {
log.Fatal("Could not connect to redis")
}
app.healthcheck.redisClient = redisClient
app.uploadFile.redisClient = redisClient
app.uploadFile.config = config
app.initiate.redisClient = redisClient
app.initiate.config = config
app.validateChecksum.redisClient = redisClient
app.validateChecksum.config = config
http.Handle("/", app.index)
http.Handle("/healthcheck", app.healthcheck)
http.Handle("/initiate", app.initiate)
http.Handle("/upload", app.uploadFile)
http.Handle("/validate", app.validateChecksum)
log.Printf("Starting server on port 9000")
startServerErr := http.ListenAndServe(":9000", nil)
if startServerErr != nil {
log.Fatal(startServerErr)
}
}