| 181 | } |
| 182 | |
| 183 | func (t *Task) Execute() error { |
| 184 | if err := t.taskRepo.Save(context.Background(), t.Task); err != nil { |
| 185 | return err |
| 186 | } |
| 187 | var err error |
| 188 | t.Log(i18n.GetWithName("TaskStart", t.Name)) |
| 189 | for _, subTask := range t.SubTasks { |
| 190 | subTask.CancelWhenTimeout = t.CancelWhenTimeout |
| 191 | t.Task.CurrentStep = subTask.StepAlias |
| 192 | t.updateTask(t.Task) |
| 193 | if err = subTask.Execute(); err == nil { |
| 194 | if subTask.Rollback != nil { |
| 195 | t.Rollbacks = append(t.Rollbacks, subTask.Rollback) |
| 196 | } |
| 197 | } else { |
| 198 | if subTask.IgnoreErr { |
| 199 | err = nil |
| 200 | continue |
| 201 | } |
| 202 | t.Task.ErrorMsg = err.Error() |
| 203 | t.Task.Status = constant.StatusFailed |
| 204 | for _, rollback := range t.Rollbacks { |
| 205 | rollback(t) |
| 206 | } |
| 207 | t.updateTask(t.Task) |
| 208 | break |
| 209 | } |
| 210 | } |
| 211 | if t.Task.Status == constant.StatusExecuting { |
| 212 | t.Task.Status = constant.StatusSuccess |
| 213 | t.Log(i18n.GetWithName("TaskSuccess", t.Name)) |
| 214 | } else { |
| 215 | t.Log(i18n.GetWithName("TaskFailed", t.Name)) |
| 216 | } |
| 217 | t.Log("[TASK-END]") |
| 218 | t.Task.EndAt = time.Now() |
| 219 | t.updateTask(t.Task) |
| 220 | _ = t.logFile.Close() |
| 221 | return err |
| 222 | } |
| 223 | |
| 224 | func (t *Task) DeleteLogFile() { |
| 225 | _ = os.Remove(t.Task.LogFile) |