mirror of
				https://github.com/taigrr/wtf
				synced 2025-01-18 04:03:14 -08:00 
			
		
		
		
	golangci-lint can run all the currently enabled linters, and as far as I can tell, does it in under 5 seconds as opposed to over 180 seconds (compare `time make cilint` and `time make lint`). Some of the linters that are listed in the "enabled" section but commented out looked like a good idea to me, and fairly low hanging fruit to fix, but they are not passing at the moment. All the linters covered in the current Makefile are run. TODO: - replace lint target in Makefile with golangci-lint - remove .github/workflow/errcheck.yml
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package cdsqueue
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/ovh/cds/sdk"
 | |
| )
 | |
| 
 | |
| func (widget *Widget) display() {
 | |
| 	widget.TextWidget.Redraw(widget.content)
 | |
| }
 | |
| 
 | |
| func (widget *Widget) content() (string, string, bool) {
 | |
| 	if len(widget.View.GetHighlights()) > 0 {
 | |
| 		widget.View.ScrollToHighlight()
 | |
| 	} else {
 | |
| 		widget.View.ScrollToBeginning()
 | |
| 	}
 | |
| 
 | |
| 	widget.Items = make([]sdk.WorkflowNodeJobRun, 0)
 | |
| 	filter := widget.currentFilter()
 | |
| 	_, _, width, _ := widget.View.GetRect()
 | |
| 
 | |
| 	str := widget.settings.common.SigilStr(len(widget.filters), widget.Idx, width) + "\n"
 | |
| 	str += widget.displayQueue(filter)
 | |
| 
 | |
| 	title := fmt.Sprintf("%s - %s", widget.CommonSettings().Title, widget.title(filter))
 | |
| 
 | |
| 	return title, str, false
 | |
| }
 | |
| 
 | |
| func (widget *Widget) title(filter string) string {
 | |
| 	return fmt.Sprintf(
 | |
| 		"[%s]%d - %s[white]",
 | |
| 		widget.settings.common.Colors.TextTheme.Title,
 | |
| 		widget.maxItems,
 | |
| 		filter,
 | |
| 	)
 | |
| }
 | |
| 
 | |
| func (widget *Widget) displayQueue(filter string) string {
 | |
| 	runs, _ := widget.client.QueueWorkflowNodeJobRun(filter)
 | |
| 
 | |
| 	widget.SetItemCount(len(runs))
 | |
| 
 | |
| 	if len(runs) == 0 {
 | |
| 		return " [grey]none[white]\n"
 | |
| 	}
 | |
| 
 | |
| 	var content string
 | |
| 	for idx, job := range runs {
 | |
| 		content += fmt.Sprintf(`[grey]["%d"]%s`,
 | |
| 			idx, widget.generateQueueJobLine(job.ID, job.Parameters, job.Job, time.Since(job.Queued), job.BookedBy, job.Status))
 | |
| 
 | |
| 		widget.Items = append(widget.Items, job)
 | |
| 	}
 | |
| 
 | |
| 	return content
 | |
| }
 | |
| 
 | |
| func (widget *Widget) generateQueueJobLine(id int64, parameters []sdk.Parameter, executedJob sdk.ExecutedJob,
 | |
| 	duration time.Duration, bookedBy sdk.Service, status string) string {
 | |
| 	prj := getVarsInPbj("cds.project", parameters)
 | |
| 	workflow := getVarsInPbj("cds.workflow", parameters)
 | |
| 	node := getVarsInPbj("cds.node", parameters)
 | |
| 	run := getVarsInPbj("cds.run", parameters)
 | |
| 	triggeredBy := getVarsInPbj("cds.triggered_by.username", parameters)
 | |
| 
 | |
| 	row := make([]string, 6)
 | |
| 	row[0] = pad(sdk.Round(duration, time.Second).String(), 9)
 | |
| 	row[2] = pad(run, 7)
 | |
| 	row[3] = pad(prj+"/"+workflow+"/"+node, 40)
 | |
| 
 | |
| 	switch {
 | |
| 	case status == sdk.StatusBuilding:
 | |
| 		row[1] = pad(fmt.Sprintf(" %s.%s ", executedJob.WorkerName, executedJob.WorkerID), 27)
 | |
| 	case bookedBy.ID != 0:
 | |
| 		row[1] = pad(fmt.Sprintf(" %s.%d ", bookedBy.Name, bookedBy.ID), 27)
 | |
| 	default:
 | |
| 		row[1] = pad("", 27)
 | |
| 	}
 | |
| 
 | |
| 	row[4] = fmt.Sprintf("➤ %s", pad(triggeredBy, 17))
 | |
| 
 | |
| 	c := "grey"
 | |
| 	if status == sdk.StatusWaiting {
 | |
| 		if duration > 120*time.Second {
 | |
| 			c = "red"
 | |
| 		} else if duration > 50*time.Second {
 | |
| 			c = "yellow"
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return fmt.Sprintf("[%s]%s [grey]%s %s %s %s\n", c, row[0], row[1], row[2], row[3], row[4])
 | |
| }
 | |
| 
 | |
| func pad(t string, size int) string {
 | |
| 	if len(t) > size {
 | |
| 		return t[0:size-3] + "..."
 | |
| 	}
 | |
| 	return t + strings.Repeat(" ", size-len(t))
 | |
| }
 | |
| 
 | |
| func getVarsInPbj(key string, ps []sdk.Parameter) string {
 | |
| 	for _, p := range ps {
 | |
| 		if p.Name == key {
 | |
| 			return p.Value
 | |
| 		}
 | |
| 	}
 | |
| 	return ""
 | |
| }
 |