| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| /* |
| * Console is a Pipe Viewer that displays a text stream as unformatted text |
| * @tutorial echo "Hello World" | p2b users/jane@google.com/chrome/p2b/[name]/console/panic |
| * @fileoverview |
| */ |
| |
| import { View } from 'view'; |
| import { PipeViewer } from 'pipe-viewer'; |
| |
| class ConsolePanicPipeViewer extends PipeViewer { |
| get name() { |
| return 'console-panic'; |
| } |
| |
| play(stream) { |
| var consoleView = document.createElement('p2b-plugin-console-panic'); |
| |
| // Internal stream variables |
| var panicked = false; |
| var lastPiece = ""; |
| |
| // read data as UTF8 |
| stream.setEncoding('utf8'); |
| stream.on('data', (buf) => { |
| // Always split the incoming text by newline. |
| var pieces = buf.toString().split("\n"); |
| for (var i = 0; i < pieces.length; i++) { |
| var piece = pieces[i]; |
| |
| // flags for the status of the current line |
| var goroutine = (piece.search(/goroutine \d+ \[\D+\]:/) == 0); |
| var startOfLine = (i != 0 || lastPiece == ""); |
| |
| if (goroutine && startOfLine) { |
| // We spotted a goroutine at the start of a line, so create a new container. |
| consoleView.startNewContainer(panicked, piece); |
| |
| // Stop scrolling if we've already panicked. |
| // This will focus the element on the first crashed goroutine. |
| if (panicked) { |
| consoleView.scrollAuto(); |
| consoleView.scrollOff(); |
| } |
| panicked = true; |
| |
| // We also need a new line for our new container. |
| consoleView.startNewLine(); |
| } else if (i > 0) { |
| // These lines followed a \n in the buffer and thus should go on a new line. |
| if (lastPiece == "") { |
| // The previous line was empty; empty div's have 0 height. |
| // We need to add a <br /> to print the linebreak properly. |
| consoleView.addLineBreak(); |
| } |
| consoleView.startNewLine(); |
| } |
| |
| // Add the relevant text. |
| consoleView.addText(piece); |
| lastPiece = piece; |
| } |
| }); |
| |
| return new View(consoleView); |
| } |
| } |
| |
| export default ConsolePanicPipeViewer; |