Exemplo n.º 1
0
func syncDeliveryServiceStat(sourceClient influx.Client, targetClient influx.Client, statName string, days int) {

	db := "deliveryservice_stats"
	bps, _ := influx.NewBatchPoints(influx.BatchPointsConfig{
		Database:        db,
		Precision:       "ms",
		RetentionPolicy: "monthly",
	})

	queryString := fmt.Sprintf("select time, cachegroup, cdn, deliveryservice, value from \"monthly\".\"%s\"", statName)
	if days > 0 {
		queryString += fmt.Sprintf(" where time > now() - %dd", days)
	}
	fmt.Println("queryString ", queryString)
	res, err := queryDB(sourceClient, queryString, db)
	if err != nil {
		fmt.Printf("An error occured getting %s records from sourceDb: %v\n", statName, err)
		return
	}
	sourceStats := getDeliveryServiceStats(res)
	// get value from target DB
	targetRes, err := queryDB(targetClient, queryString, db)
	if err != nil {
		fmt.Printf("An error occured getting %s record from target db: %v\n", statName, err)
		return
	}
	targetStats := getDeliveryServiceStats(targetRes)

	for ssKey := range sourceStats {
		ts := targetStats[ssKey]
		ss := sourceStats[ssKey]
		if ts.value > ss.value {
			fmt.Printf("target value %v is at least equal to source value %v\n", ts.value, ss.value)
			continue //target value is bigger so leave it
		}
		statTime, _ := time.Parse(time.RFC3339, ss.t)
		tags := map[string]string{
			"cdn":             ss.cdn,
			"cachegroup":      ss.cacheGroup,
			"deliveryservice": ss.deliveryService,
		}
		fields := map[string]interface{}{
			"value": ss.value,
		}
		pt, err := influx.NewPoint(
			statName,
			tags,
			fields,
			statTime,
		)
		if err != nil {
			fmt.Printf("error adding creating point for %v...%v\n", statName, err)
			continue
		}
		bps.AddPoint(pt)
	}
	targetClient.Write(bps)
}
Exemplo n.º 2
0
func (d *DavisSi1000) storeReports(reportChan <-chan WxReport, ic influx.Client) {
	for {
		select {
		case report := <-reportChan:

			// Create a InfluxDB batch of points.  We only receive readings every
			// 2.5s so there's no need to batch more than one at a time.
			bp, err := influx.NewBatchPoints(influx.BatchPointsConfig{
				Database:  d.config.InfluxDB.InfluxDBName,
				Precision: "s",
			})
			if err != nil {
				log.Println("Error logging report to InfluxDB:", err)
				continue
			}

			tags := map[string]string{"transmitter-id": string(report.TransmitterID)}
			fields := map[string]interface{}{
				"wind_speed":      report.WindSpeed,
				"wind_dir":        report.WindDir,
				"temperature":     report.Temperature,
				"humidity":        report.Humidity,
				"dewpoint":        report.Dewpoint,
				"heat_index":      report.HeatIndex,
				"wind_chill":      report.WindChill,
				"uv_index":        report.UVIndex,
				"solar_radiation": report.SolarRadiation,
				"rainfall":        report.Rainfall,
			}

			// Build our InfluxDB point from our tags and fields
			pt := influx.NewPoint("wxreport", tags, fields, time.Now())
			// ...and add it to our batch
			bp.AddPoint(pt)

			// Write the batch to the InfluxDB client
			err = ic.Write(bp)
			if err != nil {
				log.Println("Error logging data point to InfluxDB:", err)
				continue
			}
			// Log this report to the console
			log.Printf("Received report: %+v\n", report)

		}
	}
}