Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- r "github.com/dancannon/gorethink"
- "log"
- "os"
- "strings"
- )
- var session *r.Session
- func init() {
- var err error
- session, err = r.Connect(r.ConnectOpts{
- Address: "192.168.1.223:28015",
- Database: "test",
- })
- if err != nil {
- log.Println(err)
- return
- }
- }
- func main() {
- filePath := "/home/mleyzaola/go/src/github.com/NodePrime/datasets/slsdir/primary/cpu/77cdfc08575073acaf98ff8af9d69981/1436393635-10.200.22.31-37813.sls"
- data, err := ReadTsvFile(filePath)
- if err != nil {
- log.Fatal(err)
- }
- err = r.Table("cpu").Delete().Exec(session)
- if err != nil {
- log.Fatal(err)
- }
- r.Table("cpu").Insert(data).Exec(session)
- return
- }
- func ReadTsvFile(filePath string) (interface{}, error) {
- file, err := os.Open(filePath)
- if err != nil {
- return nil, err
- }
- defer file.Close()
- counter := 0
- scan := bufio.NewScanner(file)
- var headers []string
- var result []interface{}
- for scan.Scan() {
- lineData := scan.Text()
- if len(lineData) == 0 {
- break
- }
- counter++
- if counter == 1 {
- //read headers
- headers, err = parseHeaders(lineData)
- if err != nil {
- return nil, err
- }
- } else if counter == 2 {
- //todo: read nodeId from line #2
- continue
- } else {
- //todo: create a function to parse the line
- //based on file data type (cpu, memory, etc)
- //if there is no function, parse all data as strings
- line, err := parseLine(headers, lineData)
- if err != nil {
- return nil, err
- }
- result = append(result, line)
- }
- }
- return result, nil
- }
- func parseHeaders(lineData string) ([]string, error) {
- cols := strings.Split(lineData, "\t")
- var columns []string
- for i, col := range cols {
- if i == 0 && string(col[0]) == "#" {
- columns = append(columns, col[1:])
- } else {
- columns = append(columns, col)
- }
- }
- return columns, nil
- }
- func parseLine(headers []string, lineData string) (map[string]interface{}, error) {
- result := make(map[string]interface{})
- cols := strings.Split(lineData, "\t")
- for i := range headers {
- result[headers[i]] = cols[i]
- }
- return result, nil
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement