コード例 #1
0
ファイル: stats.go プロジェクト: hyperhq/runv
func getBlockStats(domain *libvirtgo.VirDomain, virDomain *VirDomain) (types.BlkioStats, error) {
	stats := types.BlkioStats{
		IoServiceBytesRecursive: make([]types.BlkioStatEntry, 0, 1),
		IoServicedRecursive:     make([]types.BlkioStatEntry, 0, 1),
	}

	for _, blk := range virDomain.Devices.Disks {
		blkStats, err := domain.BlockStats(blk.Target.Dev)
		if err != nil {
			return stats, err
		}

		major, minor, err := getBlockNumber(blk.Source.File)
		if err != nil {
			return stats, err
		}

		sourceDevice := blk.Source.File
		if len(sourceDevice) == 0 {
			sourceDevice = blk.Source.Name
		}

		stats.IoServiceBytesRecursive = append(stats.IoServiceBytesRecursive, types.BlkioStatEntry{
			Name:   blk.Target.Dev,
			Type:   blk.Type,
			Source: sourceDevice,
			Major:  major,
			Minor:  minor,
			Stat: map[string]uint64{
				"Read":  uint64(blkStats.RdBytes),
				"Write": uint64(blkStats.WrBytes),
			},
		})
		stats.IoServicedRecursive = append(stats.IoServicedRecursive, types.BlkioStatEntry{
			Name:   blk.Target.Dev,
			Type:   blk.Type,
			Source: sourceDevice,
			Major:  major,
			Minor:  minor,
			Stat: map[string]uint64{
				"Read":  uint64(blkStats.RdReq),
				"Write": uint64(blkStats.WrReq),
			},
		})
	}

	return stats, nil
}