mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-06 11:39:42 -06:00
85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package cmds
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/shroff/phylum/server/internal/phylumsql"
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var debugMode bool = false
|
|
var queries phylumsql.Queries
|
|
|
|
func Setup() {
|
|
viper.SetEnvPrefix("phylum")
|
|
|
|
var rootCmd = &cobra.Command{Use: path.Base(os.Args[0])}
|
|
flags := rootCmd.PersistentFlags()
|
|
|
|
flags.BoolP("debug", "d", false, "Debug mode")
|
|
viper.BindPFlag("debug", flags.Lookup("debug"))
|
|
|
|
flags.StringP("working-dir", "W", ".", "Working Directory")
|
|
viper.BindPFlag("working_dir", flags.Lookup("working-dir"))
|
|
|
|
flags.String("database-url", "postgres://phylum:phylum@localhost:5432/phylum", "Database URL or DSN")
|
|
viper.BindPFlag("database_url", flags.Lookup("database-url"))
|
|
|
|
var conn *pgx.Conn
|
|
|
|
rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
|
|
workDir := viper.GetString("working_dir")
|
|
if workDir != "." {
|
|
log.Info(fmt.Sprintf("Setting working directory to %s", workDir))
|
|
os.Mkdir(workDir, 0750)
|
|
os.Chdir(workDir)
|
|
}
|
|
debugMode = viper.GetBool("debug")
|
|
if debugMode {
|
|
log.Info("Running in debug mode")
|
|
log.SetLevel(log.TraceLevel)
|
|
}
|
|
|
|
dsn := viper.GetString("database_url")
|
|
config, err := pgx.ParseConfig(dsn)
|
|
if err != nil {
|
|
log.Fatal(fmt.Sprintf("Unable to parse db connection String: %v\n", err))
|
|
}
|
|
if debugMode {
|
|
config.Tracer = phylumTracer{}
|
|
}
|
|
conn, err = pgx.ConnectConfig(context.Background(), config)
|
|
if err != nil {
|
|
log.Fatal(fmt.Sprintf("Unable to connect to database: %v\n", err))
|
|
}
|
|
queries = *phylumsql.New(conn)
|
|
}
|
|
|
|
defer func() {
|
|
if conn != nil {
|
|
log.Info("Closing datbase connection")
|
|
conn.Close(context.Background())
|
|
}
|
|
}()
|
|
|
|
rootCmd.AddCommand([]*cobra.Command{setupServeCommand(), setupAdminCommand()}...)
|
|
rootCmd.Execute()
|
|
}
|
|
|
|
type phylumTracer struct {
|
|
}
|
|
|
|
func (p phylumTracer) TraceQueryStart(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryStartData) context.Context {
|
|
log.Trace(fmt.Sprintf("%+v\n", data))
|
|
return ctx
|
|
}
|
|
|
|
func (p phylumTracer) TraceQueryEnd(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryEndData) {
|
|
}
|