func (factory *AppExaminerCommandFactory) printInstanceInfo(writer io.Writer, actualInstances []app_examiner.InstanceInfo) { w := tabwriter.NewWriter(writer, minColumnWidth, 8, 1, '\t', 0) instanceBar := func(index, state string) { fmt.Fprintf(w, "%sInstance %s [%s]\n", indentHeading, index, state) printHorizontalRule(w, "-") } printHorizontalRule(w, "=") for _, instance := range actualInstances { instanceBar(fmt.Sprint(instance.Index), presentation.ColorInstanceState(instance)) if instance.PlacementError == "" && instance.State != "CRASHED" { fmt.Fprintf(w, "%s\t%s\n", "InstanceGuid", instance.InstanceGuid) fmt.Fprintf(w, "%s\t%s\n", "Cell ID", instance.CellID) fmt.Fprintf(w, "%s\t%s\n", "Ip", instance.Ip) portMappingStrings := make([]string, 0) for _, portMapping := range instance.Ports { portMappingStrings = append(portMappingStrings, fmt.Sprintf("%d:%d", portMapping.HostPort, portMapping.ContainerPort)) } fmt.Fprintf(w, "%s\t%s\n", "Port Mapping", strings.Join(portMappingStrings, ";")) uptime := factory.clock.Now().Sub(time.Unix(0, instance.Since)) roundedUptime := uptime - (uptime % time.Second) fmt.Fprintf(w, "%s\t%s\n", "Uptime", fmt.Sprint(roundedUptime)) } else if instance.State != "CRASHED" { fmt.Fprintf(w, "%s\t%s\n", "Placement Error", instance.PlacementError) } fmt.Fprintf(w, "%s \t%d \n", "Crash Count", instance.CrashCount) if instance.HasMetrics { fmt.Fprintf(w, "%s \t%.2f%% \n", "CPU", instance.Metrics.CpuPercentage) fmt.Fprintf(w, "%s \t%s \n", "Memory", bytefmt.ByteSize(instance.Metrics.MemoryBytes)) } printHorizontalRule(w, "-") } w.Flush() }
import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry-incubator/lattice/ltc/app_examiner" "github.com/cloudfoundry-incubator/lattice/ltc/app_examiner/command_factory/presentation" "github.com/cloudfoundry-incubator/lattice/ltc/terminal/colors" "github.com/cloudfoundry-incubator/receptor" ) var _ = Describe("Presentation", func() { Describe("ColorInstanceState", func() { It("colors RUNNING green", func() { instanceInfo := app_examiner.InstanceInfo{State: string(receptor.ActualLRPStateRunning)} Expect(presentation.ColorInstanceState(instanceInfo)).To(Equal(colors.Green(string(receptor.ActualLRPStateRunning)))) }) It("colors CLAIMED yellow", func() { instanceInfo := app_examiner.InstanceInfo{State: string(receptor.ActualLRPStateClaimed)} Expect(presentation.ColorInstanceState(instanceInfo)).To(Equal(colors.Yellow(string(receptor.ActualLRPStateClaimed)))) }) Context("when there is a placement error", func() { It("colors UNCLAIMED red", func() { instanceInfo := app_examiner.InstanceInfo{ State: string(receptor.ActualLRPStateUnclaimed), PlacementError: "I misplaced my cells. Uh oh.", } Expect(presentation.ColorInstanceState(instanceInfo)).To(Equal(colors.Red(string(receptor.ActualLRPStateUnclaimed))))