From 78a5b847aee0d06ba5896b7a44fb361ca3ea13cd Mon Sep 17 00:00:00 2001 From: serr Date: Sun, 6 Apr 2025 15:12:45 +0300 Subject: [PATCH] api/count added --- main.go | 10 ++++++++++ mvc/controllers/api.go | 24 ++++++++++++++++++++++++ mvc/controllers/middlewares.go | 2 +- tools/logs.go | 29 +++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 mvc/controllers/api.go create mode 100644 tools/logs.go diff --git a/main.go b/main.go index 2afceb3..85eecab 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,11 @@ go build main.go sudo systemctl start server.service */ +func init() { + log.SetFlags(log.LstdFlags) + log.SetPrefix("hikan.ru | ") +} + func main() { var app *models.App var err error @@ -64,6 +69,11 @@ func setupRoutes(a *models.App) *http.ServeMux { router.Handle("/", m(controllers_pages.MainPageHandler(a))) } + // api + { + router.Handle("/api/count/", m(controllers.CountHandler())) + } + return router } diff --git a/mvc/controllers/api.go b/mvc/controllers/api.go new file mode 100644 index 0000000..7a7b5bb --- /dev/null +++ b/mvc/controllers/api.go @@ -0,0 +1,24 @@ +package controllers + +import ( + "log" + "main/tools" + "net/http" +) + +func CountHandler() http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var count []byte + var err error + if count, err = tools.GetJournalctlLogs("server", "hikan.ru", 24); err != nil { + log.Printf("%s", err.Error()) + } + SendCount(w, count) + }) +} + +func SendCount(w http.ResponseWriter, data []byte) { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.WriteHeader(http.StatusOK) + w.Write(data) +} diff --git a/mvc/controllers/middlewares.go b/mvc/controllers/middlewares.go index 436c173..9f52b6f 100644 --- a/mvc/controllers/middlewares.go +++ b/mvc/controllers/middlewares.go @@ -38,6 +38,6 @@ func LoggingMiddleware(next http.Handler) http.Handler { next.ServeHTTP(w, r) - log.Printf("%s %s in %v", r.Method, r.URL.Path, time.Since(start)) + log.Printf("%s %s %v", r.Method, r.URL.Path, time.Since(start)) }) } diff --git a/tools/logs.go b/tools/logs.go new file mode 100644 index 0000000..903758e --- /dev/null +++ b/tools/logs.go @@ -0,0 +1,29 @@ +package tools + +import ( + "bytes" + "fmt" + "os/exec" + "runtime" +) + +func GetJournalctlLogs(serviceName, grepPattern string, hoursAgo int) ([]byte, error) { + + if runtime.GOOS != "linux" { + return nil, fmt.Errorf("not a linux") + } + + cmd := exec.Command("sh", "-c", + fmt.Sprintf("journalctl -u %s --since '%d hours ago' | grep -c '%s'", + serviceName, hoursAgo, grepPattern)) + + var output bytes.Buffer + cmd.Stdout = &output + + err := cmd.Run() + if err != nil { + return nil, err + } + + return output.Bytes(), nil +}