Class: Sumologic::Metadata::Monitor

Inherits:
Object
  • Object
show all
Includes:
Loggable
Defined in:
lib/sumologic/metadata/monitor.rb

Overview

Handles monitor metadata operations via the search API Uses GET /v1/monitors/search instead of recursive folder traversal

Constant Summary collapse

VALID_STATUSES =
%w[Normal Critical Warning MissingData Disabled AllTriggered].freeze

Instance Method Summary collapse

Constructor Details

#initialize(http_client:) ⇒ Monitor

Returns a new instance of Monitor.



15
16
17
# File 'lib/sumologic/metadata/monitor.rb', line 15

def initialize(http_client:)
  @http = http_client
end

Instance Method Details

#get(monitor_id) ⇒ Hash

Get a specific monitor by ID Returns full monitor details including query and triggers

Parameters:

  • monitor_id (String)

    The monitor ID

Returns:

  • (Hash)

    Monitor data



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sumologic/metadata/monitor.rb', line 63

def get(monitor_id)
  data = @http.request(
    method: :get,
    path: "/monitors/#{monitor_id}"
  )

  log_info "Retrieved monitor: #{data['name']} (#{monitor_id})"
  data
rescue StandardError => e
  raise Error, "Failed to get monitor #{monitor_id}: #{e.message}"
end

#list(query: nil, status: nil, limit: 100) ⇒ Array<Hash>

List monitors using the search API Supports server-side filtering by status and query

Parameters:

  • query (String, nil) (defaults to: nil)

    Search query to filter by name/description

  • status (String, nil) (defaults to: nil)

    Monitor status filter (Normal, Critical, Warning, MissingData, Disabled, AllTriggered)

  • limit (Integer) (defaults to: 100)

    Maximum number of monitors to return (default: 100)

Returns:

  • (Array<Hash>)

    Array of monitor data with path info



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/sumologic/metadata/monitor.rb', line 27

def list(query: nil, status: nil, limit: 100)
  validate_status!(status) if status

  monitors = []
  offset = 0

  loop do
    batch_limit = [limit - monitors.size, 100].min
    query_params = build_search_params(query: query, status: status, limit: batch_limit, offset: offset)

    data = @http.request(
      method: :get,
      path: '/monitors/search',
      query_params: query_params
    )

    items = extract_monitors(data)
    monitors.concat(items)

    log_info "Fetched #{items.size} monitors (total: #{monitors.size})"

    break if items.size < batch_limit || monitors.size >= limit

    offset += batch_limit
  end

  monitors.take(limit)
rescue StandardError => e
  raise Error, "Failed to list monitors: #{e.message}"
end