github.com/jcarley/cli@v0.0.0-20180201210820-966d90434c30/commands/metrics/text.go (about) 1 package metrics 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/Sirupsen/logrus" 8 "github.com/daticahealth/cli/models" 9 ) 10 11 // TextTransformer is a concrete implementation of Transformer transforming data 12 // into plain text. 13 type TextTransformer struct{} 14 15 // TransformGroupCPU transforms an entire environment's cpu data into text 16 // format. This outputs TransformSingleCPU for every service in the environment. 17 func (text *TextTransformer) TransformGroupCPU(metrics *[]models.Metrics) { 18 for _, metric := range *metrics { 19 if _, ok := blacklist[metric.ServiceLabel]; !ok { 20 logrus.Printf("%s:", metric.ServiceLabel) 21 text.TransformSingleCPU(&metric) 22 } 23 } 24 } 25 26 // TransformGroupMemory transforms an entire environment's memory data into 27 // text format. This outputs TransformSingleMemory for every service in the 28 // environment. 29 func (text *TextTransformer) TransformGroupMemory(metrics *[]models.Metrics) { 30 for _, metric := range *metrics { 31 if _, ok := blacklist[metric.ServiceLabel]; !ok { 32 logrus.Printf("%s:", metric.ServiceLabel) 33 text.TransformSingleMemory(&metric) 34 } 35 } 36 } 37 38 // TransformGroupNetworkIn transforms an entire environment's received network 39 // data into text format. This outputs TransformSingleNetworkIn for every 40 // service in the environment. 41 func (text *TextTransformer) TransformGroupNetworkIn(metrics *[]models.Metrics) { 42 for _, metric := range *metrics { 43 if _, ok := blacklist[metric.ServiceLabel]; !ok { 44 logrus.Printf("%s:", metric.ServiceLabel) 45 text.TransformSingleNetworkIn(&metric) 46 } 47 } 48 } 49 50 // TransformGroupNetworkOut transforms an entire environment's transmitted 51 // network data into text format. This outputs TransformSingleNetworkOut for 52 // every service in the environment. 53 func (text *TextTransformer) TransformGroupNetworkOut(metrics *[]models.Metrics) { 54 for _, metric := range *metrics { 55 if _, ok := blacklist[metric.ServiceLabel]; !ok { 56 logrus.Printf("%s:", metric.ServiceLabel) 57 text.TransformSingleNetworkOut(&metric) 58 } 59 } 60 } 61 62 // TransformSingleCPU transforms a single service's cpu data into text format. 63 func (text *TextTransformer) TransformSingleCPU(metric *models.Metrics) { 64 prefix := " " 65 if metric.Data != nil && metric.Data.CPUUsage != nil { 66 for _, data := range *metric.Data.CPUUsage { 67 ts := time.Unix(int64(data.TS/1000.0), 0) 68 logrus.Printf("%s%s | CPU Percentage: %6.2f%%", 69 prefix, 70 fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second()), 71 data.CorePercent*100.0) 72 } 73 } 74 } 75 76 // TransformSingleMemory transforms a single service's memory data into text 77 // format. 78 func (text *TextTransformer) TransformSingleMemory(metric *models.Metrics) { 79 prefix := " " 80 if metric.Data != nil && metric.Data.MemoryUsage != nil { 81 for _, data := range *metric.Data.MemoryUsage { 82 ts := time.Unix(int64(data.TS/1000.0), 0) 83 logrus.Printf("%s%s | Memory Min: %.2f MB | Memory Max: %.2f MB | Memory AVG: %.2f MB | Memory Total: %.2f MB", 84 prefix, 85 fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second()), 86 data.Min/1024.0, 87 data.Max/1024.0, 88 data.AVG/1024.0, 89 float64(metric.Size.RAM)*1024.0) 90 } 91 } 92 } 93 94 // TransformSingleNetworkIn transforms a single service's received network data 95 // into text format. 96 func (text *TextTransformer) TransformSingleNetworkIn(metric *models.Metrics) { 97 prefix := " " 98 if metric.Data != nil && metric.Data.NetworkUsage != nil { 99 for _, data := range *metric.Data.NetworkUsage { 100 ts := time.Unix(int64(data.TS/1000.0), 0) 101 logrus.Printf("%s%s | Received Bytes: %.2f KB | Received Packets: %.2f", 102 prefix, 103 fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second()), 104 data.RXKB, 105 data.RXPackets) 106 } 107 } 108 } 109 110 // TransformSingleNetworkOut transforms a single service's transmitted network 111 // data into text format. 112 func (text *TextTransformer) TransformSingleNetworkOut(metric *models.Metrics) { 113 prefix := " " 114 if metric.Data != nil && metric.Data.NetworkUsage != nil { 115 for _, data := range *metric.Data.NetworkUsage { 116 ts := time.Unix(int64(data.TS/1000.0), 0) 117 logrus.Printf("%s%s | Transmitted Bytes: %.2f KB | Transmitted Packets: %.2f", 118 prefix, 119 fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", ts.Year(), ts.Month(), ts.Day(), ts.Hour(), ts.Minute(), ts.Second()), 120 data.TXKB, 121 data.TXPackets) 122 } 123 } 124 }