75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package database
|
|
|
|
|
|
import (
|
|
"log"
|
|
//"time"
|
|
"fmt"
|
|
"udi/counter"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type DatabaseHandle struct {
|
|
initialized bool
|
|
dbh *gorm.DB
|
|
}
|
|
|
|
func NewDatabaseHandle() *DatabaseHandle {
|
|
var db DatabaseHandle
|
|
// inject the whole database configuration via the well-known PG* env variables
|
|
conn, err := gorm.Open(postgres.Open(""))
|
|
if err != nil {
|
|
log.Printf("Unable to open database connection: %s", err)
|
|
db.initialized = false
|
|
} else {
|
|
db.dbh = conn
|
|
db.initialized = true
|
|
//log.Println("Database connection opened")
|
|
}
|
|
return &db
|
|
}
|
|
|
|
func (self *DatabaseHandle) StoreMeasurement(measurement *Measurement) {
|
|
if ! self.initialized {
|
|
log.Printf("Database connection not initialized, can not store, measurement %s lost", measurement)
|
|
counter.F("Stored")
|
|
return
|
|
}
|
|
|
|
result := self.dbh.Create(measurement)
|
|
if result.Error != nil {
|
|
log.Printf("Unable to insert, measurement %s lost, error: %s", measurement, result.Error)
|
|
counter.F("Stored")
|
|
return
|
|
}
|
|
|
|
//log.Println("Successfully stored measurement")
|
|
counter.S("Stored")
|
|
}
|
|
|
|
func (self *DatabaseHandle) GetDeviceByLabelAndApplication(applicationLabel string, deviceLabel string) (*Device, error) {
|
|
if ! self.initialized {
|
|
err := fmt.Errorf("Database connection not initialized")
|
|
return nil, err
|
|
}
|
|
|
|
var device Device
|
|
result := self.dbh.
|
|
Preload("Application").
|
|
Preload("DeviceType").
|
|
Joins("JOIN applications ON devices.application_id = applications.id").
|
|
Where("devices.label = ? AND applications.label = ?", deviceLabel, applicationLabel).
|
|
First(&device)
|
|
|
|
if result.Error != nil {
|
|
err := fmt.Errorf("Query failed: %s", result.Error)
|
|
return nil, err
|
|
}
|
|
|
|
return &device, nil
|
|
}
|
|
|
|
|
|
|