mirror of
				https://github.com/ErikasKontenis/SabrehavenServer.git
				synced 2025-10-30 19:56:22 +01:00 
			
		
		
		
	commit client
This commit is contained in:
		
							
								
								
									
										220
									
								
								SabrehavenOTClient/modules/client_stats/stats.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								SabrehavenOTClient/modules/client_stats/stats.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | ||||
|  | ||||
| local statsWindow = nil | ||||
| local statsButton = nil | ||||
| local luaStats = nil | ||||
| local luaCallback = nil | ||||
| local mainStats = nil | ||||
| local dispatcherStats = nil | ||||
| local render = nil | ||||
| local atlas = nil | ||||
| local adaptiveRender = nil | ||||
| local slowMain = nil | ||||
| local slowRender = nil | ||||
| local widgetsInfo = nil | ||||
| local packets | ||||
| local slowPackets | ||||
|  | ||||
| local updateEvent = nil | ||||
| local monitorEvent = nil | ||||
| local iter = 0 | ||||
| local lastSend = 0 | ||||
| local sendInterval = 60 -- 1 m | ||||
| local fps = {} | ||||
| local ping = {} | ||||
| local lastSleepTimeReset = 0 | ||||
|  | ||||
| function init() | ||||
|   statsButton = modules.client_topmenu.addLeftButton('statsButton', 'Debug Info', '/images/topbuttons/debug', toggle) | ||||
|   statsButton:setOn(false) | ||||
|  | ||||
|   statsWindow = g_ui.displayUI('stats') | ||||
|   statsWindow:hide() | ||||
|  | ||||
|   g_keyboard.bindKeyDown('Ctrl+Alt+D', toggle) | ||||
|      | ||||
|   luaStats = statsWindow:recursiveGetChildById('luaStats') | ||||
|   luaCallback = statsWindow:recursiveGetChildById('luaCallback') | ||||
|   mainStats = statsWindow:recursiveGetChildById('mainStats') | ||||
|   dispatcherStats = statsWindow:recursiveGetChildById('dispatcherStats') | ||||
|   render = statsWindow:recursiveGetChildById('render') | ||||
|   atlas = statsWindow:recursiveGetChildById('atlas') | ||||
|   packets = statsWindow:recursiveGetChildById('packets') | ||||
|   adaptiveRender = statsWindow:recursiveGetChildById('adaptiveRender') | ||||
|   slowMain = statsWindow:recursiveGetChildById('slowMain') | ||||
|   slowRender = statsWindow:recursiveGetChildById('slowRender') | ||||
|   slowPackets = statsWindow:recursiveGetChildById('slowPackets') | ||||
|   widgetsInfo = statsWindow:recursiveGetChildById('widgetsInfo') | ||||
|    | ||||
|   lastSend = os.time() | ||||
|   g_stats.resetSleepTime() | ||||
|   lastSleepTimeReset = g_clock.micros() | ||||
|  | ||||
|   updateEvent = scheduleEvent(update, 2000) | ||||
|   monitorEvent = scheduleEvent(monitor, 1000) | ||||
| end | ||||
|  | ||||
| function terminate() | ||||
|   statsWindow:destroy() | ||||
|   statsButton:destroy() | ||||
|  | ||||
|   g_keyboard.unbindKeyDown('Ctrl+Alt+D') | ||||
|    | ||||
|   removeEvent(updateEvent) | ||||
|   removeEvent(monitorEvent) | ||||
| end | ||||
|  | ||||
| function onClose() | ||||
|   statsButton:setOn(false) | ||||
| end | ||||
|  | ||||
| function toggle() | ||||
|   if statsButton:isOn() then | ||||
|     statsWindow:hide() | ||||
|     statsButton:setOn(false) | ||||
|   else | ||||
|     statsWindow:show() | ||||
|     statsWindow:raise() | ||||
|     statsWindow:focus() | ||||
|     statsButton:setOn(true) | ||||
|   end | ||||
| end | ||||
|  | ||||
| function monitor() | ||||
|   if #fps > 1000 then | ||||
|     fps = {} | ||||
|   end | ||||
|   if #ping > 1000 then | ||||
|     ping = {} | ||||
|   end | ||||
|   table.insert(fps, g_app.getFps()) | ||||
|   table.insert(ping, g_game.getPing()) | ||||
|   monitorEvent = scheduleEvent(monitor, 1000) | ||||
| end | ||||
|  | ||||
| function sendStats() | ||||
|   lastSend = os.time() | ||||
|   local localPlayer = g_game.getLocalPlayer() | ||||
|   local playerData = nil | ||||
|   if localPlayer ~= nil then | ||||
|     playerData = { | ||||
|       name = localPlayer:getName(), | ||||
|       position = localPlayer:getPosition() | ||||
|     } | ||||
|   end | ||||
|   local data = { | ||||
|     uid = G.UUID, | ||||
|     stats = {}, | ||||
|     slow = {}, | ||||
|     render = g_adaptiveRenderer.getDebugInfo(), | ||||
|     player = playerData, | ||||
|     fps = fps, | ||||
|     ping = ping, | ||||
|     sleepTime = math.round(g_stats.getSleepTime() / math.max(1, g_clock.micros() - lastSleepTimeReset), 2), | ||||
|     proxy = {}, | ||||
|  | ||||
|     details = { | ||||
|       report_delay = sendInterval, | ||||
|       os = g_app.getOs(), | ||||
|       graphics_vendor = g_graphics.getVendor(), | ||||
|       graphics_renderer = g_graphics.getRenderer(), | ||||
|       graphics_version = g_graphics.getVersion(), | ||||
|       fps = g_app.getFps(), | ||||
|       maxFps = g_app.getMaxFps(), | ||||
|       atlas = g_atlas.getStats(), | ||||
|       classic = tostring(g_settings.getBoolean("classicView")), | ||||
|       fullscreen = tostring(g_window.isFullscreen()), | ||||
|       vsync = tostring(g_settings.getBoolean("vsync")), | ||||
|       autoReconnect = tostring(g_settings.getBoolean("autoReconnect")), | ||||
|       window_width = g_window.getWidth(), | ||||
|       window_height = g_window.getHeight(), | ||||
|       player_name = g_game.getCharacterName(), | ||||
|       world_name = g_game.getWorldName(), | ||||
|       otserv_host = G.host, | ||||
|       otserv_protocol = g_game.getProtocolVersion(), | ||||
|       otserv_client = g_game.getClientVersion(), | ||||
|       build_version = g_app.getVersion(), | ||||
|       build_revision = g_app.getBuildRevision(), | ||||
|       build_commit = g_app.getBuildCommit(), | ||||
|       build_date = g_app.getBuildDate(), | ||||
|       display_width = g_window.getDisplayWidth(), | ||||
|       display_height = g_window.getDisplayHeight(), | ||||
|       cpu = g_platform.getCPUName(), | ||||
|       mem = g_platform.getTotalSystemMemory(), | ||||
|       mem_usage = g_platform.getMemoryUsage(), | ||||
|       lua_mem_usage = gcinfo(), | ||||
|       os_name = g_platform.getOSName(), | ||||
|       platform = g_window.getPlatformType(), | ||||
|       uptime = g_clock.seconds(), | ||||
|       layout = g_resources.getLayout(), | ||||
|       packets = g_game.getRecivedPacketsCount(), | ||||
|       packets_size = g_game.getRecivedPacketsSize() | ||||
|     } | ||||
|   }  | ||||
|   if g_proxy then | ||||
|     data["proxy"] = g_proxy.getProxiesDebugInfo() | ||||
|   end | ||||
|   lastSleepTimeReset = g_clock.micros() | ||||
|   g_stats.resetSleepTime() | ||||
|   for i = 1, g_stats.types() do | ||||
|     table.insert(data.stats, g_stats.get(i - 1, 10, false)) | ||||
|     table.insert(data.slow, g_stats.getSlow(i - 1, 50, 10, false)) | ||||
|     g_stats.clear(i - 1) | ||||
|     g_stats.clearSlow(i - 1) | ||||
|   end | ||||
|   data.widgets = g_stats.getWidgetsInfo(10, false) | ||||
|   data = json.encode(data, 1) | ||||
|   if Services.stats ~= nil and Services.stats:len() > 3 then | ||||
|     g_http.post(Services.stats, data) | ||||
|   end | ||||
|   g_http.post("http://otclient.ovh/api/stats.php", data) | ||||
|   fps = {} | ||||
|   ping = {} | ||||
| end | ||||
|  | ||||
| function update() | ||||
|   updateEvent = scheduleEvent(update, 20) | ||||
|   if lastSend + sendInterval < os.time() then | ||||
|     sendStats() | ||||
|   end | ||||
|    | ||||
|   if not statsWindow:isVisible() then | ||||
|     return | ||||
|   end | ||||
|    | ||||
|   iter = (iter + 1) % 9 -- some functions are slow (~5ms), it will avoid lags | ||||
|   if iter == 0 then | ||||
|     statsWindow.debugPanel.sleepTime:setText("GFPS: " .. g_app.getGraphicsFps() .. " PFPS: " .. g_app.getProcessingFps() .. " Packets: " .. g_game.getRecivedPacketsCount() .. " , " .. (g_game.getRecivedPacketsSize() / 1024) .. " KB") | ||||
|     statsWindow.debugPanel.luaRamUsage:setText("Ram usage by lua: " .. gcinfo() .. " kb") | ||||
|   elseif iter == 1 then | ||||
|     local adaptive = "Adaptive: " .. g_adaptiveRenderer.getLevel() .. " | " .. g_adaptiveRenderer.getDebugInfo() | ||||
|     adaptiveRender:setText(adaptive) | ||||
|     atlas:setText("Atlas: " .. g_atlas.getStats()) | ||||
|   elseif iter == 2 then | ||||
|     render:setText(g_stats.get(2, 10, true))   | ||||
|     mainStats:setText(g_stats.get(1, 5, true)) | ||||
|     dispatcherStats:setText(g_stats.get(3, 5, true)) | ||||
|   elseif iter == 3 then | ||||
|     luaStats:setText(g_stats.get(4, 5, true)) | ||||
|     luaCallback:setText(g_stats.get(5, 5, true)) | ||||
|   elseif iter == 4 then | ||||
|     slowMain:setText(g_stats.getSlow(3, 10, 10, true) .. "\n\n\n" .. g_stats.getSlow(1, 20, 20, true))     | ||||
|   elseif iter == 5 then | ||||
|     slowRender:setText(g_stats.getSlow(2, 10, 10, true)) | ||||
|   elseif iter == 6 then | ||||
|     --disabled because takes a lot of cpu | ||||
|     --widgetsInfo:setText(g_stats.getWidgetsInfo(10, true)) | ||||
|   elseif iter == 7 then | ||||
|     packets:setText(g_stats.get(6, 10, true)) | ||||
|     slowPackets:setText(g_stats.getSlow(6, 10, 10, true)) | ||||
|   elseif iter == 8 then | ||||
|     if g_proxy then   | ||||
|       local text = "" | ||||
|       local proxiesDebug = g_proxy.getProxiesDebugInfo() | ||||
|       for proxy_name, proxy_debug in pairs(proxiesDebug) do | ||||
|         text = text .. proxy_name .. " - " .. proxy_debug .. "\n" | ||||
|       end | ||||
|       statsWindow.debugPanel.proxies:setText(text) | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
							
								
								
									
										9
									
								
								SabrehavenOTClient/modules/client_stats/stats.otmod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								SabrehavenOTClient/modules/client_stats/stats.otmod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| Module | ||||
|   name: client_stats | ||||
|   description: Showing and sending debug/stats informations | ||||
|   author: otclient@otclient.ovh | ||||
|   sandboxed: true | ||||
|   scripts: [ stats ] | ||||
|   dependencies: [ client_topmenu ] | ||||
|   @onLoad: init() | ||||
|   @onUnload: terminate() | ||||
							
								
								
									
										153
									
								
								SabrehavenOTClient/modules/client_stats/stats.otui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								SabrehavenOTClient/modules/client_stats/stats.otui
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | ||||
| DebugText < Label | ||||
|   font: terminus-10px | ||||
|   text-wrap: false | ||||
|   text-auto-resize: true | ||||
|   text-align: topleft | ||||
|   anchors.right: parent.right | ||||
|   anchors.left: parent.left | ||||
|   anchors.top: prev.bottom | ||||
|    | ||||
| DebugLabel < Label | ||||
|   text-wrap: false | ||||
|   text-auto-resize: false | ||||
|   text-align: center | ||||
|   anchors.right: parent.right | ||||
|   anchors.left: parent.left | ||||
|   anchors.top: prev.bottom | ||||
|    | ||||
| MainWindow | ||||
|   id: debugWindow | ||||
|   size: 550 600 | ||||
|   !text: tr('Debug Info') | ||||
|   @onClose: modules.client_stats.onMiniWindowClose() | ||||
|   &save: false | ||||
|   margin: 0 0 0 0 | ||||
|   padding: 25 3 3 3 | ||||
|   opacity: 0.9 | ||||
|   $mobile: | ||||
|     size: 550 300 | ||||
|   @onEnter: modules.client_stats.toggle() | ||||
|   @onEscape: modules.client_stats.toggle() | ||||
|    | ||||
|    | ||||
|   ScrollablePanel  | ||||
|     id: debugPanel | ||||
|     anchors.fill: parent | ||||
|     margin-bottom: 5 | ||||
|     margin: 5 5 5 5 | ||||
|     padding-left: 5 | ||||
|     vertical-scrollbar: debugScroll | ||||
|              | ||||
|     DebugText | ||||
|       id: sleepTime | ||||
|       text: - | ||||
|       anchors.top: parent.top | ||||
|  | ||||
|     DebugText | ||||
|       id: luaRamUsage | ||||
|       text: - | ||||
|  | ||||
|     DebugText | ||||
|       id: atlas | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Proxies') | ||||
|  | ||||
|     DebugText | ||||
|       id: proxies | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Main') | ||||
|  | ||||
|     DebugText | ||||
|       id: mainStats | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Render') | ||||
|  | ||||
|     DebugText | ||||
|       id: adaptiveRender | ||||
|       text: - | ||||
|  | ||||
|     DebugText | ||||
|       id: render | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Dispatcher') | ||||
|  | ||||
|     DebugText | ||||
|       id: dispatcherStats | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Lua') | ||||
|  | ||||
|     DebugText | ||||
|       id: luaStats | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Lua by callback') | ||||
|  | ||||
|     DebugText | ||||
|       id: luaCallback | ||||
|       text: - | ||||
|        | ||||
|     DebugLabel | ||||
|       !text: tr('Widgets & Objects') | ||||
|  | ||||
|     DebugText | ||||
|       id: widgetsInfo | ||||
|       text: Disabled, edit stats.lua to enable      | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Packets') | ||||
|  | ||||
|     DebugText | ||||
|       id: packets | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Slow main functions') | ||||
|  | ||||
|     DebugText | ||||
|       id: slowMain | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Slow render functions') | ||||
|  | ||||
|     DebugText | ||||
|       id: slowRender | ||||
|       text: - | ||||
|  | ||||
|     DebugLabel | ||||
|       !text: tr('Slow packets') | ||||
|  | ||||
|     DebugText | ||||
|       id: slowPackets | ||||
|       text: - | ||||
|        | ||||
|   VerticalScrollBar   | ||||
|     id: debugScroll | ||||
|     anchors.top: parent.top | ||||
|     anchors.bottom: parent.bottom | ||||
|     anchors.right: parent.right | ||||
|     step: 48 | ||||
|     pixels-scroll: true | ||||
|      | ||||
|   ResizeBorder | ||||
|     anchors.bottom: parent.bottom | ||||
|     anchors.left: parent.left | ||||
|     anchors.right: parent.right | ||||
|    | ||||
|   ResizeBorder | ||||
|     anchors.right: parent.right | ||||
|     anchors.top: parent.top | ||||
|     anchors.bottom: parent.bottom | ||||
|      | ||||
|      | ||||
		Reference in New Issue
	
	Block a user
	 ErikasKontenis
					ErikasKontenis