diff --git a/changelog/6.0.0_2024-06-19/activity-service.md b/changelog/6.0.0_2024-06-19/activity-service.md index 8f82f56fe79..1058280a061 100644 --- a/changelog/6.0.0_2024-06-19/activity-service.md +++ b/changelog/6.0.0_2024-06-19/activity-service.md @@ -2,5 +2,4 @@ Enhancement: Activitylog Service Adds a new service `activitylog` which stores events (activities) per resource. This data can be retrieved by clients to show item activities -https://github.com/owncloud/ocis/pull/9360 https://github.com/owncloud/ocis/pull/9327 diff --git a/changelog/unreleased/activity-api.md b/changelog/unreleased/activity-api.md new file mode 100644 index 00000000000..fd39c2be72b --- /dev/null +++ b/changelog/unreleased/activity-api.md @@ -0,0 +1,5 @@ +Enhancement: Activitylog API + +Adds an api to the `activitylog` service which allows retrieving data by clients to show item activities + +https://github.com/owncloud/ocis/pull/9361 diff --git a/services/activitylog/pkg/service/service.go b/services/activitylog/pkg/service/service.go index 7b4cfd3a459..4497a2f35b8 100644 --- a/services/activitylog/pkg/service/service.go +++ b/services/activitylog/pkg/service/service.go @@ -6,6 +6,7 @@ import ( "fmt" "path/filepath" "reflect" + "sync" "time" gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" @@ -40,6 +41,7 @@ type ActivitylogService struct { mux *chi.Mux evHistory ehsvc.EventHistoryService valService settingssvc.ValueService + lock sync.RWMutex registeredEvents map[string]events.Unmarshaller } @@ -73,6 +75,7 @@ func New(opts ...Option) (*ActivitylogService, error) { mux: o.Mux, evHistory: o.HistoryClient, valService: o.ValueClient, + lock: sync.RWMutex{}, registeredEvents: make(map[string]events.Unmarshaller), } @@ -184,6 +187,9 @@ func (a *ActivitylogService) AddSpaceActivity(spaceID *provider.StorageSpaceId, // Activities returns the activities for the given resource func (a *ActivitylogService) Activities(rid *provider.ResourceId) ([]RawActivity, error) { + a.lock.RLock() + defer a.lock.RUnlock() + resourceID := storagespace.FormatResourceID(*rid) records, err := a.store.Read(resourceID) @@ -205,6 +211,9 @@ func (a *ActivitylogService) Activities(rid *provider.ResourceId) ([]RawActivity // RemoveActivities removes the activities from the given resource func (a *ActivitylogService) RemoveActivities(rid *provider.ResourceId, toDelete map[string]struct{}) error { + a.lock.Lock() + defer a.lock.Unlock() + curActivities, err := a.Activities(rid) if err != nil { return err @@ -256,6 +265,9 @@ func (a *ActivitylogService) addActivity(initRef *provider.Reference, eventID st } func (a *ActivitylogService) storeActivity(resourceID string, eventID string, depth int, timestamp time.Time) error { + a.lock.Lock() + defer a.lock.Unlock() + records, err := a.store.Read(resourceID) if err != nil && err != microstore.ErrNotFound { return err