Class: OpsviewRest

Inherits:
Object
  • Object
show all
Defined in:
lib/opsview_rest.rb,
lib/opsview_rest/host.rb,
lib/opsview_rest/role.rb,
lib/opsview_rest/mixin.rb,
lib/opsview_rest/contact.rb,
lib/opsview_rest/keyword.rb,
lib/opsview_rest/attribute.rb,
lib/opsview_rest/hostgroup.rb,
lib/opsview_rest/timeperiod.rb,
lib/opsview_rest/hosttemplate.rb,
lib/opsview_rest/servicecheck.rb,
lib/opsview_rest/servicegroup.rb,
lib/opsview_rest/hostcheckcommand.rb,
lib/opsview_rest/monitoringserver.rb,
lib/opsview_rest/notificationmethod.rb

Defined Under Namespace

Modules: Mixin Classes: Attribute, Contact, Host, Hostcheckcommand, Hostgroup, Hosttemplate, Keyword, MonitoringServer, NotificationMethod, Role, Servicecheck, Servicegroup, Timeperiod

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, options = {}) ⇒ OpsviewRest

Returns a new instance of OpsviewRest.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/opsview_rest.rb', line 7

def initialize(url, options = {})
  options = {
    username: 'api',
    password: 'changeme',
    connect: true
  }.update options

  @url      = url
  @username = options[:username]
  @password = options[:password]
  @rest     = RestClient::Resource.new("#{@url}/rest/", headers: { content_type: 'application/json' })

   if options[:connect]
end

Instance Attribute Details

#passwordObject

Returns the value of attribute password.



5
6
7
# File 'lib/opsview_rest.rb', line 5

def password
  @password
end

#restObject

Returns the value of attribute rest.



5
6
7
# File 'lib/opsview_rest.rb', line 5

def rest
  @rest
end

#urlObject

Returns the value of attribute url.



5
6
7
# File 'lib/opsview_rest.rb', line 5

def url
  @url
end

#usernameObject

Returns the value of attribute username.



5
6
7
# File 'lib/opsview_rest.rb', line 5

def username
  @username
end

Instance Method Details

#api_requestObject



142
143
144
145
146
147
148
149
150
151
152
# File 'lib/opsview_rest.rb', line 142

def api_request
  response_body = begin
    response = yield
    response.body
  rescue RestClient::Exception => e
    raise "I have #{e.inspect} with #{e.http_code}"
    get(e.response) if e.http_code == 307
    e.response
  end
  parse_response(JSON.parse(response_body))
end

#create(options = {}) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/opsview_rest.rb', line 33

def create(options = {})
  case options[:type]
  when :attribute
    require 'opsview_rest/attribute'
    OpsviewRest::Attribute.new(self, options)
  when :contact
    require 'opsview_rest/contact'
    OpsviewRest::Contact.new(self, options)
  when :host
    require 'opsview_rest/host'
    OpsviewRest::Host.new(self, options)
  when :hostcheckcommand
    require 'opsview_rest/hostcheckcommand'
    OpsviewRest::Hostcheckcommand.new(self, options)
  when :hostgroup
    require 'opsview_rest/hostgroup'
    OpsviewRest::Hostgroup.new(self, options)
  when :hosttemplate
    require 'opsview_rest/hosttemplate'
    OpsviewRest::Hosttemplate.new(self, options)
  when :keyword
    require 'opsview_rest/keyword'
    OpsviewRest::Keyword.new(self, options)
  when :monitoring_server
    require 'opsview_rest/monitoring_server'
    OpsviewRest::MonitoringServer.new(self, options)
  when :notificationmethod
    require 'opsview_rest/notificationmethod'
    OpsviewRest::NotificationMethod.new(self, options)
  when :role
    require 'opsview_rest/role'
    OpsviewRest::Role.new(self, options)
  when :servicecheck
    require 'opsview_rest/servicecheck'
    OpsviewRest::Servicecheck.new(self, options)
  when :servicegroup
    require 'opsview_rest/servicegroup'
    OpsviewRest::Servicegroup.new(self, options)
  when :timeperiod
    require 'opsview_rest/timeperiod'
    OpsviewRest::Timeperiod.new(self, options)
  else
    raise 'Type not implemented yet.'
  end
end

#delete(path_part, additional_headers = {}, &block) ⇒ Object



130
131
132
# File 'lib/opsview_rest.rb', line 130

def delete(path_part, additional_headers = {}, &block)
  api_request { @rest[path_part].delete(additional_headers, &block) }
end

#find(options = {}) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/opsview_rest.rb', line 96

def find(options = {})
  options = {
    type: nil,
    rows: 'all',
    searchattribute: nil
  }.update options

  options[:searchattribute] = 'name' if options[:searchattribute].nil?

  if options[:name].nil?
    raise ArgumentError, 'Need to specify the name of the object.'
  else
    get("config/#{options[:type]}?s.#{options[:searchattribute]}=#{options[:name]}&rows=#{options[:rows]}")
  end
end

#get(path_part, additional_headers = {}, &block) ⇒ Object



126
127
128
# File 'lib/opsview_rest.rb', line 126

def get(path_part, additional_headers = {}, &block)
  api_request { @rest[path_part].get(additional_headers, &block) }
end

#initiate_reloadObject



92
93
94
# File 'lib/opsview_rest.rb', line 92

def initiate_reload
  post('reload', {})
end

#list(options = {}) ⇒ Object



79
80
81
82
83
84
85
86
# File 'lib/opsview_rest.rb', line 79

def list(options = {})
  options = {
    type: 'host',
    rows: 'all'
  }.update options

  get("config/#{options[:type]}?rows=#{options[:rows]}")
end

#loginObject



22
23
24
25
26
27
# File 'lib/opsview_rest.rb', line 22

def 
  response = post('login', 'username' => @username, 'password' => @password)
  @rest.headers[:x_opsview_token]    = response['token']
  @rest.headers[:x_opsview_username] = @username
  response
end

#logoutObject



29
30
31
# File 'lib/opsview_rest.rb', line 29

def logout
  delete('login')
end

#parse_response(response) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/opsview_rest.rb', line 154

def parse_response(response)
  # We've got an error if there's "message" and "detail" fields
  # in the response
  if response['message'] && response['detail']
    raise Opsview::Exceptions::RequestFailed, "Request failed: #{response['message']}, detail: #{response['detail']}"
  # If we have a token, return that:
  elsif response['token']
    response
  # If we have a list of objects, return the list:
  elsif response['list']
    response['list']
  else
    response['object']
  end
end

#post(path_part, payload, additional_headers = {}, &block) ⇒ Object



134
135
136
# File 'lib/opsview_rest.rb', line 134

def post(path_part, payload, additional_headers = {}, &block)
  api_request { @rest[path_part].post(payload.to_json, additional_headers, &block) }
end

#purge(options = {}) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/opsview_rest.rb', line 112

def purge(options = {})
  options = {
    type: 'host',
    name: nil
  }.update options

  if options[:name].nil?
    raise ArgumentError, 'Need to specify the name of the object.'
  else
    id = find(type: options[:type], name: options[:name])[0]['id']
    delete("config/#{options[:type]}/#{id}")
  end
end

#put(path_part, payload, additional_headers = {}, &block) ⇒ Object



138
139
140
# File 'lib/opsview_rest.rb', line 138

def put(path_part, payload, additional_headers = {}, &block)
  api_request { @rest[path_part].put(payload.to_json, additional_headers, &block) }
end

#reloadObject



88
89
90
# File 'lib/opsview_rest.rb', line 88

def reload
  get('reload')
end