multisql/cfg/params.go
Arkadiusz Rychliński abfa87b523 Poprawione logowanie
2022-11-08 11:36:07 +01:00

115 lines
2.8 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cfg
import (
"bytes"
"encoding/json"
"flag"
"fmt"
"os"
)
type Parameters struct {
Verbose bool
ConfigFile string
Passfile string
OutDir string
SqlDir string
LogFile string
}
var params Parameters
func init() {
flag.BoolVar(&params.Verbose, "verbose", false, "Dodatkowe komunkaty diagnostyczne")
flag.StringVar(&params.ConfigFile, "config", "multisql.conf", "Plik konfiguracji")
flag.StringVar(&params.Passfile, "passfile", "", "Plik pgpass z hasłami do baz")
flag.StringVar(&params.OutDir, "outdir", "", "Katalog (istniejący i z prawem do zapisu), do którego generowane są wyniki")
flag.StringVar(&params.SqlDir, "sqldir", "scripts", "Katalog, w którym znajdują się skrypty do uruchomienia")
flag.StringVar(&params.LogFile, "log", "", "Plik, do którego zostanie dopisany log programu")
flag.Usage = printUsage
flag.Parse()
}
func GetParams() Parameters {
return params
}
func printUsage() {
fmt.Fprintf(os.Stderr,
`
multisql - uruchamia zestaw skryptów na skonfigurowanej liście baz danych.
Program, dla każdej z baz wskazanych w konfiguracji, uruchamia kolejno każdy
z plików sql wskazanych parametrem lub w pliku konfiguracji poprzez
uruchomienie narzędzia psql:
psql -f skrypt.sql -w -L log.txt _szczegóły_połaczenia_ 2>stderr.txt > stdout.txt
Skrypty mogą mieć dowolne rozszerzenia ale podkatalogi nie są obsługiwane.
Pliki wynikowe zapisywane są do katalogu wskazanego w outdir w strukturze o postaci
output:
-> data-godzina-pid
-> host-port-baza-user
-> skrypt.sql
-> log.txt
-> stdout.txt
-> stderr.txt
Użycie:
multisql -outdir /tmp -sqldir /data/skrypty -passfile ./hasla
Opis flag:
`,
)
flag.PrintDefaults()
fmt.Fprintf(os.Stderr,
`
Plik passfile ma standardowy format .pgpass PostgreSQLa.
Plik multisql.conf ma format JSON, np:
> `,
)
c := Config{
PassFile: "mypgpass",
PsqlExec: "/usr/local/bin/psql",
SqlDir: "/data/skrypty-sql",
Defaults: Connection{
Port: 5433,
User: "myapp",
DbName: "moja-db",
},
Connections: []Connection{
{
Host: "10.20.30.01",
},
{
Host: "10.20.30.02",
DbName: "innadb",
User: "innyuser",
},
},
}
b, _ := json.Marshal(&c)
var out bytes.Buffer
_ = json.Indent(&out, b, "> ", "\t")
_, _ = out.WriteTo(os.Stderr)
fmt.Fprintln(os.Stderr, `
PsqlExec jest opcjonalny - jesli nie zostanie podany wyszukuje się programu psql.exe w PATH.
Każde połączenie w tablicy Connections może zawierać Host, Port, User i DbName.
Brakujące wartości są uzupełniane z sekcji Defaults (która ma taki sam
format jak obiekt w Connections).
Parametry mają pierwszeństwo przed wartościami w konfiguracji.
Format pliku passfile jest następujący:
hostname:port:database:username:password
W szczególach opisano go na https://www.postgresql.org/docs/current/libpq-pgpass.html.`)
}