func c_google_analytics(clientid string, secret string, tokenstr string, sites []conf.GoogleAnalyticsSite) (opentsdb.MultiDataPoint, error) { var md opentsdb.MultiDataPoint var mErr multiError c, err := analyticsClient(clientid, secret, tokenstr) if err != nil { return nil, err } svc, err := analytics.New(c) if err != nil { return nil, err } dimensions := []string{"browser", "trafficType", "deviceCategory", "operatingSystem"} for _, site := range sites { getPageviews(&md, svc, site) if site.Detailed { if err = getActiveUsers(&md, svc, site); err != nil { mErr = append(mErr, err) } for _, dimension := range dimensions { if err = getActiveUsersByDimension(&md, svc, site, dimension); err != nil { mErr = append(mErr, err) } } } } return md, mErr }
func c_google_analytics(clientid string, secret string, tokenstr string, sites []conf.GoogleAnalyticsSite) (opentsdb.MultiDataPoint, error) { var md opentsdb.MultiDataPoint c, err := analyticsClient(clientid, secret, tokenstr) if err != nil { return nil, err } svc, err := analytics.New(c) if err != nil { return nil, err } for _, site := range sites { call := svc.Data.Realtime.Get("ga:"+site.Profile, "rt:pageviews").Dimensions("rt:minutesAgo") data, err := call.Do() if err != nil { return md, err } // If no offset was specified, the minute we care about is '1', or the most // recently gathered, completed datapoint. Minute '0' is the current minute, // and as such is incomplete. offset := site.Offset if offset == 0 { offset = 1 } time := time.Now().Add(time.Duration(-1*offset) * time.Minute).Unix() pageviews := 0 // Iterates through the response data and returns the time slice we // actually care about when we find it. for _, row := range data.Rows { // row == [2]string{"0", "123"} // First item is the minute, second is the data (pageviews in this case) minute, err := strconv.Atoi(row[0]) if err != nil { return md, fmt.Errorf("Error parsing GA data: %s", err) } if minute == offset { if pageviews, err = strconv.Atoi(row[1]); err != nil { return md, fmt.Errorf("Error parsing GA data: %s", err) } break } } AddTS(&md, "google.analytics.realtime.pageviews", time, pageviews, opentsdb.TagSet{"site": site.Name}, metadata.Gauge, metadata.Count, "Number of pageviews tracked by GA in one minute") } return md, err }