mirror of
https://github.com/containers/podman.git
synced 2025-09-10 15:46:07 +08:00
Merge pull request #14421 from Luap99/stats
podman stats: work with network connect/disconnect
This commit is contained in:
@ -930,6 +930,8 @@ func (r *Runtime) reloadContainerNetwork(ctr *Container) (map[string]types.Statu
|
||||
return r.configureNetNS(ctr, ctr.state.NetNS)
|
||||
}
|
||||
|
||||
// TODO (5.0): return the statistics per network interface
|
||||
// This would allow better compat with docker.
|
||||
func getContainerNetIO(ctr *Container) (*netlink.LinkStatistics, error) {
|
||||
var netStats *netlink.LinkStatistics
|
||||
|
||||
@ -943,21 +945,39 @@ func getContainerNetIO(ctr *Container) (*netlink.LinkStatistics, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// FIXME get the interface from the container netstatus
|
||||
dev := "eth0"
|
||||
netMode := ctr.config.NetMode
|
||||
netStatus := ctr.getNetworkStatus()
|
||||
if otherCtr != nil {
|
||||
netMode = otherCtr.config.NetMode
|
||||
netStatus = otherCtr.getNetworkStatus()
|
||||
}
|
||||
if netMode.IsSlirp4netns() {
|
||||
dev = "tap0"
|
||||
// create a fake status with correct interface name for the logic below
|
||||
netStatus = map[string]types.StatusBlock{
|
||||
"slirp4netns": {
|
||||
Interfaces: map[string]types.NetInterface{"tap0": {}},
|
||||
},
|
||||
}
|
||||
}
|
||||
err := ns.WithNetNSPath(netNSPath, func(_ ns.NetNS) error {
|
||||
link, err := netlink.LinkByName(dev)
|
||||
if err != nil {
|
||||
return err
|
||||
for _, status := range netStatus {
|
||||
for dev := range status.Interfaces {
|
||||
link, err := netlink.LinkByName(dev)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if netStats == nil {
|
||||
netStats = link.Attrs().Statistics
|
||||
continue
|
||||
}
|
||||
// Currently only Tx/RxBytes are used.
|
||||
// In the future we should return all stats per interface so that
|
||||
// api users have a better options.
|
||||
stats := link.Attrs().Statistics
|
||||
netStats.TxBytes += stats.TxBytes
|
||||
netStats.RxBytes += stats.RxBytes
|
||||
}
|
||||
}
|
||||
netStats = link.Attrs().Statistics
|
||||
return nil
|
||||
})
|
||||
return netStats, err
|
||||
|
Reference in New Issue
Block a user