private int processTransaction(Machine machine, Transaction transaction, MessageTree tree) { int count = 0; String transactionType = transaction.getType(); if (transactionType.startsWith("Cache.")) { count = processLongCache(machine, transaction, tree, count); } else if (transactionType.equals("SQL")) { count = processLongSql(machine, transaction, tree, count); } List<Message> messageList = transaction.getChildren(); for (Message message : messageList) { if (message instanceof Transaction) { count += processTransaction(machine, (Transaction) message, tree); } } return count; }
protected int encodeTransactionLine( MessageTree tree, Transaction t, ChannelBuffer buf, Locator locator, Ruler ruler) { BufferHelper helper = m_bufferHelper; XmlBuilder b = new XmlBuilder(); int width = 6; int height = 18; int x = 0; int y = locator.getLine() * height + ruler.getOffsetY(); String tid = "t" + locator.getLine(); long t0 = tree.getMessage().getTimestamp(); long t1 = t.getTimestamp(); int rx = ruler.calcX((t1 - t0) * 1000); int rw = ruler.calcWidth(t.getDurationInMicros() * 1000); int[] segments = getTransactionDurationSegments(t); b.branch(locator, x, y, width, height); x += locator.getLevel() * width; if (t.getStatus().equals("0")) { b.tag1("text", "x", x, "y", y - 5, "font-weight", "bold", "stroke-width", "0"); } else { b.tag1("text", "x", x, "y", y - 5, "font-weight", "bold", "stroke-width", "0", "fill", "red"); } b.add(t.getType()).newLine(); b.tag( "set", "attributeName", "fill", "to", "red", "begin", tid + ".mouseover", "end", tid + ".mouseout"); b.tag2("text"); if (segments == null) { String durationInMillis = String.format("%.2f %s", t.getDurationInMicros() / 1000.0, t.getName()); b.tag( "rect", "x", rx + 1, "y", y - 15, "width", rw, "height", height - 2, "fill", "#0066ff", "opacity", "0.5"); b.tagWithText( "text", durationInMillis, "x", rx + 5, "y", y - 3, "font-size", "11", "stroke-width", "0"); } else { int index = 0; for (int segment : segments) { int w = ruler.calcWidth(segment); String durationInMillis = String.format("%.2f %s", segment / 1000.0 / 1000.0, index == 0 ? t.getName() : ""); String color = m_colors[index % m_colors.length]; b.tag( "rect", "x", rx + 1, "y", y - 15, "width", w, "height", height - 2, "fill", color, "opacity", "0.5"); b.tagWithText( "text", durationInMillis, "x", rx + 5, "y", y - 3, "font-size", "11", "stroke-width", "0"); index++; rx += w; } } b.tag( "rect", "id", tid, "x", ruler.getOffsetX() + 1, "y", y - 15, "width", ruler.getWidth(), "height", height, "fill", "#ffffff", "stroke-width", "0", "opacity", "0.01"); return helper.write(buf, b.getResult().toString()); }