- Модуль: 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;
}