(ctx context.Context, orgID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int)
| 865 | } |
| 866 | |
| 867 | func (s *sqlDatabase) addOrgEvent(ctx context.Context, orgID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error { |
| 868 | org, err := s.getOrgByID(ctx, s.conn, orgID) |
| 869 | if err != nil { |
| 870 | return fmt.Errorf("error updating instance: %w", err) |
| 871 | } |
| 872 | |
| 873 | msg := OrganizationEvent{ |
| 874 | Message: statusMessage, |
| 875 | EventType: event, |
| 876 | EventLevel: eventLevel, |
| 877 | OrgID: org.ID, |
| 878 | } |
| 879 | |
| 880 | // Use Create instead of Association.Append to avoid loading all existing events |
| 881 | if err := s.conn.Create(&msg).Error; err != nil { |
| 882 | return fmt.Errorf("error adding status message: %w", err) |
| 883 | } |
| 884 | |
| 885 | if maxEvents > 0 { |
| 886 | var count int64 |
| 887 | if err := s.conn.Model(&OrganizationEvent{}).Where("org_id = ?", org.ID).Count(&count).Error; err != nil { |
| 888 | return fmt.Errorf("error counting events: %w", err) |
| 889 | } |
| 890 | |
| 891 | if count > int64(maxEvents) { |
| 892 | // Get the ID of the Nth most recent event |
| 893 | var cutoffEvent OrganizationEvent |
| 894 | if err := s.conn.Model(&OrganizationEvent{}). |
| 895 | Select("id"). |
| 896 | Where("org_id = ?", org.ID). |
| 897 | Order("id desc"). |
| 898 | Offset(maxEvents - 1). |
| 899 | Limit(1). |
| 900 | First(&cutoffEvent).Error; err != nil { |
| 901 | return fmt.Errorf("error finding cutoff event: %w", err) |
| 902 | } |
| 903 | |
| 904 | // Delete all events older than the cutoff |
| 905 | if err := s.conn.Where("org_id = ? and id < ?", org.ID, cutoffEvent.ID).Unscoped().Delete(&OrganizationEvent{}).Error; err != nil { |
| 906 | return fmt.Errorf("error deleting old events: %w", err) |
| 907 | } |
| 908 | } |
| 909 | } |
| 910 | return nil |
| 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) |
no test coverage detected