x-pack/metricbeat/module/awsfargate/task_stats/diskio.go (46 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. package task_stats import ( dcontainer "github.com/docker/docker/api/types/container" ) // BlkioRaw sums raw Blkio stats type BlkioRaw struct { reads uint64 writes uint64 totals uint64 } type blkioStats struct { reads float64 writes float64 totals float64 serviced BlkioRaw servicedBytes BlkioRaw servicedTime BlkioRaw waitTime BlkioRaw queued BlkioRaw } // getBlkioStats collects diskio metrics from BlkioStats structures(not populated in Windows) func getBlkioStats(raw dcontainer.BlkioStats) blkioStats { return blkioStats{ serviced: getNewStats(raw.IoServicedRecursive), servicedBytes: getNewStats(raw.IoServiceBytesRecursive), servicedTime: getNewStats(raw.IoServiceTimeRecursive), waitTime: getNewStats(raw.IoWaitTimeRecursive), queued: getNewStats(raw.IoQueuedRecursive), } } func getNewStats(blkioEntry []dcontainer.BlkioStatEntry) BlkioRaw { stats := BlkioRaw{ reads: 0, writes: 0, totals: 0, } for _, myEntry := range blkioEntry { switch myEntry.Op { case "Write": stats.writes += myEntry.Value case "Read": stats.reads += myEntry.Value case "Total": stats.totals += myEntry.Value } } return stats }