Skip to content

Commit

Permalink
implement scale function
Browse files Browse the repository at this point in the history
  • Loading branch information
jjallaire committed Oct 3, 2013
1 parent de5d5dc commit 55144e3
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 15 deletions.
1 change: 1 addition & 0 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ Collate:
'deployments.R'
'applications.R'
'terminate.R'
'setInstances.R'
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ export(applications)
export(deploy)
export(removeAccount)
export(setAccountInfo)
export(setInstances)
export(terminate)
19 changes: 19 additions & 0 deletions R/applications.R
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,22 @@ stopWithApplicationNotFound <- function(appName) {
sep=""), call. = FALSE)
}

applicationTask <- function(taskDef, appName, account, quiet) {

# get status function and display initial status
displayStatus <- displayStatus(quiet)
displayStatus(paste(taskDef$beginStatus, "...\n", sep=""))

# resolve target account and application
accountInfo <- accountInfo(resolveAccount(account))
application <- resolveApplication(accountInfo, appName)

# perform the action
lucid <- lucidClient(accountInfo)
task <- taskDef$action(lucid, application)
lucid$waitForTaskCompletion(task$task_id, quiet)
displayStatus(paste(taskDef$endStatus, "\n", sep = ""))

invisible(NULL)
}

7 changes: 7 additions & 0 deletions R/lucid.R
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ lucidClient <- function(authInfo) {
handleResponse(POST_JSON(authInfo, path, list()))
},

scaleApplication = function(applicationId, instances) {
path <- paste("/v1/applications/", applicationId, "/scale", sep="")
json <- list()
json$instance_count <- instances
handleResponse(POST_JSON(authInfo, path, json))
},

waitForTaskCompletion = function(taskId, quiet = FALSE) {

path <- paste("/v1/tasks/", taskId, sep="")
Expand Down
29 changes: 29 additions & 0 deletions R/setInstances.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#' Set Application Instances
#'
#' Set the number of parallel instances used for an application deployed to
#' ShinyApps.
#' @param appName Name of application
#' @param instances Number of parallel instances to be used for the application
#' @param account Account name. If a single account is registered on the system
#' then this parameter can be omitted.
#' @param quiet Request that no status information be printed to the console
#' @examples
#' \dontrun{
#'
#' # specify that an application use 3 instances
#' setInstances("myapp" instances = 3)
#' }
#' @export
setInstances <- function(appName, instances, account = NULL, quiet = FALSE) {

# define task
taskDef <- list()
taskDef$beginStatus <- "Setting application instances"
taskDef$endStatus <- "Application instances deployed"
taskDef$action <- function(lucid, application) {
lucid$scaleApplication(application$id, instances)
}

# perform it
applicationTask(taskDef, appName, account, quiet)
}
26 changes: 11 additions & 15 deletions R/terminate.R
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,15 @@
#' @export
terminate <- function(appName, account = NULL, quiet = FALSE) {

# get status function and display initial status
displayStatus <- displayStatus(quiet)
displayStatus("Terminating application...\n")
# define terminate task
taskDef <- list()
taskDef$beginStatus <- "Terminating application"
taskDef$endStatus <- "Application successfully terminated"
taskDef$action <- function(lucid, application) {
lucid$terminateApplication(application$id)
}

# resolve target account and application
accountInfo <- accountInfo(resolveAccount(account))
application <- resolveApplication(accountInfo, appName)

# terminate the application
lucid <- lucidClient(accountInfo)
task <- lucid$terminateApplication(application$id)
lucid$waitForTaskCompletion(task$task_id, quiet)
displayStatus("Application successfully terminated.\n")

invisible(NULL)
}
# perform it
applicationTask(taskDef, appName, account, quiet)
}

32 changes: 32 additions & 0 deletions man/setInstances.Rd
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
\name{setInstances}
\alias{setInstances}
\title{Set Application Instances}
\usage{
setInstances(appName, instances, account = NULL,
quiet = FALSE)
}
\arguments{
\item{appName}{Name of application}

\item{instances}{Number of parallel instances to be used
for the application}

\item{account}{Account name. If a single account is
registered on the system then this parameter can be
omitted.}

\item{quiet}{Request that no status information be
printed to the console}
}
\description{
Set the number of parallel instances used for an
application deployed to ShinyApps.
}
\examples{
\dontrun{

# specify that an application use 3 instances
setInstances("myapp" instances = 3)
}
}

0 comments on commit 55144e3

Please sign in to comment.