示例#1
0
func (d *Datastore) writeToHbase(observation AggregateObservation) {
	c := d.hbasePool.GetConnection().(*goh.HClient)
	mutations := make([]*Hbase.Mutation, 0)
	for k, v := range observation.SummaryValues {
		mutations = append(mutations, goh.NewMutation(fmt.Sprintf("interval%v:%v", observation.Interval, k), EncodeFloat64(v)))
	}

	err := c.MutateRowTs(Config.HbaseTable, []byte(observation.RawName), mutations, observation.Timestamp, nil)
	if err != nil {
		fmt.Printf("%v: mutate error -  %v\n", time.Now(), err)
	}
	d.hbasePool.ReleaseConnection(c)
}
示例#2
0
func (d *Datastore) writeToHbaseInBulk(observations []AggregateObservation) {
	c := d.hbasePool.GetConnection().(*goh.HClient)
	bulk := make([]*Hbase.BatchMutation, len(observations))
	for i := range observations {
		mutations := make([]*Hbase.Mutation, 0)
		for k, v := range observations[i].SummaryValues {
			mutations = append(mutations, goh.NewMutation(fmt.Sprintf("interval%v:%v", observations[i].Interval, k), EncodeFloat64(v)))
		}
		bulk[i] = goh.NewBatchMutation([]byte(observations[i].RawName), mutations)

	}
	err := c.MutateRowsTs(Config.HbaseTable, bulk, observations[0].Timestamp, nil)
	if err != nil {
		fmt.Printf("%v: mutate error using %v -  %v, reconnecting\n", time.Now(), c, err)
		x, _ := OpenHbaseConnection()
		c = x.(*goh.HClient)
	}
	d.hbasePool.ReleaseConnection(c)
}
示例#3
0
func main() {
	gobatsd.LoadConfig()

	runtime.GOMAXPROCS(runtime.NumCPU())
	spec := redis.DefaultSpec().Host(gobatsd.Config.RedisHost).Port(gobatsd.Config.RedisPort)
	redis, redisErr := redis.NewSynchClientWithSpec(spec)
	if redisErr != nil {
		panic(redisErr)
	}
	datapoints, redisErr := redis.Smembers("datapoints")
	if redisErr != nil {
		panic(redisErr)
	}
	nworkers := 10
	c := make(chan int, nworkers)

	for k := 0; k < nworkers; k++ {
		go func(datapoints [][]byte, c chan int) {
			cli, err := gobatsd.OpenHbaseConnection()
			if err != nil {
				panic(err)
			}
			hbaseClient := cli.(*goh.HClient)
			defer hbaseClient.Close()

			for i := range datapoints {
				if datapoints[i][0] == 'g' && (len(datapoints[i]) < 18 || string(datapoints[i][0:17]) != "gauges:Syslog-NG.") {
					path := gobatsd.CalculateFilename(string(datapoints[i]), gobatsd.Config.Root)
					fmt.Printf("(%v / %v) Migrating %v from %v\n", i, len(datapoints), string(datapoints[i]), path)
					file, err := os.Open(path)
					if err == nil {
						reader := bufio.NewReader(file)
						linesRead := 0
						for {
							line, err := reader.ReadString('\n')
							linesRead += 1
							if err != nil && err != io.EOF {
								panic(err)
							}
							if err != nil && err == io.EOF {
								break
							}
							if linesRead == 1 {
								continue
							}

							parts := strings.Split(strings.TrimSpace(line), " ")
							ts, _ := strconv.ParseInt(parts[0], 10, 64)
							value, _ := strconv.ParseFloat(parts[1], 64)
							if value != float64(0) && ts > yearago {
								mutations := []*Hbase.Mutation{goh.NewMutation("interval0:value", gobatsd.EncodeFloat64(value))}

								err = hbaseClient.MutateRowTs(gobatsd.Config.HbaseTable, datapoints[i], mutations, ts, nil)
								if err != nil {
									fmt.Printf("%v: mutate error -  %v\n", time.Now(), err)
								}
							}
						}
					} else {
						fmt.Printf("%v\n", err)
					}
					/*} else if datapoints[i][0] == 'c' {
					for j := range retentions {
						path := gobatsd.CalculateFilename(fmt.Sprintf("%v:%v", string(datapoints[i]), retentions[j]), gobatsd.Config.Root)
						fmt.Printf("Migrating %v:%v from %v\n", string(datapoints[i]), retentions[j], path)
						file, err := os.Open(path)
						if err == nil {
							reader := bufio.NewReader(file)
							linesRead := 0
							for {
								line, err := reader.ReadString('\n')
								linesRead += 1
								if err != nil && err != io.EOF {
									panic(err)
								}
								if err != nil && err == io.EOF {
									break
								}
								if linesRead == 1 {
									continue
								}

								parts := strings.Split(strings.TrimSpace(line), " ")
								ts, _ := strconv.ParseInt(parts[0], 10, 64)
								value, _ := strconv.ParseFloat(parts[1], 64)

								mutations := []*Hbase.Mutation{goh.NewMutation(fmt.Sprintf("interval%v:value", retentions[j]), gobatsd.EncodeFloat64(value))}

								err = hbaseClient.MutateRowTs(gobatsd.Config.HbaseTable, datapoints[i], mutations, ts, nil)
								if err != nil {
									err = hbaseClient.MutateRowTs(gobatsd.Config.HbaseTable, datapoints[i], mutations, ts, nil)
									if err != nil {
										fmt.Printf("%v: mutate error -  %v\n", time.Now(), err)
									}
								}
							}
						} else {
							fmt.Printf("%v\n", err)
						}

					}*/
				} else if datapoints[i][0] == 't' && (len(datapoints[i]) < 16 || string(datapoints[i][0:15]) != "timers:sysstat.") {
					for j := range retentions {
						path := gobatsd.CalculateFilename(fmt.Sprintf("%v:%v:2", string(datapoints[i]), retentions[j]), gobatsd.Config.Root)
						fmt.Printf("(%v / %v) Migrating %v:%v from %v\n", i, len(datapoints), string(datapoints[i]), retentions[j], path)
						file, err := os.Open(path)
						if err == nil {
							reader := bufio.NewReader(file)
							linesRead := 0
							for {
								line, err := reader.ReadString('\n')
								linesRead += 1
								if err != nil && err != io.EOF {
									panic(err)
								}
								if err != nil && err == io.EOF {
									break
								}
								if linesRead == 1 {
									continue
								}

								parts := strings.Split(strings.TrimSpace(line), " ")
								ts, _ := strconv.ParseInt(parts[0], 10, 64)
								timerComponents := strings.Split(parts[1], "/")

								if ts > yearago {
									mutations := make([]*Hbase.Mutation, 0)
									for k, v := range timerHeader {
										val, _ := strconv.ParseFloat(timerComponents[v], 64)
										mutations = append(mutations, goh.NewMutation(fmt.Sprintf("interval%v:%v", retentions[j], k), gobatsd.EncodeFloat64(val)))
									}
									err = hbaseClient.MutateRowTs(gobatsd.Config.HbaseTable, datapoints[i], mutations, ts, nil)
									if err != nil {
										fmt.Printf("%v: mutate error -  %v\n", time.Now(), err)
									}
								}
							}
						} else {
							fmt.Printf("%v\n", err)
						}
					}

				}

			}
			c <- 1
		}(datapoints[k*len(datapoints)/nworkers:(k+1)*len(datapoints)/nworkers-1], c)
	}

	for i := 0; i < nworkers; i++ {
		<-c
	}
}