(ctx context.Context, entID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int)
| 911 | } |
| 912 | |
| 913 | func (s *sqlDatabase) addEnterpriseEvent(ctx context.Context, entID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error { |
| 914 | ent, err := s.getEnterpriseByID(ctx, s.conn, entID) |
| 915 | if err != nil { |
| 916 | return fmt.Errorf("error updating instance: %w", err) |
| 917 | } |
| 918 | |
| 919 | msg := EnterpriseEvent{ |
| 920 | Message: statusMessage, |
| 921 | EventType: event, |
| 922 | EventLevel: eventLevel, |
| 923 | EnterpriseID: ent.ID, |
| 924 | } |
| 925 | |
| 926 | // Use Create instead of Association.Append to avoid loading all existing events |
| 927 | if err := s.conn.Create(&msg).Error; err != nil { |
| 928 | return fmt.Errorf("error adding status message: %w", err) |
| 929 | } |
| 930 | |
| 931 | if maxEvents > 0 { |
| 932 | var count int64 |
| 933 | if err := s.conn.Model(&EnterpriseEvent{}).Where("enterprise_id = ?", ent.ID).Count(&count).Error; err != nil { |
| 934 | return fmt.Errorf("error counting events: %w", err) |
| 935 | } |
| 936 | |
| 937 | if count > int64(maxEvents) { |
| 938 | // Get the ID of the Nth most recent event |
| 939 | var cutoffEvent EnterpriseEvent |
| 940 | if err := s.conn.Model(&EnterpriseEvent{}). |
| 941 | Select("id"). |
| 942 | Where("enterprise_id = ?", ent.ID). |
| 943 | Order("id desc"). |
| 944 | Offset(maxEvents - 1). |
| 945 | Limit(1). |
| 946 | First(&cutoffEvent).Error; err != nil { |
| 947 | return fmt.Errorf("error finding cutoff event: %w", err) |
| 948 | } |
| 949 | |
| 950 | // Delete all events older than the cutoff |
| 951 | if err := s.conn.Where("enterprise_id = ? and id < ?", ent.ID, cutoffEvent.ID).Unscoped().Delete(&EnterpriseEvent{}).Error; err != nil { |
| 952 | return fmt.Errorf("error deleting old events: %w", err) |
| 953 | } |
| 954 | } |
| 955 | } |
| 956 | |
| 957 | return nil |
| 958 | } |
| 959 | |
| 960 | func (s *sqlDatabase) AddEntityEvent(ctx context.Context, entity params.ForgeEntity, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error { |
| 961 | if maxEvents == 0 { |
no test coverage detected