Skip to content

Commit

Permalink
getting there
Browse files Browse the repository at this point in the history
Signed-off-by: Justin Chadwell <me@jedevc.com>
  • Loading branch information
jedevc committed May 14, 2024
1 parent f5788c2 commit 70c95c5
Showing 1 changed file with 58 additions and 203 deletions.
261 changes: 58 additions & 203 deletions dagql/idtui/render_plain.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,10 @@ func (r *plainRenderer) RenderCloudConnected(fe *Frontend, cloudURL string) {

func (r *plainRenderer) Render(fe *Frontend) error {
out := NewOutput(os.Stderr, termenv.WithProfile(fe.profile))
if _, err := r.renderProgress(fe, out); err != nil {
if err := r.renderProgress(fe, out); err != nil {
return err
}
// XXX: re-enable messages
// if _, err := r.renderMessages(fe); err != nil {
// return err
// }
Expand All @@ -67,37 +68,22 @@ func (r *plainRenderer) Render(fe *Frontend) error {
func (r *plainRenderer) RenderFinal(fe *Frontend) error {
out := NewOutput(os.Stderr, termenv.WithProfile(fe.profile))
r.renderProgress(fe, out)
// out := NewOutput(os.Stderr, termenv.WithProfile(fe.profile))

// if fe.messagesBuf.Len() > 0 {
// fmt.Fprintln(out, fe.messagesBuf.String())
// }

// if fe.Plain || fe.Debug || fe.Verbosity > 0 || fe.err != nil {
// if renderedAny, err := r.renderProgress(fe, out); err != nil {
// return err
// } else if renderedAny {
// fmt.Fprintln(out)
// }
// }

// return nil

return nil
}

func (r *plainRenderer) renderProgress(fe *Frontend, out *termenv.Output) (bool, error) {
func (r *plainRenderer) renderProgress(fe *Frontend, out *termenv.Output) error {
if fe.logsView == nil {
return false, nil
return nil
}
// XXX: this high level is suuuuper confusing and not great
// - logs and errors in different places can result in mismatches
r.renderFinishRows(fe, out, fe.logsView.Body)
r.renderStartRows(fe, out, fe.logsView.Body)
r.renderFinishRows(fe, out, fe.logsView.Body)
return true, nil
return nil
}

func (r *plainRenderer) renderFinishRows(fe *Frontend, out *termenv.Output, rows []*TraceRow) (bool, error) {
var renderedAny bool
func (r *plainRenderer) renderFinishRows(fe *Frontend, out *termenv.Output, rows []*TraceRow) error {
for i := range rows {
row := rows[len(rows)-1-i]

Expand All @@ -110,23 +96,20 @@ func (r *plainRenderer) renderFinishRows(fe *Frontend, out *termenv.Output, rows

if fe.Debug || r.shouldShow(fe, row) {
if !row.Span.Encapsulate || row.Span.Status().Code == codes.Error || fe.Verbosity >= 2 {
if _, err := r.renderFinishRows(fe, out, row.Children); err != nil {
return false, err
if err := r.renderFinishRows(fe, out, row.Children); err != nil {
return err
}
}

if !row.Span.Passthrough {
r.renderRowEnd(fe, out, state)
}

renderedAny = true
}
}
return renderedAny, nil
return nil
}

func (r *plainRenderer) renderStartRows(fe *Frontend, out *termenv.Output, rows []*TraceRow) (bool, error) {
var renderedAny bool
func (r *plainRenderer) renderStartRows(fe *Frontend, out *termenv.Output, rows []*TraceRow) error {
for _, row := range rows {
spanID := row.Span.SpanContext().SpanID()
state, ok := r.spans[spanID]
Expand All @@ -143,15 +126,13 @@ func (r *plainRenderer) renderStartRows(fe *Frontend, out *termenv.Output, rows
}

if !row.Span.Encapsulate || row.Span.Status().Code == codes.Error || fe.Verbosity >= 2 {
if _, err := r.renderStartRows(fe, out, row.Children); err != nil {
return false, err
if err := r.renderStartRows(fe, out, row.Children); err != nil {
return err
}
}

renderedAny = true
}
}
return renderedAny, nil
return nil
}

func (r *plainRenderer) renderRowStart(fe *Frontend, out *termenv.Output, state *spanState) {
Expand All @@ -174,13 +155,43 @@ func (r *plainRenderer) renderRowStart(fe *Frontend, out *termenv.Output, state
}

func (r *plainRenderer) renderRowEnd(fe *Frontend, out *termenv.Output, state *spanState) {
span := state.row.Span
if state.started && !state.row.IsRunning && !state.finished {
state.finished = true

depth := r.renderContext(fe, out, state)

state.finished = true
showError := func() {
if span.Status().Code == codes.Error && span.Status().Description != "" {
// print error description above it
pipe := out.String(ui.VertBoldBar).Foreground(termenv.ANSIYellow)
fmt.Fprintln(out,
strings.Repeat(" ", depth)+pipe.String(),
out.String(span.Status().Description).Foreground(termenv.ANSIYellow).String(),
)
}
}
if r.lastVertex == span.SpanContext().SpanID() {
showError()
showError = func() {}
}

r.renderStep(fe, out, state, depth)

fmt.Fprintln(out, out.String(" DONE").Foreground(termenv.ANSIGreen))
msg := "DONE"
msgColor := termenv.ANSIGreen
duration := span.EndTime().Sub(span.StartTime())
if span.Status().Code == codes.Error && span.Status().Description != "" {
msg = "ERROR"
msgColor = termenv.ANSIYellow
}
fmt.Fprintln(out,
"",
out.String(msg).Foreground(msgColor),
out.String(fmt.Sprintf("[%.1fs]", duration.Seconds())).Foreground(termenv.ANSIBrightBlack),
)

showError()
}
}

Expand Down Expand Up @@ -233,97 +244,29 @@ func (r *plainRenderer) renderContext(fe *Frontend, out *termenv.Output, state *
}

func (r *plainRenderer) renderStep(fe *Frontend, out *termenv.Output, state *spanState, depth int) {
fmt.Fprint(out, strings.Repeat(" ", depth))

span := state.row.Span
if span.Call != nil {
r.renderCall(fe, out, state, depth)
} else {
r.renderVertex(fe, out, state, depth)
}
if span.Status().Code == codes.Error && span.Status().Description != "" {
// indent(out, depth)
// print error description above it
fmt.Fprintln(out)
fmt.Fprintf(out,
out.String("! %s\n").Foreground(termenv.ANSIYellow).String(),
span.Status().Description,
)
}

r.lastVertex = span.SpanContext().SpanID()
}

func (r *plainRenderer) renderCall(fe *Frontend, out *termenv.Output, state *spanState, depth int) {
span := state.row.Span

// refresh := r.lastcall != state.idx
// if refresh {
// r.lastCall = state.idx
// r.lastVertex = 0
// }

// if refresh {
// fmt.Fprintln(out)
// }

fmt.Fprint(out, strings.Repeat(" ", depth))

p := prettyRenderer{}
p.renderCall(fe, out, nil, span.Call, depth, true)
}

func (r *plainRenderer) renderVertex(fe *Frontend, out *termenv.Output, state *spanState, depth int) {
span := state.row.Span

// refresh := r.lastVertex != state.idx
// if refresh {
// r.lastVertex = state.idx
// }
// if parent == nil {
// r.lastCall = 0
// }

// prefix := ""
// if parent != nil {
// prefix += "> "
// if logs, ok := fe.db.Logs[state.row.Span.SpanContext().SpanID()]; ok {
// pipe := out.String(strings.Repeat(" ", len(prefix)) + ui.VertBoldBar + " ").Foreground(termenv.ANSIBrightBlack)
// logs.SetPrefix(pipe.String())
// logs.SetHeight(logs.UsedHeight())
// }
// }
// if refresh {
// // fmt.Fprintln(out)
// fmt.Fprint(out, out.String(prefix).Foreground(termenv.ANSIBrightMagenta))
// } else {
// fmt.Fprint(out, out.String(strings.Repeat(" ", len(prefix))).Foreground(termenv.ANSIBrightMagenta))
// }

fmt.Fprint(out, strings.Repeat(" ", depth))
fmt.Fprint(out, span.Name())
}

// func (r *plainRenderer) renderStep(fe *Frontend, out *termenv.Output, span *Span, depth int) error {
// id := span.Call
// if id != nil {
// if err := r.renderCall(fe, out, span, id, depth, false); err != nil {
// return err
// }
// } else if span != nil {
// if err := r.renderVertex(fe, out, span, depth); err != nil {
// return err
// }
// }
// if span.Status().Code == codes.Error && span.Status().Description != "" {
// indent(out, depth)
// // print error description above it
// fmt.Fprintf(out,
// out.String("! %s\n").Foreground(termenv.ANSIYellow).String(),
// span.Status().Description,
// )
// }
// return nil
// }

func (r *plainRenderer) hasLogs(fe *Frontend, out *termenv.Output, state *spanState, depth int) bool {
if logs, ok := fe.db.Logs[state.row.Span.SpanContext().SpanID()]; ok {
pipe := out.String(ui.VertBoldBar).Foreground(termenv.ANSIBrightBlack)
Expand All @@ -338,7 +281,6 @@ func (r *plainRenderer) hasLogs(fe *Frontend, out *termenv.Output, state *spanSt
}

func (r *plainRenderer) renderLogs(fe *Frontend, out *termenv.Output, state *spanState, depth int) {
// XXX:
if logs, ok := fe.db.Logs[state.row.Span.SpanContext().SpanID()]; ok {
pipe := out.String(ui.VertBoldBar).Foreground(termenv.ANSIBrightBlack)
logs.SetPrefix(strings.Repeat(" ", depth) + pipe.String() + " ")
Expand All @@ -350,93 +292,17 @@ func (r *plainRenderer) renderLogs(fe *Frontend, out *termenv.Output, state *spa
}
}

// func (r *plainRenderer) renderCall(fe *Frontend, out *termenv.Output, span *Span, id *callpbv1.Call, depth int, inline bool) error {
// if !inline {
// indent(out, depth)
// }

// if span != nil {
// r.renderStatus(fe, out, span)
// }

// if id.ReceiverDigest != "" {
// if err := r.renderIDBase(out, fe.db.MustCall(id.ReceiverDigest)); err != nil {
// return err
// }
// fmt.Fprint(out, ".")
// }

// fmt.Fprint(out, out.String(id.Field).Bold())

// if len(id.Args) > 0 {
// fmt.Fprint(out, "(")
// var needIndent bool
// for _, arg := range id.Args {
// if arg.GetValue().GetCallDigest() != "" {
// needIndent = true
// break
// }
// }
// if needIndent {
// fmt.Fprintln(out)
// depth++
// depth++
// for _, arg := range id.Args {
// indent(out, depth)
// fmt.Fprintf(out, out.String("%s:").Foreground(kwColor).String(), arg.GetName())
// val := arg.GetValue()
// fmt.Fprint(out, " ")
// if argDig := val.GetCallDigest(); argDig != "" {
// argCall := fe.db.Simplify(fe.db.MustCall(argDig))
// span := fe.db.MostInterestingSpan(argDig)
// if err := r.renderCall(fe, out, span, argCall, depth-1, true); err != nil {
// return err
// }
// } else {
// r.renderLiteral(fe, out, arg.GetValue())
// fmt.Fprintln(out)
// }
// }
// depth--
// indent(out, depth)
// depth-- //nolint:ineffassign
// } else {
// for i, arg := range id.Args {
// if i > 0 {
// fmt.Fprint(out, ", ")
// }
// fmt.Fprintf(out, out.String("%s:").Foreground(kwColor).String()+" ", arg.GetName())
// r.renderLiteral(fe, out, arg.GetValue())
// }
// }
// fmt.Fprint(out, ")")
// }

// typeStr := out.String(": " + id.Type.ToAST().String()).Faint()
// fmt.Fprint(out, typeStr)

// if span != nil {
// r.renderDuration(fe, out, span)
// }

// fmt.Fprintln(out)

// return nil
// }

// func (r *plainRenderer) renderVertex(fe *Frontend, out *termenv.Output, span *Span, depth int) error {
// indent(out, depth)
// r.renderStatus(fe, out, span)
// fmt.Fprint(out, span.Name())
// // TODO: when a span has child spans that have progress, do 2-d progress
// // r.renderVertexTasks(fe, out, span, depth)
// r.renderDuration(fe, out, span)
// fmt.Fprintln(out)
// return nil
// }

func (r *plainRenderer) shouldShow(fe *Frontend, row *TraceRow) bool {
span := row.Span

// FIXME: these are super noisy (especially in plain mode)
if span.Name() == "remotes.docker.resolver.HTTPRequest" {
return false
}
if span.Name() == "HTTP GET" || span.Name() == "HTTP HEAD" {
return false
}

if span.Err() != nil {
// show errors always
return true
Expand All @@ -450,16 +316,5 @@ func (r *plainRenderer) shouldShow(fe *Frontend, row *TraceRow) bool {
return false
}

// FIXME: these are super noisy (especially in plain mode)
if span.Name() == "remotes.docker.resolver.HTTPRequest" {
return false
}
if span.Name() == "HTTP GET" || span.Name() == "HTTP HEAD" {
return false
}
if strings.HasPrefix(span.Name(), "cache request: ") {
return false
}

return true
}

0 comments on commit 70c95c5

Please sign in to comment.