class Libvirt::Errors::LibError

Constants

ERROR_FIELDS

Object contains detailed error information retrieved from libvirt.

Attributes

client_message[R]
error_code[R]
error_data[R]
error_domain[R]
error_level[R]
error_message[R]

Public Class Methods

new(client_message = nil) click to toggle source

@param client_message [String, nil] optional client message When client_message ommited and virGetLastError return error message will be following: “ERROR_LEVEL: ERROR_NUMBER (ERROR_DOMAIN) ERROR_MESSAGE”. When client message provided and virGetLastError return error message will be following: “CLIENT_MESSAGEnERROR_LEVEL: ERROR_NUMBER (ERROR_DOMAIN) ERROR_MESSAGE”. When client message is provided and virGetLastError return no error message will be following: “CLIENT_MESSAGE”.

Calls superclass method
# File lib/libvirt/errors.rb, line 28
def initialize(client_message = nil)
  @client_message = client_message
  ptr = FFI::Error.virGetLastError
  unless ptr.null?
    struct = FFI::Error::Struct.new(ptr)
    @error_data = struct.members.map { |m| [m, struct[m]] }.to_h
    @error_code = error_data[:code]
    @error_domain = error_data[:domain]
    @error_message = error_data[:message]
    @error_level = error_data[:level]
  end

  super(build_message)
end

Private Instance Methods

build_message() click to toggle source
# File lib/libvirt/errors.rb, line 45
def build_message
  if error_data.nil?
    client_message
  elsif client_message.nil?
    format '%<level>s: %<code>s (%<domain>s) %<message>s',
           level: error_level,
           code: error_code,
           domain: error_domain,
           message: error_message
  else
    format "%<client_message>s\n%<level>s: %<code>s (%<domain>s) %<message>s",
           client_message: client_message,
           level: error_level,
           code: error_code,
           domain: error_domain,
           message: error_message
  end
end