Class: Fusuma::Plugin::Executors::CommandExecutor

Inherits:
Executor
  • Object
show all
Defined in:
lib/fusuma/plugin/executors/command_executor.rb

Overview

Exector plugin

Constant Summary

Constants inherited from Executor

Executor::BASE_ONESHOT_INTERVAL, Executor::BASE_REPEAT_INTERVAL

Instance Method Summary collapse

Methods inherited from Executor

#enough_interval?, #interval, #update_interval

Methods inherited from Base

#config_index, #config_param_types, #config_params, inherited, plugins, #shutdown

Instance Method Details

#args_accel(event) ⇒ Float

Parameters:

  • event (Event)

Returns:

  • (Float)


47
48
49
50
# File 'lib/fusuma/plugin/executors/command_executor.rb', line 47

def args_accel(event)
  accel_index = Config::Index.new([*event.record.index.keys, :accel])
  (Config.instance.search(accel_index) || 1).to_f
end

#executable?(event) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
# File 'lib/fusuma/plugin/executors/command_executor.rb', line 32

def executable?(event)
  event.tag.end_with?("_detector") &&
    event.record.type == :index &&
    search_command(event)
end

#execute(event) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/fusuma/plugin/executors/command_executor.rb', line 16

def execute(event)
  command = search_command(event)

  MultiLogger.info(command: command, args: event.record.args)

  accel = args_accel(event)
  additional_env = event.record.args
    .deep_transform_keys(&:to_s)
    .deep_transform_values { |v| (v * accel).to_s }

  pid = Process.spawn(additional_env, command.to_s)
  Process.detach(pid)
rescue SystemCallError => e
  MultiLogger.error("#{event.record.index.keys}": e.message.to_s)
end

#execute_keysArray<Symbol>

Executor parameter on config.yml

Returns:

  • (Array<Symbol>)


12
13
14
# File 'lib/fusuma/plugin/executors/command_executor.rb', line 12

def execute_keys
  [:command]
end

#search_command(event) ⇒ String

Parameters:

  • event (Event)

Returns:



40
41
42
43
# File 'lib/fusuma/plugin/executors/command_executor.rb', line 40

def search_command(event)
  command_index = Config::Index.new([*event.record.index.keys, :command])
  Config.instance.search(command_index)
end