@@ -123,18 +123,8 @@ func (api *RestApi) MountFrontendApiRoutes(r *mux.Router) {
123
123
}
124
124
}
125
125
126
- // StartJobApiResponse model
127
- type StartJobApiResponse struct {
128
- Message string `json:"msg"`
129
- }
130
-
131
- // DeleteJobApiResponse model
132
- type DeleteJobApiResponse struct {
133
- Message string `json:"msg"`
134
- }
135
-
136
- // UpdateUserApiResponse model
137
- type UpdateUserApiResponse struct {
126
+ // DefaultApiResponse model
127
+ type DefaultJobApiResponse struct {
138
128
Message string `json:"msg"`
139
129
}
140
130
@@ -341,7 +331,7 @@ func (api *RestApi) getJobs(rw http.ResponseWriter, r *http.Request) {
341
331
withMetadata := false
342
332
filter := & model.JobFilter {}
343
333
page := & model.PageRequest {ItemsPerPage : 25 , Page : 1 }
344
- order := & model.OrderByInput {Field : "startTime" , Order : model .SortDirectionEnumDesc }
334
+ order := & model.OrderByInput {Field : "startTime" , Type : "col" , Order : model .SortDirectionEnumDesc }
345
335
346
336
for key , vals := range r .URL .Query () {
347
337
switch key {
@@ -790,6 +780,11 @@ func (api *RestApi) startJob(rw http.ResponseWriter, r *http.Request) {
790
780
return
791
781
}
792
782
783
+ // aquire lock to avoid race condition between API calls
784
+ var unlockOnce sync.Once
785
+ api .RepositoryMutex .Lock ()
786
+ defer unlockOnce .Do (api .RepositoryMutex .Unlock )
787
+
793
788
// Check if combination of (job_id, cluster_id, start_time) already exists:
794
789
jobs , err := api .JobRepository .FindAll (& req .JobID , & req .Cluster , nil )
795
790
if err != nil && err != sql .ErrNoRows {
@@ -804,12 +799,27 @@ func (api *RestApi) startJob(rw http.ResponseWriter, r *http.Request) {
804
799
}
805
800
}
806
801
807
- repository .TriggerJobStart (repository.JobWithUser {Job : & req , User : repository .GetUserFromContext (r .Context ())})
802
+ id , err := api .JobRepository .Start (& req )
803
+ if err != nil {
804
+ handleError (fmt .Errorf ("insert into database failed: %w" , err ), http .StatusInternalServerError , rw )
805
+ return
806
+ }
807
+ // unlock here, adding Tags can be async
808
+ unlockOnce .Do (api .RepositoryMutex .Unlock )
809
+
810
+ for _ , tag := range req .Tags {
811
+ if _ , err := api .JobRepository .AddTagOrCreate (repository .GetUserFromContext (r .Context ()), id , tag .Type , tag .Name , tag .Scope ); err != nil {
812
+ http .Error (rw , err .Error (), http .StatusInternalServerError )
813
+ handleError (fmt .Errorf ("adding tag to new job %d failed: %w" , id , err ), http .StatusInternalServerError , rw )
814
+ return
815
+ }
816
+ }
808
817
818
+ log .Printf ("new job (id: %d): cluster=%s, jobId=%d, user=%s, startTime=%d" , id , req .Cluster , req .JobID , req .User , req .StartTime )
809
819
rw .Header ().Add ("Content-Type" , "application/json" )
810
820
rw .WriteHeader (http .StatusCreated )
811
- json .NewEncoder (rw ).Encode (StartJobApiResponse {
812
- Message : fmt . Sprintf ( "Successfully triggered job start" ) ,
821
+ json .NewEncoder (rw ).Encode (DefaultJobApiResponse {
822
+ Message : "success" ,
813
823
})
814
824
}
815
825
@@ -892,7 +902,7 @@ func (api *RestApi) deleteJobById(rw http.ResponseWriter, r *http.Request) {
892
902
}
893
903
rw .Header ().Add ("Content-Type" , "application/json" )
894
904
rw .WriteHeader (http .StatusOK )
895
- json .NewEncoder (rw ).Encode (DeleteJobApiResponse {
905
+ json .NewEncoder (rw ).Encode (DefaultJobApiResponse {
896
906
Message : fmt .Sprintf ("Successfully deleted job %s" , id ),
897
907
})
898
908
}
@@ -943,7 +953,7 @@ func (api *RestApi) deleteJobByRequest(rw http.ResponseWriter, r *http.Request)
943
953
944
954
rw .Header ().Add ("Content-Type" , "application/json" )
945
955
rw .WriteHeader (http .StatusOK )
946
- json .NewEncoder (rw ).Encode (DeleteJobApiResponse {
956
+ json .NewEncoder (rw ).Encode (DefaultJobApiResponse {
947
957
Message : fmt .Sprintf ("Successfully deleted job %d" , job .ID ),
948
958
})
949
959
}
@@ -987,7 +997,7 @@ func (api *RestApi) deleteJobBefore(rw http.ResponseWriter, r *http.Request) {
987
997
988
998
rw .Header ().Add ("Content-Type" , "application/json" )
989
999
rw .WriteHeader (http .StatusOK )
990
- json .NewEncoder (rw ).Encode (DeleteJobApiResponse {
1000
+ json .NewEncoder (rw ).Encode (DefaultJobApiResponse {
991
1001
Message : fmt .Sprintf ("Successfully deleted %d jobs" , cnt ),
992
1002
})
993
1003
}
0 commit comments