Sha256: 5dacf568526d8ce369c24572ddbfe83252aa91b52ae012c14b14a5ab38d7e50f
Contents?: true
Size: 1.99 KB
Versions: 3
Compression:
Stored size: 1.99 KB
Contents
# frozen_string_literal: true require "parallel" module Mihari module Analyzers class Base include Configurable include Retriable # @return [Array<String>, Array<Mihari::Artifact>] def artifacts raise NotImplementedError, "You must implement #{self.class}##{__method__}" end # @return [String] def title self.class.to_s.split("::").last end # @return [String] def description raise NotImplementedError, "You must implement #{self.class}##{__method__}" end def source self.class.to_s.split("::").last end # @return [Array<String>] def tags [] end def run set_unique_artifacts Parallel.each(valid_emitters) do |emitter| run_emitter emitter end end def run_emitter(emitter) emitter.run(title: title, description: description, artifacts: unique_artifacts, source: source, tags: tags) rescue => e puts "Emission by #{emitter.class} is failed: #{e}" end def self.inherited(child) Mihari.analyzers << child end private # @return [Array<Mihari::Artifact>] def normalized_artifacts @normalized_artifacts ||= artifacts.compact.uniq.sort.map do |artifact| artifact.is_a?(Artifact) ? artifact : Artifact.new(data: artifact) end.select(&:valid?) end # @return [Array<Mihari::Artifact>] def unique_artifacts @unique_artifacts ||= normalized_artifacts.select(&:unique?) end def set_unique_artifacts retry_on_error { unique_artifacts } rescue ArgumentError => _e klass = self.class.to_s.split("::").last.to_s raise Error, "Please configure #{klass} API settings properly" end def valid_emitters @valid_emitters ||= Mihari.emitters.map do |klass| emitter = klass.new emitter.valid? ? emitter : nil end.compact end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
mihari-2.0.0 | lib/mihari/analyzers/base.rb |
mihari-1.5.1 | lib/mihari/analyzers/base.rb |
mihari-1.5.0 | lib/mihari/analyzers/base.rb |