Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2015
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. r "github.com/dancannon/gorethink"
  6. "log"
  7. "os"
  8. "strings"
  9. )
  10.  
  11. var session *r.Session
  12.  
  13. func init() {
  14. var err error
  15. session, err = r.Connect(r.ConnectOpts{
  16. Address: "192.168.1.223:28015",
  17. Database: "test",
  18. })
  19. if err != nil {
  20. log.Println(err)
  21. return
  22. }
  23. }
  24.  
  25. func main() {
  26. filePath := "/home/mleyzaola/go/src/github.com/NodePrime/datasets/slsdir/primary/cpu/77cdfc08575073acaf98ff8af9d69981/1436393635-10.200.22.31-37813.sls"
  27. data, err := ReadTsvFile(filePath)
  28. if err != nil {
  29. log.Fatal(err)
  30. }
  31. err = r.Table("cpu").Delete().Exec(session)
  32. if err != nil {
  33. log.Fatal(err)
  34. }
  35.  
  36. r.Table("cpu").Insert(data).Exec(session)
  37. return
  38.  
  39. }
  40.  
  41. func ReadTsvFile(filePath string) (interface{}, error) {
  42. file, err := os.Open(filePath)
  43. if err != nil {
  44. return nil, err
  45. }
  46. defer file.Close()
  47.  
  48. counter := 0
  49. scan := bufio.NewScanner(file)
  50. var headers []string
  51. var result []interface{}
  52. for scan.Scan() {
  53. lineData := scan.Text()
  54. if len(lineData) == 0 {
  55. break
  56. }
  57.  
  58. counter++
  59. if counter == 1 {
  60. //read headers
  61. headers, err = parseHeaders(lineData)
  62. if err != nil {
  63. return nil, err
  64. }
  65. } else if counter == 2 {
  66. //todo: read nodeId from line #2
  67. continue
  68. } else {
  69. //todo: create a function to parse the line
  70. //based on file data type (cpu, memory, etc)
  71. //if there is no function, parse all data as strings
  72. line, err := parseLine(headers, lineData)
  73. if err != nil {
  74. return nil, err
  75. }
  76. result = append(result, line)
  77. }
  78. }
  79. return result, nil
  80. }
  81.  
  82. func parseHeaders(lineData string) ([]string, error) {
  83. cols := strings.Split(lineData, "\t")
  84. var columns []string
  85. for i, col := range cols {
  86. if i == 0 && string(col[0]) == "#" {
  87. columns = append(columns, col[1:])
  88. } else {
  89. columns = append(columns, col)
  90. }
  91. }
  92. return columns, nil
  93. }
  94.  
  95. func parseLine(headers []string, lineData string) (map[string]interface{}, error) {
  96. result := make(map[string]interface{})
  97. cols := strings.Split(lineData, "\t")
  98. for i := range headers {
  99. result[headers[i]] = cols[i]
  100. }
  101. return result, nil
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement