diff options
author | Alan Pearce | 2025-03-19 20:49:46 +0100 |
---|---|---|
committer | Alan Pearce | 2025-03-19 20:51:40 +0100 |
commit | 383ee780613116e78db9114a39a2d6127533463c (patch) | |
tree | c07e2af7ae910d5c6f80836dce8457ba44c54ceb /internal | |
parent | 49e3004d33bf84aa081460e4a6d89a8d84cc12b0 (diff) | |
download | searchix-383ee780613116e78db9114a39a2d6127533463c.tar.lz searchix-383ee780613116e78db9114a39a2d6127533463c.tar.zst searchix-383ee780613116e78db9114a39a2d6127533463c.zip |
feat: show last/next/current indexing run time
Diffstat (limited to 'internal')
-rw-r--r-- | internal/components/data.go | 28 | ||||
-rw-r--r-- | internal/components/search.go | 36 | ||||
-rw-r--r-- | internal/index/index_meta.go | 11 | ||||
-rw-r--r-- | internal/index/search.go | 5 |
4 files changed, 80 insertions, 0 deletions
diff --git a/internal/components/data.go b/internal/components/data.go index 977b90e..9bc0c5e 100644 --- a/internal/components/data.go +++ b/internal/components/data.go @@ -1,12 +1,21 @@ package components import ( + "time" + "go.alanpearce.eu/searchix/frontend" "go.alanpearce.eu/searchix/internal/config" search "go.alanpearce.eu/searchix/internal/index" "go.alanpearce.eu/searchix/internal/nix" ) +var Indexing struct { + InProgress bool + StartedAt time.Time + FinishedAt time.Time + NextRun time.Time +} + type TemplateData struct { Sources []*config.Source Source *config.Source @@ -34,3 +43,22 @@ func convertMatch[I nix.Importable](m nix.Importable) *I { return &i } + +func SetNextRun(nextRun time.Time) { + Indexing.NextRun = nextRun +} + +func SetLastUpdated(last time.Time) { + Indexing.FinishedAt = last +} + +func MarkIndexingStarted() { + Indexing.StartedAt = time.Now() + Indexing.InProgress = true +} + +func MarkIndexingFinished(nextRun time.Time) { + Indexing.FinishedAt = time.Now() + Indexing.InProgress = false + Indexing.NextRun = nextRun +} diff --git a/internal/components/search.go b/internal/components/search.go index 0a7c991..d629eef 100644 --- a/internal/components/search.go +++ b/internal/components/search.go @@ -1,6 +1,8 @@ package components import ( + "time" + g "go.alanpearce.eu/gomponents" . "go.alanpearce.eu/gomponents/html" ) @@ -40,6 +42,40 @@ func SearchPage(tdata TemplateData, r ResultData, children ...g.Node) g.Node { g.Text(" and "), A(Href("https://github.com/nix-community/home-manager"), g.Text("home-manager")), ), + g.If(Indexing.InProgress, + P(Class("notice"), + g.Text("Indexing in progress, started "), + Time( + DateTime(Indexing.StartedAt.Format(time.RFC3339)), + Title(Indexing.StartedAt.Format(time.RFC3339)), + g.Text(time.Since(Indexing.StartedAt).Round(time.Second).String()), + ), + g.Text(" ago. "), + g.If(!Indexing.FinishedAt.IsZero(), + g.Text("Last run took "), + Time( + DateTime(Indexing.FinishedAt.Format(time.RFC3339)), + Title(Indexing.FinishedAt.Format(time.RFC3339)), + g.Text(time.Since(Indexing.FinishedAt).Round(time.Minute).String()), + ), + ), + ), + P( + g.Text("Indexing last ran "), + Time( + DateTime(Indexing.FinishedAt.Format(time.RFC3339)), + Title(Indexing.FinishedAt.Format(time.RFC3339)), + g.Text(time.Since(Indexing.FinishedAt).Round(time.Minute).String()), + ), + g.Text(" ago, will run again in "), + Time( + DateTime(Indexing.NextRun.Format(time.RFC3339)), + Title(Indexing.NextRun.Format(time.RFC3339)), + g.Text(time.Until(Indexing.NextRun).Round(time.Minute).String()), + ), + g.Text("."), + ), + ), script(tdata.Assets.ByPath["/static/search.js"]), Search(tdata, r), Section( diff --git a/internal/index/index_meta.go b/internal/index/index_meta.go index 635965a..0ff835b 100644 --- a/internal/index/index_meta.go +++ b/internal/index/index_meta.go @@ -118,3 +118,14 @@ func (i *Meta) SetSourceMeta(source string, meta *SourceMeta) { } i.data.Sources[source] = meta } + +func (i *Meta) LastUpdated() time.Time { + var last time.Time + for _, sourceMeta := range i.data.Sources { + if sourceMeta.Updated.After(last) { + last = sourceMeta.Updated + } + } + + return last +} diff --git a/internal/index/search.go b/internal/index/search.go index 3f9c13a..d5bf177 100644 --- a/internal/index/search.go +++ b/internal/index/search.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/gob" + "time" "go.alanpearce.eu/searchix/internal/config" "go.alanpearce.eu/searchix/internal/nix" @@ -33,6 +34,10 @@ type ReadIndex struct { meta *Meta } +func (index *ReadIndex) LastUpdated() time.Time { + return index.meta.LastUpdated() +} + func (index *ReadIndex) GetEnabledSources() ([]string, errors.E) { facet := bleve.NewFacetRequest("Source", 100) query := bleve.NewMatchAllQuery() |