module Nucleus module Adapters module V1 class Heroku < Stub module Lifecycle # Lifecycle: # A) via maintenance - workers are still active # B) via formation - loose scaling information # @see Stub#start def start(application_id) log.debug "Start @ #{@endpoint_url}" app = application(application_id) if app[:state] == Enums::ApplicationStates::DEPLOYED # add web dyno if there currently are no dynos (state == deployed) scale_web(application_id, 1) elsif app[:state] == Enums::ApplicationStates::CREATED # fail if there is no deployment fail Errors::SemanticAdapterRequestError, 'Application must be deployed before it can be started' end scale_worker(application_id, 1) update_application(application_id, maintenance: false) end # @see Stub#stop def stop(application_id) log.debug "Stop @ #{@endpoint_url}" # fail if there is no deployment app = application(application_id) if app[:state] == Enums::ApplicationStates::CREATED fail Errors::SemanticAdapterRequestError, 'Application must be deployed before it can be stopped' end scale_worker(application_id, 0) update_application(application_id, maintenance: true) end # @see Stub#restart def restart(application_id) log.debug "Restart @ #{@endpoint_url}" stop(application_id) start(application_id) end end end end end end