diff --git a/DESCRIPTION b/DESCRIPTION index 34e26e4..4311a60 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: slurmtools Title: slurm tooling -Version: 0.0.0.9000 +Version: 0.0.0.9001 Authors@R: c(person("Devin", "Pastoor", , "devin@a2-ai.com", role = c("aut", "cre")), person("Jenna", "Elwing", email = "jenna@a2-ai.com", role = "aut"), person("Matthew", "Smith", email = "matthews@a2-ai.com", role = "aut")) diff --git a/R/attach.R b/R/attach.R index a30665c..42ac2bc 100644 --- a/R/attach.R +++ b/R/attach.R @@ -34,7 +34,7 @@ slurmtools_options_message <- function() { } #format .onAttach message - msg <- "" + msg <- "\n\n" if (length(set_options)) { msg <- paste0( msg, @@ -59,6 +59,6 @@ slurmtools_options_message <- function() { ) } - msg + paste0(msg, "\n\n") } diff --git a/R/get-jobs.R b/R/get-jobs.R index 8ebfd4a..ccb5362 100644 --- a/R/get-jobs.R +++ b/R/get-jobs.R @@ -1,6 +1,12 @@ utils::globalVariables(c("user_name")) -# Function to parse each job into a tibble row +#' Function to parse each job into a tibble row +#' +#' @param job output from parse_jobs_json +#' +#' @return tibble of parsed jobs +#' @keywords internal +#' @noRd parse_job_to_row <- function(job) { # check options for squeue version # alter parsing based on result @@ -37,6 +43,13 @@ parse_job_to_row <- function(job) { ) } +#' Function to transform squeue --json output into named list +#' +#' @param .json output from squeue --json call +#' +#' @return list of parsed output +#' @keywords internal +#' @noRd parse_jobs_json <- function(.json) { if (!length(.json$jobs)) { empty <- tibble::tibble( @@ -57,9 +70,16 @@ parse_jobs_json <- function(.json) { purrr::list_rbind(purrr::map(.json$jobs, parse_job_to_row)) } -#' get slurm jobs -#' @param user string of user id to filter results by +#' Gets the jobs run on slurm as a tibble +#' +#' @param user optional user name to filter jobs only submitted by user +#' +#' @return a tibble containing the jobs submitted to slurm #' @export +#' +#' @examples \dontrun{ +#' get_slurm_jobs() +#' } get_slurm_jobs <- function(user = NULL){ cmd <- list(cmd = Sys.which("squeue"), args = "--json") diff --git a/R/get-partitions.R b/R/get-partitions.R index 93e8e94..722d5f9 100644 --- a/R/get-partitions.R +++ b/R/get-partitions.R @@ -5,6 +5,8 @@ partition_cache <- new.env(parent = emptyenv()) #' get list of each partition's number of CPUs and memory #' #' @return the raw partition-cpu-memory string output from `sinfo` +#' @keywords internal +#' @noRd run_sinfo <- function() { sinfobin <- Sys.which("sinfo") if (!nzchar(sinfobin)) { @@ -29,9 +31,10 @@ run_sinfo <- function() { #' [process_slurm_partitions()] #' #' @param cache optional argument to forgo caching -#' #' @return the processed table of each partition's #' number of CPUs and memory +#' @keywords internal +#' @noRd lookup_partitions_by_cpu <- function(cache = TRUE) { avail_cpus <- if(cache) { if (is.null(partition_cache[["run_sinfo"]])) { @@ -57,6 +60,8 @@ lookup_partitions_by_cpu <- function(cache = TRUE) { #' #' @return the table such that the default partition will be first #' and will have the asterisk removed +#' @keywords internal +#' @noRd process_slurm_partitions <- function(table){ all_partitions <- table$PARTITION is_default_partition <- grepl('\\*$', x = all_partitions, ) @@ -69,12 +74,16 @@ process_slurm_partitions <- function(table){ return(table) } - -#' get list of partition names for the given cluster +#' Gets the available slurm partitions the user can use. #' #' @param cache optional argument to forgo caching #' +#' @return vector of available partitions #' @export +#' +#' @examples \dontrun{ +#' get_slurm_partitions +#' } get_slurm_partitions <- function(cache = TRUE) { table <- if (cache) { if (is.null(partition_cache[["partition_by_cpu"]])) { @@ -105,6 +114,9 @@ get_slurm_partitions <- function(cache = TRUE) { #' @param cache optional argument to forgo caching #' #' @return string with suggestion upon [check_slurm_partitions()] error +#' +#' @keywords internal +#' @noRd partition_advice <- function(ncpu, partition, avail_cpus_table, cache) { sorted_table <- avail_cpus_table %>% dplyr::filter(CPUS >= ncpu) %>% dplyr::arrange(CPUS, MEMORY) @@ -126,6 +138,9 @@ partition_advice <- function(ncpu, partition, avail_cpus_table, cache) { #' @param partition name of partition requested by user #' @param cache optional argument to forgo caching #' +#' @keywords internal +#' @noRd +#' #' @examples \dontrun{ #' check_slurm_partitions(17, "cpu2mem4gb") #' check_slurm_partitions(3, "cpu2mem4gb") diff --git a/R/slurmtools-package.R b/R/slurmtools.R similarity index 59% rename from R/slurmtools-package.R rename to R/slurmtools.R index 79055da..18dbfe3 100644 --- a/R/slurmtools-package.R +++ b/R/slurmtools.R @@ -1,4 +1,28 @@ -#' @keywords internal +#' slurmtools: An R package for easily submitting NONMEM jobs to slurm. +#' +#' This package aims to ease the submission and monitoring of NONMEM jobs running +#' on slurm. +#' +#' @section submitting jobs: +#' \itemize{ +#' \item \code{\link{submit_nonmem_model}}: Submits a job to slurm +#' \item \code{\link{generate_nmm_config}}: Generates a NONMEMmonitor config +#' file +#' } +#' +#' @section monitoring jobs: +#' \itemize{ +#' \item \code{\link{get_slurm_jobs}}: Gives a table of submitted jobs to slurm +#' that shows status and other information given with `squeue` +#' } +#' +#' @section slurm partitions: +#' \itemize{ +#' \item \code{\link{get_slurm_partitions}}: Gives a vector of available +#' partitions a user can submit jobs to. +#' } +#' +#' @name slurmtools "_PACKAGE" ## usethis namespace: start diff --git a/_pkgdown.yml b/_pkgdown.yml index 917fff3..379c6b0 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -12,17 +12,16 @@ navbar: left: - intro - reference + - articles right: - search - github + - lightswitch components: reference: text: Reference href: reference/index.html - github: - icon: fa-github fa-lg - href: https://github.com/a2-ai/slurmtools - intro: + articles: text: Get Started menu: - text: Running NONMEM @@ -31,18 +30,18 @@ navbar: href: articles/custom-alerts.html - text: Slack Alerts href: articles/slack-alerts.html + github: + icon: fa-github fa-lg + href: https://github.com/a2-ai/slurmtools reference: - title: Data Processing Functions contents: - submit_nonmem_model + - generate_nmm_config - get_slurm_jobs - get_slurm_partitions - - check_slurm_partitions - - lookup_partitions_by_cpu - - partition_advice - - process_slurm_partitions - - run_sinfo + - slurmtools articles: - title: Vignettes diff --git a/man/check_slurm_partitions.Rd b/man/check_slurm_partitions.Rd deleted file mode 100644 index c177890..0000000 --- a/man/check_slurm_partitions.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/get-partitions.R -\name{check_slurm_partitions} -\alias{check_slurm_partitions} -\title{throws error if the number of requested CPUs exceeds the number of CPUs available in the requested partition} -\usage{ -check_slurm_partitions(ncpu, partition, cache = TRUE) -} -\arguments{ -\item{ncpu}{number of CPUs requested by user} - -\item{partition}{name of partition requested by user} - -\item{cache}{optional argument to forgo caching} -} -\description{ -throws error if the number of requested CPUs exceeds the number of CPUs available in the requested partition -} -\examples{ -\dontrun{ -check_slurm_partitions(17, "cpu2mem4gb") -check_slurm_partitions(3, "cpu2mem4gb") -check_slurm_partitions(5, "cpu4mem32gb") -check_slurm_partitions(5, "cpu4mem32gb") -check_slurm_partitions(100, "cpu32mem128gb") -check_slurm_partitions(2, "cpu2mem4gb") -} -} diff --git a/man/get_slurm_jobs.Rd b/man/get_slurm_jobs.Rd index 7947dc3..ff67530 100644 --- a/man/get_slurm_jobs.Rd +++ b/man/get_slurm_jobs.Rd @@ -2,13 +2,21 @@ % Please edit documentation in R/get-jobs.R \name{get_slurm_jobs} \alias{get_slurm_jobs} -\title{get slurm jobs} +\title{Gets the jobs run on slurm as a tibble} \usage{ get_slurm_jobs(user = NULL) } \arguments{ -\item{user}{string of user id to filter results by} +\item{user}{optional user name to filter jobs only submitted by user} +} +\value{ +a tibble containing the jobs submitted to slurm } \description{ -get slurm jobs +Gets the jobs run on slurm as a tibble +} +\examples{ +\dontrun{ +get_slurm_jobs() +} } diff --git a/man/get_slurm_partitions.Rd b/man/get_slurm_partitions.Rd index 66c5e11..c560ba9 100644 --- a/man/get_slurm_partitions.Rd +++ b/man/get_slurm_partitions.Rd @@ -2,13 +2,21 @@ % Please edit documentation in R/get-partitions.R \name{get_slurm_partitions} \alias{get_slurm_partitions} -\title{get list of partition names for the given cluster} +\title{Gets the available slurm partitions the user can use.} \usage{ get_slurm_partitions(cache = TRUE) } \arguments{ \item{cache}{optional argument to forgo caching} } +\value{ +vector of available partitions +} \description{ -get list of partition names for the given cluster +Gets the available slurm partitions the user can use. +} +\examples{ +\dontrun{ +get_slurm_partitions +} } diff --git a/man/lookup_partitions_by_cpu.Rd b/man/lookup_partitions_by_cpu.Rd deleted file mode 100644 index 3896480..0000000 --- a/man/lookup_partitions_by_cpu.Rd +++ /dev/null @@ -1,23 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/get-partitions.R -\name{lookup_partitions_by_cpu} -\alias{lookup_partitions_by_cpu} -\title{get table of each partition's number of CPUs and memory} -\usage{ -lookup_partitions_by_cpu(cache = TRUE) -} -\arguments{ -\item{cache}{optional argument to forgo caching} -} -\value{ -the processed table of each partition's -number of CPUs and memory -} -\description{ -\itemize{ -\item gets the raw string output from \code{\link[=run_sinfo]{run_sinfo()}} -\item converts to a data frame -\item reorders and removes \code{*} from default partition with -\code{\link[=process_slurm_partitions]{process_slurm_partitions()}} -} -} diff --git a/man/partition_advice.Rd b/man/partition_advice.Rd deleted file mode 100644 index 2fee0f1..0000000 --- a/man/partition_advice.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/get-partitions.R -\name{partition_advice} -\alias{partition_advice} -\title{get partition suggestions} -\usage{ -partition_advice(ncpu, partition, avail_cpus_table, cache) -} -\arguments{ -\item{ncpu}{number of CPUs requested by user} - -\item{partition}{name of partition requested by user} - -\item{avail_cpus_table}{table of partitions with respective number of CPUs and memory} - -\item{cache}{optional argument to forgo caching} -} -\value{ -string with suggestion upon \code{\link[=check_slurm_partitions]{check_slurm_partitions()}} error -} -\description{ -In a call to \code{submit_slurm_model()}, if the number of requested CPUs exceeds -the number of CPUs available in the requested partition, -\code{\link[=check_slurm_partitions]{check_slurm_partitions()}} errors. \if{html}{\out{
}} -This function follows up with a message providing one or two suggestions for -the partition with the smallest sufficient number of CPUs and least amount -of memory. \if{html}{\out{
}} -If there are no partitions with enough CPUs to accommodate the number -requested, this function's return message clarifies this. -} diff --git a/man/process_slurm_partitions.Rd b/man/process_slurm_partitions.Rd deleted file mode 100644 index 1694d28..0000000 --- a/man/process_slurm_partitions.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/get-partitions.R -\name{process_slurm_partitions} -\alias{process_slurm_partitions} -\title{manipulate partition table for usability} -\usage{ -process_slurm_partitions(table) -} -\arguments{ -\item{table}{the table created by lookup_partitions_by_cpu} -} -\value{ -the table such that the default partition will be first -and will have the asterisk removed -} -\description{ -manipulate partition table for usability -} diff --git a/man/run_sinfo.Rd b/man/run_sinfo.Rd deleted file mode 100644 index 2200d12..0000000 --- a/man/run_sinfo.Rd +++ /dev/null @@ -1,14 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/get-partitions.R -\name{run_sinfo} -\alias{run_sinfo} -\title{get list of each partition's number of CPUs and memory} -\usage{ -run_sinfo() -} -\value{ -the raw partition-cpu-memory string output from \code{sinfo} -} -\description{ -get list of each partition's number of CPUs and memory -} diff --git a/man/slurmtools-package.Rd b/man/slurmtools-package.Rd deleted file mode 100644 index d8db95f..0000000 --- a/man/slurmtools-package.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/slurmtools-package.R -\docType{package} -\name{slurmtools-package} -\alias{slurmtools} -\alias{slurmtools-package} -\title{slurmtools: slurm tooling} -\description{ -What the package does (one paragraph). -} -\author{ -\strong{Maintainer}: Devin Pastoor \email{devin@a2-ai.com} - -Authors: -\itemize{ - \item Jenna Elwing \email{jenna@a2-ai.com} - \item Matthew Smith \email{matthews@a2-ai.com} -} - -} -\keyword{internal} diff --git a/man/slurmtools.Rd b/man/slurmtools.Rd new file mode 100644 index 0000000..1a10beb --- /dev/null +++ b/man/slurmtools.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/slurmtools.R +\docType{package} +\name{slurmtools} +\alias{slurmtools-package} +\alias{slurmtools} +\title{slurmtools: An R package for easily submitting NONMEM jobs to slurm.} +\description{ +This package aims to ease the submission and monitoring of NONMEM jobs running +on slurm. +} +\section{submitting jobs}{ + +\itemize{ +\item \code{\link{submit_nonmem_model}}: Submits a job to slurm +\item \code{\link{generate_nmm_config}}: Generates a NONMEMmonitor config +file +} +} + +\section{monitoring jobs}{ + +\itemize{ +\item \code{\link{get_slurm_jobs}}: Gives a table of submitted jobs to slurm +that shows status and other information given with \code{squeue} +} +} + +\section{slurm partitions}{ + +\itemize{ +\item \code{\link{get_slurm_partitions}}: Gives a vector of available +partitions a user can submit jobs to. +} +} + +\author{ +\strong{Maintainer}: Devin Pastoor \email{devin@a2-ai.com} + +Authors: +\itemize{ + \item Jenna Elwing \email{jenna@a2-ai.com} + \item Matthew Smith \email{matthews@a2-ai.com} +} + +} diff --git a/vignettes/slack-alerts.Rmd b/vignettes/slack-alerts.Rmd index 8e87cde..4292a39 100644 --- a/vignettes/slack-alerts.Rmd +++ b/vignettes/slack-alerts.Rmd @@ -1,5 +1,5 @@ --- -title: "Slack-alerts" +title: "Slack notifications with nmm" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Slack notifications with nmm} @@ -146,7 +146,7 @@ submission_nmm ``` ```{r} -slurmtools::get_slurm_jobs() +slurmtools::get_slurm_jobs(user = 'matthews') ``` ![nmm slack alerts](data/images/nmm_slack_notifications.png)