class OTRS

Public Class Methods

api_url() click to toggle source
# File lib/otrs_connector/otrs.rb, line 36
def self.api_url
  @@otrs_api_url
end
api_url=(url) click to toggle source
# File lib/otrs_connector/otrs.rb, line 39
def self.api_url=(url)
  @@otrs_api_url = url
end
connect(params, timeout=60, retries=4) click to toggle source
# 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
  # Connect to OTRS
  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) click to toggle source
# 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) click to toggle source

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

# 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() click to toggle source
# File lib/otrs_connector/otrs.rb, line 29
def self.password
  @@otrs_pass
end
password=(password) click to toggle source
# File lib/otrs_connector/otrs.rb, line 32
def self.password=(password)
  @@otrs_pass = password
end
process_response(response) click to toggle source
# 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) click to toggle source

Handles communication with OTRS

# 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
  # Build request 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)
  # Had some issues with certain characters not being escaped properly and causing JSON issues
  data = URI.escape(data, '=\',\\/+-&?#.;')
  URI.parse("#{base_url}?#{logon}&Object=#{object}&Method=#{method}&Data=#{data}")
end
user() click to toggle source
# File lib/otrs_connector/otrs.rb, line 22
def self.user
  @@otrs_user
end
user=(username) click to toggle source
# File lib/otrs_connector/otrs.rb, line 25
def self.user=(username)
  @@otrs_user = username
end

Public Instance Methods

attributes() click to toggle source

Convert object’s instance variables to a hash

# 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) click to toggle source

Not sure why this is here

# File lib/otrs_connector/otrs.rb, line 137
def connect(params)
  self.class.connect(params)
end