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…
Reference in a new issue