Add auto reconnect function.
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build Docker image / build (push) Successful in 49s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build Docker image / build (push) Successful in 49s
				
			This commit is contained in:
		
							parent
							
								
									ff52e2d65b
								
							
						
					
					
						commit
						71e579b14c
					
				
					 1 changed files with 66 additions and 45 deletions
				
			
		
							
								
								
									
										111
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										111
									
								
								main.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -40,7 +40,7 @@ type Payload struct {
 | 
			
		|||
var db *sql.DB
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	// Load environment variables from .env file if it exists
 | 
			
		||||
	// // Load environment variables from .env file if it exists
 | 
			
		||||
	// err := godotenv.Load()
 | 
			
		||||
	// if err != nil {
 | 
			
		||||
	// 	log.Println("Error loading .env file:", err)
 | 
			
		||||
| 
						 | 
				
			
			@ -48,52 +48,17 @@ func main() {
 | 
			
		|||
 | 
			
		||||
	// Connect to PostgreSQL
 | 
			
		||||
	pgConnStr := os.Getenv("PG_DB")
 | 
			
		||||
	var err error
 | 
			
		||||
	db, err = sql.Open("postgres", pgConnStr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer db.Close()
 | 
			
		||||
 | 
			
		||||
	// Enable TimescaleDB
 | 
			
		||||
	// _, err = db.Exec(`
 | 
			
		||||
	// 	CREATE EXTENSION IF NOT EXISTS timescaledb;
 | 
			
		||||
	// `)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Error creating TimescaleDB extension:", err)
 | 
			
		||||
	if err := connectToPostgreSQL(pgConnStr); err != nil {
 | 
			
		||||
		log.Fatal("Error connecting to PostgreSQL:", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create table if not exists
 | 
			
		||||
	_, err = db.Exec(`
 | 
			
		||||
		CREATE TABLE IF NOT EXISTS p1 (
 | 
			
		||||
			timestamp TIMESTAMPTZ,
 | 
			
		||||
			delivered_tariff1 INT,
 | 
			
		||||
			delivered_tariff2 INT,
 | 
			
		||||
			returned_tariff1 INT,
 | 
			
		||||
			returned_tariff2 INT,
 | 
			
		||||
			delivery_all INT,
 | 
			
		||||
			returning_all INT,
 | 
			
		||||
			failures INT,
 | 
			
		||||
			long_failures INT,
 | 
			
		||||
			gas INT,
 | 
			
		||||
			voltage_l1 INT,
 | 
			
		||||
			voltage_l2 INT,
 | 
			
		||||
			voltage_l3 INT,
 | 
			
		||||
			current_l1 INT,
 | 
			
		||||
			current_l2 INT,
 | 
			
		||||
			current_l3 INT,
 | 
			
		||||
			delivery_l1 INT,
 | 
			
		||||
			delivery_l2 INT,
 | 
			
		||||
			delivery_l3 INT,
 | 
			
		||||
			returning_l1 INT,
 | 
			
		||||
			returning_l2 INT,
 | 
			
		||||
			returning_l3 INT
 | 
			
		||||
			);
 | 
			
		||||
		-- SELECT create_hypertable('p1', 'timestamp', if_not_exists => TRUE);
 | 
			
		||||
	`)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Error creating table:", err)
 | 
			
		||||
	}
 | 
			
		||||
	// pgConnStr := os.Getenv("PG_DB")
 | 
			
		||||
	// var err error
 | 
			
		||||
	// db, err = sql.Open("postgres", pgConnStr)
 | 
			
		||||
	// if err != nil {
 | 
			
		||||
	// 	log.Fatal(err)
 | 
			
		||||
	// }
 | 
			
		||||
	// defer db.Close()
 | 
			
		||||
 | 
			
		||||
	// Initialize MQTT options
 | 
			
		||||
	opts := mqtt.NewClientOptions()
 | 
			
		||||
| 
						 | 
				
			
			@ -184,3 +149,59 @@ func insertData(timestamp time.Time, payload Payload) error {
 | 
			
		|||
	)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func connectToPostgreSQL(pgConnStr string) error {
 | 
			
		||||
	// Connect to PostgreSQL
 | 
			
		||||
	var err error
 | 
			
		||||
	for {
 | 
			
		||||
		db, err = sql.Open("postgres", pgConnStr)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			break // Successfully connected
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log.Println("Error connecting to PostgreSQL:", err)
 | 
			
		||||
		time.Sleep(5 * time.Second) // Retry after 5 seconds
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Enable TimescaleDB
 | 
			
		||||
	_, err = db.Exec(`
 | 
			
		||||
		CREATE EXTENSION IF NOT EXISTS timescaledb;
 | 
			
		||||
	`)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Error creating TimescaleDB extension:", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create table if not exists
 | 
			
		||||
	_, err = db.Exec(`
 | 
			
		||||
		CREATE TABLE IF NOT EXISTS p1 (
 | 
			
		||||
			timestamp TIMESTAMPTZ,
 | 
			
		||||
			delivered_tariff1 INT,
 | 
			
		||||
			delivered_tariff2 INT,
 | 
			
		||||
			returned_tariff1 INT,
 | 
			
		||||
			returned_tariff2 INT,
 | 
			
		||||
			delivery_all INT,
 | 
			
		||||
			returning_all INT,
 | 
			
		||||
			failures INT,
 | 
			
		||||
			long_failures INT,
 | 
			
		||||
			gas INT,
 | 
			
		||||
			voltage_l1 INT,
 | 
			
		||||
			voltage_l2 INT,
 | 
			
		||||
			voltage_l3 INT,
 | 
			
		||||
			current_l1 INT,
 | 
			
		||||
			current_l2 INT,
 | 
			
		||||
			current_l3 INT,
 | 
			
		||||
			delivery_l1 INT,
 | 
			
		||||
			delivery_l2 INT,
 | 
			
		||||
			delivery_l3 INT,
 | 
			
		||||
			returning_l1 INT,
 | 
			
		||||
			returning_l2 INT,
 | 
			
		||||
			returning_l3 INT
 | 
			
		||||
			);
 | 
			
		||||
		SELECT create_hypertable('p1', 'timestamp', if_not_exists => TRUE);
 | 
			
		||||
	`)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal("Error creating table:", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue