Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
28 lines
826 B
Go
28 lines
826 B
Go
package runtime
|
|
|
|
import "time"
|
|
|
|
// serverStartedAt is set once at process boot (see MarkServerStarted).
|
|
var serverStartedAt time.Time
|
|
|
|
// MarkServerStarted records the instant the WeKnora server process started.
|
|
// Call once from main() before heavy init so uptime reflects the full process
|
|
// lifetime, not merely when the HTTP listener binds.
|
|
func MarkServerStarted() {
|
|
serverStartedAt = time.Now().UTC()
|
|
}
|
|
|
|
// ServerStartedAt returns the boot instant in UTC. Zero when MarkServerStarted
|
|
// was not called (e.g. some tests); callers should treat zero as unknown.
|
|
func ServerStartedAt() time.Time {
|
|
return serverStartedAt
|
|
}
|
|
|
|
// ServerUptime returns elapsed time since MarkServerStarted. Zero when unset.
|
|
func ServerUptime() time.Duration {
|
|
if serverStartedAt.IsZero() {
|
|
return 0
|
|
}
|
|
return time.Since(serverStartedAt)
|
|
}
|