Class: Mihari::Clients::GreyNoise

Inherits:
Base
  • Object
show all
Defined in:
lib/mihari/clients/greynoise.rb

Overview

GreyNoise API client

Constant Summary collapse

PAGE_SIZE =
10_000

Instance Attribute Summary

Attributes inherited from Base

#base_url, #headers, #pagination_interval, #timeout

Instance Method Summary collapse

Constructor Details

#initialize(base_url = "https://api.greynoise.io", api_key:, headers: {}, pagination_interval: Mihari.config.pagination_interval, timeout: nil) ⇒ GreyNoise

Returns a new instance of GreyNoise.

Parameters:

  • base_url (String) (defaults to: "https://api.greynoise.io")
  • api_key (String, nil)
  • headers (Hash) (defaults to: {})
  • pagination_interval (Integer) (defaults to: Mihari.config.pagination_interval)
  • timeout (Integer, nil) (defaults to: nil)

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/mihari/clients/greynoise.rb', line 18

def initialize(
  base_url = "https://api.greynoise.io",
  api_key:,
  headers: {},
  pagination_interval: Mihari.config.pagination_interval,
  timeout: nil
)
  raise(ArgumentError, "api_key is required") unless api_key

  headers["key"] = api_key
  super(base_url, headers:, pagination_interval:, timeout:)
end

Instance Method Details

#gnql_search(query, size: PAGE_SIZE, scroll: nil) ⇒ Mihari::Structs::GreyNoise::Response

GNQL (GreyNoise Query Language) is a domain-specific query language that uses Lucene deep under the hood

Parameters:

  • query (String)

    GNQL query string

  • size (Integer) (defaults to: PAGE_SIZE)

    Maximum amount of results to grab

  • scroll (Integer, nil) (defaults to: nil)

    Scroll token to paginate through results

Returns:



40
41
42
43
# File 'lib/mihari/clients/greynoise.rb', line 40

def gnql_search(query, size: PAGE_SIZE, scroll: nil)
  params = {query:, size:, scroll:}.compact
  Structs::GreyNoise::Response.from_dynamic! get_json("/v2/experimental/gnql", params:)
end

#gnql_search_with_pagination(query, size: PAGE_SIZE, pagination_limit: Mihari.config.pagination_limit) ⇒ Enumerable<Mihari::Structs::GreyNoise::Response>

Parameters:

  • query (String)
  • size (Integer) (defaults to: PAGE_SIZE)
  • pagination_limit (Integer) (defaults to: Mihari.config.pagination_limit)

Returns:



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mihari/clients/greynoise.rb', line 52

def gnql_search_with_pagination(query, size: PAGE_SIZE, pagination_limit: Mihari.config.pagination_limit)
  scroll = nil

  Enumerator.new do |y|
    pagination_limit.times do
      res = gnql_search(query, size:, scroll:)

      y.yield res

      scroll = res.scroll
      break if scroll.nil?

      sleep_pagination_interval
    end
  end
end