/**
  * Adds an object to the instance pool.
  *
  * Propel keeps cached copies of objects in an instance pool when they are retrieved
  * from the database.  In some cases -- especially when you override doSelect*()
  * methods in your stub classes -- you may need to explicitly add objects
  * to the cache in order to ensure that the same objects are always returned by doSelect*()
  * and retrieveByPK*() calls.
  *
  * @param      StorageProfile $value A StorageProfile object.
  * @param      string $key (optional) key to use for instance map (for performance boost if key was already calculated externally).
  */
 public static function addInstanceToPool(StorageProfile $obj, $key = null)
 {
     if (Propel::isInstancePoolingEnabled()) {
         if ($key === null) {
             $key = (string) $obj->getId();
         }
         // if key === null
         self::$instances[$key] = $obj;
     }
 }
 /**
  * @param FileSyncKey $key
  * @param string $url
  * @param StorageProfile $externalStorage
  * @return SyncFile
  */
 public static function createReadyExternalSyncFileForKey(FileSyncKey $key, $url, StorageProfile $externalStorage)
 {
     $externalStorageId = $externalStorage->getId();
     KalturaLog::debug("key [{$key}], externalStorage [{$externalStorageId}]");
     $fileRoot = '';
     $deliveryProfile = DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($externalStorageId, ''));
     if ($deliveryProfile) {
         $fileRoot = $deliveryProfile->getUrl();
     }
     $filePath = str_replace($fileRoot, '', $url);
     $c = FileSyncPeer::getCriteriaForFileSyncKey($key);
     $c->add(FileSyncPeer::DC, $externalStorageId);
     $fileSync = FileSyncPeer::doSelectOne($c);
     if (!$fileSync) {
         $fileSync = FileSync::createForFileSyncKey($key);
     }
     $fileSync->setDc($externalStorageId);
     $fileSync->setFileRoot($fileRoot);
     $fileSync->setFilePath($filePath);
     $fileSync->setFileSize(-1);
     $fileSync->setStatus(FileSync::FILE_SYNC_STATUS_READY);
     $fileSync->setOriginal(false);
     $fileSync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_URL);
     $fileSync->save();
     kEventsManager::raiseEvent(new kObjectAddedEvent($fileSync));
     return $fileSync;
 }
Beispiel #3
0
 private function requiredToExportFlavor(StorageProfile $storage)
 {
     // check if storage profile should affect the asset ready status
     if ($storage->getReadyBehavior() != StorageProfileReadyBehavior::REQUIRED) {
         // current storage profile is not required for asset readiness - skipping
         return false;
     }
     // check if export should happen now or wait for another trigger
     if (!$storage->triggerFitsReadyAsset($this->getEntryId())) {
         KalturaLog::info('Asset id [' . $this->getId() . '] is not ready to export to profile [' . $storage->getId() . ']');
         return false;
     }
     // check if asset needs to be exported to the remote storage
     if (!$storage->shouldExportFlavorAsset($this, true)) {
         KalturaLog::info('Should not export asset id [' . $this->getId() . '] to profile [' . $storage->getId() . ']');
         return false;
     }
     $keys = array($this->getSyncKey(flavorAsset::FILE_SYNC_FLAVOR_ASSET_SUB_TYPE_ASSET), $this->getSyncKey(flavorAsset::FILE_SYNC_ASSET_SUB_TYPE_ISM), $this->getSyncKey(flavorAsset::FILE_SYNC_ASSET_SUB_TYPE_ISMC));
     foreach ($keys as $key) {
         if ($storage->shoudlExportFileSync($key)) {
             return true;
         }
     }
     foreach ($keys as $key) {
         // check if asset is currently being exported to the remote storage
         if ($storage->isPendingExport($key)) {
             KalturaLog::info('Asset id [' . $this->getId() . '] is currently being exported to profile [' . $storage->getId() . ']');
             return true;
         }
     }
     return false;
 }
Beispiel #4
0
 /**
  * @param BatchJob $parentJob
  * @param string $entryId
  * @param int $partnerId
  * @param StorageProfile $externalStorage
  * @param SyncFile $fileSync
  * @param string $srcFileSyncLocalPath
  * @param bool $force
  * 
  * @return BatchJob
  */
 public static function addStorageExportJob(BatchJob $parentJob = null, $entryId, $partnerId, StorageProfile $externalStorage, FileSync $fileSync, $srcFileSyncLocalPath, $force = false, $dc = null)
 {
     KalturaLog::debug("entryId[{$entryId}], partnerId[{$partnerId}], externalStorage id[" . $externalStorage->getId() . "], fileSync id[" . $fileSync->getId() . "], srcFileSyncLocalPath[{$srcFileSyncLocalPath}]");
     $netStorageExportData = kStorageExportJobData::getInstance($externalStorage->getProtocol());
     $netStorageExportData->setStorageExportJobData($externalStorage, $fileSync, $srcFileSyncLocalPath);
     $batchJob = null;
     if ($parentJob) {
         $batchJob = $parentJob->createChild(BatchJobType::STORAGE_EXPORT, $externalStorage->getProtocol(), false);
     } else {
         $batchJob = new BatchJob();
         $batchJob->setEntryId($entryId);
         $batchJob->setPartnerId($partnerId);
     }
     $batchJob->setObjectId($fileSync->getId());
     $batchJob->setObjectType(BatchJobObjectType::FILE_SYNC);
     $batchJob->setJobSubType($externalStorage->getProtocol());
     $batchJob->setDc($dc);
     KalturaLog::log("Creating Storage export job, with source file: " . $netStorageExportData->getSrcFileSyncLocalPath());
     return self::addJob($batchJob, $netStorageExportData, BatchJobType::STORAGE_EXPORT, $externalStorage->getProtocol());
 }
 /**
  * @param FileSyncKey $key
  * @param string $url
  * @param StorageProfile $externalStorage
  * @return SyncFile
  */
 public static function createReadyExternalSyncFileForKey(FileSyncKey $key, $url, StorageProfile $externalStorage)
 {
     $externalStorageId = $externalStorage->getId();
     KalturaLog::log(__METHOD__ . " - key [{$key}], externalStorage [{$externalStorageId}]");
     $fileRoot = $externalStorage->getDeliveryHttpBaseUrl();
     $filePath = str_replace($fileRoot, '', $url);
     $c = FileSyncPeer::getCriteriaForFileSyncKey($key);
     $c->add(FileSyncPeer::DC, $externalStorageId);
     $fileSync = FileSyncPeer::doSelectOne($c);
     if (!$fileSync) {
         $fileSync = FileSync::createForFileSyncKey($key);
     }
     $fileSync->setDc($externalStorageId);
     $fileSync->setFileRoot($fileRoot);
     $fileSync->setFilePath($filePath);
     $fileSync->setFileSize(-1);
     $fileSync->setStatus(FileSync::FILE_SYNC_STATUS_READY);
     $fileSync->setOriginal(false);
     $fileSync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_URL);
     $fileSync->save();
     kEventsManager::raiseEvent(new kObjectAddedEvent($fileSync));
     return $fileSync;
 }
Beispiel #6
0
 /**
  * Returns an associative array of variables to be passed to the XSLT.
  * This function can be extended by specific managers to add additonal variables to their XSLT transformations.
  * @param StorageProfile $storageProfile
  * @param ISyncableFile $object
  * @param $subType
  * @param $version
  * @param entry $entry
  * @return array associative array of variables to be passed to the XSLT
  */
 protected function getXslVariables(StorageProfile $storageProfile, ISyncableFile $object, $subType, $version, entry $entry)
 {
     return array('currentTime' => time(), 'storageProfileId' => $storageProfile->getId(), 'objectClass' => get_class($object), 'objectId' => $object->getId(), 'objectSubType' => $subType, 'objectVersion' => $version, 'entryId' => $entry->getId(), 'partnerId' => $entry->getPartnerId(), 'defaultFileName' => $object->generateFileName($subType, $version));
 }
 /**
  * @param BatchJob $parentJob
  * @param string $entryId
  * @param int $partnerId
  * @param StorageProfile $externalStorage
  * @param SyncFile $fileSync
  * @param string $srcFileSyncLocalPath
  * @param bool $force
  * 
  * @return BatchJob
  */
 public static function addStorageExportJob(BatchJob $parentJob = null, $entryId, $partnerId, StorageProfile $externalStorage, FileSync $fileSync, $srcFileSyncLocalPath, $force = false, $dc = null)
 {
     KalturaLog::debug("entryId[{$entryId}], partnerId[{$partnerId}], externalStorage id[" . $externalStorage->getId() . "], fileSync id[" . $fileSync->getId() . "], srcFileSyncLocalPath[{$srcFileSyncLocalPath}]");
     $netStorageExportData = new kStorageExportJobData();
     $netStorageExportData->setServerUrl($externalStorage->getStorageUrl());
     $netStorageExportData->setServerUsername($externalStorage->getStorageUsername());
     $netStorageExportData->setServerPassword($externalStorage->getStoragePassword());
     $netStorageExportData->setFtpPassiveMode($externalStorage->getStorageFtpPassiveMode());
     $netStorageExportData->setSrcFileSyncLocalPath($srcFileSyncLocalPath);
     $netStorageExportData->setSrcFileSyncId($fileSync->getId());
     $netStorageExportData->setForce($force);
     $netStorageExportData->setDestFileSyncStoredPath($externalStorage->getStorageBaseDir() . '/' . $fileSync->getFilePath());
     $batchJob = null;
     if ($parentJob) {
         $batchJob = $parentJob->createChild(false);
     } else {
         $batchJob = new BatchJob();
         $batchJob->setEntryId($entryId);
         $batchJob->setPartnerId($partnerId);
     }
     $batchJob->setDc($dc);
     KalturaLog::log("Creating Storage export job, with source file: " . $netStorageExportData->getSrcFileSyncLocalPath());
     return self::addJob($batchJob, $netStorageExportData, BatchJobType::STORAGE_EXPORT, $externalStorage->getProtocol());
 }
 /**
  * @param FileSyncKey $key
  * @return bool
  */
 public static function shouldExport(FileSyncKey $key, StorageProfile $externalStorage)
 {
     KalturaLog::log(__METHOD__ . " - key [{$key}], externalStorage id[" . $externalStorage->getId() . "]");
     list($kalturaFileSync, $local) = kFileSyncUtils::getReadyFileSyncForKey($key, false, false);
     if (!$kalturaFileSync) {
         KalturaLog::log(__METHOD__ . " key [{$key}] not found localy");
         return false;
     }
     KalturaLog::log(__METHOD__ . " validating file size [" . $kalturaFileSync->getFileSize() . "] is between min [" . $externalStorage->getMinFileSize() . "] and max [" . $externalStorage->getMaxFileSize() . "]");
     if ($externalStorage->getMaxFileSize() && $kalturaFileSync->getFileSize() > $externalStorage->getMaxFileSize()) {
         KalturaLog::log(__METHOD__ . " key [{$key}] file too big");
         return false;
     }
     if ($externalStorage->getMinFileSize() && $kalturaFileSync->getFileSize() < $externalStorage->getMinFileSize()) {
         KalturaLog::log(__METHOD__ . " key [{$key}] file too small");
         return false;
     }
     $storageFileSync = kFileSyncUtils::getReadyPendingExternalFileSyncForKey($key, $externalStorage->getId());
     if ($storageFileSync) {
         KalturaLog::log(__METHOD__ . " key [{$key}] already exported or being exported");
         return false;
     }
     return true;
 }
Beispiel #9
0
 /**
  * 
  * add DeleteStorage job for key
  * 
  * @param entry $entry
  * @param StorageProfile $profile
  * @param FileSyncKey $key
  */
 protected static function delete(entry $entry, StorageProfile $profile, FileSyncKey $key)
 {
     $externalFileSync = kFileSyncUtils::getReadyPendingExternalFileSyncForKey($key, $profile->getId());
     if (!$externalFileSync) {
         return;
     }
     $c = new Criteria();
     $c->add(BatchJobPeer::OBJECT_ID, $externalFileSync->getId());
     $c->add(BatchJobPeer::OBJECT_TYPE, BatchJobObjectType::FILE_SYNC);
     $c->add(BatchJobPeer::JOB_TYPE, BatchJobType::STORAGE_EXPORT);
     $c->add(BatchJobPeer::JOB_SUB_TYPE, $profile->getProtocol());
     $c->add(BatchJobPeer::ENTRY_ID, $entry->getId());
     $c->add(BatchJobPeer::STATUS, array(BatchJob::BATCHJOB_STATUS_RETRY, BatchJob::BATCHJOB_STATUS_PENDING), Criteria::IN);
     $exportJobs = BatchJobPeer::doSelect($c);
     if (!$exportJobs) {
         kJobsManager::addStorageDeleteJob(null, $entry->getId(), $profile, $externalFileSync);
     } else {
         foreach ($exportJobs as $exportJob) {
             kJobsManager::abortDbBatchJob($exportJob);
         }
     }
 }
 /**
  * Adds an object to the instance pool.
  *
  * Propel keeps cached copies of objects in an instance pool when they are retrieved
  * from the database.  In some cases -- especially when you override doSelect*()
  * methods in your stub classes -- you may need to explicitly add objects
  * to the cache in order to ensure that the same objects are always returned by doSelect*()
  * and retrieveByPK*() calls.
  *
  * @param      StorageProfile $value A StorageProfile object.
  * @param      string $key (optional) key to use for instance map (for performance boost if key was already calculated externally).
  */
 public static function addInstanceToPool(StorageProfile $obj, $key = null)
 {
     if (Propel::isInstancePoolingEnabled()) {
         if ($key === null) {
             $key = (string) $obj->getId();
         }
         if (isset(self::$instances[$key]) || count(self::$instances) < kConf::get('max_num_instances_in_pool')) {
             self::$instances[$key] = $obj;
             kMemoryManager::registerPeer('StorageProfilePeer');
         }
     }
 }
 /**
  * @param FileSyncKey $key
  * @param StorageProfile $externalStorage
  * @return SyncFile
  */
 public static function createPendingExternalSyncFileForKey(FileSyncKey $key, StorageProfile $externalStorage)
 {
     $externalStorageId = $externalStorage->getId();
     KalturaLog::log(__METHOD__ . " - key [{$key}], externalStorage [{$externalStorageId}]");
     list($fileRoot, $realPath) = kPathManager::getFilePathArr($key, $externalStorageId);
     $c = FileSyncPeer::getCriteriaForFileSyncKey($key);
     $c->add(FileSyncPeer::DC, $externalStorageId);
     $fileSync = FileSyncPeer::doSelectOne($c);
     if (!$fileSync) {
         $fileSync = FileSync::createForFileSyncKey($key);
     }
     $fileSync->setDc($externalStorageId);
     $fileSync->setFileRoot($fileRoot);
     $fileSync->setFilePath($realPath);
     $fileSync->setFileSize(-1);
     $fileSync->setStatus(FileSync::FILE_SYNC_STATUS_PENDING);
     $fileSync->setOriginal(false);
     if ($externalStorage->getProtocol() == StorageProfile::STORAGE_KALTURA_DC) {
         $fileSync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_FILE);
     } else {
         $fileSync->setFileType(FileSync::FILE_SYNC_FILE_TYPE_URL);
     }
     $fileSync->save();
     kEventsManager::raiseEvent(new kObjectAddedEvent($fileSync));
     return $fileSync;
 }