• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/volume/module/voximplant.php
  • Класс: BitrixDiskVolumeModuleVoximplant
  • Вызов: Voximplant::measure
public function measure(array $collectData = []): self
{
	if (!$this->isMeasureAvailable())
	{
		$this->addError(new BitrixMainError('', self::ERROR_MEASURE_UNAVAILABLE));
		return $this;
	}

	$connection = BitrixMainApplication::getConnection();
	$indicatorType = $connection->getSqlHelper()->forSql(static::className());
	$ownerId = (string)$this->getOwner();

	VolumeTable::createTemporally();
	$temporallyTableName = VolumeTable::getTemporallyName();

	// Scan specific folder list in a storage
	$storageList = $this->getStorageList();
	if (count($storageList) > 0)
	{
		foreach ($storageList as $storage)
		{
			$storageId = $storage->getId();
			$parentId = $storage->getRootObjectId();
			$folderIds = [];

			$folderList = $this->getFolderList($storage);
			if (count($folderList) > 0)
			{
				foreach ($folderList as $folder)
				{
					$folderIds[] = $folder->getId();
				}
			}
			if (count($folderIds) > 0)
			{
				$agr = new VolumeFolderTree;
				$agr
					->setOwner($this->getOwner())
					->addFilter('STORAGE_ID', $storageId)
					->addFilter('@FOLDER_ID', $folderIds)
					->purify()
					->measure([self::DISK_FILE]);

				$indicatorTypeFolder = $connection->getSqlHelper()->forSql(VolumeFolder::className());

				$folderIdSql = implode(',', $folderIds);

				$querySql = "
					INSERT INTO {$temporallyTableName} 
					(
						INDICATOR_TYPE,
						OWNER_ID,
						CREATE_TIME,
						FILE_SIZE,
						FILE_COUNT,
						DISK_SIZE,
						DISK_COUNT,
						VERSION_COUNT,
						ATTACHED_COUNT,
						LINK_COUNT,
						SHARING_COUNT,
						UNNECESSARY_VERSION_SIZE,
						UNNECESSARY_VERSION_COUNT
					)
					SELECT 
						'{$indicatorType}',
						{$ownerId},
						" . $connection->getSqlHelper()->getCurrentDateTimeFunction() . ",
						SUM(FILE_SIZE),
						SUM(FILE_COUNT),
						SUM(DISK_SIZE),
						SUM(DISK_COUNT),
						SUM(VERSION_COUNT),
						SUM(ATTACHED_COUNT),
						SUM(LINK_COUNT),
						SUM(SHARING_COUNT),
						SUM(UNNECESSARY_VERSION_SIZE),
						SUM(UNNECESSARY_VERSION_COUNT)
					FROM 
						b_disk_volume
					WHERE 
						INDICATOR_TYPE = '{$indicatorTypeFolder}'
						and OWNER_ID = {$ownerId} 
						and STORAGE_ID = '{$storageId}'
						and FOLDER_ID IN( {$folderIdSql} ) 
						and PARENT_ID = '{$parentId}'
				";

				$connection->queryExecute($querySql);
			}
		}

		$querySql = "
			SELECT 
				INDICATOR_TYPE,
				OWNER_ID,
				" . $connection->getSqlHelper()->getCurrentDateTimeFunction() . ",
				SUM(FILE_SIZE),
				SUM(FILE_COUNT),
				SUM(DISK_SIZE),
				SUM(DISK_COUNT),
				SUM(VERSION_COUNT),
				SUM(ATTACHED_COUNT),
				SUM(LINK_COUNT),
				SUM(SHARING_COUNT),
				SUM(UNNECESSARY_VERSION_SIZE),
				SUM(UNNECESSARY_VERSION_COUNT)
			FROM 
				{$temporallyTableName}
			WHERE 
				INDICATOR_TYPE = '{$indicatorType}'
			GROUP BY
				INDICATOR_TYPE
			ORDER BY NULL
		";

		$columnList = VolumeQueryHelper::prepareInsert(
			[
				'INDICATOR_TYPE',
				'OWNER_ID',
				'CREATE_TIME',
				'FILE_SIZE',
				'FILE_COUNT',
				'DISK_SIZE',
				'DISK_COUNT',
				'VERSION_COUNT',
				'ATTACHED_COUNT',
				'LINK_COUNT',
				'SHARING_COUNT',
				'UNNECESSARY_VERSION_SIZE',
				'UNNECESSARY_VERSION_COUNT',
			],
			$this->getSelect()
		);

		$tableName = VolumeTable::getTableName();

		$connection->queryExecute("INSERT INTO {$tableName} ({$columnList}) {$querySql}");

		VolumeTable::clearTemporally();
	}

	return $this;
}