@@ -3,6 +3,7 @@ package implserviceaccount
33import (
44 "context"
55
6+ "github.com/SigNoz/signoz/pkg/analytics"
67 "github.com/SigNoz/signoz/pkg/authz"
78 "github.com/SigNoz/signoz/pkg/emailing"
89 "github.com/SigNoz/signoz/pkg/errors"
@@ -15,15 +16,16 @@ import (
1516)
1617
1718type module struct {
18- store serviceaccounttypes.Store
19- authz authz.AuthZ
20- emailing emailing.Emailing
21- settings factory.ScopedProviderSettings
19+ store serviceaccounttypes.Store
20+ authz authz.AuthZ
21+ emailing emailing.Emailing
22+ analytics analytics.Analytics
23+ settings factory.ScopedProviderSettings
2224}
2325
24- func NewModule (store serviceaccounttypes.Store , authz authz.AuthZ , emailing emailing.Emailing , providerSettings factory.ProviderSettings ) serviceaccount.Module {
26+ func NewModule (store serviceaccounttypes.Store , authz authz.AuthZ , emailing emailing.Emailing , analytics analytics. Analytics , providerSettings factory.ProviderSettings ) serviceaccount.Module {
2527 settings := factory .NewScopedProviderSettings (providerSettings , "github.com/SigNoz/signoz/pkg/modules/serviceaccount/implserviceaccount" )
26- return & module {store : store , authz : authz , emailing : emailing , settings : settings }
28+ return & module {store : store , authz : authz , emailing : emailing , analytics : analytics , settings : settings }
2729}
2830
2931func (module * module ) Create (ctx context.Context , orgID valuer.UUID , serviceAccount * serviceaccounttypes.ServiceAccount ) error {
@@ -58,6 +60,8 @@ func (module *module) Create(ctx context.Context, orgID valuer.UUID, serviceAcco
5860 return err
5961 }
6062
63+ module .analytics .IdentifyUser (ctx , orgID .String (), serviceAccount .ID .String (), serviceAccount .Traits ())
64+ module .analytics .TrackUser (ctx , orgID .String (), serviceAccount .ID .String (), "Service Account Created" , serviceAccount .Traits ())
6165 return nil
6266}
6367
@@ -76,6 +80,8 @@ func (module *module) GetOrCreate(ctx context.Context, serviceAccount *serviceac
7680 return nil , err
7781 }
7882
83+ module .analytics .IdentifyUser (ctx , serviceAccount .OrgID .String (), serviceAccount .ID .String (), serviceAccount .Traits ())
84+ module .analytics .TrackUser (ctx , serviceAccount .OrgID .String (), serviceAccount .ID .String (), "Service Account Created" , serviceAccount .Traits ())
7985 return serviceAccount , nil
8086}
8187
@@ -186,6 +192,8 @@ func (module *module) Update(ctx context.Context, orgID valuer.UUID, input *serv
186192 return err
187193 }
188194
195+ module .analytics .IdentifyUser (ctx , orgID .String (), input .ID .String (), input .Traits ())
196+ module .analytics .TrackUser (ctx , orgID .String (), input .ID .String (), "Service Account Updated" , input .Traits ())
189197 return nil
190198}
191199
@@ -212,6 +220,7 @@ func (module *module) UpdateStatus(ctx context.Context, orgID valuer.UUID, input
212220 }
213221 }
214222
223+ module .analytics .TrackUser (ctx , orgID .String (), input .ID .String (), "Service Account Deleted" , map [string ]any {})
215224 return nil
216225}
217226
@@ -274,6 +283,7 @@ func (module *module) CreateFactorAPIKey(ctx context.Context, factorAPIKey *serv
274283 module .settings .Logger ().ErrorContext (ctx , "failed to send email" , "error" , err )
275284 }
276285
286+ module .analytics .TrackUser (ctx , serviceAccount .OrgID , serviceAccount .ID .String (), "API Key created" , factorAPIKey .Traits ())
277287 return nil
278288}
279289
@@ -295,8 +305,14 @@ func (module *module) ListFactorAPIKey(ctx context.Context, serviceAccountID val
295305 return serviceaccounttypes .NewFactorAPIKeyFromStorables (storables ), nil
296306}
297307
298- func (module * module ) UpdateFactorAPIKey (ctx context.Context , serviceAccountID valuer.UUID , factorAPIKey * serviceaccounttypes.FactorAPIKey ) error {
299- return module .store .UpdateFactorAPIKey (ctx , serviceAccountID , serviceaccounttypes .NewStorableFactorAPIKey (factorAPIKey ))
308+ func (module * module ) UpdateFactorAPIKey (ctx context.Context , orgID valuer.UUID , serviceAccountID valuer.UUID , factorAPIKey * serviceaccounttypes.FactorAPIKey ) error {
309+ err := module .store .UpdateFactorAPIKey (ctx , serviceAccountID , serviceaccounttypes .NewStorableFactorAPIKey (factorAPIKey ))
310+ if err != nil {
311+ return err
312+ }
313+
314+ module .analytics .TrackUser (ctx , orgID .String (), serviceAccountID .String (), "API Key updated" , factorAPIKey .Traits ())
315+ return nil
300316}
301317
302318func (module * module ) RevokeFactorAPIKey (ctx context.Context , serviceAccountID valuer.UUID , id valuer.UUID ) error {
@@ -324,9 +340,26 @@ func (module *module) RevokeFactorAPIKey(ctx context.Context, serviceAccountID v
324340 module .settings .Logger ().ErrorContext (ctx , "failed to send email" , "error" , err )
325341 }
326342
343+ module .analytics .TrackUser (ctx , serviceAccount .OrgID , serviceAccountID .String (), "API Key revoked" , factorAPIKey .Traits ())
327344 return nil
328345}
329346
347+ func (module * module ) Collect (ctx context.Context , orgID valuer.UUID ) (map [string ]any , error ) {
348+ stats := make (map [string ]any )
349+
350+ count , err := module .store .CountByOrgID (ctx , orgID )
351+ if err == nil {
352+ stats ["serviceaccount.count" ] = count
353+ }
354+
355+ count , err = module .store .CountFactorAPIKeysByOrgID (ctx , orgID )
356+ if err == nil {
357+ stats ["serviceaccount.keys.count" ] = count
358+ }
359+
360+ return stats , nil
361+ }
362+
330363func (module * module ) disableServiceAccount (ctx context.Context , orgID valuer.UUID , input * serviceaccounttypes.ServiceAccount ) error {
331364 err := module .authz .Revoke (ctx , orgID , input .Roles , authtypes .MustNewSubject (authtypes .TypeableServiceAccount , input .ID .String (), orgID , nil ))
332365 if err != nil {
0 commit comments