webmcp

annotate framework/env/trace/_render_sub_tree.lua @ 302:04b648660f9a

Time triple (cpu/db/total) for trace system
author jbe
date Sun Mar 22 20:06:26 2015 +0100 (2015-03-22)
parents 216cd6ca6bc8
children f97e0584ec7b
rev   line source
jbe@302 1 local function format_time(db_time)
jbe@302 2 return string.format("%.1f ms", real_time * 1000)
jbe@302 3 end
jbe@302 4
jbe@302 5 local function format_triple(real_time, proc_time, db_time)
jbe@302 6 if proc_time and db_time then
jbe@302 7 return string.format(
jbe@302 8 "u=%.1f d=%.1f t=%.1f",
jbe@302 9 1000 * db_time,
jbe@302 10 1000 * proc_time,
jbe@302 11 1000 * real_time
jbe@302 12 )
jbe@299 13 else
jbe@299 14 end
jbe@295 15 end
jbe@295 16
jbe/bsw@0 17 local function open(class)
jbe/bsw@0 18 slot.put('<li class="trace_' .. class .. '">')
jbe/bsw@0 19 end
bsw@115 20 local function open_head(node)
jbe/bsw@0 21 slot.put('<div class="trace_head">')
jbe@299 22 if node.start_real_time and node.stop_real_time then
jbe@299 23 local total_real_time = node.stop_real_time - node.start_real_time
jbe@299 24 local total_proc_time = node.stop_proc_time - node.start_proc_time
jbe@302 25 local total_db_time = node.db_time
jbe@299 26 local child_real_time = 0
jbe@299 27 local child_proc_time = 0
jbe@302 28 local child_db_time = 0
bsw@115 29 for i, child in ipairs(node) do
jbe@299 30 if child.start_real_time then
jbe@299 31 child_real_time = child_real_time + child.stop_real_time - child.start_real_time
jbe@299 32 child_proc_time = child_proc_time + child.stop_proc_time - child.start_proc_time
jbe@302 33 child_db_time = child_db_time + child.db_time
bsw@115 34 end
bsw@115 35 end
jbe@299 36 local real_time = total_real_time - child_real_time
jbe@299 37 local proc_time = total_proc_time - child_proc_time
jbe@302 38 local db_time = total_db_time - child_db_time
jbe@299 39 slot.put(
jbe@299 40 '<div class="time">',
jbe@299 41 '<span class="duration_label">this:</span>',
jbe@299 42 ' ',
jbe@302 43 '<span class="duration">', format_triple(real_time, proc_time, db_time), '</span>',
jbe@299 44 ' | ',
jbe@299 45 '<span class="child_duration_label">children:</span>',
jbe@299 46 ' ',
jbe@302 47 '<span class="child_duration">', format_triple(child_real_time, child_proc_time, db_time), '</span>',
jbe@299 48 ' | ',
jbe@299 49 '<span class="total_duration_label">total:</span>',
jbe@299 50 ' ',
jbe@302 51 '<span class="total_duration">', format_triple(total_real_time, total_proc_time, db_time), '</span>',
jbe@299 52 '</div>'
jbe@299 53 )
bsw@115 54 end
jbe/bsw@0 55 end
jbe/bsw@0 56 local function close_head()
jbe/bsw@0 57 slot.put('</div>')
jbe/bsw@0 58 end
jbe/bsw@0 59 local function close()
jbe/bsw@0 60 slot.put('</li>')
jbe/bsw@0 61 end
jbe/bsw@0 62 function trace._render_sub_tree(node)
jbe/bsw@0 63 local function render_children(tail)
jbe/bsw@0 64 if #node > 0 then
jbe/bsw@0 65 slot.put('<ul class="trace_list">')
jbe/bsw@0 66 for idx, child in ipairs(node) do
jbe/bsw@0 67 trace._render_sub_tree(child)
jbe/bsw@0 68 end
jbe/bsw@0 69 if tail then
jbe/bsw@0 70 slot.put(tail)
jbe/bsw@0 71 end
jbe/bsw@0 72 slot.put("</ul>")
jbe/bsw@0 73 end
jbe/bsw@0 74 end
jbe/bsw@0 75 local function close_with_children()
jbe/bsw@0 76 close_head()
jbe/bsw@0 77 render_children()
jbe/bsw@0 78 close()
jbe/bsw@0 79 end
jbe/bsw@0 80 local node_type = node.type
jbe/bsw@0 81 if node_type == "root" then
jbe/bsw@0 82 render_children()
jbe/bsw@0 83 elseif node_type == "debug" then
jbe/bsw@0 84 open("debug")
jbe/bsw@0 85 slot.put(encode.html(node.message))
jbe/bsw@0 86 close()
poelzi@31 87 elseif node_type == "debug_table" then
poelzi@31 88 open("debug")
poelzi@31 89 slot.put("<table>")
poelzi@31 90 if type(node.message) == "table" then
poelzi@31 91 for k, v in pairs(node.message) do
jbe@45 92 slot.put("<tr><td>", encode.html(tostring(k)), "</td><td>", encode.html(tostring(v)), "</td></tr>")
poelzi@31 93 end
poelzi@31 94 slot.put("</table>")
poelzi@31 95 else
poelzi@31 96 slot.put("debug_table: not of table type")
poelzi@31 97 end
poelzi@31 98 close()
poelzi@29 99 elseif node_type == "traceback" then
poelzi@29 100 open("debug")
poelzi@29 101 slot.put('<pre>')
poelzi@29 102 slot.put(encode.html(node.message))
poelzi@29 103 slot.put('</pre>')
poelzi@29 104 close()
jbe/bsw@0 105 elseif node_type == "request" then
jbe/bsw@0 106 open("request")
bsw@115 107 open_head(node)
jbe/bsw@0 108 slot.put("REQUESTED")
jbe/bsw@0 109 if node.view then
jbe/bsw@0 110 slot.put(" VIEW")
jbe/bsw@0 111 elseif node.action then
jbe/bsw@0 112 slot.put(" ACTION")
jbe/bsw@0 113 end
jbe/bsw@0 114 slot.put(
jbe/bsw@0 115 ": ",
jbe/bsw@0 116 encode.html(node.module),
jbe/bsw@0 117 "/",
jbe/bsw@0 118 encode.html(node.view or node.action)
jbe/bsw@0 119 )
jbe/bsw@0 120 close_with_children()
jbe/bsw@0 121 elseif node_type == "config" then
jbe/bsw@0 122 open("config")
bsw@115 123 open_head(node)
jbe/bsw@0 124 slot.put('Configuration "', encode.html(node.name), '"')
jbe/bsw@0 125 close_with_children()
jbe/bsw@0 126 elseif node_type == "filter" then
jbe/bsw@0 127 open("filter")
bsw@115 128 open_head(node)
jbe/bsw@0 129 slot.put(encode.html(node.path))
jbe/bsw@0 130 close_with_children()
jbe/bsw@0 131 elseif node_type == "view" then
jbe/bsw@0 132 open("view")
bsw@115 133 open_head(node)
jbe/bsw@0 134 slot.put(
jbe/bsw@0 135 "EXECUTE VIEW: ",
jbe/bsw@0 136 encode.html(node.module),
jbe/bsw@0 137 "/",
jbe/bsw@0 138 encode.html(node.view)
jbe/bsw@0 139 )
jbe/bsw@0 140 close_with_children()
jbe/bsw@0 141 elseif node_type == "action" then
jbe/bsw@0 142 if
jbe/bsw@0 143 node.status and (
jbe/bsw@0 144 node.status == "ok" or
jbe/bsw@0 145 string.find(node.status, "^ok_")
jbe/bsw@0 146 )
jbe/bsw@0 147 then
jbe/bsw@0 148 open("action_success")
jbe/bsw@0 149 elseif
jbe/bsw@0 150 node.status and (
jbe/bsw@0 151 node.status == "error" or
jbe/bsw@0 152 string.find(node.status, "^error_")
jbe/bsw@0 153 )
jbe/bsw@0 154 then
jbe/bsw@0 155 open("action_softfail")
jbe/bsw@0 156 else
jbe/bsw@0 157 open("action_neutral")
jbe/bsw@0 158 end
bsw@115 159 open_head(node)
jbe/bsw@0 160 slot.put(
jbe/bsw@0 161 "EXECUTE ACTION: ",
jbe/bsw@0 162 encode.html(node.module),
jbe/bsw@0 163 "/",
jbe/bsw@0 164 encode.html(node.action)
jbe/bsw@0 165 )
jbe/bsw@0 166 close_head()
jbe/bsw@0 167 if node.status == "softfail" then
jbe/bsw@0 168 render_children(
jbe/bsw@0 169 '<li class="trace_action_status">Status code: "' ..
jbe/bsw@0 170 encode.html(node.failure_code) ..
jbe/bsw@0 171 '"</li>'
jbe/bsw@0 172 )
jbe/bsw@0 173 else
jbe/bsw@0 174 render_children()
jbe/bsw@0 175 end
jbe/bsw@0 176 close()
jbe/bsw@0 177 elseif node_type == "redirect" then
jbe/bsw@0 178 open("redirect")
bsw@115 179 open_head(node)
jbe/bsw@0 180 slot.put("303 REDIRECT TO VIEW: ", encode.html(node.module), "/", encode.html(node.view))
jbe/bsw@0 181 close_with_children()
jbe/bsw@0 182 elseif node_type == "forward" then
jbe/bsw@0 183 open("forward")
bsw@115 184 open_head(node)
jbe/bsw@0 185 slot.put("INTERNAL FORWARD TO VIEW: ", encode.html(node.module), "/", encode.html(node.view))
jbe/bsw@0 186 close_with_children()
jbe@223 187 --[[
jbe/bsw@0 188 elseif node_type == "exectime" then
jbe/bsw@0 189 open("exectime")
bsw@115 190 open_head(node)
jbe/bsw@0 191 slot.put(
jbe/bsw@0 192 "Finished after " ..
jbe@65 193 string.format("%.1f", extos.monotonic_hires_time() * 1000) ..
jbe/bsw@0 194 ' ms (' ..
jbe/bsw@0 195 string.format("%.1f", os.clock() * 1000) ..
jbe/bsw@0 196 ' ms CPU)'
jbe/bsw@0 197 )
jbe/bsw@0 198 close_with_children()
jbe@223 199 --]]
jbe/bsw@0 200 elseif node_type == "sql" then
jbe/bsw@0 201 open("sql")
jbe/bsw@0 202 if node.error_position then
jbe/bsw@0 203 -- error position starts counting with 1
jbe/bsw@0 204 local part1 = string.sub(node.command, 1, node.error_position - 1)
jbe/bsw@0 205 local part2 = string.sub(node.command, node.error_position)
jbe/bsw@0 206 slot.put(encode.html(part1))
jbe/bsw@0 207 slot.put('<span class="trace_error_position">&rArr;</span>')
jbe/bsw@0 208 slot.put(encode.html(part2))
jbe/bsw@0 209 else
jbe/bsw@0 210 slot.put(encode.html(node.command))
jbe/bsw@0 211 end
jbe@296 212 slot.put(" (execution time: ", format_time(node.execution_time), ")")
jbe/bsw@0 213 close();
jbe/bsw@0 214 elseif node_type == "error" then
jbe/bsw@0 215 open("error")
bsw@115 216 open_head(node)
jbe/bsw@0 217 slot.put("UNEXPECTED ERROR")
jbe/bsw@0 218 close_head()
jbe/bsw@0 219 close()
jbe/bsw@0 220 end
jbe/bsw@0 221 end

Impressum / About Us