aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-09-24 14:13:16 -0400
committerXe Iaso <me@xeiaso.net>2023-09-24 14:13:16 -0400
commit9fc90aeb4fb313ff8d6f9a8f42f20221ace6e386 (patch)
tree39e87709f97d4fe7604d7210bddff9e676e362b7
parent9635df5fc6f91b09531caeb632ec795fba99d750 (diff)
downloadxesite-9fc90aeb4fb313ff8d6f9a8f42f20221ace6e386.tar.xz
xesite-9fc90aeb4fb313ff8d6f9a8f42f20221ace6e386.zip
xesite: add rebuild metrics
Signed-off-by: Xe Iaso <me@xeiaso.net>
-rw-r--r--go.mod2
-rw-r--r--internal/lume/lume.go22
-rw-r--r--xesite/github.go19
3 files changed, 34 insertions, 9 deletions
diff --git a/go.mod b/go.mod
index e7586ce..5826e97 100644
--- a/go.mod
+++ b/go.mod
@@ -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