Module: BrainzLab::Sentinel

Defined in:
lib/brainzlab/sentinel.rb,
lib/brainzlab/sentinel/client.rb,
lib/brainzlab/sentinel/provisioner.rb

Defined Under Namespace

Classes: Client, Provisioner

Class Method Summary collapse

Class Method Details

.alerts(host_id: nil, status: nil, severity: nil) ⇒ Array<Hash>

Get alerts

Examples:

alerts = BrainzLab::Sentinel.alerts(severity: "critical", status: "active")

Parameters:

  • host_id (String) (defaults to: nil)

    Optional filter by host

  • status (String) (defaults to: nil)

    Filter by status (active, acknowledged, resolved)

  • severity (String) (defaults to: nil)

    Filter by severity (info, warning, critical)

Returns:

  • (Array<Hash>)

    Alert list



126
127
128
129
130
131
132
133
# File 'lib/brainzlab/sentinel.rb', line 126

def alerts(host_id: nil, status: nil, severity: nil)
  return [] unless enabled?

  ensure_provisioned!
  return [] unless BrainzLab.configuration.sentinel_valid?

  client.get_alerts(host_id: host_id, status: status, severity: severity)
end

.clientObject



148
149
150
# File 'lib/brainzlab/sentinel.rb', line 148

def client
  @client ||= Client.new(BrainzLab.configuration)
end

.container(container_id) ⇒ Hash?

Get container details

Parameters:

  • container_id (String)

    Container ID

Returns:

  • (Hash, nil)

    Container details



95
96
97
98
99
100
101
102
# File 'lib/brainzlab/sentinel.rb', line 95

def container(container_id)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.sentinel_valid?

  client.get_container(container_id)
end

.container_metrics(container_id, period: '1h') ⇒ Hash?

Get container metrics

Parameters:

  • container_id (String)

    Container ID

  • period (String) (defaults to: '1h')

    Time period

Returns:

  • (Hash, nil)

    Container metrics



108
109
110
111
112
113
114
115
# File 'lib/brainzlab/sentinel.rb', line 108

def container_metrics(container_id, period: '1h')
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.sentinel_valid?

  client.get_container_metrics(container_id, period: period)
end

.containers(host_id: nil, status: nil) ⇒ Array<Hash>

List all containers

Examples:

containers = BrainzLab::Sentinel.containers(host_id: "host_123", status: "running")

Parameters:

  • host_id (String) (defaults to: nil)

    Optional filter by host

  • status (String) (defaults to: nil)

    Filter by status (running, stopped, paused)

Returns:

  • (Array<Hash>)

    Container list



83
84
85
86
87
88
89
90
# File 'lib/brainzlab/sentinel.rb', line 83

def containers(host_id: nil, status: nil)
  return [] unless enabled?

  ensure_provisioned!
  return [] unless BrainzLab.configuration.sentinel_valid?

  client.list_containers(host_id: host_id, status: status)
end

.ensure_provisioned!Object

INTERNAL ===



137
138
139
140
141
142
# File 'lib/brainzlab/sentinel.rb', line 137

def ensure_provisioned!
  return if @provisioned

  @provisioned = true
  provisioner.ensure_project!
end

.host(host_id) ⇒ Hash?

Get host details

Parameters:

  • host_id (String)

    Host ID

Returns:

  • (Hash, nil)

    Host details



30
31
32
33
34
35
36
37
# File 'lib/brainzlab/sentinel.rb', line 30

def host(host_id)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.sentinel_valid?

  client.get_host(host_id)
end

.hosts(status: nil, page: 1, per_page: 50) ⇒ Array<Hash>

List all registered hosts

Examples:

hosts = BrainzLab::Sentinel.hosts(status: "online")

Parameters:

  • status (String) (defaults to: nil)

    Filter by status (online, offline, warning, critical)

  • page (Integer) (defaults to: 1)

    Page number

  • per_page (Integer) (defaults to: 50)

    Results per page

Returns:

  • (Array<Hash>)

    List of hosts



18
19
20
21
22
23
24
25
# File 'lib/brainzlab/sentinel.rb', line 18

def hosts(status: nil, page: 1, per_page: 50)
  return [] unless enabled?

  ensure_provisioned!
  return [] unless BrainzLab.configuration.sentinel_valid?

  client.list_hosts(status: status, page: page, per_page: per_page)
end

.metrics(host_id, period: '1h', metrics: nil) ⇒ Hash?

Get metrics for a host

Examples:

metrics = BrainzLab::Sentinel.metrics(host_id, period: "24h", metrics: ["cpu", "memory"])

Parameters:

  • host_id (String)

    Host ID

  • period (String) (defaults to: '1h')

    Time period (1h, 6h, 24h, 7d, 30d)

  • metrics (Array<String>) (defaults to: nil)

    Specific metrics (cpu, memory, disk, network)

Returns:

  • (Hash, nil)

    Metrics data



48
49
50
51
52
53
54
55
# File 'lib/brainzlab/sentinel.rb', line 48

def metrics(host_id, period: '1h', metrics: nil)
  return nil unless enabled?

  ensure_provisioned!
  return nil unless BrainzLab.configuration.sentinel_valid?

  client.get_metrics(host_id, period: period, metrics: metrics)
end

.processes(host_id, sort_by: 'cpu', limit: 20) ⇒ Array<Hash>

Get top processes for a host

Examples:

procs = BrainzLab::Sentinel.processes(host_id, sort_by: "memory", limit: 10)

Parameters:

  • host_id (String)

    Host ID

  • sort_by (String) (defaults to: 'cpu')

    Sort by (cpu, memory, time)

  • limit (Integer) (defaults to: 20)

    Max results

Returns:

  • (Array<Hash>)

    Process list



66
67
68
69
70
71
72
73
# File 'lib/brainzlab/sentinel.rb', line 66

def processes(host_id, sort_by: 'cpu', limit: 20)
  return [] unless enabled?

  ensure_provisioned!
  return [] unless BrainzLab.configuration.sentinel_valid?

  client.get_processes(host_id, sort_by: sort_by, limit: limit)
end

.provisionerObject



144
145
146
# File 'lib/brainzlab/sentinel.rb', line 144

def provisioner
  @provisioner ||= Provisioner.new(BrainzLab.configuration)
end

.reset!Object



152
153
154
155
156
# File 'lib/brainzlab/sentinel.rb', line 152

def reset!
  @client = nil
  @provisioner = nil
  @provisioned = false
end