| 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@31 | 38   elseif node_type == "debug_table" then | 
| poelzi@31 | 39     open("debug") | 
| poelzi@31 | 40     slot.put("<table>") | 
| poelzi@31 | 41     if type(node.message) == "table" then | 
| poelzi@31 | 42       for k, v in pairs(node.message) do | 
| jbe@45 | 43         slot.put("<tr><td>", encode.html(tostring(k)), "</td><td>", encode.html(tostring(v)), "</td></tr>") | 
| poelzi@31 | 44       end | 
| poelzi@31 | 45       slot.put("</table>") | 
| poelzi@31 | 46     else | 
| poelzi@31 | 47       slot.put("debug_table: not of table type") | 
| poelzi@31 | 48     end | 
| poelzi@31 | 49     close() | 
| poelzi@29 | 50   elseif node_type == "traceback" then | 
| poelzi@29 | 51     open("debug") | 
| poelzi@29 | 52     slot.put('<pre>') | 
| poelzi@29 | 53     slot.put(encode.html(node.message)) | 
| poelzi@29 | 54     slot.put('</pre>') | 
| poelzi@29 | 55     close() | 
| jbe/bsw@0 | 56   elseif node_type == "request" then | 
| jbe/bsw@0 | 57     open("request") | 
| jbe/bsw@0 | 58     open_head() | 
| jbe/bsw@0 | 59     slot.put("REQUESTED") | 
| jbe/bsw@0 | 60     if node.view then | 
| jbe/bsw@0 | 61       slot.put(" VIEW") | 
| jbe/bsw@0 | 62     elseif node.action then | 
| jbe/bsw@0 | 63       slot.put(" ACTION") | 
| jbe/bsw@0 | 64     end | 
| jbe/bsw@0 | 65     slot.put( | 
| jbe/bsw@0 | 66       ": ", | 
| jbe/bsw@0 | 67       encode.html(node.module), | 
| jbe/bsw@0 | 68       "/", | 
| jbe/bsw@0 | 69       encode.html(node.view or node.action) | 
| jbe/bsw@0 | 70     ) | 
| jbe/bsw@0 | 71     close_with_children() | 
| jbe/bsw@0 | 72   elseif node_type == "config" then | 
| jbe/bsw@0 | 73     open("config") | 
| jbe/bsw@0 | 74     open_head() | 
| jbe/bsw@0 | 75     slot.put('Configuration "', encode.html(node.name), '"') | 
| jbe/bsw@0 | 76     close_with_children() | 
| jbe/bsw@0 | 77   elseif node_type == "filter" then | 
| jbe/bsw@0 | 78     open("filter") | 
| jbe/bsw@0 | 79     open_head() | 
| jbe/bsw@0 | 80     slot.put(encode.html(node.path)) | 
| jbe/bsw@0 | 81     close_with_children() | 
| jbe/bsw@0 | 82   elseif node_type == "view" then | 
| jbe/bsw@0 | 83     open("view") | 
| jbe/bsw@0 | 84     open_head() | 
| jbe/bsw@0 | 85     slot.put( | 
| jbe/bsw@0 | 86       "EXECUTE VIEW: ", | 
| jbe/bsw@0 | 87       encode.html(node.module), | 
| jbe/bsw@0 | 88       "/", | 
| jbe/bsw@0 | 89       encode.html(node.view) | 
| jbe/bsw@0 | 90     ) | 
| jbe/bsw@0 | 91     close_with_children() | 
| jbe/bsw@0 | 92   elseif node_type == "action" then | 
| jbe/bsw@0 | 93     if | 
| jbe/bsw@0 | 94       node.status and ( | 
| jbe/bsw@0 | 95         node.status == "ok" or | 
| jbe/bsw@0 | 96         string.find(node.status, "^ok_") | 
| jbe/bsw@0 | 97       ) | 
| jbe/bsw@0 | 98     then | 
| jbe/bsw@0 | 99       open("action_success") | 
| jbe/bsw@0 | 100     elseif | 
| jbe/bsw@0 | 101       node.status and ( | 
| jbe/bsw@0 | 102         node.status == "error" or | 
| jbe/bsw@0 | 103         string.find(node.status, "^error_") | 
| jbe/bsw@0 | 104       ) | 
| jbe/bsw@0 | 105     then | 
| jbe/bsw@0 | 106       open("action_softfail") | 
| jbe/bsw@0 | 107     else | 
| jbe/bsw@0 | 108       open("action_neutral") | 
| jbe/bsw@0 | 109     end | 
| jbe/bsw@0 | 110     open_head() | 
| jbe/bsw@0 | 111     slot.put( | 
| jbe/bsw@0 | 112       "EXECUTE ACTION: ", | 
| jbe/bsw@0 | 113       encode.html(node.module), | 
| jbe/bsw@0 | 114       "/", | 
| jbe/bsw@0 | 115       encode.html(node.action) | 
| jbe/bsw@0 | 116     ) | 
| jbe/bsw@0 | 117     close_head() | 
| jbe/bsw@0 | 118     if node.status == "softfail" then | 
| jbe/bsw@0 | 119       render_children( | 
| jbe/bsw@0 | 120         '<li class="trace_action_status">Status code: "' .. | 
| jbe/bsw@0 | 121         encode.html(node.failure_code) .. | 
| jbe/bsw@0 | 122         '"</li>' | 
| jbe/bsw@0 | 123       ) | 
| jbe/bsw@0 | 124     else | 
| jbe/bsw@0 | 125       render_children() | 
| jbe/bsw@0 | 126     end | 
| jbe/bsw@0 | 127     close() | 
| jbe/bsw@0 | 128   elseif node_type == "redirect" then | 
| jbe/bsw@0 | 129     open("redirect") | 
| jbe/bsw@0 | 130     open_head() | 
| jbe/bsw@0 | 131     slot.put("303 REDIRECT TO VIEW: ", encode.html(node.module), "/", encode.html(node.view)) | 
| jbe/bsw@0 | 132     close_with_children() | 
| jbe/bsw@0 | 133   elseif node_type == "forward" then | 
| jbe/bsw@0 | 134     open("forward") | 
| jbe/bsw@0 | 135     open_head() | 
| jbe/bsw@0 | 136     slot.put("INTERNAL FORWARD TO VIEW: ", encode.html(node.module), "/", encode.html(node.view)) | 
| jbe/bsw@0 | 137     close_with_children() | 
| jbe/bsw@0 | 138   elseif node_type == "exectime" then | 
| jbe/bsw@0 | 139     open("exectime") | 
| jbe/bsw@0 | 140     open_head() | 
| jbe/bsw@0 | 141     slot.put( | 
| jbe/bsw@0 | 142       "Finished after " .. | 
| jbe@65 | 143       string.format("%.1f", extos.monotonic_hires_time() * 1000) .. | 
| jbe/bsw@0 | 144       ' ms (' .. | 
| jbe/bsw@0 | 145       string.format("%.1f", os.clock() * 1000) .. | 
| jbe/bsw@0 | 146       ' ms CPU)' | 
| jbe/bsw@0 | 147     ) | 
| jbe/bsw@0 | 148     close_with_children() | 
| jbe/bsw@0 | 149   elseif node_type == "sql" then | 
| jbe/bsw@0 | 150     open("sql") | 
| jbe/bsw@0 | 151     if node.error_position then | 
| jbe/bsw@0 | 152       -- error position starts counting with 1 | 
| jbe/bsw@0 | 153       local part1 = string.sub(node.command, 1, node.error_position - 1) | 
| jbe/bsw@0 | 154       --local part2 = string.sub(node.command, node.error_position - 1, node.error_position + 1) | 
| jbe/bsw@0 | 155       local part2 = string.sub(node.command, node.error_position) | 
| jbe/bsw@0 | 156       slot.put(encode.html(part1)) | 
| jbe/bsw@0 | 157       slot.put('<span class="trace_error_position">⇒</span>') | 
| jbe/bsw@0 | 158       slot.put(encode.html(part2)) | 
| jbe/bsw@0 | 159       --slot.put('</span>') | 
| jbe/bsw@0 | 160       --slot.put(encode.html(part3)) | 
| jbe/bsw@0 | 161     else | 
| jbe/bsw@0 | 162       slot.put(encode.html(node.command)) | 
| jbe/bsw@0 | 163     end | 
| jbe/bsw@0 | 164     close(); | 
| jbe/bsw@0 | 165   elseif node_type == "error" then | 
| jbe/bsw@0 | 166     open("error") | 
| jbe/bsw@0 | 167     open_head() | 
| jbe/bsw@0 | 168     slot.put("UNEXPECTED ERROR") | 
| jbe/bsw@0 | 169     close_head() | 
| jbe/bsw@0 | 170     close() | 
| jbe/bsw@0 | 171   end | 
| jbe/bsw@0 | 172 end |