mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
package configs
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"github.com/statping-ng/statping-ng/utils"
 | 
						|
	"gopkg.in/yaml.v2"
 | 
						|
)
 | 
						|
 | 
						|
// Save will initially create the config.yml file
 | 
						|
func (d *DbConfig) Save(directory string) error {
 | 
						|
	c, err := yaml.Marshal(d)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	if err := utils.SaveFile(directory+"/config.yml", c); err != nil {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// Merge will merge the database connection info into the input
 | 
						|
func (d *DbConfig) Merge(newCfg *DbConfig) *DbConfig {
 | 
						|
	d.DbConn = newCfg.DbConn
 | 
						|
	d.DbHost = newCfg.DbHost
 | 
						|
	d.DbPort = newCfg.DbPort
 | 
						|
	d.DbData = newCfg.DbData
 | 
						|
	d.DbUser = newCfg.DbUser
 | 
						|
	d.DbPass = newCfg.DbPass
 | 
						|
	return d
 | 
						|
}
 | 
						|
 | 
						|
// Clean hides all sensitive database information for API requests
 | 
						|
func (d *DbConfig) Clean() *DbConfig {
 | 
						|
	d.DbConn = ""
 | 
						|
	d.DbHost = ""
 | 
						|
	d.DbPort = 0
 | 
						|
	d.DbData = ""
 | 
						|
	d.DbUser = ""
 | 
						|
	d.DbPass = ""
 | 
						|
	return d
 | 
						|
}
 | 
						|
 | 
						|
func (d *DbConfig) ToYAML() []byte {
 | 
						|
	c, err := yaml.Marshal(d)
 | 
						|
	if err != nil {
 | 
						|
		log.Errorln(err)
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
	return c
 | 
						|
}
 | 
						|
 | 
						|
func (d *DbConfig) ConnectionString() string {
 | 
						|
	var conn string
 | 
						|
	postgresSSL := utils.Params.GetString("POSTGRES_SSLMODE")
 | 
						|
 | 
						|
	switch d.DbConn {
 | 
						|
	case "memory", ":memory:":
 | 
						|
		conn = "sqlite3"
 | 
						|
		d.DbConn = ":memory:"
 | 
						|
		return d.DbConn
 | 
						|
	case "sqlite", "sqlite3":
 | 
						|
		conn, err := findDbFile(d)
 | 
						|
		if err != nil {
 | 
						|
			log.Errorln(err)
 | 
						|
		}
 | 
						|
		d.SqlFile = conn
 | 
						|
		log.Infof("SQL database file at: %s", d.SqlFile)
 | 
						|
		d.DbConn = "sqlite3"
 | 
						|
		return d.SqlFile
 | 
						|
	case "mysql":
 | 
						|
		host := fmt.Sprintf("%v:%v", d.DbHost, d.DbPort)
 | 
						|
		conn = fmt.Sprintf("%v:%v@tcp(%v)/%v?charset=utf8&parseTime=True&loc=UTC&time_zone=%%27UTC%%27", d.DbUser, d.DbPass, host, d.DbData)
 | 
						|
		return conn
 | 
						|
	case "postgres":
 | 
						|
		conn = fmt.Sprintf("host=%v port=%v user=%v dbname=%v password=%v timezone=UTC sslmode=%v", d.DbHost, d.DbPort, d.DbUser, d.DbData, d.DbPass, postgresSSL)
 | 
						|
		return conn
 | 
						|
	}
 | 
						|
	return conn
 | 
						|
}
 |