in pkg/skoop/collector/podcollector/collector.go [132:188]
func (a *podCollector) PodInfo(sandbox *pb.PodSandbox) (k8s.PodNetInfo, error) {
p := k8s.PodNetInfo{}
var (
sandboxStatus *pb.PodSandboxStatusResponse
err error
)
if a.runtimeCli != nil {
sandboxStatus, err = a.runtimeCli.PodSandboxStatus(context.TODO(), &pb.PodSandboxStatusRequest{
PodSandboxId: sandbox.Id,
Verbose: a.dockerCli == nil,
})
if err != nil {
return p, err
}
} else {
statusAlpha, err := a.runtimeCliV1Alpha2.PodSandboxStatus(context.TODO(), &pbv1alpha2.PodSandboxStatusRequest{
PodSandboxId: sandbox.Id,
Verbose: a.dockerCli == nil,
})
if err != nil {
return p, err
}
sandboxStatus = &pb.PodSandboxStatusResponse{}
if err = alphaRespTov1Resp(statusAlpha, sandboxStatus); err != nil {
return p, fmt.Errorf("error convert alpha resp %v", err)
}
}
p.PodName = sandboxStatus.Status.GetMetadata().GetName()
p.PodNamespace = sandboxStatus.Status.GetMetadata().GetNamespace()
p.ContainerID = sandboxStatus.Status.GetId()
p.PodUID = sandboxStatus.Status.GetMetadata().Uid
if a.dockerCli != nil {
sandboxInfo, err := a.dockerCli.ContainerInspect(context.TODO(), sandbox.Id)
if err != nil {
return p, err
}
p.PID = uint32(sandboxInfo.State.Pid)
} else {
sandboxInfo := server.SandboxInfo{}
err = json.Unmarshal([]byte(sandboxStatus.GetInfo()["info"]), &sandboxInfo)
if err != nil {
return p, err
}
p.PID = sandboxInfo.Pid
}
if sandboxStatus.Status.GetLinux().GetNamespaces().GetOptions().GetNetwork() == pb.NamespaceMode_POD {
p.NetworkMode = "none"
p.Netns = fmt.Sprintf("/proc/%d/ns/net", p.PID)
} else {
p.NetworkMode = "host"
p.Netns = ""
}
return p, nil
}