From 9786be50ae3c824eeda4f14499e5e5aacd819fd5 Mon Sep 17 00:00:00 2001 From: jkoberg Date: Wed, 6 Mar 2024 11:01:38 +0100 Subject: [PATCH] feat: add more sse events Signed-off-by: jkoberg --- changelog/unreleased/more-sse-events.md | 5 +++ services/clientlog/pkg/command/server.go | 4 +++ services/clientlog/pkg/service/events.go | 4 +-- services/clientlog/pkg/service/service.go | 43 +++++++++++++++++------ 4 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 changelog/unreleased/more-sse-events.md diff --git a/changelog/unreleased/more-sse-events.md b/changelog/unreleased/more-sse-events.md new file mode 100644 index 0000000000..8be1faee9e --- /dev/null +++ b/changelog/unreleased/more-sse-events.md @@ -0,0 +1,5 @@ +Enhancement: Send more sse events + +We added sse events for `ItemTrashed`, `ItemRestored`,`ContainerCreated` and `FileRenamed` + +https://github.com/owncloud/ocis/pull/8587 diff --git a/services/clientlog/pkg/command/server.go b/services/clientlog/pkg/command/server.go index 4dcc14da71..6a76158cbe 100644 --- a/services/clientlog/pkg/command/server.go +++ b/services/clientlog/pkg/command/server.go @@ -26,6 +26,10 @@ import ( // all events we care about var _registeredEvents = []events.Unmarshaller{ events.UploadReady{}, + events.ItemTrashed{}, + events.ItemRestored{}, + events.ItemMoved{}, + events.ContainerCreated{}, } // Server is the entrypoint for the server command. diff --git a/services/clientlog/pkg/service/events.go b/services/clientlog/pkg/service/events.go index 7435ea877d..16d4a278b9 100644 --- a/services/clientlog/pkg/service/events.go +++ b/services/clientlog/pkg/service/events.go @@ -1,7 +1,7 @@ package service -// FileReadyEvent is emitted when the postprocessing of a file is finished -type FileReadyEvent struct { +// FileEvent is emitted when a file is uploaded/renamed/deleted/... +type FileEvent struct { ParentItemID string `json:"parentitemid"` ItemID string `json:"itemid"` } diff --git a/services/clientlog/pkg/service/service.go b/services/clientlog/pkg/service/service.go index f905c8984c..bd2a5a1c87 100644 --- a/services/clientlog/pkg/service/service.go +++ b/services/clientlog/pkg/service/service.go @@ -8,6 +8,7 @@ import ( "reflect" gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "go.opentelemetry.io/otel/trace" "github.com/cs3org/reva/v2/pkg/events" @@ -97,19 +98,24 @@ func (cl *ClientlogService) processEvent(event events.Event) { default: err = errors.New("unhandled event") case events.UploadReady: - info, err := utils.GetResource(ctx, e.FileRef, gwc) - if err != nil { - cl.log.Error().Err(err).Interface("event", event).Msg("error getting resource") + evType = "postprocessing-finished" + users, data, err = processFileEvent(ctx, e.FileRef, gwc) + case events.ItemTrashed: + evType = "item-trashed" + users, data, err = processFileEvent(ctx, e.Ref, gwc) + case events.ItemRestored: + evType = "item-restored" + users, data, err = processFileEvent(ctx, e.Ref, gwc) + case events.ContainerCreated: + evType = "folder-created" + users, data, err = processFileEvent(ctx, e.Ref, gwc) + case events.ItemMoved: + // we are only interested in the rename case + if !utils.ResourceIDEqual(e.OldReference.GetResourceId(), e.Ref.GetResourceId()) || e.Ref.GetPath() == e.OldReference.GetPath() { return } - - evType = "postprocessing-finished" - data = FileReadyEvent{ - ParentItemID: storagespace.FormatResourceID(*info.GetParentId()), - ItemID: storagespace.FormatResourceID(*info.GetId()), - } - - users, err = utils.GetSpaceMembers(ctx, info.GetSpace().GetId().GetOpaqueId(), gwc, utils.ViewerRole) + evType = "item-renamed" + users, data, err = processFileEvent(ctx, e.Ref, gwc) } if err != nil { @@ -136,3 +142,18 @@ func (cl *ClientlogService) sendSSE(userIDs []string, evType string, data interf Message: b, }) } + +func processFileEvent(ctx context.Context, ref *provider.Reference, gwc gateway.GatewayAPIClient) ([]string, FileEvent, error) { + info, err := utils.GetResource(ctx, ref, gwc) + if err != nil { + return nil, FileEvent{}, err + } + + data := FileEvent{ + ParentItemID: storagespace.FormatResourceID(*info.GetParentId()), + ItemID: storagespace.FormatResourceID(*info.GetId()), + } + + users, err := utils.GetSpaceMembers(ctx, info.GetSpace().GetId().GetOpaqueId(), gwc, utils.ViewerRole) + return users, data, err +}