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  }