1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-29 13:49:28 +08:00

80 lines
1.9 KiB
Go
Raw Normal View History

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package postgres
import (
"fmt"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq" // required for SQL access
migrate "github.com/rubenv/sql-migrate"
)
// Config defines the options that are used when connecting to a PostgreSQL instance
type Config struct {
Host string
Port string
User string
Pass string
Name string
SSLMode string
SSLCert string
SSLKey string
SSLRootCert string
}
// Connect creates a connection to the PostgreSQL instance and applies any
// unapplied database migrations. A non-nil error is returned to indicate
// failure.
func Connect(cfg Config) (*sqlx.DB, error) {
url := fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s sslmode=%s sslcert=%s sslkey=%s sslrootcert=%s", cfg.Host, cfg.Port, cfg.User, cfg.Name, cfg.Pass, cfg.SSLMode, cfg.SSLCert, cfg.SSLKey, cfg.SSLRootCert)
db, err := sqlx.Open("postgres", url)
if err != nil {
return nil, err
}
if err := migrateDB(db); err != nil {
return nil, err
}
return db, nil
}
func migrateDB(db *sqlx.DB) error {
migrations := &migrate.MemoryMigrationSource{
Migrations: []*migrate.Migration{
{
Id: "messages_1",
Up: []string{
`CREATE TABLE IF NOT EXISTS messages (
id UUID,
channel UUID,
subtopic VARCHAR(254),
publisher UUID,
protocol TEXT,
name TEXT,
unit TEXT,
value FLOAT,
string_value TEXT,
bool_value BOOL,
data_value TEXT,
value_sum FLOAT,
NOISSUE - Add measuring time from pub to sub (#839) * refactor code Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * connect each thing with each channel Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reverting - structure fields must be exported Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * reverting - structure fields must be exported Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert some names Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * move meausuring time start Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add pub-to-sub delivery time measure Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add pub-to-sub delivery time measure Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add pub-to-sub delivery time measure Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add pub-to-sub delivery time measure Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * improve sync between pub and sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * improve sync between pub and sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * improve sync between pub and sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * improve sync between pub and sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * improve sync between pub and sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * improve sync between pub and sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add random payload Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * revert changes for config.toml Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add random payload Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * remove printfs Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add logging Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add payload Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add payload Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * rename variable Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * add payload Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * small changes Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor sync Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor sync Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * refactor results Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * change sync and result collecting for sub Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com> * fix comments Signed-off-by: Mirko Teodorovic <mirko.teodorovic@gmail.com>
2019-09-06 12:59:35 +00:00
time FLOAT,
update_time FLOAT,
link TEXT,
PRIMARY KEY (id)
)`,
},
Down: []string{
"DROP TABLE messages",
},
},
},
}
_, err := migrate.Exec(db.DB, "postgres", migrations, migrate.Up)
return err
}