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)); }