Method: PCPEasy::PMAPI.pmExtractValue

Defined in:
lib/pcp_easy/pmapi.rb

.pmExtractValue(value_format, pm_desc, pm_value) ⇒ Object



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'lib/pcp_easy/pmapi.rb', line 205

def self.pmExtractValue(value_format, pm_desc, pm_value)

  atom = PCPEasy::PMAPI::PmAtomValue.new
  error_code = FFIInternal.pmExtractValue(value_format, pm_value.pointer, pm_desc.type, atom.pointer, pm_desc.type)
  raise PCPEasy::Error.from_pmapi_error_number(error_code) if error_code < 0

  case pm_desc.type
    when PM_TYPE_32
      atom.l
    when PM_TYPE_U32
      atom.ul
    when PM_TYPE_64
      atom.ll
    when PM_TYPE_U64
      atom.ull
    when PM_TYPE_FLOAT
      atom.f
    when PM_TYPE_DOUBLE
      atom.d
    when PM_TYPE_STRING
      str = atom.cp.read_string
      LibC.free(atom.cp) if atom.cp
      str
    when PM_TYPE_AGGREGATE || PM_TYPE_EVENT || PM_TYPE_HIGHRES_EVENT
      # No support, make sure we free the pointer
      LibC.free(atom.vbp) if atom.vbp
      raise PCPEasy::Error.new "Metric type #{pm_desc.type} not supported"
    else
      raise ArgumentError.new "Type #{pm_desc.type} not valid"
  end
end