docker-workerman-jsonrpc/Applications/Statistics/Modules/admin.php

131 lines
4.3 KiB
PHP

<?php
/**
* This file is part of workerman.
*
* Licensed under The MIT License
* For full copyright and license information, please see the MIT-LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @author walkor<walkor@workerman.net>
* @copyright walkor<walkor@workerman.net>
* @link http://www.workerman.net/
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Statistics\Modules;
function admin()
{
$act = isset($_GET['act'])? $_GET['act'] : 'home';
$err_msg = $notice_msg = $suc_msg = $ip_list_str = '';
$action = 'save_server_list';
switch($act)
{
case 'detect_server':
// 创建udp socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
$buffer = json_encode(array('cmd'=>'REPORT_IP'))."\n";
// 广播
socket_sendto($socket, $buffer, strlen($buffer), 0, '255.255.255.255', \Statistics\Config::$ProviderPort);
// 超时相关
$time_start = microtime(true);
$global_timeout = 1;
$ip_list = array();
$recv_timeout = array('sec'=>0,'usec'=>8000);
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$recv_timeout);
// 循环读数据
while(microtime(true) - $time_start < $global_timeout)
{
$buf = $host = $port = '';
if(@socket_recvfrom($socket, $buf, 65535, 0, $host, $port))
{
$ip_list[$host] = $host;
}
}
// 过滤掉已经保存的ip
$count = 0;
foreach($ip_list as $ip)
{
if(!isset(\Statistics\Lib\Cache::$ServerIpList[$ip]))
{
$ip_list_str .= $ip."\r\n";
$count ++;
}
}
$action = 'add_to_server_list';
$notice_msg = "探测到{$count}个新数据源";
break;
case 'add_to_server_list':
if(empty($_POST['ip_list']))
{
$err_msg = "保存的ip列表为空";
break;
}
$ip_list = explode("\n", $_POST['ip_list']);
if($ip_list)
{
foreach($ip_list as $ip)
{
$ip = trim($ip);
if(false !== ip2long($ip))
{
\Statistics\Lib\Cache::$ServerIpList[$ip] = $ip;
}
}
}
$suc_msg = "添加成功";
foreach(\Statistics\Lib\Cache::$ServerIpList as $ip)
{
$ip_list_str .= $ip."\r\n";
}
saveServerIpListToCache();
break;
case 'save_server_list':
if(empty($_POST['ip_list']))
{
$err_msg = "保存的ip列表为空";
break;
}
\Statistics\Lib\Cache::$ServerIpList = array();
$ip_list = explode("\n", $_POST['ip_list']);
if($ip_list)
{
foreach($ip_list as $ip)
{
$ip = trim($ip);
if(false !== ip2long($ip))
{
\Statistics\Lib\Cache::$ServerIpList[$ip] = $ip;
}
}
}
$suc_msg = "保存成功";
foreach(\Statistics\Lib\Cache::$ServerIpList as $ip)
{
$ip_list_str .= $ip."\r\n";
}
saveServerIpListToCache();
break;
default:
foreach(\Statistics\Lib\Cache::$ServerIpList as $ip)
{
$ip_list_str .= $ip."\r\n";
}
}
include ST_ROOT . '/Views/header.tpl.php';
include ST_ROOT . '/Views/admin.tpl.php';
include ST_ROOT . '/Views/footer.tpl.php';
}
function saveServerIpListToCache()
{
foreach(glob(ST_ROOT . '/Config/Cache/*.iplist.cache.php') as $php_file)
{
unlink($php_file);
}
file_put_contents(ST_ROOT . '/Config/Cache/'.time().'.iplist.cache.php', "<?php\n\\Statistics\\Lib\\Cache::\$ServerIpList=".var_export(\Statistics\Lib\Cache::$ServerIpList,true).';');
}