Skip to content

Commit f4fef8a

Browse files
Implement prebuild schedules methods for dbmem
1 parent 4ceb549 commit f4fef8a

File tree

1 file changed

+49
-2
lines changed

1 file changed

+49
-2
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ func New() database.Store {
7575
parameterSchemas: make([]database.ParameterSchema, 0),
7676
presets: make([]database.TemplateVersionPreset, 0),
7777
presetParameters: make([]database.TemplateVersionPresetParameter, 0),
78+
presetPrebuildSchedules: make([]database.TemplateVersionPresetPrebuildSchedule, 0),
7879
provisionerDaemons: make([]database.ProvisionerDaemon, 0),
7980
provisionerJobs: make([]database.ProvisionerJob, 0),
8081
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
@@ -299,6 +300,7 @@ type data struct {
299300
telemetryItems []database.TelemetryItem
300301
presets []database.TemplateVersionPreset
301302
presetParameters []database.TemplateVersionPresetParameter
303+
presetPrebuildSchedules []database.TemplateVersionPresetPrebuildSchedule
302304
}
303305

304306
func tryPercentileCont(fs []float64, p float64) float64 {
@@ -2779,7 +2781,42 @@ func (q *FakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time
27792781
}
27802782

27812783
func (q *FakeQuerier) GetActivePresetPrebuildSchedules(ctx context.Context) ([]database.TemplateVersionPresetPrebuildSchedule, error) {
2782-
return nil, ErrUnimplemented
2784+
q.mutex.RLock()
2785+
defer q.mutex.RUnlock()
2786+
2787+
var activeSchedules []database.TemplateVersionPresetPrebuildSchedule
2788+
2789+
// Create a map of active template version IDs for quick lookup
2790+
activeTemplateVersions := make(map[uuid.UUID]bool)
2791+
for _, template := range q.templates {
2792+
if !template.Deleted && template.Deprecated == "" {
2793+
activeTemplateVersions[template.ActiveVersionID] = true
2794+
}
2795+
}
2796+
2797+
// Create a map of presets for quick lookup
2798+
presetMap := make(map[uuid.UUID]database.TemplateVersionPreset)
2799+
for _, preset := range q.presets {
2800+
presetMap[preset.ID] = preset
2801+
}
2802+
2803+
// Filter preset prebuild schedules to only include those for active template versions
2804+
for _, schedule := range q.presetPrebuildSchedules {
2805+
// Look up the preset using the map
2806+
preset, exists := presetMap[schedule.PresetID]
2807+
if !exists {
2808+
continue
2809+
}
2810+
2811+
// Check if preset's template version is active
2812+
if !activeTemplateVersions[preset.TemplateVersionID] {
2813+
continue
2814+
}
2815+
2816+
activeSchedules = append(activeSchedules, schedule)
2817+
}
2818+
2819+
return activeSchedules, nil
27832820
}
27842821

27852822
// nolint:revive // It's not a control flag, it's a filter.
@@ -9201,7 +9238,17 @@ func (q *FakeQuerier) InsertPresetPrebuildSchedule(ctx context.Context, arg data
92019238
return database.TemplateVersionPresetPrebuildSchedule{}, err
92029239
}
92039240

9204-
return database.TemplateVersionPresetPrebuildSchedule{}, ErrUnimplemented
9241+
q.mutex.Lock()
9242+
defer q.mutex.Unlock()
9243+
9244+
presetPrebuildSchedule := database.TemplateVersionPresetPrebuildSchedule{
9245+
ID: uuid.New(),
9246+
PresetID: arg.PresetID,
9247+
CronExpression: arg.CronExpression,
9248+
DesiredInstances: arg.DesiredInstances,
9249+
}
9250+
q.presetPrebuildSchedules = append(q.presetPrebuildSchedules, presetPrebuildSchedule)
9251+
return presetPrebuildSchedule, nil
92059252
}
92069253

92079254
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {

0 commit comments

Comments
 (0)