github.com/jcarley/cli@v0.0.0-20180201210820-966d90434c30/commands/metrics/json.go (about) 1 package metrics 2 3 import ( 4 "encoding/json" 5 6 "github.com/Sirupsen/logrus" 7 "github.com/daticahealth/cli/models" 8 ) 9 10 // JSONTransformer is a concrete implementation of Transformer transforming data 11 // into pretty printed JSON format. 12 type JSONTransformer struct{} 13 14 type cpu struct { 15 ServiceName string `json:"service_name,omitempty"` 16 TS int `json:"ts"` 17 Percentage float64 `json:"percentage"` 18 } 19 20 type mem struct { 21 ServiceName string `json:"service_name,omitempty"` 22 TS int `json:"ts"` 23 Min float64 `json:"min"` 24 Max float64 `json:"max"` 25 AVG float64 `json:"avg"` 26 Total float64 `json:"total"` 27 } 28 29 type netin struct { 30 ServiceName string `json:"service_name,omitempty"` 31 TS int `json:"ts"` 32 RXKB float64 `json:"rx_kb"` 33 RXPackets float64 `json:"rx_packets"` 34 } 35 36 type netout struct { 37 ServiceName string `json:"service_name,omitempty"` 38 TS int `json:"ts"` 39 TXKB float64 `json:"tx_kb"` 40 TXPackets float64 `json:"tx_packets"` 41 } 42 43 // TransformGroupCPU transforms an entire environment's cpu data into json 44 // format. This outputs TransformSingleCPU for every service in the environment. 45 func (j *JSONTransformer) TransformGroupCPU(metrics *[]models.Metrics) { 46 var data []cpu 47 for _, m := range *metrics { 48 if _, ok := blacklist[m.ServiceLabel]; !ok && m.Data != nil && m.Data.CPUUsage != nil { 49 for _, d := range *m.Data.CPUUsage { 50 data = append(data, cpu{m.ServiceLabel, d.TS, d.CorePercent}) 51 } 52 } 53 } 54 b, _ := json.MarshalIndent(data, "", " ") 55 logrus.Println(string(b)) 56 } 57 58 // TransformGroupMemory transforms an entire environment's memory data into json 59 // format. This outputs TransformSingleMemory for every service in the 60 // environment. 61 func (j *JSONTransformer) TransformGroupMemory(metrics *[]models.Metrics) { 62 var data []mem 63 for _, m := range *metrics { 64 if _, ok := blacklist[m.ServiceLabel]; !ok && m.Data != nil && m.Data.MemoryUsage != nil { 65 for _, d := range *m.Data.MemoryUsage { 66 data = append(data, mem{m.ServiceLabel, d.TS, d.Min / 1024.0, d.Max / 1024.0, d.AVG / 1024.0, float64(m.Size.RAM) * 1024.0}) 67 } 68 } 69 } 70 b, _ := json.MarshalIndent(data, "", " ") 71 logrus.Println(string(b)) 72 } 73 74 // TransformGroupNetworkIn transforms an entire environment's received network 75 // data into json format. This outputs TransformSingleNetworkIn for every 76 // service in the environment. 77 func (j *JSONTransformer) TransformGroupNetworkIn(metrics *[]models.Metrics) { 78 var data []netin 79 for _, m := range *metrics { 80 if _, ok := blacklist[m.ServiceLabel]; !ok && m.Data != nil && m.Data.NetworkUsage != nil { 81 for _, d := range *m.Data.NetworkUsage { 82 data = append(data, netin{m.ServiceLabel, d.TS, d.RXKB, d.RXPackets}) 83 } 84 } 85 } 86 b, _ := json.MarshalIndent(data, "", " ") 87 logrus.Println(string(b)) 88 } 89 90 // TransformGroupNetworkOut transforms an entire environment's transmitted 91 // network data into json format. This outputs TransformSingleNetworkOut for 92 // every service in the environment. 93 func (j *JSONTransformer) TransformGroupNetworkOut(metrics *[]models.Metrics) { 94 var data []netout 95 for _, m := range *metrics { 96 if _, ok := blacklist[m.ServiceLabel]; !ok && m.Data != nil && m.Data.NetworkUsage != nil { 97 for _, d := range *m.Data.NetworkUsage { 98 data = append(data, netout{m.ServiceLabel, d.TS, d.TXKB, d.TXPackets}) 99 } 100 } 101 } 102 b, _ := json.MarshalIndent(data, "", " ") 103 logrus.Println(string(b)) 104 } 105 106 // TransformSingleCPU transforms a single service's cpu data into json format. 107 func (j *JSONTransformer) TransformSingleCPU(metric *models.Metrics) { 108 var data []cpu 109 if metric.Data != nil && metric.Data.CPUUsage != nil { 110 for _, d := range *metric.Data.CPUUsage { 111 data = append(data, cpu{TS: d.TS, Percentage: d.CorePercent}) 112 } 113 } 114 b, _ := json.MarshalIndent(data, "", " ") 115 logrus.Println(string(b)) 116 } 117 118 // TransformSingleMemory transforms a single service's memory data into json 119 // format. 120 func (j *JSONTransformer) TransformSingleMemory(metric *models.Metrics) { 121 var data []mem 122 if metric.Data != nil && metric.Data.MemoryUsage != nil { 123 for _, d := range *metric.Data.MemoryUsage { 124 data = append(data, mem{TS: d.TS, Min: d.Min / 1024.0, Max: d.Max / 1024.0, AVG: d.AVG / 1024.0, Total: float64(metric.Size.RAM) * 1024.0}) 125 } 126 } 127 b, _ := json.MarshalIndent(data, "", " ") 128 logrus.Println(string(b)) 129 } 130 131 // TransformSingleNetworkIn transforms a single service's received network data 132 // into json format. 133 func (j *JSONTransformer) TransformSingleNetworkIn(metric *models.Metrics) { 134 var data []netin 135 if metric.Data != nil && metric.Data.NetworkUsage != nil { 136 for _, d := range *metric.Data.NetworkUsage { 137 data = append(data, netin{TS: d.TS, RXKB: d.RXKB, RXPackets: d.RXPackets}) 138 } 139 } 140 b, _ := json.MarshalIndent(data, "", " ") 141 logrus.Println(string(b)) 142 } 143 144 // TransformSingleNetworkOut transforms a single service's transmitted network 145 // data into json format. 146 func (j *JSONTransformer) TransformSingleNetworkOut(metric *models.Metrics) { 147 var data []netout 148 if metric.Data != nil && metric.Data.NetworkUsage != nil { 149 for _, d := range *metric.Data.NetworkUsage { 150 data = append(data, netout{TS: d.TS, TXKB: d.TXKB, TXPackets: d.TXPackets}) 151 } 152 } 153 b, _ := json.MarshalIndent(data, "", " ") 154 logrus.Println(string(b)) 155 }