// Fetch fetches filesystem metrics for all mounted filesystems and returns // a single event containing aggregated data. func (m *MetricSet) Fetch() (common.MapStr, error) { fss, err := filesystem.GetFileSystemList() if err != nil { return nil, errors.Wrap(err, "filesystem list") } // These values are optional and could also be calculated by Kibana var totalFiles, totalSize, totalSizeFree, totalSizeUsed uint64 for _, fs := range fss { fsStat, err := filesystem.GetFileSystemStat(fs) if err != nil { debugf("error fetching filesystem stats for '%s': %v", fs.DirName, err) continue } totalFiles += fsStat.Files totalSize += fsStat.Total totalSizeFree += fsStat.Free totalSizeUsed += fsStat.Used } return common.MapStr{ "total_size": common.MapStr{ "free": totalSizeFree, "used": totalSizeUsed, "total": totalSize, }, "count": len(fss), "total_files": totalFiles, }, nil }
// Fetch fetches filesystem metrics for all mounted filesystems and returns // a single event containing aggregated data. func (m *MetricSet) Fetch() (common.MapStr, error) { fss, err := filesystem.GetFileSystemList() if err != nil { return nil, errors.Wrap(err, "filesystem list") } // These values are optional and could also be calculated by Kibana var totalFiles, totalSize, totalSizeFree, totalSizeUsed uint64 dict := map[string]bool{} for _, fs := range fss { stat, err := filesystem.GetFileSystemStat(fs) if err != nil { debugf("error fetching filesystem stats for '%s': %v", fs.DirName, err) continue } logp.Debug("fsstat", "filesystem: %s total=%d, used=%d, free=%d", stat.Mount, stat.Total, stat.Used, stat.Free) if _, ok := dict[stat.Mount]; ok { // ignore filesystem with the same mounting point continue } totalFiles += stat.Files totalSize += stat.Total totalSizeFree += stat.Free totalSizeUsed += stat.Used dict[stat.Mount] = true } return common.MapStr{ "total_size": common.MapStr{ "free": totalSizeFree, "used": totalSizeUsed, "total": totalSize, }, "count": len(dict), "total_files": totalFiles, }, nil }