class Eso::Conductor

Public Class Methods

new(host:, port: 3780, nsc:) click to toggle source

Constructor for Conductor.

@param [String] host Hostname or IP address where this conductor resides. @param [Integer] port The TCP port to connect to this conductor on. @param [Nexpose::Connection] nsc A logged-in Nexpose::Connection object with a valid session used to authenticate. @return [Eso::Conductor] The newly created conductor object

Calls superclass method
# File lib/eso/conductor.rb, line 13
def initialize(host:, port: 3780, nsc:)
  super(host: host, port: port, nsc: nsc)
  @url = "https://#{@host}:#{@port}/eso/conductor-service/api/"
end

Public Instance Methods

create_workflow(name:, steps:) click to toggle source

Create a new workflow on this conductor.

@param [String] name The user-facing name the workflow will be created with. @param [Array] steps An array containing each of the steps that the workflow will be created with, in Eso::Step format. @return [Eso::Workflow] The newly created workflow object

# File lib/eso/conductor.rb, line 128
def create_workflow(name:, steps:)
  workflow = Workflow.new(name: name, steps: steps)

  resp = post(url: "#{@url}workflows/", payload: workflow.to_json)
  created_workflow = Workflow.load(self, resp[:id])

  created_workflow
end
delete_all_workflows() click to toggle source

Delete all current workflows on the conductor.

# File lib/eso/conductor.rb, line 156
def delete_all_workflows
  wfs = workflows
  wfs.each { |wf| delete_workflow(workflow_id: wf.id) }
end
delete_workflow(workflow_id:) click to toggle source

Delete an existing workflow from the conductor.

@param [String] workflow_id The ID of the workflow to be deleted.

# File lib/eso/conductor.rb, line 150
def delete_workflow(workflow_id:)
  delete(url: "#{@url}workflows/#{workflow_id}")
end
get_translation_key(step_type, label) click to toggle source

Returns the metadata key for a specified translated string. The translated value needs to be in language that the user has configured.

@param [String] step_type The step type to query metadata for. Valid values defined in Eso::StepNames @param [String] label The translated value of which you are requesting the key for. @return [String] The metadata key corresponding to this label.

# File lib/eso/conductor.rb, line 220
def get_translation_key(step_type, label)
  json_data = get(url: "#{@url}services/nexpose/metadata/#{step_type}")

  target_hash = json_data[:labels].values.find { |label_hash| label_hash.values.include?(label) }
  target_hash.key(label).to_s if target_hash
end
get_translation_label(step_type, key) click to toggle source

Returns the translated value of the specified key for a step type (defined in Eso::StepNames). The translated value will be based on the language settings the user has configured.

@param [String] step_type The step type to query metadata for. Valid values defined in Eso::StepNames @param [String] key The key value in the metadata that maps to the desired label. @return [String] The translated value of the key.

# File lib/eso/conductor.rb, line 206
def get_translation_label(step_type, key)
  json_data = get(url: "#{@url}services/nexpose/metadata/#{step_type}")

  target_hash = json_data[:labels].values.find { |label_hash| label_hash.has_key?(key) }
  target_hash[key] if target_hash
end
start_all_workflows() click to toggle source

Start all workflows that exist on the conductor.

@return [Hash] A hash containing the states of all existing workflows, keyed by workflow ID.

# File lib/eso/conductor.rb, line 181
def start_all_workflows
  wf_states = workflow_states

  wf_states.each { |wf_id, state| start_workflow(workflow_id: wf_id) if state[:workflow_state] == "STOPPED" }
  workflow_states
end
start_workflow(workflow_id:) click to toggle source

Start the specified workflow.

@param [String] workflow_id The ID of the workflow to be started.

# File lib/eso/conductor.rb, line 165
def start_workflow(workflow_id:)
  post(url: "#{@url}workflows/#{workflow_id}/state")
end
stop_all_workflows() click to toggle source

Stop all workflows that exist on the conductor.

@return [Hash] A hash containing the states of all existing workflows, keyed by workflow ID.

# File lib/eso/conductor.rb, line 192
def stop_all_workflows
  wf_states = workflow_states

  wf_states.each { |wf_id, state| stop_workflow(workflow_id: wf_id) if state[:workflow_state] == "RUNNING" }
  workflow_states
end
stop_workflow(workflow_id:) click to toggle source

Stop the specified workflow.

@param [String] workflow_id The ID of the workflow to be stopped.

# File lib/eso/conductor.rb, line 173
def stop_workflow(workflow_id:)
  delete(url: "#{@url}workflows/#{workflow_id}/state")
end
update_workflow(updated_workflow:) click to toggle source

Update an existing workflow on the conductor to have the configuration of the workflow object passed into this method.

@param [Eso::Workflow] updated_workflow A workflow object that has already had all required changes made to it. This workflow must have an ID set.

# File lib/eso/conductor.rb, line 141
def update_workflow(updated_workflow:)
  payload = updated_workflow.to_json
  put(url: "#{@url}workflows/#{updated_workflow.id}", payload: payload)
end
workflow_histories(starttime, endtime) click to toggle source

Return the workflow histories with only the state histories for the given date range.

@param [Fixnum] starttime The time in milliseconds since epoch for which you want the workflow histories @param [Fixnum] endtime The time in milliseconds since epoch for which you want the workflow histories @return [Array] An array containing all of the workflow histories from the

Conductor, which has StateHistory objects containing startTime's within the specified time range. Only the
StateHistories within that range are returned in the WorkflowHistory object. Returns an empty array if none are present.
# File lib/eso/conductor.rb, line 49
def workflow_histories(starttime, endtime)
  histories = []
  json_data = get(url: "#{@url}workflows/history/#{starttime}/#{endtime}")
  json_data.each do |wf|
    # Initialize WorkflowHistory elements
    workflow_steps = []
    state_histories = []

    # Create a new WorkflowHistory with the details we already know
    workflow_history = Eso::Workflow::History.new(id: wf[:id],
                                                  name: wf[:name],
                                                  timeCreated: wf[:timeCreated],
                                                  state: wf[:state],
                                                  message: wf[:message],
                                                  steps: workflow_steps,
                                                  history: state_histories
    )

    # Parse the steps out of the response to be returned with the WorkflowHistory
    wf[:steps].each do |step|
      workflow_steps << Step.new(uuid: step[:uuid],
                               service_name: step[:serviceName],
                               workflow: workflow_history,
                               type_name: step[:stepConfiguration][:typeName],
                               previous_type_name: step[:stepConfiguration][:previousTypeName],
                               configuration_params: step[:stepConfiguration][:configurationParams])
    end
    workflow_history.steps = workflow_steps

    # Parse the histories out of the response, to be returned with the WorkflowHistory. For some reason.
    # this failed with named parameters. For now I returned it to positional.
    wf[:history].each do |history|
      state_histories << Eso::Workflow::StateHistory.new(history[:message],
                                       history[:state],
                                       history[:startTime])
    end
    workflow_history.state_histories = state_histories

    # Add the Workflow History we just built to the list to be returned.
    histories << workflow_history
  end
  histories
end
workflow_state(workflow_id:) click to toggle source

Get the state of the specified workflow.

@param [String] workflow_id The ID of the workflow to retrieve the state of. @return [String] The current state of the workflow.

# File lib/eso/conductor.rb, line 98
def workflow_state(workflow_id:)
  get(url: "#{@url}workflows/#{workflow_id}/state")
end
workflow_states() click to toggle source

Retrieve the states for all of the workflows created on the conductor.

@return [Hash] A hash containing the states of all existing workflows, keyed by workflow ID.

# File lib/eso/conductor.rb, line 115
def workflow_states
  wfs = workflows
  states = {}
  wfs.each { |wf| states[wf.id] = workflow_state(workflow_id: wf.id) }
  states
end
workflows() click to toggle source

Return all of the workflows that currently exist on this conductor.

@return [Array] An array containing all of the current workflows on the conductor in Eso::Workflow object format. Returns an empty array if no workflows are present.

# File lib/eso/conductor.rb, line 22
def workflows
  rv = []
  json_data = get(url: "#{@url}workflows/")
  json_data.each do |wf|
    workflow = Workflow.new(id: wf[:id], name: wf[:name])
    steps = wf[:steps]
    steps.each do |step|
      workflow_step = Step.new(uuid: step[:uuid],
                               service_name: step[:serviceName],
                               workflow: workflow,
                               type_name: step[:stepConfiguration][:typeName],
                               previous_type_name: step[:stepConfiguration][:previousTypeName],
                               configuration_params: step[:stepConfiguration][:configurationParams])
      workflow.steps << workflow_step
    end
    rv << workflow
  end
  rv
end
workflows_state_count(state) click to toggle source

Get the count of items in a state of the specified workflow.

@param [Eso::Workflow::State] state The state of the workflows to retrieve the count of. @return [Integer] The number of workflows in the requested state.

# File lib/eso/conductor.rb, line 107
def workflows_state_count(state)
  get(url: "#{@url}workflows/count/#{state}")
end