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
 | 
					var db *sql.DB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	// Load environment variables from .env file if it exists
 | 
						// // Load environment variables from .env file if it exists
 | 
				
			||||||
	// err := godotenv.Load()
 | 
						// err := godotenv.Load()
 | 
				
			||||||
	// if err != nil {
 | 
						// if err != nil {
 | 
				
			||||||
	// 	log.Println("Error loading .env file:", err)
 | 
						// 	log.Println("Error loading .env file:", err)
 | 
				
			||||||
| 
						 | 
					@ -48,52 +48,17 @@ func main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Connect to PostgreSQL
 | 
						// Connect to PostgreSQL
 | 
				
			||||||
	pgConnStr := os.Getenv("PG_DB")
 | 
						pgConnStr := os.Getenv("PG_DB")
 | 
				
			||||||
	var err error
 | 
						if err := connectToPostgreSQL(pgConnStr); err != nil {
 | 
				
			||||||
	db, err = sql.Open("postgres", pgConnStr)
 | 
							log.Fatal("Error connecting to PostgreSQL:", err)
 | 
				
			||||||
	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)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create table if not exists
 | 
						// pgConnStr := os.Getenv("PG_DB")
 | 
				
			||||||
	_, err = db.Exec(`
 | 
						// var err error
 | 
				
			||||||
		CREATE TABLE IF NOT EXISTS p1 (
 | 
						// db, err = sql.Open("postgres", pgConnStr)
 | 
				
			||||||
			timestamp TIMESTAMPTZ,
 | 
						// if err != nil {
 | 
				
			||||||
			delivered_tariff1 INT,
 | 
						// 	log.Fatal(err)
 | 
				
			||||||
			delivered_tariff2 INT,
 | 
						// }
 | 
				
			||||||
			returned_tariff1 INT,
 | 
						// defer db.Close()
 | 
				
			||||||
			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)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Initialize MQTT options
 | 
						// Initialize MQTT options
 | 
				
			||||||
	opts := mqtt.NewClientOptions()
 | 
						opts := mqtt.NewClientOptions()
 | 
				
			||||||
| 
						 | 
					@ -184,3 +149,59 @@ func insertData(timestamp time.Time, payload Payload) error {
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	return err
 | 
						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