hxp
2 天以前 87f5f392a121eeafa391c093b16410331f743717
16 卡牌服务端(战斗服务器后台重读支持;)
2个文件已修改
2个文件已添加
305 ■■■■■ 已修改文件
Server/eventdata/ReloadLog.py 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.php 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
serverops/reloadLog.php 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
serverops/reloadconfig.php 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/eventdata/ReloadLog.py
New file
@@ -0,0 +1,83 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @todo: 重读日志
import CommFunc
import ConfigParser
import logging
import mylog
import json
cfg = ConfigParser.ConfigParser()
cfg.read("../../InterfaceConfig.php")
# 需要处理的流向名及顺序列表
DRNameList = ["Reload"]
def queryReloadInfo(argvDict):
    logging.info("queryReloadInfo %s" % str(argvDict))
    startDate = argvDict.get("startDate", "")
    endDate = argvDict.get("endDate", "")
    onlyServerIDHis = argvDict.get("onlyServerIDHis", "") # 只查备档单服数据
    drInfo = {}
    CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc_ReloadInfo,
                              parseLineFunc_ReloadInfo, drInfo, drNameList=DRNameList)
    ret = {"OK":1, "DRData":drInfo}
    #logging.info("ret:%s" % ret)
    print json.dumps(ret, ensure_ascii=False, default=lambda obj: obj.__dict__)
    return
def checkDrFileNeedParseFunc_ReloadInfo(drFileName, *parseArgs, **kv):
    ''' 检查流向是否需要处理
    @param drFileName: 流向文件名  xxx_日期.txt
    @param *parseArgs: 自定义参数
    @return: isNeed, checkNeedParseRetInfo
    '''
    isNeed = True # 指定了DRNameList,这里默认True即可
    return isNeed, None
def parseLineFunc_ReloadInfo(drName, dateStr, checkNeedParseRetInfo, line, *parseArgs, **kv):
    ''' 解析流向行内容
    @param drName: 流向名
    @param dateStr: 对应日期字符串
    @param checkNeedParseRetInfo: checkDrFileNeedParseFunc 返回的内容
    @param line: 本行内容
    @param *parseArgs: 自定义参数
    '''
    drInfo = parseArgs[0] # {"GroupName":{"ServerID":{"ReloadType":reloadTime, ...}, ...}, ...}
    #{'GroupName': 'severname', 'ServerID': 6000001, 'ReloadType': 'restart', 'time': '2025-12-25 13:31:48'}
    drDict = eval(line)
    GroupName = drDict["GroupName"]
    ServerID = drDict["ServerID"]
    ReloadType = drDict["ReloadType"]
    reloadTime = drDict["time"]
    if GroupName not in drInfo:
        drInfo[GroupName] = {}
    serverDict = drInfo[GroupName]
    if str(ServerID) not in serverDict:
        serverDict[str(ServerID)] = {}
    reloadInfo = serverDict[str(ServerID)]
    if ReloadType not in reloadInfo:
        reloadInfo[ReloadType] = 0
    lastTime = reloadInfo[ReloadType]
    if reloadTime > lastTime:
        reloadInfo[ReloadType] = reloadTime
    return
def main():
    CommFunc.setdefaultencoding()
    argvDict = CommFunc.parse_args()
    mylog.InitMyLog(argvDict.get("eventType", ""))
    queryReloadInfo(argvDict)
    return
if __name__ == "__main__":
    try:
        main()
    except:
        CommFunc.printExceptionError()
index.php
@@ -118,6 +118,7 @@
        array(\User\Permission::P_CrossClientServerMaintain, "SuperGMToolClient/CrossClientServerMaintain.php", \Lang\gettext("跨服子服维护")),
        array(\User\Permission::P_VersionLog, "serverops/versionlog.php", \Lang\gettext("版本更新日志")),
        array(\User\Permission::P_ReloadConfig, "serverops/reloadconfig.php", \Lang\gettext("重读配置")),
        array(\User\Permission::P_ReloadConfig, "serverops/reloadLog.php", \Lang\gettext("重读日志")),
    ),
    \Lang\gettext("账号权限") => array(
serverops/reloadLog.php
New file
@@ -0,0 +1,215 @@
<?php
include_once "/Common/Logging.php";
include_once "/Account/User.php";
include_once "/language/lang.php";
\Logging\CreateLogging("reloadLog.php");
$Permission = \User\Permission::P_ReloadConfig;
$alertMsg = "";
$channel = $_SESSION['spid'];
$UserAccount = $_SESSION['UserAccount'];
$user = new \User\User($UserAccount);
if (!$user->HavePermission($Permission)) {
    exit;
}
$serversArray = $user->GetServers();
// 默认当天
$startDate = array_key_exists("startDate", $_POST) ? $_POST["startDate"] : date("Y-m-d");
$endDate = array_key_exists("endDate", $_POST) ? $_POST["endDate"] : date("Y-m-d");
$errorServerInfo = array();
$reloadLogInfo = null;
// echo "_POST:", print_r($_POST, true), "<br/>";
if (array_key_exists("submit", $_POST)) {
    $_POST["startDate"] = $startDate;
    $_POST["endDate"] = $endDate;
    $_POST["eventType"] = "ReloadLog";
    // $_POST["queryAllData"] = "on"; // 设置可查询备份数据
    \CommFunc\QueryEventData($user, $retInfo);
    // echo "retInfo:", print_r($retInfo, true), "<br/>";
    if (isset($retInfo)) {
        // \Logging\LogInfo("返回查询结果: " .  print_r($retInfo, true));
        // $serverName 可能请求多服,但是是同一台物理服,返回的数据理论上是一样的重复的,所以这里直接按 GroupName 分组统计即可
        $reloadLogInfo = array();
        foreach ($retInfo as $serverName => $ret) {
            if (is_array($ret) && $ret["OK"] == 1) {
                // {"GroupName":{"ServerID":{"ReloadType":reloadTime, ...}, ...}, ...}
                foreach ($ret["DRData"] as $GroupName => $serverDict) {
                    if (!array_key_exists($GroupName, $reloadLogInfo)) {
                        $reloadLogInfo[$GroupName] = array();
                    }
                    $groupDict = $reloadLogInfo[$GroupName];
                    foreach ($serverDict as $ServerID => $reloadDict) {
                        if (!array_key_exists($ServerID, $groupDict)) {
                            $groupDict[$ServerID] = $reloadDict;
                        } else {
                            $serverReloadDict = $groupDict[$ServerID];
                            foreach ($reloadDict as $reloadType => $reloadTime) {
                                if (!array_key_exists($reloadType, $serverReloadDict) || $serverReloadDict[$reloadType] < $reloadTime) {
                                    $serverReloadDict[$reloadType] = $reloadTime;
                                }
                            }
                            $groupDict[$ServerID] = $serverReloadDict;
                        }
                    }
                    $reloadLogInfo[$GroupName] = $groupDict;
                }
                // foreach ($reportInfo as $key => $repOrderInfoDict) {
                //     //排序 根据 payCount 倒序排序  SORT_ASC 和 SORT_DESC
                //     array_multisort(array_column($repOrderInfoDict, 'payCount'), SORT_DESC, $repOrderInfoDict);
                //     $reportInfo[$key] = $repOrderInfoDict;
                // }
            } else {
                $errorServerInfo[$serverName] = $ret;
            }
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title><?php echo \Lang\gettext("重读日志"); ?></title>
    <link rel="gettext" type="application/x-po" href="../language/<?php echo \Lang\getLang(); ?>/LC_MESSAGES/<?php echo \Lang\getjspodomain(); ?>.po" />
</head>
<body>
    <center>
        <p><b><?php echo \Lang\gettext("重读日志"); ?></b></P>
    </center>
    <form id="reloadLog" action="reloadLog.php" method="post">
        <?php echo \Lang\gettext("查询时间"); ?>:
        <input type="text" name="startDate" id="startDate"
            onclick="new Calendar().show(this);" readonly value="<?php echo $startDate; ?>" size="8" />
        ~
        <input type="text" name="endDate" id="endDate" onclick="new Calendar().show(this);" readonly value="<?php echo $endDate; ?>" size="8" />
        <input type="submit" name="submit" id="submit" value="<?php echo \Lang\gettext("查询本服"); ?>" onclick="onCurSubmit()" />
        <hr />
        <?php
        if (count($errorServerInfo)) {
            echo \Lang\gettext("服务器错误信息") . "<br/>";
            echo "<font color='red'>";
            foreach ($errorServerInfo as $serverName => $errInfo) {
                echo $serverName;
                if (is_array($errInfo)) {
                    echo " => " . json_encode($errInfo);
                } else {
                    echo " => " . $errInfo;
                }
                echo "<br/>";
            }
            echo "</font>";
            echo "<hr/>";
        }
        ?>
        <?php
        if (isset($reloadLogInfo)) {
            $alertSeconds = 600; # x秒内的提醒
            if (count($reloadLogInfo) == 0) {
                echo \Lang\gettext("无记录") . "<br/>";
            } else {
                echo "<font color=\"red\">";
                echo $alertSeconds / 60 . "分钟内有维护记录的红字提醒<br/>";
                echo "注:战斗服务器1分钟内最多只会重读一次,重复请求无效!!!可过会重试或手动操作";
                echo "</font>";
            }
            $currentTime = time();
            foreach ($reloadLogInfo as $GroupName => $groupDict) {
                $caption = "服务器组:【" . $GroupName . "】";
                echo "<table width=\"75%\" border frame=box rules=all>";
                echo "<caption>" . $caption . "</caption>";
                echo "<thead><tr>";
                echo "<th width=\"100\">ServerID</td>";
                echo "<th width=\"200\" align='left'>&nbsp;&nbsp;&nbsp;&nbsp;重启</td>";
                echo "<th width=\"200\" align='left'>&nbsp;&nbsp;&nbsp;&nbsp;重读脚本</td>";
                echo "<th width=\"200\" align='left'>&nbsp;&nbsp;&nbsp;&nbsp;重读配置</td>";
                echo "</tr></thead>";
                $Num = 0;
                foreach ($groupDict as $ServerID => $serverReloadDict) {
                    $restartTimeStr = array_key_exists("restart", $serverReloadDict) ? $serverReloadDict["restart"] : "";
                    $scriptTimeStr = array_key_exists("script", $serverReloadDict) ? $serverReloadDict["script"] : "";
                    $configTimeStr = array_key_exists("config", $serverReloadDict) ? $serverReloadDict["config"] : "";
                    if ($restartTimeStr) {
                        $restartTime = strtotime($restartTimeStr);
                        $secondsDiff = $currentTime - $restartTime;
                        if ($secondsDiff <= $alertSeconds) {
                            $restartTimeStr .= "&nbsp;&nbsp;[<font color=\"red\">" . $secondsDiff . "分秒前</font>]";
                        }
                    }
                    if ($scriptTimeStr) {
                        $restartTime = strtotime($scriptTimeStr);
                        $secondsDiff = $currentTime - $restartTime;
                        if ($secondsDiff <= $alertSeconds) {
                            $scriptTimeStr .= "&nbsp;&nbsp;[<font color=\"red\">" . $secondsDiff . "秒前</font>]";
                        }
                    }
                    if ($configTimeStr) {
                        $restartTime = strtotime($configTimeStr);
                        $secondsDiff = $currentTime - $restartTime;
                        if ($secondsDiff <= $alertSeconds) {
                            $configTimeStr .= "&nbsp;&nbsp;[<font color=\"red\">" . $secondsDiff . "秒前</font>]";
                        }
                    }
                    // <font color="red">注:战斗服务器1分钟内最多只会重读一次,重复请求无效!!!</font>
                    echo "<tr'>";
                    echo "<td align='center'>" . $ServerID . "</td>";
                    echo "<td align='left'>&nbsp;&nbsp;&nbsp;&nbsp;" . $restartTimeStr . "</td>";
                    echo "<td align='left'>&nbsp;&nbsp;&nbsp;&nbsp;" . $scriptTimeStr . "</td>";
                    echo "<td align='left'>&nbsp;&nbsp;&nbsp;&nbsp;" . $configTimeStr . "</td>";
                    echo "</tr>";
                }
                echo "</table>";
                echo "<hr/>";
            }
        }
        ?>
        <hr />
        <?php
        include_once "/Common/SelectServer.php";
        ?>
        <input type="submit" name="submit" id="submit" value="<?php echo \Lang\gettext("查询多服"); ?>" onclick="return checkMultiSubmit()" />
        <br />
        <br />
    </form>
</body>
<script type='text/javascript' src='/language/gettext.js'></script>
<script type='text/javascript' src="/js/calendar.js"></script>
<script type='text/javascript' src="/js/common.js"></script>
<script type='text/javascript' src="/Common/selectserver.js"></script>
<script type="text/javascript">
    function onCurSubmit() {
        document.getElementById("MultiServer").value = 0;
        return true;
    }
    function checkMultiSubmit() {
        if (!checkHaveServerSelected()) {
            return false;
        }
        if (!setSubmitQuerying("submit")) {
            return false;
        }
        return true;
    }
</script>
</html>
serverops/reloadconfig.php
@@ -34,8 +34,10 @@
        <span><?php echo \Lang\gettext("配置"); ?></span>
        <input type="radio" name="reloadType" value="script" />
        <span><?php echo \Lang\gettext("脚本"); ?></span>
        <p class="clear"></p>
        <p>
            <b>
                <font color="red">注:战斗服务器1分钟内最多只会重读一次,重复请求无效!!!</font>
            </b>
        <p>
            <input type="hidden" name="Permission" value="<?php echo $Permission; ?>" />
            <input type="hidden" name="pack_type" id="pack_type" value="GMT_ReloadConfig" />