From 69d903ed3cf60f85e1400d6b7f6fa28113790f1e Mon Sep 17 00:00:00 2001 From: Kevin Hoffman Date: Mon, 26 Feb 2024 11:07:04 -0500 Subject: [PATCH 1/2] Adds a revision field to the catalog contents, the raw file, and the heartbeats --- internal/catalogserver/server.go | 4 ++-- internal/globalservice/client.go | 6 ++++-- internal/medialibrary/library.go | 14 ++++++++++---- internal/models/global_api.go | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/internal/catalogserver/server.go b/internal/catalogserver/server.go index bae0c2c..2545007 100644 --- a/internal/catalogserver/server.go +++ b/internal/catalogserver/server.go @@ -62,13 +62,13 @@ func (srv *CatalogServer) Start() error { func (srv *CatalogServer) startHeartbeatEmitter() { ticker := time.NewTicker(heartbeatIntervalSeconds * time.Second) // publish one immediately - _ = srv.globalServiceClient.PublishHeartbeat(srv.nctx, srv.library.Name) + _ = srv.globalServiceClient.PublishHeartbeat(srv.nctx, srv.library) go func() { for { select { case <-ticker.C: - _ = srv.globalServiceClient.PublishHeartbeat(srv.nctx, srv.library.Name) + _ = srv.globalServiceClient.PublishHeartbeat(srv.nctx, srv.library) case <-srv.hbQuit: ticker.Stop() close(srv.hbQuit) diff --git a/internal/globalservice/client.go b/internal/globalservice/client.go index daad884..cb0ed09 100644 --- a/internal/globalservice/client.go +++ b/internal/globalservice/client.go @@ -7,6 +7,7 @@ import ( "time" "github.com/nats-io/nats.go" + "github.com/synadia-labs/natster/internal/medialibrary" "github.com/synadia-labs/natster/internal/models" ) @@ -146,10 +147,11 @@ func (c *Client) PublishEvent(eventType string, catalog string, target string, r return c.nc.Flush() } -func (c *Client) PublishHeartbeat(nctx *models.NatsterContext, catalog string) error { +func (c *Client) PublishHeartbeat(nctx *models.NatsterContext, library *medialibrary.MediaLibrary) error { hb := models.Heartbeat{ AccountKey: nctx.AccountPublicKey, - Catalog: catalog, + Catalog: library.Name, + Revision: library.LastModified, } hbBytes, _ := json.Marshal(&hb) err := c.nc.Publish("natster.global.heartbeats.put", hbBytes) diff --git a/internal/medialibrary/library.go b/internal/medialibrary/library.go index 29740c4..c7d6e3a 100644 --- a/internal/medialibrary/library.go +++ b/internal/medialibrary/library.go @@ -11,13 +11,15 @@ import ( "path" "path/filepath" "slices" + "time" ) type MediaLibrary struct { - Name string `json:"name"` - RootDir string `json:"root_dir"` - Description string `json:"description"` - Entries []*MediaEntry `json:"entries"` + Name string `json:"name"` + RootDir string `json:"root_dir"` + Description string `json:"description"` + LastModified int64 `json:"last_modified"` + Entries []*MediaEntry `json:"entries"` } type MediaEntry struct { @@ -51,10 +53,14 @@ func Load(name string) (*MediaLibrary, error) { if err != nil { return nil, err } + if library.LastModified == 0 { + library.LastModified = time.Now().UTC().Unix() + } return &library, nil } func (library *MediaLibrary) Save() error { + library.LastModified = time.Now().UTC().Unix() natsterHome, err := getNatsterHome() if err != nil { return err diff --git a/internal/models/global_api.go b/internal/models/global_api.go index 304e21b..d9a2619 100644 --- a/internal/models/global_api.go +++ b/internal/models/global_api.go @@ -11,6 +11,7 @@ const ( type Heartbeat struct { Catalog string `json:"catalog"` AccountKey string `json:"account_key"` + Revision int64 `json:"revision"` } // Events are emitted by the natster server process From 0f56da935dfc6a60cf1ba99183a312fb1691f45f Mon Sep 17 00:00:00 2001 From: Kevin Hoffman Date: Mon, 26 Feb 2024 11:09:28 -0500 Subject: [PATCH 2/2] auto-write new revision date for old files --- internal/medialibrary/library.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/medialibrary/library.go b/internal/medialibrary/library.go index c7d6e3a..3e9e5ce 100644 --- a/internal/medialibrary/library.go +++ b/internal/medialibrary/library.go @@ -55,6 +55,7 @@ func Load(name string) (*MediaLibrary, error) { } if library.LastModified == 0 { library.LastModified = time.Now().UTC().Unix() + _ = library.Save() } return &library, nil }