// Fetch fetches disk IO metrics from the OS. func (m *MetricSet) Fetch() ([]common.MapStr, error) { stats, err := disk.IOCounters() if err != nil { return nil, errors.Wrap(err, "disk io counters") } events := make([]common.MapStr, 0, len(stats)) for _, counters := range stats { event := common.MapStr{ "name": counters.Name, "read": common.MapStr{ "count": counters.ReadCount, "time": counters.ReadTime, "bytes": counters.ReadBytes, }, "write": common.MapStr{ "count": counters.WriteCount, "time": counters.WriteTime, "bytes": counters.WriteBytes, }, "io": common.MapStr{ "time": counters.IoTime, }, } events = append(events, event) if counters.SerialNumber != "" { event["serial_number"] = counters.SerialNumber } } return events, nil }
func (s *systemPS) DiskIO() (map[string]disk.IOCountersStat, error) { m, err := disk.IOCounters() if err == internal.NotImplementedError { return nil, nil } return m, err }
// Returns a map of the current IO byte count for all devices func currentIOStatus(devices ...string) (map[string]uint64, error) { send := make(map[string]uint64, len(devices)) allUsage, err := psDisk.IOCounters() if err != nil { return nil, err } for _, d := range devices { usage := allUsage[d] send[d] = usage.WriteBytes + usage.ReadBytes } return send, nil }
func diskIOMetrics() []*types.TimeSeriesData { cnt, err := disk.IOCounters() if err != nil { return nil } metrics := []*types.TimeSeriesData{} ts := time.Now().Unix() for _, v := range cnt { metrics = append(metrics, &types.TimeSeriesData{ Metric: "disk.readbytes", Value: float64(v.ReadBytes), Cycle: Cycle, Timestamp: ts, DataType: "COUNTER", Tags: map[string]string{"name": v.Name}, }, &types.TimeSeriesData{ Metric: "disk.readcount", Value: float64(v.ReadCount), Cycle: Cycle, Timestamp: ts, DataType: "COUNTER", Tags: map[string]string{"name": v.Name}, }, &types.TimeSeriesData{ Metric: "disk.readtime", Value: float64(v.ReadTime), Cycle: Cycle, Timestamp: ts, DataType: "COUNTER", Tags: map[string]string{"name": v.Name}, }, &types.TimeSeriesData{ Metric: "disk.writebytes", Value: float64(v.WriteBytes), Cycle: Cycle, Timestamp: ts, DataType: "COUNTER", Tags: map[string]string{"name": v.Name}, }, &types.TimeSeriesData{ Metric: "disk.writecount", Value: float64(v.WriteCount), Cycle: Cycle, Timestamp: ts, DataType: "COUNTER", Tags: map[string]string{"name": v.Name}, }, &types.TimeSeriesData{ Metric: "disk.writetime", Value: float64(v.WriteTime), Cycle: Cycle, Timestamp: ts, DataType: "COUNTER", Tags: map[string]string{"name": v.Name}, }, ) } return metrics }