Class: OTRS
- Inherits:
-
Object
show all
- Extended by:
- ActiveModel::Callbacks
- Includes:
- ActiveModel::Conversion, ActiveModel::Naming, ActiveModel::Validations
- Defined in:
- lib/otrs_connector/otrs.rb
Defined Under Namespace
Classes: Change, ConfigItem, GeneralCatalog, Link, Relation, Service, Ticket
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.api_url ⇒ Object
36
37
38
|
# File 'lib/otrs_connector/otrs.rb', line 36
def self.api_url
@@otrs_api_url
end
|
.api_url=(url) ⇒ Object
39
40
41
|
# File 'lib/otrs_connector/otrs.rb', line 39
def self.api_url=(url)
@@otrs_api_url = url
end
|
.connect(params, timeout = 60, retries = 4) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/otrs_connector/otrs.rb', line 94
def self.connect(params, timeout=60, retries=4)
uri = self.setup_connection_params(params)
retry_counter = 0
begin
response = self.get_from_remote(uri, timeout)
rescue EOFError
retry_counter += 1
puts "EOFError, Attempt: #{retry_counter+1}"
retry if retry_counter < retries
raise EOFError if retry_counter >= retries
rescue Timeout::Error
retry_counter += 1
timeout = timeout*1.5
puts "Timeout::Error Attempt: #{retry_counter+1}, Timeout #{timeout}"
retry if retry_counter < retries
raise Timeout::Error if retry_counter >= retries
rescue RuntimeError
retry_counter += 1
puts "Request failed, retrying. Attempt: #{retry_counter+1}"
retry if retry_counter < retries
raise RuntimeError if retry_counter >= retries
end
return self.process_response(response)
end
|
.get_from_remote(uri, read_timeout = 60) ⇒ Object
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/otrs_connector/otrs.rb', line 73
def self.get_from_remote(uri, read_timeout=60)
http = Net::HTTP.new(uri.host, uri.port)
http.read_timeout = read_timeout
if self.api_url =~ /^https/
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
end
|
.object_preprocessor(object) ⇒ Object
Base method for processing objects returned by OTRS into Ruby objects This works in most cases, but not all, namely with OTRS::ConfigItem due to extra attributes
127
128
129
130
131
132
133
134
|
# File 'lib/otrs_connector/otrs.rb', line 127
def self.object_preprocessor(object)
unless object.empty? or object.nil?
a = Hash[*object]
self.new(a.symbolize_keys)
else
raise 'NoSuchObject'
end
end
|
.password ⇒ Object
29
30
31
|
# File 'lib/otrs_connector/otrs.rb', line 29
def self.password
@@otrs_pass
end
|
.password=(password) ⇒ Object
32
33
34
|
# File 'lib/otrs_connector/otrs.rb', line 32
def self.password=(password)
@@otrs_pass = password
end
|
.process_response(response) ⇒ Object
84
85
86
87
88
89
90
91
|
# File 'lib/otrs_connector/otrs.rb', line 84
def self.process_response(response)
result = ActiveSupport::JSON::decode(response.body)
if result["Result"] == 'successful'
return result["Data"]
else
raise "Error:#{result["Result"]} #{result["Data"]}"
end
end
|
.setup_connection_params(params) ⇒ Object
Handles communication with OTRS
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/otrs_connector/otrs.rb', line 54
def self.setup_connection_params(params)
if self.api_url =~ /^https/
require 'net/https'
else
require 'net/http'
end
base_url = self.api_url
logon = URI.encode("User=#{self.user}&Password=#{self.password}")
object = URI.encode(params[:object])
method = URI.encode(params[:method])
data = params[:data].to_json
data = URI.encode(data)
data = URI.escape(data, '=\',\\/+-&?#.;')
URI.parse("#{base_url}?#{logon}&Object=#{object}&Method=#{method}&Data=#{data}")
end
|
.user ⇒ Object
22
23
24
|
# File 'lib/otrs_connector/otrs.rb', line 22
def self.user
@@otrs_user
end
|
.user=(username) ⇒ Object
25
26
27
|
# File 'lib/otrs_connector/otrs.rb', line 25
def self.user=(username)
@@otrs_user = username
end
|
Instance Method Details
#attributes ⇒ Object
Convert object’s instance variables to a hash
44
45
46
47
48
49
50
|
# File 'lib/otrs_connector/otrs.rb', line 44
def attributes
attributes = {}
self.instance_variables.each do |v|
attributes[v.to_s.gsub('@','').to_sym] = self.instance_variable_get(v)
end
attributes
end
|
#connect(params) ⇒ Object
Not sure why this is here
137
138
139
|
# File 'lib/otrs_connector/otrs.rb', line 137
def connect(params)
self.class.connect(params)
end
|