github.com/apex/up@v1.7.1/internal/cli/metrics/metrics.go (about)

     1  package metrics
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/pkg/errors"
     7  	"github.com/tj/kingpin"
     8  
     9  	"github.com/apex/up/internal/cli/root"
    10  	"github.com/apex/up/internal/stats"
    11  	"github.com/apex/up/internal/util"
    12  )
    13  
    14  func init() {
    15  	cmd := root.Command("metrics", "Show project metrics.")
    16  	cmd.Example(`up metrics`, "Show metrics for staging environment.")
    17  	cmd.Example(`up metrics -s production`, "Show metrics for production environment.")
    18  
    19  	stage := cmd.Flag("stage", "Target stage name.").Short('s').Default("staging").String()
    20  	since := cmd.Flag("since", "Show metrics since duration (30s, 5m, 2h, 1h30m, 3d, 1M).").Short('S').Default("1M").String()
    21  
    22  	cmd.Action(func(_ *kingpin.ParseContext) error {
    23  		c, p, err := root.Init()
    24  		if err != nil {
    25  			return errors.Wrap(err, "initializing")
    26  		}
    27  
    28  		s, err := util.ParseDuration(*since)
    29  		if err != nil {
    30  			return errors.Wrap(err, "parsing --since duration")
    31  		}
    32  
    33  		region := c.Regions[0]
    34  
    35  		stats.Track("Metrics", map[string]interface{}{
    36  			"stage": *stage,
    37  			"since": s.Round(time.Second),
    38  		})
    39  
    40  		start := time.Now().UTC().Add(-s)
    41  		return p.ShowMetrics(region, *stage, start)
    42  	})
    43  }