func NewCollector()

in pkg/skoop/collector/podcollector/collector.go [79:130]


func NewCollector(podNamespace, podName, runtimeEndpoint string) (collector.Collector, error) {
	pc := &podCollector{podNamespace: podNamespace, podName: podName, runtimeEndpoint: runtimeEndpoint}

	socket := os.Getenv("RUNTIME_SOCK")
	if runtimeEndpoint != "" {
		socket = runtimeEndpoint
	}
	if socket == "" {
		socket = "unix:///var/run/dockershim.sock"
		_, err := os.Stat("/var/run/dockershim.sock")
		if err != nil {
			if os.IsNotExist(err) {
				containerdSockets := []string{
					"unix:///run/containerd/containerd.sock",
					"unix:///run/k3s/containerd/containerd.sock",
				}

				for _, containerdAddr := range containerdSockets {
					if _, err = os.Stat(strings.TrimPrefix(containerdAddr, "unix://")); err == nil {
						socket = containerdAddr
						break
					}
				}
				if socket == "" {
					return nil, fmt.Errorf("cannot found comportable endpoint address for cri-api, please specify cri address by --collector-cri-address")
				}
			} else {
				return nil, err
			}
		} else {
			pc.dockerCli, err = client.NewClientWithOpts(client.WithVersion("1.25"))
			if err != nil {
				return nil, err
			}
		}
	}
	conn, err := grpc.Dial(socket, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock())
	if err != nil {
		return nil, err
	}
	pc.runtimeCli = pb.NewRuntimeServiceClient(conn)
	// negotiate cri api version
	_, err = pc.runtimeCli.Version(context.TODO(), &pb.VersionRequest{})
	if status.Code(err) == codes.Unimplemented {
		pc.runtimeCli = nil
		pc.runtimeCliV1Alpha2 = pbv1alpha2.NewRuntimeServiceClient(conn)
	} else if err != nil {
		return nil, err
	}

	return pc, nil
}