function fetchDockerVendorInfo(agent, callback, logger = log) {
  if (!agent.config.utilization || !agent.config.utilization.detect_docker) {
    logger.trace({ utilization: 'docker' }, 'Skipping Docker due to being disabled via config.')
    return callback(null, null)
  }

  if (vendorInfo) {
    return callback(null, vendorInfo)
  }

  if (!os.platform().match(/linux/i)) {
    logger.debug({ utilization: 'docker' }, 'Platform is not a flavor of linux, omitting docker info')
    return callback(null, null)
  }

  // try v2 path first and if null try parsing v1 path
  common.readProc(CGROUPS_V2_PATH, function getV2CGroup(_, data) {
    if (data === null) {
      logger.debug(
        { utilization: 'docker' },
        `${CGROUPS_V2_PATH} not found, trying to parse container id from ${CGROUPS_V1_PATH}`
      )
      findCGroupsV1(callback, logger)
      return
    }

    parseCGroupsV2(
      data,
      (_, v2Data) => {
        if (v2Data !== null) {
          // We found a valid Docker identifier in the v2 file, so we are going
          // to prioritize it.
          logger.debug({ utilization: 'docker', v2Data }, 'Found identifier in cgroups v2 file.')
          return callback(null, v2Data)
        }

        // For some reason, we have a /proc/self/mountinfo but it does not have
        // any Docker information in it (that we have detected). So we will
        // fall back to trying the cgroups v1 file.
        logger.debug({ utilization: 'docker' }, 'Attempting to fall back to cgroups v1 parsing.')
        findCGroupsV1(callback, logger)
      },
      logger
    )
  })
}
Attempt to extract container id from either cgroups v1 or v2 file

@param {object} agent NR instance
@param {Function} callback function to call when done
@param {object} [logger] internal logger instance