Class: Mihari::Emitters::Base

Inherits:
Actor
  • Object
show all
Defined in:
lib/mihari/emitters/base.rb

Overview

Base class for emitters

Direct Known Subclasses

Database, MISP, Slack, TheHive, Webhook

Constant Summary

Constants included from Concerns::Retriable

Concerns::Retriable::DEFAULT_CONDITION, Concerns::Retriable::RETRIABLE_ERRORS

Instance Attribute Summary collapse

Attributes inherited from Actor

#options

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Actor

key, key_aliases, keys, #retry_exponential_backoff, #retry_interval, #retry_times, #timeout, type, #validate_configuration!

Methods included from Concerns::Retriable

#retry_on_error

Methods included from Concerns::Configurable

#configuration_keys?, #configured?

Constructor Details

#initialize(rule:, options: nil) ⇒ Base

Returns a new instance of Base.

Parameters:

  • rule (Mihari::Rule)
  • options (Hash, nil) (defaults to: nil)


16
17
18
19
20
# File 'lib/mihari/emitters/base.rb', line 16

def initialize(rule:, options: nil)
  super(options: options)

  @rule = rule
end

Instance Attribute Details

#ruleMihari::Rule (readonly)

Returns:



10
11
12
# File 'lib/mihari/emitters/base.rb', line 10

def rule
  @rule
end

Class Method Details

.inherited(child) ⇒ Object



57
58
59
60
# File 'lib/mihari/emitters/base.rb', line 57

def inherited(child)
  super
  Mihari.emitters << child
end

Instance Method Details

#call(artifacts) ⇒ Object

Parameters:

Raises:

  • (NotImplementedError)


33
34
35
# File 'lib/mihari/emitters/base.rb', line 33

def call(artifacts)
  raise NotImplementedError, "You must implement #{self.class}##{__method__}"
end

#result(artifacts) ⇒ Dry::Monads::Result::Success<Object>, Dry::Monads::Result::Failure

Returns:

  • (Dry::Monads::Result::Success<Object>, Dry::Monads::Result::Failure)


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/mihari/emitters/base.rb', line 40

def result(artifacts)
  result = Try[StandardError] do
    retry_on_error(
      times: retry_times,
      interval: retry_interval,
      exponential_backoff: retry_exponential_backoff
    ) { call(artifacts) }
  end.to_result

  if result.failure?
    Mihari.logger.warn("Emitter:#{self.class.key} for #{target.truncate(32)} failed - #{result.failure}")
  end

  result
end

#targetString

A target to emit the data

Returns:

  • (String)

Raises:

  • (NotImplementedError)


26
27
28
# File 'lib/mihari/emitters/base.rb', line 26

def target
  raise NotImplementedError, "You must implement #{self.class}##{__method__}"
end