Skip to content

Commit

Permalink
Update PBS to allow other install directories. Push changes to gorele…
Browse files Browse the repository at this point in the history
…aser for Palmetto 2.
  • Loading branch information
dougnd committed Jul 24, 2024
1 parent 812dcf3 commit 08e0793
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 26 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
/cmd/jobperf/jobperf

dist/
.DS_Store
17 changes: 17 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,23 @@ builds:
- linux
goarch:
- amd64
- id: "palmetto2"
main: "./cmd/jobperf"
binary: "jobperf-palmetto2"
ldflags:
- "-X main.buildVersion={{.Version}}"
- "-X main.buildCommit={{.Commit}}"
- "-X main.buildDate={{.Date}}"
- "-X main.defaultSupportURL=https://docs.rcd.clemson.edu/support"
- "-X main.defaultDocsURL=https://docs.rcd.clemson.edu/"
- "-X main.defaultUseOpenOnDemand=true"
- "-X main.defaultOpenOnDemandURL=https://ondemand.rcd.clemson.edu"
env:
- CGO_ENABLED=0
goos:
- linux
goarch:
- amd64
- id: "palmetto"
main: "./cmd/jobperf"
binary: "jobperf-palmetto"
Expand Down
21 changes: 15 additions & 6 deletions pbs/pbs.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,30 @@ func IsAvailable() bool {
return false
}

type jobEngine struct{}
type jobEngine struct {
pbsBinPath string
}

func NewJobEngine() jobperf.JobEngine {
return jobEngine{}
var err error
var engine jobEngine
engine.pbsBinPath, err = exec.LookPath("qstat")
if err != nil {
slog.Error("failed to find pbs binary path. Defaulting to /opt/pbs/default/bin", "err", err)
engine.pbsBinPath = "/opt/pbs/default/bin"
}
return engine
}

func (_ jobEngine) GetJobByID(jobID string) (*jobperf.Job, error) {
return qstatGetJob(jobID)
func (e jobEngine) GetJobByID(jobID string) (*jobperf.Job, error) {
return e.qstatGetJob(jobID)
}

func (_ jobEngine) SelectJobIDs(q jobperf.JobQuery) ([]string, error) {
return nil, nil
}

func (_ jobEngine) NodeStatsSession(j *jobperf.Job, hostname string) (jobperf.NodeStatsSession, error) {
func (e jobEngine) NodeStatsSession(j *jobperf.Job, hostname string) (jobperf.NodeStatsSession, error) {
var statsSession nodeStatsSession
var err error
statsSession.jobID = j.ID
Expand All @@ -63,7 +72,7 @@ func (_ jobEngine) NodeStatsSession(j *jobperf.Job, hostname string) (jobperf.No
if err != nil {
return nil, fmt.Errorf("failed find jobperf: %w", err)
}
cmd := fmt.Sprintf("/opt/pbs/default/bin/pbs_attach -j %v %v -nodestats", j.ID, ex)
cmd := fmt.Sprintf("%s/pbs_attach -j %v %v -nodestats", e.pbsBinPath, j.ID, ex)
err = statsSession.sshSession.Start(cmd)
if err != nil {
return nil, fmt.Errorf("failed start nodestats with cmd=%v on node %v with ssh: %w", cmd, hostname, err)
Expand Down
23 changes: 3 additions & 20 deletions pbs/qstat.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,9 @@ func parseExecVNode(execVNode string) ([]jobperf.Node, error) {
return nodes, nil
}

func qstatGetJob(jobID string) (*jobperf.Job, error) {
func (e jobEngine) qstatGetJob(jobID string) (*jobperf.Job, error) {
slog.Debug("fetching job by id", "jobID", jobID)
cmd := exec.Command("/opt/pbs/default/bin/qstat", "-xf", "-Fjson", jobID)
cmd := exec.Command(e.pbsBinPath+"/qstat", "-xf", "-Fjson", jobID)
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
Expand Down Expand Up @@ -209,24 +209,7 @@ func qstatGetJob(jobID string) (*jobperf.Job, error) {
return nil, fmt.Errorf("failed to parse exec_vnode: %w", err)
}
}
slog.Debug("succesfully parsed qstat response", "job", j)
slog.Debug("successfully parsed qstat response", "job", j)

return &j, nil
}

type QSelectOptions struct {
State string
// TODO: support other options
}

func QSelectJobs(opt QSelectOptions) ([]string, error) {
cmd := exec.Command("/opt/pbs/default/bin/qselect", "-s", opt.State)
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
return nil, fmt.Errorf("failed to run qselect with opt %v: %w", opt, err)
}

return strings.Split(out.String(), "\n"), nil
}

0 comments on commit 08e0793

Please sign in to comment.