Пример #1
0
 public function getLinksForMonitoring($status = FALSE)
 {
     $result = Mysql::getInstance()->select('ch_links.*, itv.name as ch_name')->from('ch_links')->join('itv', 'itv.id', 'ch_links.ch_id', 'INNER')->where(array('ch_links.enable_monitoring' => 1, 'ch_links.enable_balancer_monitoring' => 0));
     if ($status) {
         $result->where(array('ch_links.status' => (int) ($status == 'up')));
     }
     $monitoring_links = $result->orderby('ch_id')->get()->all();
     $result = Mysql::getInstance()->select('ch_links.*, streamer_id, ch_link_on_streamer.id as streamer_link_id, itv.name as ch_name')->from('ch_links')->join('ch_link_on_streamer', 'link_id', 'ch_links.id', 'INNER')->join('itv', 'itv.id', 'ch_links.ch_id', 'INNER')->where(array('ch_links.enable_monitoring' => 1, 'ch_links.enable_balancer_monitoring' => 1, 'ch_links.use_load_balancing' => 1));
     if ($status) {
         $result->where(array('ch_links.status' => (int) ($status == 'up')));
     }
     $balanser_monitoring_links_raw = $result->orderby('ch_id')->get()->all();
     $servers_map = StreamServer::getIdMap();
     $balanser_monitoring_links = array();
     foreach ($balanser_monitoring_links_raw as $link) {
         if (empty($servers_map[$link['streamer_id']])) {
             continue;
         }
         if ($link['use_http_tmp_link'] == 1 && $link['wowza_tmp_link'] == 0) {
             $colon_pos = strpos($servers_map[$link['streamer_id']]['address'], ":");
             if ($colon_pos === false) {
                 $address = $servers_map[$link['streamer_id']]['address'];
             } else {
                 $address = substr($servers_map[$link['streamer_id']]['address'], 0, $colon_pos);
             }
             $link['url'] = preg_replace('/:\\/\\/([^\\/:]*)/', '://' . $address, $link['url']);
             $link['monitoring_url'] = preg_replace('/:\\/\\/([^\\/:]*)/', '://' . $address, $link['monitoring_url']);
         } else {
             $link['url'] = preg_replace('/:\\/\\/([^\\/]*)/', '://' . $servers_map[$link['streamer_id']]['address'], $link['url']);
             $link['monitoring_url'] = preg_replace('/:\\/\\/([^\\/]*)/', '://' . $servers_map[$link['streamer_id']]['address'], $link['monitoring_url']);
         }
         $link['id'] = 's' . $link['streamer_link_id'];
         $balanser_monitoring_links[] = $link;
     }
     $monitoring_links = array_merge($monitoring_links, $balanser_monitoring_links);
     $monitoring_links = array_map(function ($cmd) {
         $cmd['monitoring_url'] = trim($cmd['monitoring_url']);
         if (!empty($cmd['monitoring_url']) && preg_match("/(\\S+:\\/\\/\\S+)/", $cmd['monitoring_url'], $match)) {
             $cmd['url'] = $match[1];
         } else {
             if (preg_match("/(\\S+:\\/\\/\\S+)/", $cmd['url'], $match)) {
                 $cmd['url'] = $match[1];
             }
         }
         if ($cmd['flussonic_tmp_link']) {
             $cmd['type'] = 'flussonic_health';
         } elseif ($cmd['nginx_secure_link']) {
             try {
                 $cmd['type'] = 'nginx_secure_link';
                 $cmd['url'] = Itv::getNginxSecureLink($cmd['url']);
             } catch (ItvLinkException $e) {
                 return false;
             }
         } else {
             $cmd['type'] = 'stream';
         }
         return $cmd;
     }, $monitoring_links);
     return array_values(array_filter($monitoring_links));
 }