func Register()

in container/docker/factory.go [306:370]


func Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) error {
	client, err := Client()
	if err != nil {
		return fmt.Errorf("unable to communicate with docker daemon: %v", err)
	}

	dockerInfo, err := ValidateInfo(Info, VersionString)
	if err != nil {
		return fmt.Errorf("failed to validate Docker info: %v", err)
	}

	// Version already validated above, assume no error here.
	dockerVersion, _ := ParseVersion(dockerInfo.ServerVersion, VersionRe, 3)

	dockerAPIVersion, _ := APIVersion()

	cgroupSubsystems, err := libcontainer.GetCgroupSubsystems(includedMetrics)
	if err != nil {
		return fmt.Errorf("failed to get cgroup subsystems: %v", err)
	}

	var (
		thinPoolWatcher *devicemapper.ThinPoolWatcher
		thinPoolName    string
		zfsWatcher      *zfs.ZfsWatcher
	)
	if includedMetrics.Has(container.DiskUsageMetrics) {
		if StorageDriver(dockerInfo.Driver) == DevicemapperStorageDriver {
			thinPoolWatcher, err = StartThinPoolWatcher(dockerInfo)
			if err != nil {
				klog.Errorf("devicemapper filesystem stats will not be reported: %v", err)
			}

			// Safe to ignore error - driver status should always be populated.
			status, _ := StatusFromDockerInfo(*dockerInfo)
			thinPoolName = status.DriverStatus[dockerutil.DriverStatusPoolName]
		}

		if StorageDriver(dockerInfo.Driver) == ZfsStorageDriver {
			zfsWatcher, err = StartZfsWatcher(dockerInfo)
			if err != nil {
				klog.Errorf("zfs filesystem stats will not be reported: %v", err)
			}
		}
	}

	klog.V(1).Infof("Registering Docker factory")
	f := &dockerFactory{
		cgroupSubsystems:   cgroupSubsystems,
		client:             client,
		dockerVersion:      dockerVersion,
		dockerAPIVersion:   dockerAPIVersion,
		fsInfo:             fsInfo,
		machineInfoFactory: factory,
		storageDriver:      StorageDriver(dockerInfo.Driver),
		storageDir:         RootDir(),
		includedMetrics:    includedMetrics,
		thinPoolName:       thinPoolName,
		thinPoolWatcher:    thinPoolWatcher,
		zfsWatcher:         zfsWatcher,
	}

	container.RegisterContainerHandlerFactory(f, []watcher.ContainerWatchSource{watcher.Raw})
	return nil
}