def read(self, kstat_p, raw_data_type=None): libkstat.kstat_read(self._kstat_ctl, kstat_p, None) kstat = kstat_p.contents # kstat can store multiple types of data, return the appropriate type if kstat.ks_type == libkstat.KSTAT_TYPE_RAW: if not raw_data_type: raise TypeError('raw_data_type not specified for ks_type = KSTAT_TYPE_RAW') return KstatRawData(kstat, raw_data_type) elif kstat.ks_type == libkstat.KSTAT_TYPE_NAMED: return KstatNamedData(kstat) elif kstat.ks_type == libkstat.KSTAT_TYPE_INTR: return KstatIntrData(kstat) elif kstat.ks_type == libkstat.KSTAT_TYPE_IO: return KstatIOData(kstat) elif kstat.ks_type == libkstat.KSTAT_TYPE_TIMER: pass else: pass return value
def __getitem__(self, triplet): module, instance, name = triplet ksp = libkstat.kstat_lookup(self._ctl, module, instance, name) if not ksp: raise KeyError(triplet) libkstat.kstat_read(self._ctl, ksp, None) ks = ksp.contents if ks.ks_type == libkstat.KSTAT_TYPE_RAW: pass elif ks.ks_type == libkstat.KSTAT_TYPE_NAMED: value = dict() print ks.ks_data datap = C.cast(ks.ks_data, C.POINTER(libkstat.kstat_named)) for i in range(ks.ks_ndata): if datap[i].data_type == libkstat.KSTAT_DATA_CHAR: value[datap[i].name] = datap[i].value.c elif datap[i].data_type == libkstat.KSTAT_DATA_INT32: value[datap[i].name] = datap[i].value.i32 elif datap[i].data_type == libkstat.KSTAT_DATA_UINT32: value[datap[i].name] = datap[i].value.ui32 elif datap[i].data_type == libkstat.KSTAT_DATA_INT64: value[datap[i].name] = datap[i].value.i64 elif datap[i].data_type == libkstat.KSTAT_DATA_UINT64: value[datap[i].name] = datap[i].value.ui64 #print datap.contents #print dir(datap[i].value) #value[datap[i].name] = 0 elif ks.ks_type == libkstat.KSTAT_TYPE_INTR: pass elif ks.ks_type == libkstat.KSTAT_TYPE_IO: pass elif ks.ks_type == libkstat.KSTAT_TYPE_TIMER: pass else: pass return value
def _read_value(self, ksp): libkstat.kstat_read(self._ctl, ksp, None) return self._parse_value(ksp)