From f6173a09b21fb049fd3c566bc94e863eb6ff2ba0 Mon Sep 17 00:00:00 2001 From: Sebastien Laithier Date: Thu, 11 May 2023 11:53:27 +0200 Subject: [PATCH] Adding proper logging file, cleaning main.go, gitignore update --- .gitignore | 1 + app/main.go | 102 +++++++++++++++++++++++++++------------------------- 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index 1377554..66b35c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.swp +*.log diff --git a/app/main.go b/app/main.go index 23c6fc9..c5fdef1 100644 --- a/app/main.go +++ b/app/main.go @@ -1,77 +1,81 @@ +// Receive http PURGE request and broadcast it to several Varnish servers. package main import ( - "fmt" - "io" - "log" - "net/http" - "os" - "strings" + "io" + "log" + "net/http" + "os" + "strings" ) const ( - // MethodPurge declaration for Varnish. - MethodPurge = "PURGE" + // MethodPurge declaration for Varnish. + MethodPurge = "PURGE" ) var ( - varnishList = MakeVarnishList() - status = "200 Purged" + varnishList = MakeVarnishList() + status = "200 Purged" ) // MakeVarnishList reads the list of varnish servers from a file on disk. func MakeVarnishList() []string { - Data, err := os.ReadFile("./varnish") - if err != nil { - log.Fatal(err) - } - sliceData := strings.Split(string(Data), ",") - return sliceData + Data, err := os.ReadFile("./varnish") + if err != nil { + log.Fatal(err) + } + sliceData := strings.Split(string(Data), ",") + return sliceData } // PurgeHandler handles PURGE request to broadcast it to all varnish instances. func PurgeHandler(w http.ResponseWriter, r *http.Request) { - url := r.URL.String() - status := SendToVarnish(url) - if status != "200 Purged" { - w.WriteHeader(405) - } - io.WriteString(w, status) + url := r.URL.String() + status := SendToVarnish(url) + if status != "200 Purged" { + w.WriteHeader(405) + } + io.WriteString(w, status) } // SendToVarnish send to all varnish servers define in varnishList the PURGE request. func SendToVarnish(url string) string { - status = "200 Purged" - // Take url to ban as argument. - // Loop over the list of Varnish servers and send PURGE request to each. - for i := 0; i < len(varnishList); i++ { - //status = "200 Purged" - client := &http.Client{} - domain := strings.Trim(varnishList[i], "\r\n") - req, err := http.NewRequest(MethodPurge, domain + url, nil) - if err != nil { - log.Fatal("NewRequest: %s", err) - } - resp, err := client.Do(req) - if err != nil { - log.Fatal("Client.do: %s", err) - } - //fmt.Printf("Resp: %v\n", resp) - if resp.StatusCode != 200 { - status = "405 Not Allowed" - } - fmt.Println("Purge URL" + " " + domain + url + " : " + status) - } - return status + status = "200 Purged" + // Take url to ban as argument. + // Loop over the list of Varnish servers and send PURGE request to each. + // Update status variable to check if servers have successfully purge url. + for i := 0; i < len(varnishList); i++ { + client := &http.Client{} + domain := strings.Trim(varnishList[i], "\r\n") + req, err := http.NewRequest(MethodPurge, domain+url, nil) + if err != nil { + log.Fatal("NewRequest: %s", err) + } + resp, err := client.Do(req) + if err != nil { + log.Fatal("Client.do: %s", err) + } + if resp.StatusCode != 200 { + status = "405 Not Allowed" + } + log.Println("Purge " + domain + url + " : " + status) + } + return status } // HealthHandler handles healthcheck requests and return 200. -func HealthHandler(w http.ResponseWriter, r *http.Request) { - io.WriteString(w, "OK") +func HealthHandler(w http.ResponseWriter, _ *http.Request) { + io.WriteString(w, "OK") } func main() { - http.HandleFunc("/", PurgeHandler) - http.HandleFunc("/healthcheck", HealthHandler) - log.Fatal(http.ListenAndServe(":6081",nil)) + logFile, err := os.OpenFile("./log/purge.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + panic(err) + } + log.SetOutput(logFile) + http.HandleFunc("/", PurgeHandler) + http.HandleFunc("/healthcheck", HealthHandler) + log.Fatal(http.ListenAndServe(":6081", nil)) }