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  }