@@ -183,8 +183,41 @@ func (u *UsageTracker) ScheduledEvent(ctx context.Context) error {
183183 errs = errors .Join (errs , err )
184184 }
185185
186+ if errs != nil {
187+ return fmt .Errorf ("error when updating the usage: %w" , errs )
188+ }
189+
190+ return nil
191+ }
192+
193+ func (u * UsageTracker ) GarbageCollection (ctx context.Context ) error {
194+ _ = u .log .WithName ("scheduled" )
195+
196+ var mcpUsages v1.MCPUsageList
197+ err := u .client .List (ctx , & mcpUsages )
186198 if err != nil {
187- return fmt .Errorf ("error when updating the usage: %w" , err )
199+ return fmt .Errorf ("error when getting list of mcp usages: %w" , err )
200+ }
201+
202+ now := time .Now ().UTC ().Truncate (time .Hour * 24 )
203+ oneMonth := time .Hour * 24 * 32
204+ latestTimestamp := now .Add (- oneMonth )
205+
206+ var errs error
207+ for _ , mcpUsage := range mcpUsages .Items {
208+ usagesToKeep := make ([]v1.DailyUsage , 0 , len (mcpUsage .Spec .Usage ))
209+ for _ , usage := range mcpUsage .Spec .Usage {
210+ if ! usage .Date .Time .Before (latestTimestamp ) {
211+ usagesToKeep = append (usagesToKeep , usage )
212+ }
213+ }
214+ mcpUsage .Spec .Usage = usagesToKeep
215+ err = u .client .Update (ctx , & mcpUsage )
216+ errs = errors .Join (errs , err )
217+ }
218+
219+ if errs != nil {
220+ return fmt .Errorf ("error when updating the usage: %w" , errs )
188221 }
189222
190223 return nil
0 commit comments