Skip to content

Commit

Permalink
feat: add status starting
Browse files Browse the repository at this point in the history
  • Loading branch information
fiftin committed Sep 12, 2023
1 parent 0522ad1 commit aef7cbc
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 36 deletions.
10 changes: 9 additions & 1 deletion api/projects/tasks.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,15 @@ func StopTask(w http.ResponseWriter, r *http.Request) {
return
}

err := helpers.TaskPool(r).StopTask(targetTask)
var stopObj struct {
Force bool `json:"force"`
}

if !helpers.Bind(w, r, &stopObj) {
return
}

err := helpers.TaskPool(r).StopTask(targetTask, stopObj.Force)
if err != nil {
helpers.WriteError(w, err)
return
Expand Down
2 changes: 1 addition & 1 deletion api/runners/runners.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func GetRunner(w http.ResponseWriter, r *http.Request) {
continue
}

if tsk.Task.Status == db.TaskRunningStatus {
if tsk.Task.Status == db.TaskStartingStatus {

data.NewJobs = append(data.NewJobs, runners.JobData{
Username: tsk.Username,
Expand Down
1 change: 1 addition & 0 deletions db/Task.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ type TaskStatus string

const (
TaskWaitingStatus TaskStatus = "waiting"
TaskStartingStatus TaskStatus = "starting"
TaskRunningStatus TaskStatus = "running"
TaskStoppingStatus TaskStatus = "stopping"
TaskStoppedStatus TaskStatus = "stopped"
Expand Down
3 changes: 3 additions & 0 deletions services/tasks/LocalJob.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ func (t *LocalJob) destroyKeys() {
}

func (t *LocalJob) Run(username string, incomingVersion *string) (err error) {

t.SetStatus(db.TaskRunningStatus)

err = t.prepareRun()
if err != nil {
return err
Expand Down
10 changes: 7 additions & 3 deletions services/tasks/TaskPool.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ func CreateTaskPool(store db.Store) TaskPool {
}
}

func (p *TaskPool) StopTask(targetTask db.Task) error {
func (p *TaskPool) StopTask(targetTask db.Task, forceStop bool) error {
tsk := p.GetTask(targetTask.ID)
if tsk == nil { // task not active, but exists in database
tsk = &TaskRunner{
Expand All @@ -221,7 +221,11 @@ func (p *TaskPool) StopTask(targetTask db.Task) error {
} else {
status := tsk.Task.Status

tsk.SetStatus(db.TaskStoppingStatus)
if forceStop {
tsk.SetStatus(db.TaskStoppedStatus)
} else {
tsk.SetStatus(db.TaskStoppingStatus)
}

if status == db.TaskRunningStatus {
tsk.kill()
Expand Down Expand Up @@ -328,7 +332,7 @@ func (p *TaskPool) AddTask(taskObj db.Task, userID *int, projectID int) (newTask
err = taskRunner.populateDetails()
if err != nil {
taskRunner.Log("Error: " + err.Error())
taskRunner.fail()
taskRunner.SetStatus(db.TaskFailStatus)
return
}

Expand Down
37 changes: 10 additions & 27 deletions services/tasks/TaskRunner.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func (t *TaskRunner) SetStatus(status db.TaskStatus) {
return
}

switch t.Task.Status {
switch t.Task.Status { // check old status
case db.TaskRunningStatus:
if status == db.TaskWaitingStatus {
//panic("running TaskRunner cannot be " + status)
Expand All @@ -81,18 +81,13 @@ func (t *TaskRunner) SetStatus(status db.TaskStatus) {
return
}

//if t.Task.Status == db.TaskStoppingStatus {
// switch status {
// case db.TaskFailStatus:
// status = db.TaskStoppedStatus
// case db.TaskStoppedStatus:
// default:
// panic("stopping TaskRunner cannot be " + status)
// }
//}

t.Task.Status = status

if status == db.TaskRunningStatus {
now := time.Now()
t.Task.Start = &now
}

t.saveStatus()

if status == db.TaskFailStatus {
Expand Down Expand Up @@ -132,10 +127,6 @@ func (t *TaskRunner) kill() {
t.job.Kill()
}

func (t *TaskRunner) fail() {
t.SetStatus(db.TaskFailStatus)
}

func (t *TaskRunner) createTaskEvent() {
objType := db.EventTask
desc := "Task ID " + strconv.Itoa(t.Task.ID) + " (" + t.Template.Name + ")" + " finished - " + strings.ToUpper(string(t.Task.Status))
Expand Down Expand Up @@ -170,15 +161,13 @@ func (t *TaskRunner) run() {
t.createTaskEvent()
}()

// TODO: more details
// Mark task as stopped if user stopped task during preparation (before task run).
if t.Task.Status == db.TaskStoppingStatus {
t.SetStatus(db.TaskStoppedStatus)
return
}

now := time.Now()
t.Task.Start = &now
t.SetStatus(db.TaskRunningStatus)
t.SetStatus(db.TaskStartingStatus)

objType := db.EventTask
desc := "Task ID " + strconv.Itoa(t.Task.ID) + " (" + t.Template.Name + ")" + " is running"
Expand All @@ -199,12 +188,6 @@ func (t *TaskRunner) run() {
t.Log("Started: " + strconv.Itoa(t.Task.ID))
t.Log("Run TaskRunner with template: " + t.Template.Name + "\n")

// Mark task as stopped if user stops task during preparation (before task run).
if t.Task.Status == db.TaskStoppingStatus {
t.SetStatus(db.TaskStoppedStatus)
return
}

var username string
var incomingVersion *string

Expand All @@ -225,7 +208,7 @@ func (t *TaskRunner) run() {

if err != nil {
t.Log("Running playbook failed: " + err.Error())
t.fail()
t.SetStatus(db.TaskFailStatus)
return
}

Expand Down Expand Up @@ -262,7 +245,7 @@ func (t *TaskRunner) prepareError(err error, errMsg string) error {
}

if err != nil {
t.fail()
t.SetStatus(db.TaskFailStatus)
panic(err)
}

Expand Down
20 changes: 16 additions & 4 deletions web/src/components/TaskLogView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,12 @@
<v-btn
color="error"
style="position: absolute; bottom: 10px; right: 10px;"
v-if="item.status === 'running' || item.status === 'waiting'"
@click="stopTask()"
v-if="canStop"
@click="stopTask(item.status === 'stopping')"
>
{{ $t('stop') }}
{{ item.status === 'stopping' ? $t('forceStop') : $t('stop') }}
</v-btn>

</div>
</template>

Expand Down Expand Up @@ -139,6 +140,7 @@ export default {
user: {},
};
},
watch: {
async itemId() {
this.reset();
Expand All @@ -150,17 +152,27 @@ export default {
await this.loadData();
},
},
computed: {
canStop() {
return ['running', 'stopping', 'waiting', 'starting'].includes(this.item.status);
},
},
async created() {
socket.addListener((data) => this.onWebsocketDataReceived(data));
await this.loadData();
},
methods: {
async stopTask() {
async stopTask(force) {
await axios({
method: 'post',
url: `/api/project/${this.projectId}/tasks/${this.itemId}/stop`,
responseType: 'json',
data: {
force,
},
});
},
Expand Down
7 changes: 7 additions & 0 deletions web/src/components/TaskStatus.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import IndeterminateProgressCircular from '@/components/IndeterminateProgressCir
const TaskStatus = Object.freeze({
WAITING: 'waiting',
STARTING: 'starting',
RUNNING: 'running',
SUCCESS: 'success',
ERROR: 'error',
Expand All @@ -28,6 +29,8 @@ export default {
switch (status) {
case TaskStatus.WAITING:
return 'mdi-alarm';
case TaskStatus.STARTING:
return 'mdi-play-circle';
case TaskStatus.RUNNING:
return '';
case TaskStatus.SUCCESS:
Expand All @@ -47,6 +50,8 @@ export default {
switch (status) {
case TaskStatus.WAITING:
return 'Waiting';
case TaskStatus.STARTING:
return 'Starting...';
case TaskStatus.RUNNING:
return 'Running';
case TaskStatus.SUCCESS:
Expand All @@ -66,6 +71,8 @@ export default {
switch (status) {
case TaskStatus.WAITING:
return '';
case TaskStatus.STARTING:
return 'warning';
case TaskStatus.RUNNING:
return 'primary';
case TaskStatus.SUCCESS:
Expand Down
1 change: 1 addition & 0 deletions web/src/lang/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ export default {
author: 'Author',
duration: 'Duration',
stop: 'Stop',
forceStop: 'Force Stop',
deleteTeamMember: 'Delete team member',
team2: 'Team',
newTeamMember: 'New Team Member',
Expand Down

0 comments on commit aef7cbc

Please sign in to comment.