| 
														
															@@ -6,12 +6,12 @@ import ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	"errors" 
														 | 
														
														 | 
														
															 	"errors" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	"flag" 
														 | 
														
														 | 
														
															 	"flag" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	"fmt" 
														 | 
														
														 | 
														
															 	"fmt" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	parser "log-temperature/parser" 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	"os" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	"strconv" 
														 | 
														
														 | 
														
															 	"strconv" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	"strings" 
														 | 
														
														 | 
														
															 	"strings" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	"time" 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	influx "github.com/influxdata/influxdb/client/v2" 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	"git.snppla.net/snppla/log-temperature/parser" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	"git.snppla.net/snppla/log-temperature/writer" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ) 
														 | 
														
														 | 
														
															 ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 type arrayFlags map[int]string 
														 | 
														
														 | 
														
															 type arrayFlags map[int]string 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -20,6 +20,7 @@ var db *string 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 var username *string 
														 | 
														
														 | 
														
															 var username *string 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 var password *string 
														 | 
														
														 | 
														
															 var password *string 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 var host *string 
														 | 
														
														 | 
														
															 var host *string 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+var test *bool 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 var locations = arrayFlags{} 
														 | 
														
														 | 
														
															 var locations = arrayFlags{} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 func (i arrayFlags) String() string { 
														 | 
														
														 | 
														
															 func (i arrayFlags) String() string { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -44,28 +45,29 @@ func main() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	username = flag.String("user", "", "Username") 
														 | 
														
														 | 
														
															 	username = flag.String("user", "", "Username") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	password = flag.String("password", "", "Password") 
														 | 
														
														 | 
														
															 	password = flag.String("password", "", "Password") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	host = flag.String("host", "http://localhost", "Host to connect to") 
														 | 
														
														 | 
														
															 	host = flag.String("host", "http://localhost", "Host to connect to") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	test = flag.Bool("test", false, "Use a test input string") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	flag.Var(&locations, "location", "Id and location of the sensor (5:conference-room") 
														 | 
														
														 | 
														
															 	flag.Var(&locations, "location", "Id and location of the sensor (5:conference-room") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	var reader *bufio.Reader 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	flag.Parse() 
														 | 
														
														 | 
														
															 	flag.Parse() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	//reader := bufio.NewReader(os.Stdin) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	reader := bufio.NewReader(strings.NewReader(jasonTestString)) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	client, err := influx.NewHTTPClient(influx.HTTPConfig{ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		Addr:     *host, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		Username: *username, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		Password: *password, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	}) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if *test { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		reader = bufio.NewReader(strings.NewReader(jasonTestString)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		reader = bufio.NewReader(os.Stdin) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	parser := parser.JSONParser{Reader: reader} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	writer, err := writer.NewInfluxWriter(*db, *host, *username, *password, locations) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	if err != nil { 
														 | 
														
														 | 
														
															 	if err != nil { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println("Could not connect") 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println(err) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		fmt.Println(err.Error()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		return 
														 | 
														
														 | 
														
															 		return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	_ = reader 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	parser := parser.JSONParser{reader} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	for { 
														 | 
														
														 | 
														
															 	for { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		measurement, err := parser.Measure() 
														 | 
														
														 | 
														
															 		measurement, err := parser.Measure() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		if measurement != nil { 
														 | 
														
														 | 
														
															 		if measurement != nil { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			logTemp(*measurement, client) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			_ = client 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			writer.Write(*measurement) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		} 
														 | 
														
														 | 
														
															 		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		if err != nil { 
														 | 
														
														 | 
														
															 		if err != nil { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			fmt.Println(err.Error()) 
														 | 
														
														 | 
														
															 			fmt.Println(err.Error()) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -74,44 +76,6 @@ func main() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-func logTemp(measurement parser.Measurement, client influx.Client) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	bp, err := influx.NewBatchPoints(influx.BatchPointsConfig{ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		Database:  *db, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		Precision: "s", 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	}) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if err != nil { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println("Could not log temperature") 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println(err) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		return 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	var tags = map[string]string{} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if val, ok := locations[measurement.ID]; ok { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		tags["location"] = val 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	} else { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		tags["location"] = "unknown" 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	fields := map[string]interface{}{ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		"temperature": measurement.Temperature, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	pt, err := influx.NewPoint("temperature", tags, fields, time.Now()) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if err != nil { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println("Could not log temperature") 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println(err) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		return 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	bp.AddPoint(pt) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	err = client.Write(bp) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if err != nil { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println("Could not log temperature") 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		fmt.Println(err) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		return 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const ( 
														 | 
														
														 | 
														
															 const ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	simpleTestString = ` 
														 | 
														
														 | 
														
															 	simpleTestString = ` 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	2018-04-13 22:57:36 :   Acurite 606TX Sensor    :       -5 
														 | 
														
														 | 
														
															 	2018-04-13 22:57:36 :   Acurite 606TX Sensor    :       -5 
														 |