• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/volume/module/im.php
  • Класс: BitrixDiskVolumeModuleIm
  • Вызов: Im::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();

	// collect disk statistics
	$this
		->addFilter(0, [
			'LOGIC' => 'OR',
			'MODULE_ID' => self::getModuleId(),
			'ENTITY_TYPE' => BitrixImDiskProxyTypeIm::className(),
		])
		->addFilter('DELETED_TYPE', ObjectTable::DELETED_TYPE_NONE);

	parent::measure();

	// collect none disk statistics
	$querySql = "
		SELECT 
			'{$indicatorType}' as INDICATOR_TYPE,
			{$ownerId} as OWNER_ID,
			". $connection->getSqlHelper()->getCurrentDateTimeFunction(). " as CREATE_TIME,
			SUM(FILE_SIZE) as FILE_SIZE,
			COUNT(*) as FILE_COUNT,
			0 as DISK_SIZE,
			0 as DISK_COUNT
		FROM
			b_file
		WHERE
			MODULE_ID IN('imopenlines', 'imconnector', 'imbot')
	";

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

	$tableName = VolumeTable::getTableName();

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


	// collect folders statistics
	$storageListId = [];
	$folderListId = [];
	$storageList = $this->getStorageList();
	if (count($storageList) > 0)
	{
		foreach ($storageList as $storage)
		{
			$storageListId[] = $storage->getId();
			$folders = $this->getFolderList($storage);
			if (count($folders) > 0)
			{
				foreach ($folders as $folder)
				{
					$folderListId[] = $folder->getId();
				}
			}
		}
	}
	if (count($storageListId) > 0 && count($folderListId) > 0)
	{
		$agr = new VolumeFolderTree;
		$agr
			->setOwner($this->getOwner())
			->addFilter('@STORAGE_ID', $storageListId)
			->addFilter('@FOLDER_ID', $folderListId)
			->purify()
			->measure([self::DISK_FILE]);
	}

	return $this;
}