Class: Oxidized::HookManager

Inherits:
Object
  • Object
show all
Includes:
SemanticLogger::Loggable
Defined in:
lib/oxidized/hook.rb

Defined Under Namespace

Classes: HookContext, RegisteredHook

Constant Summary collapse

EVENTS =
%i[
  node_success
  node_fail
  post_store
  nodes_done
  source_node_transform
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeHookManager

Returns a new instance of HookManager.



40
41
42
# File 'lib/oxidized/hook.rb', line 40

def initialize
  @registered_hooks = Hash.new { |h, k| h[k] = [] }
end

Instance Attribute Details

#registered_hooksObject (readonly)

Returns the value of attribute registered_hooks.



38
39
40
# File 'lib/oxidized/hook.rb', line 38

def registered_hooks
  @registered_hooks
end

Class Method Details

.from_config(cfg) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/oxidized/hook.rb', line 6

def from_config(cfg)
  mgr = new
  cfg.hooks.each do |name, h_cfg|
    raise("Please specify an hook type in the configuration") unless h_cfg.type?

    h_cfg.events.each do |event|
      mgr.register event.to_sym, name, h_cfg.type, h_cfg
    end
  end
  mgr
end

Instance Method Details

#node_fail(node:, job: nil) ⇒ Object



90
91
92
# File 'lib/oxidized/hook.rb', line 90

def node_fail(node:, job: nil)
  handle(:node_fail, node: node, job: job)
end

#node_success(node:, job: nil) ⇒ Object

— Fire-and-forget events —



86
87
88
# File 'lib/oxidized/hook.rb', line 86

def node_success(node:, job: nil)
  handle(:node_success, node: node, job: job)
end

#nodes_doneObject



98
99
100
# File 'lib/oxidized/hook.rb', line 98

def nodes_done
  handle(:nodes_done)
end

#post_store(node:, job: nil, commitref: nil) ⇒ Object



94
95
96
# File 'lib/oxidized/hook.rb', line 94

def post_store(node:, job: nil, commitref: nil)
  handle(:post_store, node: node, job: job, commitref: commitref)
end

#register(event, name, hook_type, cfg) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/oxidized/hook.rb', line 44

def register(event, name, hook_type, cfg)
  unless EVENTS.include? event
    raise ArgumentError,
          "unknown event #{event}, available: #{EVENTS.join ','}"
  end

  Oxidized.mgr.add_hook(hook_type) || raise("cannot load hook '#{hook_type}', not found")
  begin
    hook = Oxidized.mgr.hook.fetch(hook_type).new
  rescue KeyError
    raise KeyError, "cannot find hook #{hook_type.inspect}"
  end

  hook.cfg = cfg

  @registered_hooks[event] << RegisteredHook.new(name, hook)
  logger.debug "Hook #{name.inspect} registered #{hook.class} for event #{event.inspect}"
end

#source_node_transform(node:, node_raw:, context:) ⇒ Object

Runs source_node_transform hooks in sequence, passing the return value of each hook as node to the next. Returns the final node, or nil to signal that the node should be excluded.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/oxidized/hook.rb', line 68

def source_node_transform(node:, node_raw:, context:)
  ctx = HookContext.new(
    event:    :source_node_transform,
    node:     node,
    node_raw: node_raw,
    context:  context
  )
  @registered_hooks[:source_node_transform].each do |r_hook|
    ctx.node = r_hook.hook.run_hook(ctx)
  rescue StandardError => e
    logger.error "Hook #{r_hook.name} (#{r_hook.hook}) failed " \
                 "(#{e.inspect}) for event :source_node_transform"
  end
  ctx.node
end