slurmfs

package module
v0.0.0-...-5b54120 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 27, 2023 License: BSD-3-Clause Imports: 13 Imported by: 0

README

The SLURM REST API provides a simple mechanism for working with job scripts in the batch queue.

This project aims to wrap this REST API into the following file structure,

/{user}/ pending/{job_id}/ meta script

running/{job_id}/ meta script info

completed/YYYY/MM/dd/{job_id} meta script info

new/

allocations/{proj}/ info

status/ info

Copying a script file into /new will add it to the queue. Listing entries inside queue, running, or recent will show information about jobs. Writing to meta will update the job queue information. Job-scripts are read-only, since slurm does not support updating them.

The allocations directory displays information about projects and their system usage info.

The status directory displays overall queue and partition status.

At present, it just wraps a few API calls into golang functions.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	http.Client
}

Creating an http client from a UNIX socket https://gist.github.com/teknoraver/5ffacb8757330715bcbcc90e6d46ac74

func UnixClient

func UnixClient(path string) Client

func (Client) Call

func (client Client) Call(method, path string, data []byte) ([]byte, error)

func (Client) Create

func (client Client) Create(script string, prop JobProps) (resp SubmitResponse, err error)

func (Client) Jobs

func (client Client) Jobs() (resp JobsResponse, err error)

func (Client) Remove

func (client Client) Remove(job_id int) error

func (Client) Update

func (client Client) Update(job_id int, prop JobProps) (resp SlurmResponse, err error)

type JobMeta

type JobMeta struct {
	Name      string
	Partition string
	Account   string

	User_Name string
	Job_State string

	Tasks      int
	Max_Nodes  int
	Node_Count int

	Dependency  string
	Requeue     bool
	Restart_Cnt int

	Command     string
	Environment map[string]string

	Time_Limit    int64
	Deadline      int64
	End_Time      int64
	Eligible_Time int64

	Required_Nodes            string
	Excluded_Nodes            string
	Current_Working_Directory string
	Start_Time                int64
	Job_Resources             Resources
	Standard_Output           string
	Standard_Error            string
	Exit_Code                 int
}

V0.0.39_JOB_INFO subset

type JobProps

type JobProps struct {
	Name      string `json:"name,omitempty"`
	Partition string `json:"partition,omitempty"`
	Account   string `json:"account,omitempty"`

	Nodes int `json:"nodes,omitempty"`
	// min,max node request
	Tasks          int    `json:"tasks,omitempty"`
	Tasks_Per_Node int    `json:"tasks_per_node,omitempty"`
	GPU_Binding    string `json:"gpu_binding,omitempty"`
	GPU_Frequency  string `json:"gpu_frequency,omitempty"`
	GPUs_Per_Task  string `json:"gpus_per_task,omitempty"`
	No_Kill        bool   `json:"no_kill,omitempty"`

	Time_Limit int `json:"time_limit,omitempty"`
	// minutes
	Deadline string `json:"deadline,omitempty"`
	// remove if "est start" > deadline-min_walltime
	Time_Minimum int `json:"time_minimum,omitempty"`
	// minutes
	CPUs_Per_Task int   `json:"cpus_per_task,omitempty"`
	Begin_Time    int64 `json:"begin_time,omitempty"`

	Argv        []string          `json:"argv,omitempty"`
	Environment map[string]string `json:"environment"`

	Dependency string `json:"dependency,omitempty"`
	Requeue    bool   `json:"requeue,omitempty"`

	Reservation string `json:"reservation,omitempty"`
	Container   string `json:"container,omitempty"`

	Current_Working_Directory string `json:"current_working_directory,omitempty"`
	Distribution              string `json:"distribution,omitempty"`

	Signal   int   `json:"signal,omitempty"`
	Sig_Time int64 `json:"sig_time,omitempty"`
	// file names
	Standard_Input  string `json:"Standard_Input,omitempty"`
	Standard_Output string `json:"standard_output,omitempty"`
}

V0.0.38_JOB_PROPERTIES

type JobSubmission

type JobSubmission struct {
	Script string     `json:"script"`
	Job    JobProps   `json:"job"`
	Jobs   []JobProps `json:"jobs"`
}

V0.0.38_JOB_SUBMISSION

type JobsResponse

type JobsResponse struct {
	SlurmResponse
	Jobs []JobMeta
}

type Resources

type Resources struct {
	Nodes           string
	Allocated_CPUs  int
	Allocated_Hosts int
}

V0.0.38_JOB_RESOURCES

type SlurmError

type SlurmError struct {
	Error        string
	Error_Number int
}

type SlurmResponse

type SlurmResponse struct {
	Errors []SlurmError
}

type SlurmServer

type SlurmServer struct {
	Client Client
	//jobcache []...
	Logfile *os.File
}

func NewServer

func NewServer(ctx context.Context, path string) (*SlurmServer, error)

func (*SlurmServer) Auth

func (_ *SlurmServer) Auth(ctx context.Context,
	uname, aname string) (p9p.AuthFile, error)

func (*SlurmServer) RequireAuth

func (_ *SlurmServer) RequireAuth(_ context.Context) bool

type SubmitResponse

type SubmitResponse struct {
	SlurmResponse
	Job_Id              int
	Step_Id             string // new job step ID
	Job_Submit_User_Msg string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL