コード例 #1
0
ファイル: kLiveMediaServer.php プロジェクト: dozernz/server
 /**
  * @return MediaServerNode
  */
 public function getMediaServer()
 {
     $mediaServer = ServerNodePeer::retrieveByPK($this->mediaServerId);
     if ($mediaServer instanceof MediaServerNode) {
         return $mediaServer;
     }
     return null;
 }
コード例 #2
0
 protected function internalFulfilled(kScope $scope)
 {
     KalturaLog::debug("Validating edge server [{$this->getEdgeServerIds()}] are active");
     $edgeServers = ServerNodePeer::retrieveRegisteredServerNodesArrayByPKs($this->edgeServerIds);
     if (!count($edgeServers)) {
         KalturaLog::debug("Unable to find active edge in list, condition is false");
         return false;
     }
     KalturaLog::debug("Found active edge in list, condition is true");
     return true;
 }
コード例 #3
0
ファイル: EdgeServerNode.php プロジェクト: dozernz/server
 public function buildEdgeFullPath($protocol = 'http', $format = null, $deliveryType = null, $assetType = null)
 {
     $edgeFullPath = rtrim($this->getedgePath($format, $deliveryType, $assetType), "/") . "/";
     if ($this->parent_id) {
         $parentEdge = ServerNodePeer::retrieveByPK($this->parent_id);
         if ($parentEdge) {
             $edgeFullPath = $edgeFullPath . $parentEdge->buildEdgeFullPath($protocol, $format, $deliveryType, $assetType);
         }
     }
     return $edgeFullPath;
 }
コード例 #4
0
 protected function doGetListResponse(KalturaFilterPager $pager, $type = null)
 {
     $c = new Criteria();
     if ($type) {
         $c->add(ServerNodePeer::TYPE, $type);
     }
     $serverNodeFilter = $this->toObject();
     $serverNodeFilter->attachToCriteria($c);
     $pager->attachToCriteria($c);
     $list = ServerNodePeer::doSelect($c);
     $totalCount = count($list);
     return array($list, $totalCount);
 }
コード例 #5
0
 public function applyDeliveryProfileDynamicAttributes(DeliveryProfileDynamicAttributes $deliveryAttributes)
 {
     $edgeServerIds = explode(',', $this->getEdgeServerIds());
     $edgeServers = ServerNodePeer::retrieveOrderedServerNodesArrayByPKs($edgeServerIds);
     if (!count($edgeServers)) {
         return false;
     }
     foreach ($edgeServers as $edgeServer) {
         $activeEdgeServerIds[] = $edgeServer->getId();
     }
     $deliveryAttributes->setEdgeServerIds($activeEdgeServerIds);
     return true;
 }
コード例 #6
0
ファイル: ServerNodePeer.php プロジェクト: DBezemer/server
 public static function retrieveOrderedServerNodesArrayByPKs($pks, PropelPDO $con = null)
 {
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria(ServerNodePeer::DATABASE_NAME);
         $criteria->add(ServerNodePeer::ID, $pks, Criteria::IN);
         $criteria->add(ServerNodePeer::STATUS, ServerNodeStatus::ACTIVE);
         $orderBy = "FIELD (" . self::ID . "," . implode(",", $pks) . ")";
         // first take the pattner_id and then the rest
         $criteria->addAscendingOrderByColumn($orderBy);
         $objs = ServerNodePeer::doSelect($criteria, $con);
     }
     return $objs;
 }
コード例 #7
0
 protected function internalFulfilled(kScope $scope)
 {
     KalturaLog::debug("Validating edge server [{$this->getEdgeServerIds()}] are active");
     $edgeServers = ServerNodePeer::retrieveRegisteredServerNodesArrayByPKs($this->edgeServerIds);
     if (!count($edgeServers)) {
         KalturaLog::debug("Unable to find active edge in list, condition is false");
         return false;
     }
     $isFulfilled = false;
     foreach ($edgeServers as $edgeServer) {
         /* @var $edgeServer EdgeServerNode */
         if ($edgeServer->validateEdgeTreeRegistered()) {
             $isFulfilled = true;
             KalturaLog::debug("Found active edge in list, condition is true");
             break;
         }
     }
     return $isFulfilled;
 }
コード例 #8
0
 /**
  * Retrieve multiple objects by pkey.
  *
  * @param      array $pks List of primary keys
  * @param      PropelPDO $con the connection to use
  * @throws     PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function retrieveByPKs($pks, PropelPDO $con = null)
 {
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria(ServerNodePeer::DATABASE_NAME);
         $criteria->add(ServerNodePeer::ID, $pks, Criteria::IN);
         $objs = ServerNodePeer::doSelect($criteria, $con);
     }
     return $objs;
 }
コード例 #9
0
ファイル: kLiveMediaServer.php プロジェクト: DBezemer/server
 /**
  * @return MediaServerNode
  */
 public function getMediaServer()
 {
     return ServerNodePeer::retrieveByPK($this->mediaServerId);
 }
コード例 #10
0
ファイル: ServerNodeService.php プロジェクト: DBezemer/server
 /**
  * Update server node status
  *
  * @action reportStatus
  * @param string $hostName
  * @return KalturaServerNode
  */
 function reportStatusAction($hostName, KalturaServerNode $serverNode = null)
 {
     $dbServerNode = ServerNodePeer::retrieveActiveServerNodes($hostName, $this->getPartnerId());
     //Allow serverNodes auto registration without calling add
     if (!$dbServerNode) {
         if ($serverNode) {
             $dbServerNode = $this->addNewServerNode($serverNode);
         } else {
             throw new KalturaAPIException(KalturaErrors::SERVER_NODE_NOT_FOUND, $hostName);
         }
     }
     $dbServerNode->setHeartbeatTime(time());
     $dbServerNode->save();
     $serverNode = KalturaServerNode::getInstance($dbServerNode, $this->getResponseProfile());
     return $serverNode;
 }
コード例 #11
0
ファイル: ServerNodeFilter.php プロジェクト: DBezemer/server
 public function getFieldNameFromPeer($field_name)
 {
     $res = ServerNodePeer::translateFieldName($field_name, $this->field_name_translation_type, BasePeer::TYPE_COLNAME);
     return $res;
 }
コード例 #12
0
 /**
  * Serve XML rendition of the Kaltura Live Transcoding Profile usable by the Wowza transcoding add-on
  * 
  * @action serve
  * @param string $streamName the id of the live entry with it's stream suffix
  * @param string $hostname the media server host name
  * @return file
  * 
  * @throws KalturaErrors::ENTRY_ID_NOT_FOUND
  * @throws WowzaErrors::INVALID_STREAM_NAME
  */
 public function serveAction($streamName, $hostname = null)
 {
     $matches = null;
     if (!preg_match('/^(\\d_.{8})_(\\d+)$/', $streamName, $matches)) {
         throw new KalturaAPIException(WowzaErrors::INVALID_STREAM_NAME, $streamName);
     }
     $entryId = $matches[1];
     $suffix = $matches[2];
     $entry = null;
     if (!kCurrentContext::$ks) {
         kEntitlementUtils::initEntitlementEnforcement(null, false);
         $entry = kCurrentContext::initPartnerByEntryId($entryId);
         if (!$entry || $entry->getStatus() == entryStatus::DELETED) {
             throw new KalturaAPIException(KalturaErrors::ENTRY_ID_NOT_FOUND, $entryId);
         }
         // enforce entitlement
         $this->setPartnerFilters(kCurrentContext::getCurrentPartnerId());
     } else {
         $entry = entryPeer::retrieveByPK($entryId);
     }
     if (!$entry || $entry->getType() != KalturaEntryType::LIVE_STREAM || !in_array($entry->getSource(), array(KalturaSourceType::LIVE_STREAM, KalturaSourceType::LIVE_STREAM_ONTEXTDATA_CAPTIONS))) {
         throw new KalturaAPIException(KalturaErrors::ENTRY_ID_NOT_FOUND, $entryId);
     }
     $mediaServer = null;
     if ($hostname) {
         $mediaServer = ServerNodePeer::retrieveActiveServerNodes($hostname);
     }
     $conversionProfileId = $entry->getConversionProfileId();
     $liveParams = assetParamsPeer::retrieveByProfile($conversionProfileId);
     $liveParamsInput = null;
     $disableIngested = true;
     foreach ($liveParams as $liveParamsItem) {
         /* @var $liveParamsItem liveParams */
         if ($liveParamsItem->getStreamSuffix() == $suffix) {
             $liveParamsInput = $liveParamsItem;
             if (!$liveParamsInput->hasTag(assetParams::TAG_SOURCE)) {
                 $liveParams = array($liveParamsInput);
                 $disableIngested = false;
             }
             break;
         }
     }
     $ignoreLiveParamsIds = array();
     if ($disableIngested) {
         $conversionProfileAssetParams = flavorParamsConversionProfilePeer::retrieveByConversionProfile($conversionProfileId);
         foreach ($conversionProfileAssetParams as $conversionProfileAssetParamsItem) {
             /* @var $conversionProfileAssetParamsItem flavorParamsConversionProfile */
             if ($conversionProfileAssetParamsItem->getOrigin() == assetParamsOrigin::INGEST) {
                 $ignoreLiveParamsIds[] = $conversionProfileAssetParamsItem->getFlavorParamsId();
             }
         }
     }
     // translate the $liveParams to XML according to doc: http://www.wowza.com/forums/content.php?304#configTemplate
     $root = new SimpleXMLElement('<Root/>');
     $transcode = $root->addChild('Transcode');
     $encodes = $transcode->addChild('Encodes');
     $groups = array();
     foreach ($liveParams as $liveParamsItem) {
         /* @var $liveParamsItem liveParams */
         if (!$liveParamsItem->hasTag(assetParams::TAG_SOURCE) && in_array($liveParamsItem->getId(), $ignoreLiveParamsIds)) {
             continue;
         }
         $this->appendLiveParams($entry, $mediaServer, $encodes, $liveParamsItem);
         $tags = $liveParamsItem->getTagsArray();
         $tags[] = 'all';
         foreach ($tags as $tag) {
             if (!isset($groups[$tag])) {
                 $groups[$tag] = array();
             }
             $systemName = $liveParamsItem->getSystemName() ? $liveParamsItem->getSystemName() : $liveParamsItem->getId();
             $groups[$tag][] = $systemName;
         }
     }
     $decode = $transcode->addChild('Decode');
     $video = $decode->addChild('Video');
     $video->addChild('Deinterlace', 'false');
     $streamNameGroups = $transcode->addChild('StreamNameGroups');
     foreach ($groups as $groupName => $groupMembers) {
         $streamNameGroup = $streamNameGroups->addChild('StreamNameGroup');
         $streamNameGroup->addChild('Name', $groupName);
         $streamNameGroup->addChild('StreamName', '${SourceStreamName}_' . $groupName);
         $members = $streamNameGroup->addChild('Members');
         foreach ($groupMembers as $groupMember) {
             $member = $members->addChild('Member');
             $member->addChild('EncodeName', $groupMember);
         }
     }
     $properties = $transcode->addChild('Properties');
     $dom = new DOMDocument("1.0");
     $dom->preserveWhiteSpace = false;
     $dom->formatOutput = true;
     $dom->loadXML($root->asXML());
     return new kRendererString($dom->saveXML(), 'text/xml');
 }
コード例 #13
0
ファイル: DeliveryProfile.php プロジェクト: wzur/server
 public function getDeliveryServerNodeUrl($removeAfterUse = false)
 {
     $deliveryUrl = null;
     $deliveryNodeIds = $this->params->getEdgeServerIds();
     $deliveryNodes = ServerNodePeer::retrieveRegisteredServerNodesArrayByPKs($deliveryNodeIds);
     if (!count($deliveryNodes)) {
         KalturaLog::debug("No active delivery nodes found among the requested edge list: " . print_r($deliveryNodeIds, true));
         return null;
     }
     $deliveryNode = null;
     foreach ($deliveryNodes as $node) {
         /* @var $node EdgeServerNode */
         if ($node->validateEdgeTreeRegistered()) {
             $deliveryNode = $node;
             break;
         }
     }
     if (!$deliveryNode) {
         KalturaLog::debug("Active edges were found but non of them is active, Failed to build valid serving route");
         return null;
     }
     $deliveryUrl = $deliveryNode->getPlaybackHost($this->params->getMediaProtocol(), $this->params->getFormat(), $this->getType());
     if (count($deliveryNodes) && $removeAfterUse) {
         $this->params->setEdgeServerIds(array_diff($deliveryNodeIds, array($deliveryNode->getId())));
     }
     return $deliveryUrl;
 }
コード例 #14
0
ファイル: BaseServerNode.php プロジェクト: wzur/server
 /**
  * Builds a Criteria object containing the primary key for this object.
  *
  * Unlike buildCriteria() this method includes the primary key values regardless
  * of whether or not they have been modified.
  *
  * @return     Criteria The Criteria object containing value(s) for primary key(s).
  */
 public function buildPkeyCriteria()
 {
     $criteria = new Criteria(ServerNodePeer::DATABASE_NAME);
     $criteria->add(ServerNodePeer::ID, $this->id);
     if ($this->alreadyInSave) {
         if ($this->isColumnModified(ServerNodePeer::CUSTOM_DATA)) {
             if (!is_null($this->custom_data_md5)) {
                 $criteria->add(ServerNodePeer::CUSTOM_DATA, "MD5(cast(" . ServerNodePeer::CUSTOM_DATA . " as char character set latin1)) = '{$this->custom_data_md5}'", Criteria::CUSTOM);
             } else {
                 $criteria->add(ServerNodePeer::CUSTOM_DATA, NULL, Criteria::ISNULL);
             }
         }
         if (count($this->modifiedColumns) == 2 && $this->isColumnModified(ServerNodePeer::UPDATED_AT)) {
             $theModifiedColumn = null;
             foreach ($this->modifiedColumns as $modifiedColumn) {
                 if ($modifiedColumn != ServerNodePeer::UPDATED_AT) {
                     $theModifiedColumn = $modifiedColumn;
                 }
             }
             $atomicColumns = ServerNodePeer::getAtomicColumns();
             if (in_array($theModifiedColumn, $atomicColumns)) {
                 $criteria->add($theModifiedColumn, $this->getByName($theModifiedColumn, BasePeer::TYPE_COLNAME), Criteria::NOT_EQUAL);
             }
         }
     }
     return $criteria;
 }
コード例 #15
0
ファイル: DeliveryProfile.php プロジェクト: dozernz/server
 public function getDeliveryServerNodeUrl($removeAfterUse = false)
 {
     $deliveryUrl = null;
     $deliveryNodeIds = $this->params->getEdgeServerIds();
     $deliveryNodes = ServerNodePeer::retrieveRegisteredServerNodesArrayByPKs($deliveryNodeIds);
     if (!count($deliveryNodes)) {
         KalturaLog::debug("No active delivery nodes found among the requested edge list: " . print_r($deliveryNodeIds, true));
         return null;
     }
     /* @var $deliveryNode EdgeServerNode */
     $deliveryNode = array_shift($deliveryNodes);
     $deliveryUrl = $deliveryNode->getPlaybackHost($this->params->getMediaProtocol(), $this->params->getFormat(), $this->getType());
     if (count($deliveryNodes) && $removeAfterUse) {
         $this->params->setEdgeServerIds(array_diff($deliveryNodeIds, array($deliveryNode->getId())));
     }
     return $deliveryUrl;
 }
コード例 #16
0
ファイル: LiveEntry.php プロジェクト: DBezemer/server
 public function setMediaServer($index, $hostname, $applicationName = null)
 {
     if (is_null($this->getFirstBroadcast())) {
         $this->setFirstBroadcast(kApiCache::getTime());
     }
     $mediaServerNode = ServerNodePeer::retrieveActiveServerNodes($hostname);
     if (!$mediaServerNode) {
         throw new kCoreException("Media server with host name [{$hostname}] not found", kCoreException::MEDIA_SERVER_NOT_FOUND);
     }
     $key = $this->getId() . "_{$hostname}_{$index}";
     if ($this->storeInCache($key) && $this->isMediaServerRegistered($index, $hostname)) {
         KalturaLog::debug("cached and registered - index: {$index}, hostname: {$hostname}");
         return;
     }
     KalturaLog::debug("about to setMediaServer. index: {$index}, hostname: {$hostname}");
     $this->setLastBroadcast(kApiCache::getTime());
     $server = new kLiveMediaServer($index, $hostname, $mediaServerNode->getDc(), $mediaServerNode->getId(), $applicationName ? $applicationName : $mediaServerNode->getApplicationName());
     $this->putInCustomData("server-{$index}", $server, LiveEntry::CUSTOM_DATA_NAMESPACE_MEDIA_SERVERS);
     $this->setLiveStatus(LiveEntryStatus::PLAYABLE);
 }
コード例 #17
0
ファイル: KalturaServerNode.php プロジェクト: dozernz/server
 public function validateSystemNameDuplication($serverNodeId = null, $type)
 {
     $c = KalturaCriteria::create(ServerNodePeer::OM_CLASS);
     if ($serverNodeId) {
         $c->add(ServerNodePeer::ID, $serverNodeId, Criteria::NOT_EQUAL);
     }
     $c->add(ServerNodePeer::SYSTEM_NAME, $this->systemName);
     $c->add(ServerNodePeer::TYPE, $type);
     if (ServerNodePeer::doCount($c)) {
         throw new KalturaAPIException(KalturaErrors::SYSTEM_NAME_ALREADY_EXISTS, $this->systemName);
     }
 }
コード例 #18
0
 public function getRegiteredNodeServers()
 {
     $edgeServerIds = explode(',', $this->getEdgeServerIds());
     $edgeServers = ServerNodePeer::retrieveRegisteredServerNodesArrayByPKs($edgeServerIds);
     return $edgeServers;
 }
コード例 #19
0
ファイル: EdgeServerNode.php プロジェクト: wzur/server
 public function validateEdgeTreeRegistered()
 {
     /* @var $edgeServer EdgeServerNode */
     $parentId = $this->getParentId();
     if ($parentId) {
         $parentEdge = ServerNodePeer::retrieveRegisteredServerNodeByPk($parentId);
         if (!$parentEdge) {
             return false;
         }
         return $parentEdge->validateEdgeTreeRegistered();
     }
     return true;
 }