1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00

monitoring: Get build information from Go's runtime

Currently, chasquid gets version information from build-time flags that
have to be passed by the user.

This patch extends this logic so, if no flags are given, Go's build
information will be used to construct a synthetic version string.
This commit is contained in:
Alberto Bertogli
2023-02-05 10:58:48 +00:00
parent ab63834cba
commit a54d81f406
2 changed files with 67 additions and 32 deletions

View File

@@ -2,12 +2,15 @@ package main
import (
"context"
"expvar"
"flag"
"fmt"
"html/template"
"net/http"
"os"
"runtime"
"runtime/debug"
"strconv"
"time"
"blitiri.com.ar/go/chasquid/internal/config"
@@ -20,6 +23,70 @@ import (
_ "net/http/pprof"
)
// Build information, overridden at build time using
// -ldflags="-X main.version=blah".
var (
version = ""
sourceDateTs = ""
)
var (
versionVar = expvar.NewString("chasquid/version")
sourceDate time.Time
sourceDateVar = expvar.NewString("chasquid/sourceDateStr")
sourceDateTsVar = expvarom.NewInt("chasquid/sourceDateTimestamp",
"timestamp when the binary was built, in seconds since epoch")
)
func parseVersionInfo() {
bi, ok := debug.ReadBuildInfo()
if !ok {
panic("unable to read build info")
}
dirty := false
gitRev := ""
gitTime := ""
for _, s := range bi.Settings {
switch s.Key {
case "vcs.modified":
if s.Value == "true" {
dirty = true
}
case "vcs.time":
gitTime = s.Value
case "vcs.revision":
gitRev = s.Value
}
}
if sourceDateTs != "" {
sdts, err := strconv.ParseInt(sourceDateTs, 10, 0)
if err != nil {
panic(err)
}
sourceDate = time.Unix(sdts, 0)
} else {
sourceDate, _ = time.Parse(time.RFC3339, gitTime)
}
sourceDateVar.Set(sourceDate.Format("2006-01-02 15:04:05 -0700"))
sourceDateTsVar.Set(sourceDate.Unix())
if version == "" {
version = sourceDate.Format("20060102")
if gitRev != "" {
version += fmt.Sprintf("-%.9s", gitRev)
}
if dirty {
version += "-dirty"
}
}
versionVar.Set(version)
}
func launchMonitoringServer(conf *config.Config) {
log.Infof("Monitoring HTTP server listening on %s", conf.MonitoringAddress)