blob: 93373a95d072dd42b103d24322636a6768d0b1c3 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package analytics_util
import (
"sort"
"strconv"
"strings"
"time"
)
type Command struct {
name string
flags map[string]string
startTime time.Time
endTime time.Time
}
// string values allowed to be tracked
var allowedStrings = map[string]struct{}{
"always": {},
"auto": {},
"never": {},
}
func newCommand(name string, flags map[string]string) *Command {
for k, v := range flags {
allowed := false
if _, ok := allowedStrings[v]; ok {
allowed = true
} else if _, err := strconv.ParseBool(v); err == nil {
allowed = true
} else if _, err := strconv.ParseFloat(v, 10); err == nil {
allowed = true
} else if _, err := strconv.ParseInt(v, 10, 64); err == nil {
allowed = true
}
if !allowed {
flags[k] = ""
}
}
c := &Command{name: name, flags: flags}
c.startTime = time.Now()
return c
}
func (c *Command) AnalyticsObject() AnayticsObject {
e := Event{}
e.Category = "Command"
e.Action = c.name
if !c.endTime.IsZero() {
e.Label = "Complete"
e.Value = c.endTime.Sub(c.startTime).Nanoseconds() / 1000000
}
value := ""
if len(c.flags) > 0 {
keys := []string{}
for k := range c.flags {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
v := c.flags[k]
value = value + k + ":" + v + ","
}
value = strings.TrimRight(value, ",")
} else {
// track no flag
value = "()"
}
e.CustomDimension = make(map[string]string)
e.CustomDimension["flags"] = value
return e
}
func (c *Command) Done() {
c.endTime = time.Now()
}