Class: Sumologic::Metadata::Monitor
- Inherits:
-
Object
- Object
- Sumologic::Metadata::Monitor
- 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
-
#get(monitor_id) ⇒ Hash
Get a specific monitor by ID Returns full monitor details including query and triggers.
-
#initialize(http_client:) ⇒ Monitor
constructor
A new instance of Monitor.
-
#list(query: nil, status: nil, limit: 100) ⇒ Array<Hash>
List monitors using the search API Supports server-side filtering by status and query.
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
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
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 |