Ctrl K
ComunidadGuías…

pkg/cli/stats.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package cli

import (
	"encoding/json"
	"errors"
	"fmt"
	"os"
	"time"

	"github.com/urfave/cli"
)

var statsCmd = cli.Command{
	Name:   "stats",
	Usage:  "view stats",
	Action: stats,
	Flags: []cli.Flag{
		cli.Int64Flag{
			Name:  "site-id",
			Usage: "ID of the site to retrieve stats for",
		},
		cli.StringFlag{
			Name:  "start-date",
			Usage: "start date, expects a date in format 2006-01-02",
		},
		cli.StringFlag{
			Name:  "end-date",
			Usage: "end date, expects a date in format 2006-01-02",
		},
		cli.BoolFlag{
			Name:  "json",
			Usage: "get a json response",
		},
	},
}

func stats(c *cli.Context) error {
	start, _ := time.Parse("2006-01-02", c.String("start-date"))
	if start.IsZero() {
		return errors.New("Invalid argument: supply a valid --start-date")
	}

	end, _ := time.Parse("2006-01-02", c.String("end-date"))
	if end.IsZero() {
		return errors.New("Invalid argument: supply a valid --end-date")
	}

	// TODO: add method for getting total sum of pageviews across sites
	siteID := c.Int64("site-id")
	result, err := app.database.GetAggregatedSiteStats(siteID, start, end)
	if err != nil {
		return err
	}

	if c.Bool("json") {
		return json.NewEncoder(os.Stdout).Encode(result)
	}

	fmt.Printf("%s - %s\n", start.Format("Jan 01, 2006"), end.Format("Jan 01, 2006"))
	fmt.Printf("===========================\n")
	fmt.Printf("Visitors: \t%d\n", result.Visitors)
	fmt.Printf("Pageviews: \t%d\n", result.Pageviews)
	fmt.Printf("Sessions: \t%d\n", result.Sessions)
	fmt.Printf("Avg duration: \t%s\n", result.FormattedDuration())
	fmt.Printf("Bounce rate: \t%.0f%%\n", result.BounceRate*100.00)
	return nil
}