statping/types/configs/file.go

72 lines
1.5 KiB
Go

package configs
import (
"github.com/pkg/errors"
"github.com/statping/statping/utils"
"os"
"path/filepath"
"strings"
)
var log = utils.Log
func ConnectConfigs(configs *DbConfig, retry bool) error {
err := Connect(configs, retry)
if err != nil {
return errors.Wrap(err, "error connecting to database")
}
if err := configs.Save(utils.Directory); err != nil {
return errors.Wrap(err, "error saving configuration")
}
return nil
}
func LoadConfigs() (*DbConfig, error) {
writeAble, err := utils.DirWritable(utils.Directory)
if err != nil {
return nil, err
}
if !writeAble {
return nil, errors.Errorf("Directory %s is not writable!", utils.Directory)
}
return LoadConfigFile(utils.Directory)
}
func findDbFile(configs *DbConfig) (string, error) {
location := utils.Directory + "/" + SqliteFilename
if configs == nil {
file, err := findSQLin(utils.Directory)
if err != nil {
return "", err
}
location = file
}
if configs != nil && configs.SqlFile != "" {
return configs.SqlFile, nil
}
return location, nil
}
func findSQLin(path string) (string, error) {
filename := SqliteFilename
var found []string
err := filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
return nil
}
if filepath.Ext(path) == ".db" {
filename = info.Name()
found = append(found, filename)
}
return nil
})
if err != nil {
return filename, err
}
if len(found) > 1 {
return filename, errors.Errorf("found multiple database files: %s", strings.Join(found, ", "))
}
return filename, nil
}