| 
					
				 | 
			
			
				@@ -6,12 +6,12 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"errors" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"flag" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	parser "log-temperature/parser" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"os" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"strconv" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -20,6 +20,7 @@ var db *string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var username *string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var password *string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var host *string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var test *bool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var locations = arrayFlags{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (i arrayFlags) String() string { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -44,28 +45,29 @@ func main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	username = flag.String("user", "", "Username") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	password = flag.String("password", "", "Password") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var reader *bufio.Reader 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Println("Could not connect") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Println(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Println(err.Error()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	_ = reader 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	parser := parser.JSONParser{reader} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		measurement, err := parser.Measure() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if measurement != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			logTemp(*measurement, client) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			_ = client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			writer.Write(*measurement) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			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 ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	simpleTestString = ` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	2018-04-13 22:57:36 :   Acurite 606TX Sensor    :       -5 
			 |