func keepAlive(ws *websocket.Conn, quit chan bool) { c := time.Tick(5 * time.Second) b := []byte{} for { select { case <-c: ws.Write(b) case <-quit: return } } }
func ServiceLogs(ws *websocket.Conn) *httperr.Error { service := mux.Vars(ws.Request())["service"] s, err := models.GetService(service) if err != nil { return httperr.Server(err) } logs := make(chan []byte) done := make(chan bool) s.SubscribeLogs(logs, done) for data := range logs { ws.Write(data) } return nil }
func scanLines(r io.Reader, ws *websocket.Conn) { scanner := bufio.NewScanner(r) for scanner.Scan() { parts := strings.SplitN(scanner.Text(), "|", 2) if len(parts) < 2 { ws.Write([]byte(parts[0] + "\n")) continue } switch parts[0] { case "manifest": case "error": ws.Write([]byte(parts[1] + "\n")) default: ws.Write([]byte(parts[1] + "\n")) } } }