qrz/src/config/main.go
Paul Lecuq bf1a033725
Some checks failed
continuous-integration/drone/push Build is failing
updated theme branch, added postgresql support
2020-06-02 02:17:57 +02:00

126 lines
3.3 KiB
Go

package config
import (
"flag"
"fmt"
"git.paulbsd.com/paulbsd/qrz/utils"
"github.com/jmoiron/sqlx"
"gopkg.in/ini.v1"
)
// GetConfig fetch configuration
func (config *Config) GetConfig() error {
var configfile string
var nofeed bool
var port int
flag.Usage = utils.Usage
flag.StringVar(&configfile, "configfile", "qrz.ini", "config file to use with qrz section")
flag.IntVar(&port, "port", 8080, "web port to use")
flag.BoolVar(&nofeed, "nofeed", false, "no feed database table with entries at first launch")
flag.Parse()
cfg, err := ini.Load(configfile)
if err != nil {
return err
}
qrzsection := cfg.Section("qrz")
config.Port = port
config.NoFeed = nofeed
config.DbHostname = qrzsection.Key("db_hostname").MustString("localhost")
config.DbName = qrzsection.Key("db_name").MustString("database")
config.DbUsername = qrzsection.Key("db_username").MustString("username")
config.DbPassword = qrzsection.Key("db_password").MustString("password")
config.DbSchema = qrzsection.Key("db_schema").MustString("")
config.DbTable = qrzsection.Key("db_table").MustString("qrz")
config.Cron = qrzsection.Key("cron").MustString("@every 1h")
config.DbSchema = fmt.Sprintf(`
CREATE TABLE IF NOT EXISTS %[1]s (
id serial NOT NULL PRIMARY KEY,
qrz varchar(25) NOT NULL,
name varchar(25) DEFAULT NULL,
address varchar(50) DEFAULT NULL,
city varchar(50) DEFAULT NULL,
zipcode varchar(5) DEFAULT NULL,
dept varchar(50) DEFAULT NULL,
country varchar(25) DEFAULT NULL,
dmrid varchar(25) DEFAULT NULL,
fts tsvector NULL,
CONSTRAINT qrz_unique UNIQUE(qrz, name, city, dept, country)
);
CREATE INDEX IF NOT EXISTS fts_idx ON %[1]s (fts);
CREATE OR REPLACE FUNCTION updateFTS() RETURNS trigger AS $fts_trigger$
BEGIN
IF pg_trigger_depth() <> 1 THEN
RETURN NEW;
END IF;
UPDATE %[1]s SET fts = to_tsvector(concat_ws(' ', qrz, name, city, dept, country)) WHERE id = NEW.id;
RETURN NEW;
END;
$fts_trigger$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS fts_trigger ON %[1]s;
CREATE TRIGGER fts_trigger
AFTER INSERT ON %[1]s
FOR EACH ROW EXECUTE PROCEDURE updateFTS();
`,
config.DbTable)
config.DbStatements.Insert = fmt.Sprintf(`
INSERT INTO %[1]s (qrz, dmrid, name, city, dept, country)
VALUES ($1, $2, $3, $4, $5, $6);
`,
config.DbTable)
config.DbStatements.ExportCSV = fmt.Sprintf(`
SELECT qrz, name, city, dept, country
FROM %[1]s;
`,
config.DbTable)
config.DbStatements.Countries = fmt.Sprintf(`
SELECT country
FROM %[1]s
GROUP BY country;
`,
config.DbTable)
config.URLBase = `http://groupe-frs.hamstation.eu/index_qrz_liste_%s.php`
config.QrzGroups = []string{"01", "03", "09", "103", "104", "107", "119", "13", "14", "146", "147", "15", "156", "16", "161", "163", "18", "188", "2", "214", "233", "25", "26", "29", "30", "31", "32", "34", "43", "44", "49", "54", "64", "66", "76", "79", "84", "97", "98"}
//config.QrzGroups = map[string]string{"France": "14"}
return nil
}
// Config is the global config of qrz
type Config struct {
Db *sqlx.DB
DbHostname string
DbName string
DbUsername string
DbPassword string
DbSchema string
DbTable string
DbStatements struct {
Insert string
ExportCSV string
Countries string
}
URLBase string
QrzGroups []string
Cron string
Port int
NoFeed bool
Version string
}