88 "github.com/makeopensource/leviathan/common"
99 md "github.com/makeopensource/leviathan/models"
1010 "github.com/makeopensource/leviathan/service/docker"
11+ "github.com/makeopensource/leviathan/service/labs"
1112 "github.com/rs/zerolog/log"
1213 "gorm.io/gorm"
1314 "os"
@@ -20,14 +21,16 @@ type JobQueue struct {
2021 db * gorm.DB
2122 dkSrv * docker.DkService
2223 contextMap * md.Map [string , func ()]
24+ labSrv * labs.LabService
2325}
2426
25- func NewJobQueue (totalJobs uint , db * gorm.DB , dk * docker.DkService ) * JobQueue {
27+ func NewJobQueue (totalJobs uint , db * gorm.DB , dk * docker.DkService , lab * labs. LabService ) * JobQueue {
2628 queue := & JobQueue {
2729 contextMap : & md.Map [string , func ()]{},
2830 db : db ,
2931 dkSrv : dk ,
3032 jobSemaphore : md .NewWorkerSemaphore (int (totalJobs )),
33+ labSrv : lab ,
3134 }
3235
3336 return queue
@@ -93,7 +96,7 @@ func (q *JobQueue) runJob(job *md.Job) {
9396 return
9497 }
9598
96- logStatusCh := make (chan md.JobError , 1 )
99+ logStatusCh := make (chan md.JobError )
97100
98101 q .setJobInProgress (job )
99102 err2 := client .StartContainer (contId )
@@ -102,13 +105,13 @@ func (q *JobQueue) runJob(job *md.Job) {
102105 return
103106 }
104107
105- // start writing to log file so that
108+ // start writing to log file so that,
106109 // we can stream changes to the log file to the user
107110 go func () {
108111 logStatusCh <- writeLogs (client , job )
109112 }()
110113
111- statusCh , errCh := client .Client . ContainerWait ( context . Background (), contId , dk . WaitConditionNotRunning )
114+ statusCh , errCh := client .WaitForContainerStatusChange ( contId )
112115 select {
113116 case <- statusCh :
114117 if mes := <- logStatusCh ; mes != nil {
@@ -155,14 +158,6 @@ func (q *JobQueue) setupJob(msg *md.Job) (*docker.DkClient, string, md.JobError)
155158 if err != nil {
156159 return nil , "" , md .JError ("Failed to create image" , err )
157160 }
158- // folder structure is '/<id>/autolab/Dockerfile, get the <random id> folder path
159- parent := filepath .Base (filepath .Dir (filepath .Dir (msg .LabData .DockerFilePath )))
160-
161- if parent != "labs" { // do not delete if job is from a saved lab
162- if err = os .RemoveAll (parent ); err != nil {
163- return nil , "" , md .JError ("failed to delete dockerfile" , err )
164- }
165- }
166161 }
167162
168163 resources := dk.Resources {
@@ -171,7 +166,12 @@ func (q *JobQueue) setupJob(msg *md.Job) (*docker.DkClient, string, md.JobError)
171166 PidsLimit : & msg .LabData .JobLimits .PidsLimit ,
172167 }
173168
174- contId , err := machine .CreateNewContainer (msg .JobId , msg .LabData .ImageTag , filepath .Base (msg .TmpJobFolderPath ), msg .LabData .JobEntryCmd , resources )
169+ contId , err := machine .CreateNewContainer (
170+ msg .JobId ,
171+ msg .LabData .ImageTag ,
172+ msg .LabData .JobEntryCmd ,
173+ resources ,
174+ )
175175 if err != nil {
176176 return nil , "" , md .JError ("unable to create job container" , err )
177177 }
0 commit comments