| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- local global = _G.global
- local Log = require("common.Log")
- local Lang = require("common.Lang")
- local MiddleFilter = require("common.MiddleFilter")
- local InnerMsg = require("core.InnerMsg")
- local Broadcast = require("broadcast.Broadcast")
- MONITOR_ENABLE = false
- MONITOR_PACKET = MONITOR_PACKET or {} -- 用户包相关
- MONITOR_TIMER = MONITOR_ADMIN or {} -- 定时器相关
- MONITOR_CUSTOM = MONITOR_CUSTOM or {} -- 自定制
- MONITOR_INNER_PACKET = MONITOR_INNER_PACKET or {} -- 内部通信协议相关
- local handleTime1 = nil
- local handleTime2 = nil
- local Msg = require("core.Msg")
- function handlePacket(human, container, protoId)
- if _G.is_middle then -- 跨服功能受限于白名单配置
- if not MiddleFilter.isPermit(protoId) then
- if type(human) == "table" then
- Broadcast.sendErr(human, Lang.MIDDLE_CG_NOT_IN_WHITE .. " " .. protoId)
- end
- return
- end
- else
- -- 处于跨服中,本服功能部分屏蔽
- if type(human) == "table" and human.db and human.db.middleFlag then
- if not MiddleFilter.isPermit(protoId) then
- Broadcast.sendErr(human, Lang.MIDDLE_CG_NOT_IN_WHITE2 .. " " .. protoId)
- return
- end
- end
- end
- if MONITOR_ENABLE then
- MONITOR_PACKET[0] = MONITOR_PACKET[0] or {0, 0}
- MONITOR_PACKET[protoId] = MONITOR_PACKET[protoId] or {0, 0}
- handleTime1 = global.get_usec()
- end
-
- Msg.proto_handler[protoId](human, container)
-
- if MONITOR_ENABLE then
- handleTime2 = global.get_usec()
- MONITOR_PACKET[0][1] = MONITOR_PACKET[0][1] + 1 -- 包量
- MONITOR_PACKET[0][2] = MONITOR_PACKET[0][2] + handleTime2 - handleTime1 -- 处理时间
-
- MONITOR_PACKET[protoId][1] = MONITOR_PACKET[protoId][1] + 1
- MONITOR_PACKET[protoId][2] = MONITOR_PACKET[protoId][2] + handleTime2 - handleTime1
- end
- end
- function handleTimer(func, t, key)
- if MONITOR_ENABLE then
- handleTime1 = global.get_usec()
- end
-
- func(t)
-
- if MONITOR_ENABLE then
- MONITOR_TIMER[0] = MONITOR_TIMER[0] or {0, 0}
- MONITOR_TIMER[key] = MONITOR_TIMER[key] or {0, 0}
-
- handleTime2 = global.get_usec()
-
- MONITOR_TIMER[0][1] = MONITOR_TIMER[0][1] + 1
- MONITOR_TIMER[0][2] = MONITOR_TIMER[0][2] + handleTime2 - handleTime1
-
-
- MONITOR_TIMER[key][1] = MONITOR_TIMER[key][1] + 1
- MONITOR_TIMER[key][2] = MONITOR_TIMER[key][2] + handleTime2 - handleTime1
- end
- end
- local InnerMsg = require("core.InnerMsg")
- function handleInnerPacket(fd, container, protoId)
- if MONITOR_ENABLE then
- MONITOR_INNER_PACKET[0] = MONITOR_INNER_PACKET[0] or {0, 0}
- MONITOR_INNER_PACKET[protoId] = MONITOR_INNER_PACKET[protoId] or {0, 0}
- handleTime1 = global.get_usec()
- end
-
- InnerMsg.proto_handler[protoId](fd, container)
-
- if MONITOR_ENABLE then
- handleTime2 = global.get_usec()
- MONITOR_INNER_PACKET[0][1] = MONITOR_INNER_PACKET[0][1] + 1 -- 包量
- MONITOR_INNER_PACKET[0][2] = MONITOR_INNER_PACKET[0][2] + handleTime2 - handleTime1 -- 处理时间
-
- MONITOR_INNER_PACKET[protoId][1] = MONITOR_INNER_PACKET[protoId][1] + 1
- MONITOR_INNER_PACKET[protoId][2] = MONITOR_INNER_PACKET[protoId][2] + handleTime2 - handleTime1
- end
- end
- custom_table_temp = custom_table_temp or {}
- function custom1(key)
- if not MONITOR_ENABLE then return end
- custom_table_temp[key] = global.get_usec()
- end
- function custom2(key)
- if not MONITOR_ENABLE then return end
-
- MONITOR_CUSTOM[key] = MONITOR_CUSTOM[key] or {0, 0}
- local time2 = global.get_usec()
-
- MONITOR_CUSTOM[key][1] = MONITOR_CUSTOM[key][1] + 1
- MONITOR_CUSTOM[key][2] = MONITOR_CUSTOM[key][2] + time2 - custom_table_temp[key]
- end
- local function cmp(a, b)
- return a[3] > b[3]
- end
- local function getThreadDesc()
- if _G.is_middle then
- return "middle"
- end
- return "logic"
- end
- local tempTable = {}
- local function writeLog(monitor_name, monitor_list, see_count)
- for k in pairs(tempTable) do
- tempTable[k] = nil
- end
- local tempCount = 0
- for k, v in pairs(monitor_list) do
- tempCount = tempCount + 1
- tempTable[tempCount] = {k, v[1], v[2]}
- end
- for k in pairs(monitor_list) do
- monitor_list[k] = nil
- end
- if tempCount > 1 then
- table.sort(tempTable, cmp)
- end
- if not see_count or tempCount > 0 then
- local str = monitor_name .. getThreadDesc()
- for i = 1, tempCount do
- if i > 7 then break end
- str = str .. " key:" .. tempTable[i][1] .. " c:" .. tempTable[i][2] .. " t:" .. tempTable[i][3]
- end
- Log.write(Log.LOGID_MONITOR, str)
- end
- end
- function output()
- if not MONITOR_ENABLE then return end
- writeLog("TIMER:", MONITOR_TIMER)
- writeLog("IO:", MONITOR_PACKET)
- writeLog("INNER:", MONITOR_INNER_PACKET)
- writeLog("CUSTOM:", MONITOR_CUSTOM, true)
- end
|