func (c *devstatCollector) Update(ch chan<- prometheus.Metric) error { c.mu.Lock() defer c.mu.Unlock() var stats *C.Stats n := C._get_stats(c.devinfo, &stats) if n == -1 { return errors.New("devstat_getdevs failed") } base := unsafe.Pointer(stats) for i := C.int(0); i < n; i++ { offset := i * C.int(C.sizeof_Stats) stat := (*C.Stats)(unsafe.Pointer(uintptr(base) + uintptr(offset))) device := fmt.Sprintf("%s%d", C.GoString(&stat.device[0]), stat.unit) ch <- c.bytes.mustNewConstMetric(float64(stat.bytes.read), device, "read") ch <- c.bytes.mustNewConstMetric(float64(stat.bytes.write), device, "write") ch <- c.transfers.mustNewConstMetric(float64(stat.transfers.other), device, "other") ch <- c.transfers.mustNewConstMetric(float64(stat.transfers.read), device, "read") ch <- c.transfers.mustNewConstMetric(float64(stat.transfers.write), device, "write") ch <- c.duration.mustNewConstMetric(float64(stat.duration.other), device, "other") ch <- c.duration.mustNewConstMetric(float64(stat.duration.read), device, "read") ch <- c.duration.mustNewConstMetric(float64(stat.duration.write), device, "write") ch <- c.busyTime.mustNewConstMetric(float64(stat.busyTime), device) ch <- c.blocks.mustNewConstMetric(float64(stat.blocks), device) } C.free(unsafe.Pointer(stats)) return nil }
func (c *devstatCollector) Update(ch chan<- prometheus.Metric) (err error) { count := C._get_ndevs() if count == -1 { return errors.New("getdevs() failed") } if count == -2 { return errors.New("calloc() failed") } for i := C.int(0); i < count; i++ { stats := C._get_stats(i) device := fmt.Sprintf("%s%d", C.GoString(&stats.device[0]), stats.unit) ch <- prometheus.MustNewConstMetric(c.bytesDesc, prometheus.CounterValue, float64(stats.bytes), device) ch <- prometheus.MustNewConstMetric(c.transfersDesc, prometheus.CounterValue, float64(stats.transfers), device) ch <- prometheus.MustNewConstMetric(c.blocksDesc, prometheus.CounterValue, float64(stats.blocks), device) } return err }
func (c *devstatCollector) Update(ch chan<- prometheus.Metric) (err error) { count := C._get_ndevs() if count == -1 { return errors.New("devstat_getdevs() failed") } if count == -2 { return errors.New("calloc() failed") } for i := C.int(0); i < count; i++ { stats := C._get_stats(i) device := fmt.Sprintf("%s%d", C.GoString(&stats.device[0]), stats.unit) // Free metrics are disabled for now, please see PR #88 for more details. c.bytes.With(prometheus.Labels{"device": device, "type": "read"}).Set(float64(stats.bytes.read)) c.bytes.With(prometheus.Labels{"device": device, "type": "write"}).Set(float64(stats.bytes.write)) //c.bytes.With(prometheus.Labels{"device": device, "type": "free"}).Set(float64(stats.bytes.free)) c.transfers.With(prometheus.Labels{"device": device, "type": "other"}).Set(float64(stats.transfers.other)) c.transfers.With(prometheus.Labels{"device": device, "type": "read"}).Set(float64(stats.transfers.read)) c.transfers.With(prometheus.Labels{"device": device, "type": "write"}).Set(float64(stats.transfers.write)) //c.transfers.With(prometheus.Labels{"device": device, "type": "free"}).Set(float64(stats.transfers.free)) c.duration.With(prometheus.Labels{"device": device, "type": "other"}).Set(float64(stats.duration.other)) c.duration.With(prometheus.Labels{"device": device, "type": "read"}).Set(float64(stats.duration.read)) c.duration.With(prometheus.Labels{"device": device, "type": "write"}).Set(float64(stats.duration.write)) //c.duration.With(prometheus.Labels{"device": device, "type": "free"}).Set(float64(stats.duration.free)) c.busyTime.With(prometheus.Labels{"device": device}).Set(float64(stats.busyTime)) c.blocks.With(prometheus.Labels{"device": device}).Set(float64(stats.blocks)) } c.bytes.Collect(ch) c.transfers.Collect(ch) c.duration.Collect(ch) c.busyTime.Collect(ch) c.blocks.Collect(ch) return err }