Initial fork of github.com/alonswartz/notesium into librenotes: - Source moved to internal/notesium/ (package notesium) - Thin entry point at cmd/librenotes/main.go - Module renamed to git.librete.ch/public/librenotes - main() exposed as notesium.Run() - LICENSE preserved (MIT), NOTICE added with attribution - Web assets and completion.bash co-located with embedding code to satisfy go:embed path constraints Closes #3, #34, #35. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package notesium
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
)
|
|
|
|
type WebInfo struct {
|
|
Webroot string `json:"webroot"`
|
|
Writable bool `json:"writable"`
|
|
StopOnIdle bool `json:"stop-on-idle"`
|
|
VersionCheck bool `json:"daily-version-check"`
|
|
}
|
|
|
|
type BuildInfo struct {
|
|
GitVersion string `json:"gitversion"`
|
|
Buildtime string `json:"buildtime"`
|
|
GoVersion string `json:"goversion"`
|
|
LatestReleaseURL string `json:"latest-release-url"`
|
|
}
|
|
|
|
type MemoryInfo struct {
|
|
MemoryAlloc string `json:"alloc"`
|
|
MemoryTotalAlloc string `json:"total-alloc"`
|
|
MemorySys string `json:"sys"`
|
|
MemoryLookups uint64 `json:"lookups"`
|
|
MemoryMallocs uint64 `json:"mallocs"`
|
|
MemoryFrees uint64 `json:"frees"`
|
|
}
|
|
|
|
type RuntimeResponse struct {
|
|
Home string `json:"home"`
|
|
Version string `json:"version"`
|
|
Platform string `json:"platform"`
|
|
Web WebInfo `json:"web"`
|
|
Build BuildInfo `json:"build"`
|
|
Memory MemoryInfo `json:"memory"`
|
|
}
|
|
|
|
func GetRuntimeInfo(dir string, webOpts webOptions) RuntimeResponse {
|
|
var memStats runtime.MemStats
|
|
runtime.ReadMemStats(&memStats)
|
|
|
|
return RuntimeResponse{
|
|
Home: dir,
|
|
Version: getVersion(gitversion),
|
|
Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH),
|
|
Web: WebInfo{
|
|
Webroot: webOpts.webroot,
|
|
Writable: !webOpts.readOnly,
|
|
StopOnIdle: webOpts.heartbeat,
|
|
VersionCheck: webOpts.check,
|
|
},
|
|
Build: BuildInfo{
|
|
GitVersion: gitversion,
|
|
Buildtime: buildtime,
|
|
GoVersion: runtime.Version(),
|
|
LatestReleaseURL: latestReleaseURL,
|
|
},
|
|
Memory: MemoryInfo{
|
|
MemoryAlloc: bytesToHumanReadable(memStats.Alloc),
|
|
MemoryTotalAlloc: bytesToHumanReadable(memStats.TotalAlloc),
|
|
MemorySys: bytesToHumanReadable(memStats.Sys),
|
|
MemoryLookups: memStats.Lookups,
|
|
MemoryMallocs: memStats.Mallocs,
|
|
MemoryFrees: memStats.Frees,
|
|
},
|
|
}
|
|
}
|
|
|
|
func bytesToHumanReadable(bytes uint64) string {
|
|
const unit = 1024
|
|
if bytes < unit {
|
|
return fmt.Sprintf("%d B", bytes)
|
|
}
|
|
div, exp := int64(unit), 0
|
|
for n := bytes / unit; n >= unit; n /= unit {
|
|
div *= unit
|
|
exp++
|
|
}
|
|
return fmt.Sprintf("%.1f %cB", float64(bytes)/float64(div), "KMGTPE"[exp])
|
|
}
|