func()

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
}