diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-09-24 14:13:16 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-09-24 14:13:16 -0400 |
| commit | 9fc90aeb4fb313ff8d6f9a8f42f20221ace6e386 (patch) | |
| tree | 39e87709f97d4fe7604d7210bddff9e676e362b7 | |
| parent | 9635df5fc6f91b09531caeb632ec795fba99d750 (diff) | |
| download | xesite-9fc90aeb4fb313ff8d6f9a8f42f20221ace6e386.tar.xz xesite-9fc90aeb4fb313ff8d6f9a8f42f20221ace6e386.zip | |
xesite: add rebuild metrics
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | go.mod | 2 | ||||
| -rw-r--r-- | internal/lume/lume.go | 22 | ||||
| -rw-r--r-- | xesite/github.go | 19 |
3 files changed, 34 insertions, 9 deletions
@@ -7,7 +7,6 @@ require ( github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 github.com/go-git/go-git/v5 v5.9.0 github.com/joho/godotenv v1.5.1 - golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 tailscale.com v1.48.2 ) @@ -42,6 +41,7 @@ require ( go4.org/mem v0.0.0-20220726221520-4f986261bf13 // indirect go4.org/netipx v0.0.0-20230728180743-ad4cb58a6516 // indirect golang.org/x/crypto v0.13.0 // indirect + golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.15.0 // indirect golang.org/x/sys v0.12.0 // indirect diff --git a/internal/lume/lume.go b/internal/lume/lume.go index f347d32..b58fed3 100644 --- a/internal/lume/lume.go +++ b/internal/lume/lume.go @@ -11,6 +11,7 @@ import ( "os/exec" "path/filepath" "sync" + "time" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" @@ -25,13 +26,13 @@ var ( _ fs.ReadFileFS = (*FS)(nil) _ fs.ReadDirFS = (*FS)(nil) - opens = metrics.LabelMap{Label: "name"} - readFiles = metrics.LabelMap{Label: "name"} - readDirs = metrics.LabelMap{Label: "name"} - builds = expvar.NewInt("gauge_xesite_builds") - buildErrors = expvar.NewInt("gauge_xesite_build_errors") - updates = expvar.NewInt("gauge_xesite_updates") - updateErrors = expvar.NewInt("gauge_xesite_update_errors") + opens = metrics.LabelMap{Label: "name"} + readFiles = metrics.LabelMap{Label: "name"} + readDirs = metrics.LabelMap{Label: "name"} + builds = expvar.NewInt("gauge_xesite_builds") + updates = expvar.NewInt("gauge_xesite_updates") + updateErrors = expvar.NewInt("gauge_xesite_update_errors") + lastBuildTime = expvar.NewInt("gauge_xesite_last_build_time_ms") ) func init() { @@ -199,6 +200,8 @@ func (f *FS) build(ctx context.Context) error { builds.Add(1) destDir := filepath.Join(f.repoDir, f.opt.StaticSiteDir, "_site") + begin := time.Now() + if err := f.writeConfig(); err != nil { return err } @@ -210,13 +213,16 @@ func (f *FS) build(ctx context.Context) error { cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { - buildErrors.Add(1) return err } slog.Debug("built site", "dir", destDir) f.fs = os.DirFS(destDir) + dur := time.Since(begin) + + lastBuildTime.Set(dur.Milliseconds()) + slog.Info("built site", "time", dur.String()) return nil } diff --git a/xesite/github.go b/xesite/github.go index 9d3c484..d74bc0b 100644 --- a/xesite/github.go +++ b/xesite/github.go @@ -3,15 +3,27 @@ package main import ( "context" "encoding/json" + "expvar" + "fmt" "log/slog" "net/http" "time" "github.com/go-git/go-git/v5" + "tailscale.com/metrics" "xeiaso.net/v4/internal/github" "xeiaso.net/v4/internal/lume" ) +var ( + webhookCount = expvar.NewInt("gauge_xesite_webhook_ingress") + buildErrors = metrics.LabelMap{Label: "err"} +) + +func init() { + expvar.Publish("gauge_xesite_build_errors", &buildErrors) +} + type GitHubWebhook struct { fs *lume.FS } @@ -30,10 +42,17 @@ func (gh *GitHubWebhook) ServeHTTP(w http.ResponseWriter, r *http.Request) { slog.Info("push!", "ref", event.Ref, "author", event.Pusher.Login) + if event.Ref != "refs/heads/"+*gitBranch { + slog.Error("not the right branch", "branch", event.Ref) + fmt.Fprintln(w, "OK") + return + } + go func() { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) defer cancel() if err := gh.fs.Update(ctx); err != nil { + buildErrors.Add(err.Error(), 1) if err == git.NoErrAlreadyUpToDate { slog.Info("already up to date") return |
