# 运营指令

  • 使用方法
    post url: http:masterip:masterport/baseurl
    post body:
       json格式,例如:
       {
          "serverId":3,
          "ip":"192.168.43.170",
          "port":12001,
          "masterPort":12002,
          "type":"lobby"
       }
    response:
        json格式,格式:
        {
            "code":1, #1是成功,2是失败
            "message":"reason",#若是失败,则介绍失败原因
            "entity":content #详细信息
        }
    

开发者可以登录到master所在机器,用curl命令发请求,使用方式如下: curl -X POST http://masterip:masterport/baseurl -d 'postbody' 若通过"/online-num/query"指令获取game在线人数,则可以在master上发送如下curl命令: curl -X POST http://11.11.11.11:8503/online-num/query -d '{"server_type":"game"}' 若需要使用商城插件neteaseShop中查询订单运营指令(/check-single-order指令),则可以在master上发送如下curl命令: curl -X POST http://11.11.11.11:8503/check-single-order -d '{"orderid" : 1234,"uid" : 123456789}'

# 在线人数

  • /online-num/query

    • 描述

      获取proxy/lobby/game在线人数或获取总在线人数。

    • post body 参数

      关键字 数据类型 说明
      serverType str 服务器类型,比如"lobby","game","proxy",若不传入该值,则表示总在线人数
    • response entity参数

      关键字 数据类型 说明
      onlineNum int 在线人数
    • 示例:

    post url: http://111.222.333.444:1101/online-num/query
    post body:
    {
       "serverType":"game"
    } 
    response:
    {
        "code": 1,
        "entity": {
            "onlineNum": 0
          },
          "message": ""
    } 
    
  • /online-num/query-by-server-id

    • 描述

      获取某个proxy/game/lobby在线人数

    • post body参数

      关键字 数据类型 说明
      serverId int 服务器id
    • response entity参数

      关键字 数据类型 说明
      onlineNum int 在线人数
    • 示例:

     post url: http://111.222.333.444:1101/online-num/query-by-server-id
     post body:
     {
        "serverId":1
     } 
     response:
     {
         "code": 1,
         "entity": {
             "onlineNum": 2
           },
           "message": ""
     }      
    

# 日志等级

  • /conf/set-log-debug-level

    • 描述

      开服工具日志等级设置为debug或info level等级

    • post body 参数

      关键字 数据类型 说明
      debugLevel bool true:则日志设置为debug log level;false:日志设置为info log level
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/conf/set-log-debug-level
    post body:
    {
       "debugLevel":false
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    
  • /conf/set-server-log-debug-level

    • 描述

      设置某个服务器的日志等级。

    • post body 参数

      关键字 数据类型 说明
      serverId int 服务器id。可以是proxy、lobby、game、service的serverid。若为0,则表示master。
      debugLevel bool true:则日志设置为debug log level;false:日志设置为info log level
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/conf/set-server-log-debug-level
    post body:
    {
       "serverId":1,
       "debugLevel":false
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    

# 服务器

  • /query-all-server-status

    • 描述

      查询所有服务器状态

    • 无post body json参数

    • response entity参数 dict。key是服务器id,value是服务器状态。服务器状态有: 1:断开连接状态 2:已连接状态
      3:关服状态 4:优雅关服状态
      6, 滚动更新中间状态,即将转换到状态7
      7 也是滚动更新中间状态,即将转换到状态1或2

    • 示例:

    post url: http://111.222.333.444:1101/query-all-server-status
    post body:
    {
    } 
    response:
    {
        "code": 1,
        "entity": {
       	"1": 1,
       	"2": 1
         }
         "message": ""
    }
    
  • /query-one-server-status

    • 描述

      查询某个服务器状态

    • post body 参数

      关键字 数据类型 说明
      serverId int proxy/lobby/game服务器id
    • response entity参数

      关键字 数据类型 说明
      status int 服务器状态。服务器状态有:服务器状态如下:
      1:断开连接状态
      2:已连接状态
      3:关服状态
      4:优雅关服状态
      6, 滚动更新中间状态,即将转换到状态7
      7 也是滚动更新中间状态,即将转换到状态1或2
    • 示例:

    post url: http://111.222.333.444:1101/query-one-server-status
    post body:
    {
    	"serverId":1
    } 
    response:
    {
        "message": "",
        "code": 1,
        "entity": {
            "status": 1
        }
    }
    

# 禁言,解除禁言

  • /silent

    • 描述

      禁言某个玩家

    • post body json参数

      关键字 数据类型 说明
      uid int 玩家id
      banTime int 禁言时间,单位为秒,-1表示永封
      reason str 禁言原因
      type str 禁言类型,可自定义,公屏禁言为Commom
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/silent
    post body:
    {
       "uid":11111,
       "banTime":40,
       "reason":"玩家作弊",
       "type":"Common"
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    
  • /unban-silent

    • 描述

      解除某个玩家的禁言

    • post body json参数

      关键字 数据类型 说明
      uid int 解除禁言玩家的uid
      type str 禁言类型,可自定义,公屏禁言为Commom
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/unban-silent
    post body:
    {
       "uid":11111,
       "type":"Commom"
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    
  • /global-silent

    • 描述

      全局公屏禁言开关

    • post body json参数

      关键字 数据类型 说明
      isSilent bool 全局禁言开关,true表示开启全局禁言,false表示关闭全局禁言
      reason str 禁言原因
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/global-silent
    post body:
    {
       "isSilent":true,
       "reason":"系统维护"
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    

# 踢出玩家

  • /kickout-user

    • 描述

      把某个玩家从游戏中踢出

    • post body json参数

      关键字 数据类型 说明
      uid int 被踢出玩家的uid
      reason str 踢出原因
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/kickout-user
    post body:
    {
       "uid":11111,
       "reason":"玩家作弊",
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    

# 封禁,解除封禁

  • /ban-user

    • 描述

      封禁某个玩家

    • post body json参数

      关键字 数据类型 说明
      uid int 封禁玩家的uid
      banTime int 封禁时间,单位为秒,-1表示永封
      reason str 封禁原因
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/ban-user
    post body:
    {
       "uid":11111,
       "banTime":40,
       "reason":"玩家作弊",
    } 
    response:
    {
        "code": 1,
        "entity": null,
         "message": ""
    }
    
  • /global-silent

    • 描述

      全服玩家禁言或解禁。它个【/ban-user】禁言是独立运作的,也就是说可以对某玩家禁言,然后全服禁言,但是全服解禁后,还需要用【/unban-user】给玩家解禁。

    • post body json参数

      关键字 数据类型 说明
      isSilent int 1 禁言;0 解禁
      reason str 封禁原因
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/ban-user
    post body:
    {
       "is_silent":1,
       "reason":"全服禁言",
    } 
    response:
    {
        "code": 1,
        "entity": null,
         "message": ""
    }
    
  • /unban-user

    • 描述

      解除某个玩家的封禁

    • post body json参数

      关键字 数据类型 说明
      uid uint32 解除封禁玩家的uid
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/unban-user
    post body:
    {
       "uid":11111,
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    

# 停服维护

  • /invalid-all-servers

    • 描述

      开启/关闭停服维护

    • post body json参数

      关键字 数据类型 说明
      invalid bool 停服维护开关,true表示开启停服维护,false表示关闭停服维护
      reason str 停服维护原因
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/invalid-all-servers
    post body:
    {
       "invalid":true,
       "reason":"停服维护",
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    

# Hunter调试命令

  • /hunter-debug

    • 描述

      使目的服务器执行Python脚本,其结果打印到目的服务器的日志文件中,具体是"hunterDebug exec"日志的下面n行日志。

    • post body json参数

      关键字 数据类型 说明
      serverId int 服务器对应ID,0表示为master
      script str 服务器需要执行的python脚本,用\n换行
      command str 服务器需要执行的控制台命令
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/hunter-debug
    post body:
    {
       "serverId":101,
       "script":"import time\nprint time.time()"
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    101服务器日志文件中包含下面日志:
    [2019-06-03 10:21:29 INFO] Python:hunterDebug exec
    [2019-06-03 10:21:29 INFO] Python:1559543269.12
    

# 性能分析

  • /check-memory-run

    • 描述

      检查服务器脚本层内存泄漏。需要执行两次指令,第一次生成快照,第二次生成同第一次的diff。

    • post body json参数

      关键字 数据类型 说明
      serverId int
      useList list 通常是 ["tracemalloc", "objreport"]
      objNames list 通常是空
    • 无response entity参数

    • 示例:

    post url: http://111.222.333.444:1101/check-memory-run
    post body:
    {
       "serverId":101,
       "useList":["tracemalloc", "objreport"],
       "objNames":[]
    } 
    response:
    {
        "code": 1,
        "entity": null,
        "message": ""
    }
    
    服务器日志文件包含下面日志:
    [2019-09-11 17:09:33 INFO] Python:run_tracemalloc traceback
    [2019-09-11 17:09:33 INFO] Python:[ Top 10 differences ]
    [2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:43: size=12.0 KiB (+12.0 KiB), count=1 (+1), average=12.0 KiB
    [2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:45: size=10.0 KiB (+10.0 KiB), count=11 (+11), average=992 B
    [2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/check_memory.py:61: size=10.0 KiB (+10.0 KiB), count=127 (+127), average=84 B
    [2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:12: size=1736 B (+1736 B), count=6 (+6), average=289 B
    [2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/obj_report.py:6: size=1007 B (+1007 B), count=5 (+5), average=201 B
    [2019-09-11 17:09:33 INFO] Python:/usr/local/lib/python2.7/site-packages/tracemalloc.py:380: size=864 B (+864 B), count=4 (+4), average=216 B
    [2019-09-11 17:09:33 INFO] Python:/usr/local/lib/python2.7/json/decoder.py:380: size=704 B (+704 B), count=11 (+11), average=64 B
    [2019-09-11 17:09:33 INFO] Python:/usr/local/lib/python2.7/site-packages/tracemalloc.py:518: size=672 B (+672 B), count=4 (+4), average=168 B
    [2019-09-11 17:09:33 INFO] Python:<unknown>:0: size=650 B (+650 B), count=2 (+2), average=325 B
    [2019-09-11 17:09:33 INFO] Python:/tmp/tmpxlycSu/scripts/mod/server/memory/check_memory.py:66: size=544 B (+544 B), count=1 (+1), average=544 B
    [2019-09-11 17:09:33 INFO] Python:[QA] [DIFF_MORE]
    [2019-09-11 17:09:33 INFO] Python:[QA] [DIFF_LESS]
    [2019-09-11 17:09:33 INFO] Python:-2        <type 'tuple'>
    
    日志说明,打印了两次【/check-memory】间,内存变化前十的文件,两次指令间,减少了2个tuple的实例。
    
  • /profile

    • 描述

      用于测量python函数占用cpu时间。需要执行两次指令,第一次开始profile,第二次生成性能数据文件。性能数据文件放到执行文件所在目录下的profile子目录中。性能数据文件名的格式:profile+生成文件的时间戳

    • post body json参数

      关键字 数据类型 说明
      serverId int
      bBegin bool true:开始profile;false:完成profile
    • 无response entity参数

    • 示例:

    性能数据文件名:profile_1574325974
    文件内容:
         33 function calls in 0.000 seconds
    
    Ordered by: internal time
    
    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 {_log.logInfo}
        2    0.000    0.000    0.000    0.000 logout.py:83(write)
        1    0.000    0.000    0.000    0.000 logout.py:62(split_and_log)
        1    0.000    0.000    0.000    0.000 netServerApp.py:17(TickApp)
        1    0.000    0.000    0.000    0.000 Queue.py:93(empty)
        1    0.000    0.000    0.000    0.000 timer.py:72(scheduler)
        1    0.000    0.000    0.000    0.000 idvScript.modMaster.httpHandlerSys:141(Update)
        1    0.000    0.000    0.000    0.000 async_task_pool.py:293(schedule)
        1    0.000    0.000    0.000    0.000 netgameApp.py:3(Tick)
        1    0.000    0.000    0.000    0.000 async_task_pool.py:302(exec_callback)
        2    0.000    0.000    0.000    0.000 {len}
        1    0.000    0.000    0.000    0.000 baseApp.py:73(ClearNeedsUpdate)
        5    0.000    0.000    0.000    0.000 {method 'has_key' of 'dict' objects}
        1    0.000    0.000    0.000    0.000 {time.time}
        1    0.000    0.000    0.000    0.000 {method 'acquire' of 'thread.lock' objects}
        1    0.000    0.000    0.000    0.000 {method 'replace' of 'str' objects}
        2    0.000    0.000    0.000    0.000 {method 'splitlines' of 'str' objects}
        1    0.000    0.000    0.000    0.000 mongopool.py:194(tick)
        1    0.000    0.000    0.000    0.000 redispool.py:274(do_tick)
        1    0.000    0.000    0.000    0.000 Queue.py:200(_qsize)
        1    0.000    0.000    0.000    0.000 memoryScripts.MasterMemorySys:21(Update)
        1    0.000    0.000    0.000    0.000 {method 'release' of 'thread.lock' objects}
        1    0.000    0.000    0.000    0.000 redispool.py:271(tick)
        3    0.000    0.000    0.000    0.000 baseSystem.py:86(Update)
    内容解读:
    第一行:33个函数调用被监控,这些函数占用cpu总运行时间为0.000秒
    接下来输出个字段含义:
    ncalls:表示函数调用的次数;
    tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
    percall:(第一个percall)等于 tottime/ncalls;
    cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
    percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
    filename:lineno(function):每个函数调用的具体信息;