webmcp
annotate framework/env/trace/_render_sub_tree.lua @ 29:0b7e87f2dc91
add trace.debug_traceback() function
It inserts a traceback into the trace debug log. Usefull on development of unknown code.
It inserts a traceback into the trace debug log. Usefull on development of unknown code.
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Mon Sep 20 15:29:23 2010 +0200 (2010-09-20) |
parents | 9fdfb27f8e67 |
children | 1cd9e69b85cb |
rev | line source |
---|---|
jbe/bsw@0 | 1 local function open(class) |
jbe/bsw@0 | 2 slot.put('<li class="trace_' .. class .. '">') |
jbe/bsw@0 | 3 end |
jbe/bsw@0 | 4 local function open_head() |
jbe/bsw@0 | 5 slot.put('<div class="trace_head">') |
jbe/bsw@0 | 6 end |
jbe/bsw@0 | 7 local function close_head() |
jbe/bsw@0 | 8 slot.put('</div>') |
jbe/bsw@0 | 9 end |
jbe/bsw@0 | 10 local function close() |
jbe/bsw@0 | 11 slot.put('</li>') |
jbe/bsw@0 | 12 end |
jbe/bsw@0 | 13 function trace._render_sub_tree(node) |
jbe/bsw@0 | 14 local function render_children(tail) |
jbe/bsw@0 | 15 if #node > 0 then |
jbe/bsw@0 | 16 slot.put('<ul class="trace_list">') |
jbe/bsw@0 | 17 for idx, child in ipairs(node) do |
jbe/bsw@0 | 18 trace._render_sub_tree(child) |
jbe/bsw@0 | 19 end |
jbe/bsw@0 | 20 if tail then |
jbe/bsw@0 | 21 slot.put(tail) |
jbe/bsw@0 | 22 end |
jbe/bsw@0 | 23 slot.put("</ul>") |
jbe/bsw@0 | 24 end |
jbe/bsw@0 | 25 end |
jbe/bsw@0 | 26 local function close_with_children() |
jbe/bsw@0 | 27 close_head() |
jbe/bsw@0 | 28 render_children() |
jbe/bsw@0 | 29 close() |
jbe/bsw@0 | 30 end |
jbe/bsw@0 | 31 local node_type = node.type |
jbe/bsw@0 | 32 if node_type == "root" then |
jbe/bsw@0 | 33 render_children() |
jbe/bsw@0 | 34 elseif node_type == "debug" then |
jbe/bsw@0 | 35 open("debug") |
jbe/bsw@0 | 36 slot.put(encode.html(node.message)) |
jbe/bsw@0 | 37 close() |
poelzi@29 | 38 elseif node_type == "traceback" then |
poelzi@29 | 39 open("debug") |
poelzi@29 | 40 slot.put('<pre>') |
poelzi@29 | 41 slot.put(encode.html(node.message)) |
poelzi@29 | 42 slot.put('</pre>') |
poelzi@29 | 43 close() |
jbe/bsw@0 | 44 elseif node_type == "request" then |
jbe/bsw@0 | 45 open("request") |
jbe/bsw@0 | 46 open_head() |
jbe/bsw@0 | 47 slot.put("REQUESTED") |
jbe/bsw@0 | 48 if node.view then |
jbe/bsw@0 | 49 slot.put(" VIEW") |
jbe/bsw@0 | 50 elseif node.action then |
jbe/bsw@0 | 51 slot.put(" ACTION") |
jbe/bsw@0 | 52 end |
jbe/bsw@0 | 53 slot.put( |
jbe/bsw@0 | 54 ": ", |
jbe/bsw@0 | 55 encode.html(node.module), |
jbe/bsw@0 | 56 "/", |
jbe/bsw@0 | 57 encode.html(node.view or node.action) |
jbe/bsw@0 | 58 ) |
jbe/bsw@0 | 59 close_with_children() |
jbe/bsw@0 | 60 elseif node_type == "config" then |
jbe/bsw@0 | 61 open("config") |
jbe/bsw@0 | 62 open_head() |
jbe/bsw@0 | 63 slot.put('Configuration "', encode.html(node.name), '"') |
jbe/bsw@0 | 64 close_with_children() |
jbe/bsw@0 | 65 elseif node_type == "filter" then |
jbe/bsw@0 | 66 open("filter") |
jbe/bsw@0 | 67 open_head() |
jbe/bsw@0 | 68 slot.put(encode.html(node.path)) |
jbe/bsw@0 | 69 close_with_children() |
jbe/bsw@0 | 70 elseif node_type == "view" then |
jbe/bsw@0 | 71 open("view") |
jbe/bsw@0 | 72 open_head() |
jbe/bsw@0 | 73 slot.put( |
jbe/bsw@0 | 74 "EXECUTE VIEW: ", |
jbe/bsw@0 | 75 encode.html(node.module), |
jbe/bsw@0 | 76 "/", |
jbe/bsw@0 | 77 encode.html(node.view) |
jbe/bsw@0 | 78 ) |
jbe/bsw@0 | 79 close_with_children() |
jbe/bsw@0 | 80 elseif node_type == "action" then |
jbe/bsw@0 | 81 if |
jbe/bsw@0 | 82 node.status and ( |
jbe/bsw@0 | 83 node.status == "ok" or |
jbe/bsw@0 | 84 string.find(node.status, "^ok_") |
jbe/bsw@0 | 85 ) |
jbe/bsw@0 | 86 then |
jbe/bsw@0 | 87 open("action_success") |
jbe/bsw@0 | 88 elseif |
jbe/bsw@0 | 89 node.status and ( |
jbe/bsw@0 | 90 node.status == "error" or |
jbe/bsw@0 | 91 string.find(node.status, "^error_") |
jbe/bsw@0 | 92 ) |
jbe/bsw@0 | 93 then |
jbe/bsw@0 | 94 open("action_softfail") |
jbe/bsw@0 | 95 else |
jbe/bsw@0 | 96 open("action_neutral") |
jbe/bsw@0 | 97 end |
jbe/bsw@0 | 98 open_head() |
jbe/bsw@0 | 99 slot.put( |
jbe/bsw@0 | 100 "EXECUTE ACTION: ", |
jbe/bsw@0 | 101 encode.html(node.module), |
jbe/bsw@0 | 102 "/", |
jbe/bsw@0 | 103 encode.html(node.action) |
jbe/bsw@0 | 104 ) |
jbe/bsw@0 | 105 close_head() |
jbe/bsw@0 | 106 if node.status == "softfail" then |
jbe/bsw@0 | 107 render_children( |
jbe/bsw@0 | 108 '<li class="trace_action_status">Status code: "' .. |
jbe/bsw@0 | 109 encode.html(node.failure_code) .. |
jbe/bsw@0 | 110 '"</li>' |
jbe/bsw@0 | 111 ) |
jbe/bsw@0 | 112 else |
jbe/bsw@0 | 113 render_children() |
jbe/bsw@0 | 114 end |
jbe/bsw@0 | 115 close() |
jbe/bsw@0 | 116 elseif node_type == "redirect" then |
jbe/bsw@0 | 117 open("redirect") |
jbe/bsw@0 | 118 open_head() |
jbe/bsw@0 | 119 slot.put("303 REDIRECT TO VIEW: ", encode.html(node.module), "/", encode.html(node.view)) |
jbe/bsw@0 | 120 close_with_children() |
jbe/bsw@0 | 121 elseif node_type == "forward" then |
jbe/bsw@0 | 122 open("forward") |
jbe/bsw@0 | 123 open_head() |
jbe/bsw@0 | 124 slot.put("INTERNAL FORWARD TO VIEW: ", encode.html(node.module), "/", encode.html(node.view)) |
jbe/bsw@0 | 125 close_with_children() |
jbe/bsw@0 | 126 elseif node_type == "exectime" then |
jbe/bsw@0 | 127 open("exectime") |
jbe/bsw@0 | 128 open_head() |
jbe/bsw@0 | 129 slot.put( |
jbe/bsw@0 | 130 "Finished after " .. |
jbe/bsw@0 | 131 string.format("%.1f", os.monotonic_hires_time() * 1000) .. |
jbe/bsw@0 | 132 ' ms (' .. |
jbe/bsw@0 | 133 string.format("%.1f", os.clock() * 1000) .. |
jbe/bsw@0 | 134 ' ms CPU)' |
jbe/bsw@0 | 135 ) |
jbe/bsw@0 | 136 close_with_children() |
jbe/bsw@0 | 137 elseif node_type == "sql" then |
jbe/bsw@0 | 138 open("sql") |
jbe/bsw@0 | 139 if node.error_position then |
jbe/bsw@0 | 140 -- error position starts counting with 1 |
jbe/bsw@0 | 141 local part1 = string.sub(node.command, 1, node.error_position - 1) |
jbe/bsw@0 | 142 --local part2 = string.sub(node.command, node.error_position - 1, node.error_position + 1) |
jbe/bsw@0 | 143 local part2 = string.sub(node.command, node.error_position) |
jbe/bsw@0 | 144 slot.put(encode.html(part1)) |
jbe/bsw@0 | 145 slot.put('<span class="trace_error_position">⇒</span>') |
jbe/bsw@0 | 146 slot.put(encode.html(part2)) |
jbe/bsw@0 | 147 --slot.put('</span>') |
jbe/bsw@0 | 148 --slot.put(encode.html(part3)) |
jbe/bsw@0 | 149 else |
jbe/bsw@0 | 150 slot.put(encode.html(node.command)) |
jbe/bsw@0 | 151 end |
jbe/bsw@0 | 152 close(); |
jbe/bsw@0 | 153 elseif node_type == "error" then |
jbe/bsw@0 | 154 open("error") |
jbe/bsw@0 | 155 open_head() |
jbe/bsw@0 | 156 slot.put("UNEXPECTED ERROR") |
jbe/bsw@0 | 157 close_head() |
jbe/bsw@0 | 158 close() |
jbe/bsw@0 | 159 end |
jbe/bsw@0 | 160 end |