blob: 6c6d3c902f4707e64043e58d47bc11427bb87aae (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
local pub = require 'pub'
local thread = require 'bee.thread'
local await = require 'await'
local timer = require 'timer'
local proto = require 'proto'
local m = {}
m.type = 'service'
function m.reportMemory()
local mems = {}
local totalMem = 0
mems[0] = collectgarbage 'count'
totalMem = totalMem + collectgarbage 'count'
for id, brave in ipairs(pub.braves) do
mems[id] = brave.memory
totalMem = totalMem + brave.memory
end
local lines = {}
lines[#lines+1] = ' --------------- Memory ---------------'
lines[#lines+1] = (' Total: %.3f MB'):format(totalMem / 1000.0)
for i = 0, #mems do
lines[#lines+1] = (' # %02d : %.3f MB'):format(i, mems[i] / 1000.0)
end
return table.concat(lines, '\n')
end
function m.reportTask()
local total = 0
local running = 0
local suspended = 0
local normal = 0
local dead = 0
for co in pairs(await.coTracker) do
total = total + 1
local status = coroutine.status(co)
if status == 'running' then
running = running + 1
elseif status == 'suspended' then
suspended = suspended + 1
elseif status == 'normal' then
normal = normal + 1
elseif status == 'dead' then
dead = dead + 1
end
end
local lines = {}
lines[#lines+1] = ' --------------- Coroutine ---------------'
lines[#lines+1] = (' Total: %d'):format(total)
lines[#lines+1] = (' Running: %d'):format(running)
lines[#lines+1] = (' Suspended: %d'):format(suspended)
lines[#lines+1] = (' Normal: %d'):format(normal)
lines[#lines+1] = (' Dead: %d'):format(dead)
return table.concat(lines, '\n')
end
function m.report()
local t = timer.loop(60.0, function ()
local lines = {}
lines[#lines+1] = ''
lines[#lines+1] = '========= Medical Examination Report ========='
lines[#lines+1] = m.reportMemory()
lines[#lines+1] = m.reportTask()
lines[#lines+1] = '=============================================='
log.debug(table.concat(lines, '\n'))
end)
t:onTimer()
end
function m.startTimer()
while true do
thread.sleep(0.001)
timer.update()
end
end
function m.start()
await.setErrorHandle(log.error)
pub.recruitBraves(4)
proto.listen()
pub.listen()
m.report()
m.startTimer()
end
return m
|