Skip to content

Commit ef0af81

Browse files
fix: Mixed payload issue on cronjobs
1 parent 5b56587 commit ef0af81

File tree

3 files changed

+51
-23
lines changed

3 files changed

+51
-23
lines changed

app/handlers/cron_jobs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func CreateCronJob(c *fiber.Ctx) error {
5050
}
5151

5252
// Register and run cronjob
53-
if err := cron_jobs.RegisterAndRun(&payload); err != nil {
53+
if err := cron_jobs.RegisterAndRun(payload); err != nil {
5454
return err
5555
}
5656

app/models/cron_job.go

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/google/uuid"
77
"github.com/limanmys/render-engine/internal/database"
8+
"github.com/limanmys/render-engine/pkg/logger"
89
)
910

1011
type CronJob struct {
@@ -42,24 +43,31 @@ func NewCronJob() *CronJob {
4243
}
4344

4445
func (cj *CronJob) UpdateAsProcessing() {
45-
cj.Status = StatusProcessing
46-
cj.Message = "Cronjob processing."
47-
cj.Output = "-"
48-
49-
database.Connection().Model(cj).Save(cj)
46+
if err := database.Connection().Model(&CronJob{}).Where("id = ?", cj.ID).Updates(&CronJob{
47+
Status: StatusProcessing,
48+
Message: "Cronjob processing",
49+
Output: "-",
50+
}).Error; err != nil {
51+
logger.Sugar().Errorw("error when saving job, %s", err.Error())
52+
}
5053
}
5154

52-
func (cj *CronJob) UpdateAsFailed(message string) {
53-
cj.Status = StatusFailed
54-
cj.Message = message
55-
56-
database.Connection().Model(cj).Save(cj)
55+
func (cj *CronJob) UpdateAsFailed(output string) {
56+
if err := database.Connection().Model(&CronJob{}).Where("id = ?", cj.ID).Updates(&CronJob{
57+
Status: StatusFailed,
58+
Message: "Cronjob failed.",
59+
Output: output,
60+
}).Error; err != nil {
61+
logger.Sugar().Errorw("error when saving job, %s", err.Error())
62+
}
5763
}
5864

5965
func (cj *CronJob) UpdateAsDone(output string) {
60-
cj.Status = StatusDone
61-
cj.Output = output
62-
cj.Message = "CronJob completed successfully. Waiting for next run."
63-
64-
database.Connection().Model(cj).Save(cj)
66+
if err := database.Connection().Model(&CronJob{}).Where("id = ?", cj.ID).Updates(&CronJob{
67+
Status: StatusDone,
68+
Message: "Cronjob completed successfully. Waiting for next run.",
69+
Output: output,
70+
}).Error; err != nil {
71+
logger.Sugar().Errorw("error when saving job, %s", err.Error())
72+
}
6573
}

pkg/cron_jobs/cron_jobs.go

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cron_jobs
22

33
import (
44
b64 "encoding/base64"
5+
"encoding/json"
56
"time"
67

78
"github.com/google/uuid"
@@ -16,10 +17,11 @@ import (
1617
)
1718

1819
// RegisterAndRun registers and runs new cron job
19-
func RegisterAndRun(cj *models.CronJob) error {
20-
_, err := constants.GLOBAL_SCHEDULER.Tag(cj.ID.String()).Every(1).Week().Weekday(time.Weekday(cj.Day)).At(cj.Time).Do(func() {
20+
func RegisterAndRun(cj models.CronJob) error {
21+
if _, err := constants.GLOBAL_SCHEDULER.Tag(cj.ID.String()).Every(1).Week().Weekday(time.Weekday(cj.Day)).At(cj.Time).Do(func() {
2122
// Update cronjob as processing
2223
cj.UpdateAsProcessing()
24+
2325
// Get extension
2426
extension, err := liman.GetExtension(&models.Extension{
2527
ID: cj.ExtensionID.String(),
@@ -92,15 +94,33 @@ func RegisterAndRun(cj *models.CronJob) error {
9294
return
9395
}
9496

97+
// Run command
9598
output := linux.Execute(command)
96-
cj.UpdateAsDone(output)
97-
})
98-
if err != nil {
99+
// If returns liman json
100+
if helpers.LimanJSON(output) {
101+
// Unmarshal response
102+
var response = make(map[string]interface{})
103+
if err := json.Unmarshal([]byte(output), &response); err != nil {
104+
// Update job as failed
105+
cj.UpdateAsFailed(err.Error())
106+
}
107+
// Check is liman returns unsuccess
108+
if response["status"].(int) != 200 {
109+
// Set as failed
110+
cj.UpdateAsFailed(response["message"].(string))
111+
} else {
112+
// Set as done
113+
cj.UpdateAsDone(response["message"].(string))
114+
}
115+
} else {
116+
// Set as done
117+
cj.UpdateAsDone(output)
118+
}
119+
}); err != nil {
99120
return err
100121
}
101122

102123
constants.GLOBAL_SCHEDULER.StartAsync()
103-
104124
return nil
105125
}
106126

@@ -122,7 +142,7 @@ func InitCronJobs() error {
122142
}
123143

124144
for _, cronjob := range cronjobs {
125-
if err := RegisterAndRun(cronjob); err != nil {
145+
if err := RegisterAndRun(*cronjob); err != nil {
126146
cronjob.UpdateAsFailed(err.Error())
127147
}
128148
}

0 commit comments

Comments
 (0)