Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
This commit is contained in:
Gabriel Adrian Samfira 2025-04-23 08:59:33 +00:00
parent 020210d6ad
commit 436fd7746f
7 changed files with 301 additions and 7 deletions

View file

@ -86,6 +86,17 @@ type Pool struct {
Priority uint `gorm:"index:idx_pool_priority"`
}
type ScaleSetEvent struct {
gorm.Model
EventType params.EventType
EventLevel params.EventLevel
Message string `gorm:"type:text"`
ScaleSetID uint `gorm:"index:idx_scale_set_event"`
ScaleSet ScaleSet `gorm:"foreignKey:ScaleSetID"`
}
// ScaleSet represents a github scale set. Scale sets are almost identical to pools with a few
// notable exceptions:
// - Labels are no longer relevant
@ -135,7 +146,11 @@ type ScaleSet struct {
EnterpriseID *uuid.UUID `gorm:"index"`
Enterprise Enterprise `gorm:"foreignKey:EnterpriseID"`
Instances []Instance `gorm:"foreignKey:ScaleSetFkID"`
Status string
StatusReason string `gorm:"type:text"`
Instances []Instance `gorm:"foreignKey:ScaleSetFkID"`
Events []ScaleSetEvent `gorm:"foreignKey:ScaleSetID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
}
type RepositoryEvent struct {

View file

@ -432,6 +432,7 @@ func (s *sqlDatabase) migrateDB() error {
&ControllerInfo{},
&WorkflowJob{},
&ScaleSet{},
&ScaleSetEvent{},
); err != nil {
return errors.Wrap(err, "running auto migrate")
}

View file

@ -634,6 +634,40 @@ func (s *sqlDatabase) GetGithubEntity(_ context.Context, entityType params.Githu
return entity, nil
}
func (s *sqlDatabase) AddScaleSetEvent(ctx context.Context, scaleSetID uint, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error {
scaleSet, err := s.GetScaleSetByID(ctx, scaleSetID)
if err != nil {
return errors.Wrap(err, "updating instance")
}
msg := InstanceStatusUpdate{
Message: statusMessage,
EventType: event,
EventLevel: eventLevel,
}
if err := s.conn.Model(&scaleSet).Association("Events").Append(&msg); err != nil {
return errors.Wrap(err, "adding status message")
}
if maxEvents > 0 {
var latestEvents []ScaleSetEvent
q := s.conn.Model(&ScaleSetEvent{}).
Limit(maxEvents).Order("id desc").
Where("scale_set_id = ?", scaleSetID).Find(&latestEvents)
if q.Error != nil {
return errors.Wrap(q.Error, "fetching latest events")
}
if len(latestEvents) == maxEvents {
lastInList := latestEvents[len(latestEvents)-1]
if err := s.conn.Where("scale_set_id = ? and id < ?", scaleSetID, lastInList.ID).Unscoped().Delete(&ScaleSetEvent{}).Error; err != nil {
return errors.Wrap(err, "deleting old events")
}
}
}
return nil
}
func (s *sqlDatabase) addRepositoryEvent(ctx context.Context, repoID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error {
repo, err := s.GetRepositoryByID(ctx, repoID)
if err != nil {