readCommitStats returns the commit_stats information for commit stats metrics.
(p string)
| 256 | |
| 257 | // readCommitStats returns the commit_stats information for commit stats metrics. |
| 258 | func (r *reader) readCommitStats(p string) CommitStats { |
| 259 | stats := CommitStats{} |
| 260 | |
| 261 | f, err := os.Open(path.Join(r.path, p)) |
| 262 | if err != nil { |
| 263 | // if commit_stats not found. maybe btrfs version < 6.0 |
| 264 | if !os.IsNotExist(err) { |
| 265 | r.err = err |
| 266 | } |
| 267 | return stats |
| 268 | } |
| 269 | defer f.Close() |
| 270 | |
| 271 | scanner := bufio.NewScanner(f) |
| 272 | |
| 273 | for scanner.Scan() { |
| 274 | line := scanner.Text() |
| 275 | parts := strings.Fields(scanner.Text()) |
| 276 | // require <key> <value> |
| 277 | if len(parts) != 2 { |
| 278 | r.err = fmt.Errorf("invalid commit_stats line %q", line) |
| 279 | return stats |
| 280 | } |
| 281 | |
| 282 | value, err := strconv.ParseUint(parts[1], 10, 64) |
| 283 | if err != nil { |
| 284 | r.err = fmt.Errorf("error parsing commit_stats line: %w", err) |
| 285 | return stats |
| 286 | } |
| 287 | |
| 288 | switch metricName := parts[0]; metricName { |
| 289 | case "commits": |
| 290 | stats.Commits = value |
| 291 | case "last_commit_ms": |
| 292 | stats.LastCommitMs = value |
| 293 | case "max_commit_ms": |
| 294 | stats.MaxCommitMs = value |
| 295 | case "total_commit_ms": |
| 296 | stats.TotalCommitMs = value |
| 297 | default: |
| 298 | continue |
| 299 | } |
| 300 | } |
| 301 | |
| 302 | if err := scanner.Err(); err != nil { |
| 303 | r.err = fmt.Errorf("error scanning commit_stats file: %w", err) |
| 304 | return stats |
| 305 | } |
| 306 | |
| 307 | return stats |
| 308 | } |
no test coverage detected