Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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
}