mirror of https://github.com/status-im/fathom.git
build postgres dsn string dynamically
This commit is contained in:
parent
fe624a63a1
commit
b6f3be0e8e
|
@ -1,8 +1,8 @@
|
||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
mysql "github.com/go-sql-driver/mysql"
|
mysql "github.com/go-sql-driver/mysql"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
@ -19,11 +19,23 @@ func (c *Config) DSN() string {
|
||||||
|
|
||||||
switch c.Driver {
|
switch c.Driver {
|
||||||
case "postgres":
|
case "postgres":
|
||||||
dsn = fmt.Sprintf("host=%s user=%s password=%s dbname=%s", c.Host, c.User, c.Password, c.Name)
|
params := map[string]string{
|
||||||
|
"host": c.Host,
|
||||||
if c.SSLMode != "" {
|
"dbname": c.Name,
|
||||||
dsn = dsn + fmt.Sprintf(" sslmode=%s", c.SSLMode)
|
"user": c.User,
|
||||||
|
"password": c.Password,
|
||||||
|
"sslmode": c.SSLMode,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range params {
|
||||||
|
if v == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
dsn = dsn + k + "=" + v + " "
|
||||||
|
}
|
||||||
|
|
||||||
|
dsn = strings.TrimSpace(dsn)
|
||||||
case "mysql":
|
case "mysql":
|
||||||
mc := mysql.NewConfig()
|
mc := mysql.NewConfig()
|
||||||
mc.User = c.User
|
mc.User = c.User
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package sqlstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfigDSN(t *testing.T) {
|
||||||
|
c := Config{
|
||||||
|
Driver: "postgres",
|
||||||
|
User: "john",
|
||||||
|
Password: "foo",
|
||||||
|
}
|
||||||
|
e := fmt.Sprintf("user=%s password=%s", c.User, c.Password)
|
||||||
|
if v := c.DSN(); v != e {
|
||||||
|
t.Errorf("Invalid DSN. Expected %s, got %s", e, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
c = Config{
|
||||||
|
Driver: "postgres",
|
||||||
|
User: "john",
|
||||||
|
Password: "foo",
|
||||||
|
SSLMode: "disable",
|
||||||
|
}
|
||||||
|
e = fmt.Sprintf("user=%s password=%s sslmode=%s", c.User, c.Password, c.SSLMode)
|
||||||
|
if v := c.DSN(); v != e {
|
||||||
|
t.Errorf("Invalid DSN. Expected %s, got %s", e, v)
|
||||||
|
}
|
||||||
|
}
|
|
@ -78,7 +78,9 @@ func (db *sqlstore) UpdatePageviews(pageviews []*models.Pageview) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
query := tx.Rebind(`UPDATE pageviews SET is_bounce = ?, duration = ? WHERE id = ?`)
|
query := tx.Rebind(`UPDATE pageviews SET is_bounce = ?, duration = ? WHERE id = ?`)
|
||||||
|
|
||||||
stmt, err := tx.Preparex(query)
|
stmt, err := tx.Preparex(query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -86,6 +88,11 @@ func (db *sqlstore) UpdatePageviews(pageviews []*models.Pageview) error {
|
||||||
|
|
||||||
for i := range pageviews {
|
for i := range pageviews {
|
||||||
_, err = stmt.Exec(query, pageviews[i].IsBounce, pageviews[i].Duration)
|
_, err = stmt.Exec(query, pageviews[i].IsBounce, pageviews[i].Duration)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = tx.Commit()
|
err = tx.Commit()
|
||||||
|
|
Loading…
Reference in New Issue