func (factory *AppExaminerCommandFactory) printDistribution() int { defer factory.ui.Say(cursor.ClearToEndOfDisplay()) cells, err := factory.appExaminer.ListCells() if err != nil { factory.ui.Say("Error visualizing: " + err.Error()) factory.ui.Say(cursor.ClearToEndOfLine()) factory.ui.SayNewLine() return 1 } for _, cell := range cells { factory.ui.Say(cell.CellID) if cell.Missing { factory.ui.Say(colors.Red("[MISSING]")) } factory.ui.Say(": ") if cell.RunningInstances == 0 && cell.ClaimedInstances == 0 && !cell.Missing { factory.ui.Say(colors.Red("empty")) } else { factory.ui.Say(colors.Green(strings.Repeat("•", cell.RunningInstances))) factory.ui.Say(colors.Yellow(strings.Repeat("•", cell.ClaimedInstances))) } factory.ui.Say(cursor.ClearToEndOfLine()) factory.ui.SayNewLine() } return len(cells) }
func (factory *AppExaminerCommandFactory) printAppInfo(writer io.Writer, appInfo app_examiner.AppInfo) { factory.ui.Say(cursor.ClearToEndOfDisplay()) w := tabwriter.NewWriter(writer, minColumnWidth, 8, 1, '\t', 0) titleBar := func(title string) { printHorizontalRule(w, "=") fmt.Fprintf(w, "%s%s\n", indentHeading, title) printHorizontalRule(w, "-") } titleBar(colors.Bold(appInfo.ProcessGuid)) fmt.Fprintf(w, "%s\t%s\n", "Instances", colorInstances(appInfo)) fmt.Fprintf(w, "%s\t%d\n", "Start Timeout", appInfo.StartTimeout) fmt.Fprintf(w, "%s\t%d\n", "DiskMB", appInfo.DiskMB) fmt.Fprintf(w, "%s\t%d\n", "MemoryMB", appInfo.MemoryMB) fmt.Fprintf(w, "%s\t%d\n", "CPUWeight", appInfo.CPUWeight) portStrings := make([]string, 0) for _, port := range appInfo.Ports { portStrings = append(portStrings, fmt.Sprint(port)) } fmt.Fprintf(w, "%s\t%s\n", "Ports", strings.Join(portStrings, ",")) factory.printAppRoutes(w, appInfo) if appInfo.Annotation != "" { fmt.Fprintf(w, "%s\t%s\n", "Annotation", appInfo.Annotation) } printHorizontalRule(w, "-") var envVars string for _, envVar := range appInfo.EnvironmentVariables { envVars += envVar.Name + `="` + envVar.Value + `" ` + "\n" } fmt.Fprintf(w, "%s\n\n%s", "Environment", envVars) fmt.Fprintln(w, "") w.Flush() }
Eventually(outputBuffer).Should(test_helpers.SayLine("cell-0: " + colors.Red("empty") + cursor.ClearToEndOfLine())) Eventually(outputBuffer).Should(test_helpers.SayLine("cell-1" + colors.Red("[MISSING]") + ": " + cursor.ClearToEndOfLine())) setNumberOfRunningInstances(2) fakeClock.IncrementBySeconds(1) Consistently(outputBuffer).ShouldNot(test_helpers.Say("cell: \n")) // TODO: how would this happen fakeClock.IncrementBySeconds(1) Eventually(outputBuffer).Should(test_helpers.Say(cursor.Hide())) Eventually(outputBuffer).Should(test_helpers.Say(cursor.Up(2))) Eventually(outputBuffer).Should(test_helpers.SayLine("cell-0: " + colors.Green("••") + cursor.ClearToEndOfLine())) Eventually(outputBuffer).Should(test_helpers.SayLine("cell-1" + colors.Red("[MISSING]") + ": " + colors.Green("••") + cursor.ClearToEndOfLine())) Eventually(outputBuffer).Should(test_helpers.Say(cursor.ClearToEndOfDisplay())) Consistently(closeChan).ShouldNot(BeClosed()) }) It("dynamically displays any errors", func() { fakeAppExaminer.ListCellsReturns(nil, errors.New("Spilled the Paint")) closeChan = test_helpers.AsyncExecuteCommandWithArgs(visualizeCommand, []string{"--rate", "1s"}) Eventually(outputBuffer).Should(test_helpers.SayLine("Error visualizing: Spilled the Paint" + cursor.ClearToEndOfLine())) fakeClock.IncrementBySeconds(1) Eventually(outputBuffer).Should(test_helpers.Say(cursor.Up(1))) Eventually(outputBuffer).Should(test_helpers.SayLine("Error visualizing: Spilled the Paint" + cursor.ClearToEndOfLine()))
func (factory *AppExaminerCommandFactory) printAppInfo(writer io.Writer, appInfo app_examiner.AppInfo) { factory.ui.Say(cursor.ClearToEndOfDisplay()) w := tabwriter.NewWriter(writer, minColumnWidth, 8, 1, '\t', 0) titleBar := func(title string) { printHorizontalRule(w, "=") fmt.Fprintf(w, "%s%s\n", indentHeading, title) printHorizontalRule(w, "-") } titleBar(colors.Bold(appInfo.ProcessGuid)) fmt.Fprintf(w, "%s\t%s\n", "Instances", colorInstances(appInfo)) fmt.Fprintf(w, "%s\t%d\n", "Start Timeout", appInfo.StartTimeout) fmt.Fprintf(w, "%s\t%d\n", "DiskMB", appInfo.DiskMB) fmt.Fprintf(w, "%s\t%d\n", "MemoryMB", appInfo.MemoryMB) fmt.Fprintf(w, "%s\t%d\n", "CPUWeight", appInfo.CPUWeight) portStrings := make([]string, 0) for _, port := range appInfo.Ports { portStrings = append(portStrings, fmt.Sprint(port)) } fmt.Fprintf(w, "%s\t%s\n", "Ports", strings.Join(portStrings, ",")) factory.printAppRoutes(w, appInfo) factory.printMonitor(w, appInfo) if appInfo.RootFS != "" { if strings.HasPrefix(appInfo.RootFS, "docker://") { image := strings.Replace(appInfo.RootFS, "docker://", "", 1) if strings.HasPrefix(image, "/") { image = strings.Replace(image, "/", "", 1) } if strings.HasPrefix(image, "library/") { image = strings.Replace(image, "library/", "", 1) } if hashIndex := strings.LastIndex(image, "#"); hashIndex != -1 { image = image[:hashIndex] + ":" + image[hashIndex+1:] } fmt.Fprintf(w, "%s\t%s\n", "Docker Image", image) } else if strings.HasPrefix(appInfo.RootFS, "preloaded:") { fmt.Fprintf(w, "%s\t%s\n", "Stack", strings.Replace(appInfo.RootFS, "preloaded:", "", 1)) } else { fmt.Fprintf(w, "%s\t%s\n", "RootFS", appInfo.RootFS) } } if appInfo.Annotation != "" { fmt.Fprintf(w, "%s\t%s\n", "Annotation", appInfo.Annotation) } printHorizontalRule(w, "-") var envVars string for _, envVar := range appInfo.EnvironmentVariables { envVars += envVar.Name + `="` + envVar.Value + `" ` + "\n" } fmt.Fprintf(w, "%s\n\n%s", "Environment", envVars) fmt.Fprintln(w, "") w.Flush() }