121 lines
3.2 KiB
Go
121 lines
3.2 KiB
Go
package slurm
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/go-resty/resty/v2"
|
|
"github.com/pkg/errors"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"sync"
|
|
)
|
|
|
|
type job struct {
|
|
sync.RWMutex
|
|
client *client
|
|
options *JobOptions
|
|
log log.Logger
|
|
}
|
|
|
|
func newJob(client *client, options *JobOptions) (*job, error) {
|
|
job := &job{
|
|
RWMutex: sync.RWMutex{},
|
|
client: client,
|
|
options: options,
|
|
log: log.Logger{},
|
|
}
|
|
return job, nil
|
|
}
|
|
func (j *job) ListJob() (getJobResp GetJobResp, err error) {
|
|
|
|
httpClient := resty.New().R()
|
|
result, _ := httpClient.SetHeader("Content-Type", "application/json").
|
|
SetHeader("X-SLURM-USER-NAME", j.client.restUsername).
|
|
SetHeader("X-SLURM-USER-TOKEN", j.client.token).
|
|
Get(j.client.url + "/slurm/" + j.client.clientVersion + "/jobs")
|
|
json.Unmarshal(result.Body(), &getJobResp)
|
|
if len(getJobResp.Errors) > 0 {
|
|
return getJobResp, errors.New(getJobResp.Errors[0].Error)
|
|
}
|
|
return getJobResp, nil
|
|
}
|
|
func (j *job) GetJob(getJobReq GetJobReq) (getJobResp GetJobResp, err error) {
|
|
|
|
httpClient := resty.New().R()
|
|
result, _ := httpClient.SetHeader("Content-Type", "application/json").
|
|
SetHeader("X-SLURM-USER-NAME", j.client.restUsername).
|
|
SetHeader("X-SLURM-USER-TOKEN", j.client.token).
|
|
Get(j.client.url + "/slurm/" + j.client.clientVersion + "/job/" + getJobReq.JobId)
|
|
|
|
json.Unmarshal(result.Body(), &getJobResp)
|
|
if len(getJobResp.Errors) > 0 {
|
|
return getJobResp, errors.New(getJobResp.Errors[0].Error)
|
|
}
|
|
return getJobResp, nil
|
|
}
|
|
func (j *job) ListDbJob() (getJobResp GetJobResp, err error) {
|
|
|
|
httpClient := resty.New().R()
|
|
result, _ := httpClient.SetHeader("Content-Type", "application/json").
|
|
SetHeader("X-SLURM-USER-NAME", j.client.restUsername).
|
|
SetHeader("X-SLURM-USER-TOKEN", j.client.token).
|
|
Get(j.client.url + "/slurm/" + j.client.clientVersion + "/jobs")
|
|
json.Unmarshal(result.Body(), &getJobResp)
|
|
if len(getJobResp.Errors) > 0 {
|
|
return getJobResp, errors.New(getJobResp.Errors[0].Error)
|
|
}
|
|
return getJobResp, nil
|
|
}
|
|
|
|
func (j *job) SubmitJob(jobOptions JobOptions) (submitJobResp SubmitJobResp, err error) {
|
|
|
|
url := j.client.url + "/slurm/" + j.client.clientVersion + "/job/submit"
|
|
|
|
httpClient := resty.New().R()
|
|
httpResp, err := httpClient.
|
|
SetHeader("Accept", "application/json").
|
|
SetHeader("X-SLURM-USER-NAME", j.client.restUsername).
|
|
SetHeader("X-SLURM-USER-TOKEN", j.client.token).
|
|
SetBody(&jobOptions).
|
|
SetResult(&submitJobResp).
|
|
Post(url)
|
|
if err != nil {
|
|
return SubmitJobResp{}, err
|
|
}
|
|
if httpResp.IsError() {
|
|
return SubmitJobResp{}, errors.Errorf(httpResp.String())
|
|
}
|
|
|
|
if len(submitJobResp.Errors) > 0 {
|
|
strErr, _ := submitJobResp.Errors[0].(string)
|
|
return submitJobResp, errors.New(strErr)
|
|
}
|
|
return submitJobResp, nil
|
|
|
|
}
|
|
|
|
func (j *job) CancelJob(cancelJobReq CancelJobReq) error {
|
|
url := j.client.url + "/slurm/" + j.client.clientVersion + fmt.Sprintf("/job/%s", cancelJobReq.JobId)
|
|
method := "DELETE"
|
|
|
|
client := &http.Client{}
|
|
req, _ := http.NewRequest(method, url, nil)
|
|
req.Header.Add("Content-Type", "application/json")
|
|
req.Header.Add("X-SLURM-USER-NAME", j.client.restUsername)
|
|
req.Header.Add("X-SLURM-USER-TOKEN", j.client.token)
|
|
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func(Body io.ReadCloser) {
|
|
err := Body.Close()
|
|
if err != nil {
|
|
|
|
}
|
|
}(res.Body)
|
|
|
|
return nil
|
|
}
|