• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/volume/cleaner.php
  • Класс: BitrixDiskVolumeCleaner
  • Вызов: Cleaner::countWorker
static function countWorker(int $ownerId = -1): int
{
	$filter = [
		'=AGENT_LOCK' => [VolumeTask::TASK_STATUS_WAIT, VolumeTask::TASK_STATUS_RUNNING],
	];
	if ($ownerId > 0)
	{
		$filter['=OWNER_ID'] = $ownerId;
	}
	$workerResult = VolumeTable::getList([
		'runtime' => [
			new EntityExpressionField('CNT', 'COUNT(*)'),
			new EntityExpressionField('FILE_COUNT', 'SUM(FILE_COUNT)'),
			new EntityExpressionField('UNNECESSARY_VERSION_COUNT', 'SUM(UNNECESSARY_VERSION_COUNT)'),
			new EntityExpressionField('DROPPED_FILE_COUNT', 'SUM(DROPPED_FILE_COUNT)'),
			new EntityExpressionField('DROPPED_VERSION_COUNT', 'SUM(DROPPED_VERSION_COUNT)'),
			new EntityExpressionField('FAIL_COUNT', 'SUM(FAIL_COUNT)'),
		],
		'select' => [
			'OWNER_ID',
			'CNT',
			'FILE_COUNT',
			'UNNECESSARY_VERSION_COUNT',
			'DROPPED_FILE_COUNT',
			'DROPPED_VERSION_COUNT',
			'FAIL_COUNT',
			VolumeTask::DROP_UNNECESSARY_VERSION,
			VolumeTask::DROP_TRASHCAN,
			VolumeTask::EMPTY_FOLDER,
			VolumeTask::DROP_FOLDER,
		],
		'group' => [
			'OWNER_ID',
			VolumeTask::DROP_UNNECESSARY_VERSION,
			VolumeTask::DROP_TRASHCAN,
			VolumeTask::EMPTY_FOLDER,
			VolumeTask::DROP_FOLDER,
		],
		'filter' => $filter
	]);

	$totalFilesToDrop = 0;
	$droppedFilesCount = 0;
	$workerCount = 0;
	$failCount = 0;

	if ($workerResult->getSelectedRowsCount() > 0)
	{
		foreach ($workerResult as $row)
		{
			$workerCount += $row['CNT'];
			$failCount += $row['FAIL_COUNT'];
			if (VolumeTask::isRunningMode($row[VolumeTask::DROP_UNNECESSARY_VERSION]))
			{
				$totalFilesToDrop += $row['UNNECESSARY_VERSION_COUNT'];
				$droppedFilesCount += $row['DROPPED_VERSION_COUNT'];
			}
			if (VolumeTask::isRunningMode($row[VolumeTask::DROP_TRASHCAN]))
			{
				$totalFilesToDrop += $row['FILE_COUNT'];
				$droppedFilesCount += $row['DROPPED_FILE_COUNT'];
			}
			if (VolumeTask::isRunningMode($row[VolumeTask::DROP_FOLDER]))
			{
				$totalFilesToDrop += $row['FILE_COUNT'];
				$droppedFilesCount += $row['DROPPED_FILE_COUNT'];
			}
			if (VolumeTask::isRunningMode($row[VolumeTask::EMPTY_FOLDER]))
			{
				$totalFilesToDrop += $row['FILE_COUNT'];
				$droppedFilesCount += $row['DROPPED_FILE_COUNT'];
			}
		}
		self::setProgressInfo((int)$row['OWNER_ID'], (int)$totalFilesToDrop, (int)$droppedFilesCount, (int)$failCount);
	}
	else
	{
		self::clearProgressInfo($ownerId);
	}

	return $workerCount;
}