64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
)
|
|
|
|
var ClimateDb *sql.DB
|
|
|
|
func InitDb() error {
|
|
db, err := sql.Open("mysql", "admin:sekna123jk@tcp(127.0.0.1:3306)/climate")
|
|
if err != nil {
|
|
fmt.Println("error connecting to database")
|
|
return err
|
|
}
|
|
ClimateDb = db
|
|
return nil
|
|
}
|
|
|
|
func CloseDb() {
|
|
if ClimateDb != nil {
|
|
err := ClimateDb.Close()
|
|
if err != nil {
|
|
fmt.Println("error closing database: " + err.Error())
|
|
}
|
|
}
|
|
}
|
|
|
|
func writeSnapshotToDb(snapshotSub *SnapshotSubmission) error {
|
|
query := fmt.Sprintf("INSERT INTO `snapshots` (`temp`, `humidity`, `co2`, `time`, `id`) VALUES (%v, %v, %v, '%v', NULL);",
|
|
snapshotSub.Temp,
|
|
snapshotSub.Humidity,
|
|
snapshotSub.Co2,
|
|
snapshotSub.Timestamp)
|
|
_, err := ClimateDb.Query(query)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func getSnapshotRecordsFromDb(minuteAgo int) ([]*SnapshotRecord, error) {
|
|
snapshots := make([]*SnapshotRecord, minuteAgo)
|
|
query := "SELECT `%s`, `%s`, `%s`, `%s`, `%s` FROM `snapshots` WHERE `%s` > date_sub(now(), interval %v minute) ORDER BY `id` DESC;"
|
|
rows, err := ClimateDb.Query(fmt.Sprintf(query, "id", "temp", "humidity", "co2", "time", "time", minuteAgo))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for i := 0; rows.Next(); i++ {
|
|
var snapshotRecord SnapshotRecord
|
|
err = rows.Scan(
|
|
&snapshotRecord.Id,
|
|
&snapshotRecord.Temp,
|
|
&snapshotRecord.Humidity,
|
|
&snapshotRecord.Co2,
|
|
&snapshotRecord.Timestamp,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
snapshots[i] = &snapshotRecord
|
|
}
|
|
return snapshots, nil
|
|
} |