more database refinements along with new command line options
This commit is contained in:
@@ -21,6 +21,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
argparse "github.com/alexflint/go-arg"
|
argparse "github.com/alexflint/go-arg"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
@@ -41,6 +42,8 @@ type AmCLI struct {
|
|||||||
ConfigFile string `arg:"-C,--config,env:AMSTERDAM_CONFIG" help:"Location of the configuration file."`
|
ConfigFile string `arg:"-C,--config,env:AMSTERDAM_CONFIG" help:"Location of the configuration file."`
|
||||||
Debug bool `arg:"-D,--debug,env:AMSTERDAM_DEBUG" help:"Force Amsterdam to run in debug mode."`
|
Debug bool `arg:"-D,--debug,env:AMSTERDAM_DEBUG" help:"Force Amsterdam to run in debug mode."`
|
||||||
Production bool `arg:"-P,--prod,--production,env:AMSTERDAM_PROD" help:"Force Amsterdam to run in production mode."`
|
Production bool `arg:"-P,--prod,--production,env:AMSTERDAM_PROD" help:"Force Amsterdam to run in production mode."`
|
||||||
|
DatabaseURL string `arg:"-d,--database,env:AMSTERDAM_DATABASE_URL" help:"Database URL for Amsterdam to connect to."`
|
||||||
|
Listen string `arg:"-l,--listen,env:AMSTERDAM_LISTEN" help:"Specifies the local address and port for Amsterdam to listen on."`
|
||||||
DebugPanic bool `arg:"--debug-panic" help:"Development Only - disable Echo panic recovery"`
|
DebugPanic bool `arg:"--debug-panic" help:"Development Only - disable Echo panic recovery"`
|
||||||
BuggyAttachments bool `arg:"--buggy-attachments" help:"Some attachments may be buggy - truncate data if necessary"`
|
BuggyAttachments bool `arg:"--buggy-attachments" help:"Some attachments may be buggy - truncate data if necessary"`
|
||||||
}
|
}
|
||||||
@@ -62,6 +65,7 @@ func (*AmCLI) Version() string {
|
|||||||
type AmConfig struct {
|
type AmConfig struct {
|
||||||
Site struct {
|
Site struct {
|
||||||
Production bool `yaml:"production"`
|
Production bool `yaml:"production"`
|
||||||
|
Listen string `yaml:"listen"`
|
||||||
BaseURL string `yaml:"baseURL"`
|
BaseURL string `yaml:"baseURL"`
|
||||||
Title string `yaml:"title"`
|
Title string `yaml:"title"`
|
||||||
SiteIcon struct {
|
SiteIcon struct {
|
||||||
@@ -152,6 +156,9 @@ type AmConfig struct {
|
|||||||
// AmConfigComputed is the configuration values which are "computed" based only on values in AmConfig.
|
// AmConfigComputed is the configuration values which are "computed" based only on values in AmConfig.
|
||||||
type AmConfigComputed struct {
|
type AmConfigComputed struct {
|
||||||
DebugMode bool // are we in debug mode?
|
DebugMode bool // are we in debug mode?
|
||||||
|
Listen string // listen address
|
||||||
|
DatabaseDriver string // name of database driver
|
||||||
|
DatabaseDSN string // DSN for the database
|
||||||
UploadMaxSize int32 // maximum upload size in bytes
|
UploadMaxSize int32 // maximum upload size in bytes
|
||||||
UploadNoCompress map[string]bool // which upload types are not compressed?
|
UploadNoCompress map[string]bool // which upload types are not compressed?
|
||||||
}
|
}
|
||||||
@@ -332,6 +339,22 @@ func SetupConfig() {
|
|||||||
} else {
|
} else {
|
||||||
GlobalComputedConfig.DebugMode = !GlobalConfig.Site.Production
|
GlobalComputedConfig.DebugMode = !GlobalConfig.Site.Production
|
||||||
}
|
}
|
||||||
|
if CommandLine.Listen != "" {
|
||||||
|
GlobalComputedConfig.Listen = CommandLine.Listen
|
||||||
|
} else {
|
||||||
|
GlobalComputedConfig.Listen = GlobalConfig.Site.Listen
|
||||||
|
}
|
||||||
|
if CommandLine.DatabaseURL != "" {
|
||||||
|
p := strings.Index(CommandLine.DatabaseURL, ":")
|
||||||
|
if p < 0 {
|
||||||
|
panic("Invalid database URL on command line")
|
||||||
|
}
|
||||||
|
GlobalComputedConfig.DatabaseDriver = CommandLine.DatabaseURL[:p]
|
||||||
|
GlobalComputedConfig.DatabaseDSN = CommandLine.DatabaseURL[p+1:]
|
||||||
|
} else {
|
||||||
|
GlobalComputedConfig.DatabaseDriver = GlobalConfig.Database.Driver
|
||||||
|
GlobalComputedConfig.DatabaseDSN = GlobalConfig.Database.Dsn
|
||||||
|
}
|
||||||
tmp, err := parseDataSize(GlobalConfig.Posting.Uploads.MaxSize)
|
tmp, err := parseDataSize(GlobalConfig.Posting.Uploads.MaxSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err.Error())
|
panic(err.Error())
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#
|
#
|
||||||
site:
|
site:
|
||||||
production: false
|
production: false
|
||||||
|
listen: ":1323"
|
||||||
baseURL: "http://localhost:1323"
|
baseURL: "http://localhost:1323"
|
||||||
title: "Amsterdam Web Communities System"
|
title: "Amsterdam Web Communities System"
|
||||||
siteIcon:
|
siteIcon:
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ var amdb *sqlx.DB
|
|||||||
// SetupDb sets up the database and associated items.
|
// SetupDb sets up the database and associated items.
|
||||||
func SetupDb() (func(), error) {
|
func SetupDb() (func(), error) {
|
||||||
exitfns := make([]func(), 0, 2)
|
exitfns := make([]func(), 0, 2)
|
||||||
db, err := sqlx.Open(config.GlobalConfig.Database.Driver, config.GlobalConfig.Database.Dsn)
|
db, err := sqlx.Connect(config.GlobalComputedConfig.DatabaseDriver, config.GlobalComputedConfig.DatabaseDSN)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
amdb = db
|
amdb = db
|
||||||
setupAdCache()
|
setupAdCache()
|
||||||
|
|||||||
+6
-5
@@ -21,6 +21,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.erbosoft.com/amy/amsterdam/config"
|
"git.erbosoft.com/amy/amsterdam/config"
|
||||||
|
"github.com/jmoiron/sqlx"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -653,15 +654,15 @@ func AmGetPublishedPosts(ctx context.Context) ([]*PostHeader, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Use the post IDs to build a SQL statement.
|
// Use the post IDs to build a SQL statement.
|
||||||
pidStrs := make([]string, len(pids))
|
query, args, err := sqlx.In("SELECT * FROM posts WHERE postid IN (?)", pids)
|
||||||
for i, pid := range pids {
|
if err != nil {
|
||||||
pidStrs[i] = fmt.Sprintf("%d", pid)
|
return nil, err
|
||||||
}
|
}
|
||||||
sql := fmt.Sprintf("SELECT * FROM posts WHERE postid IN (%s)", strings.Join(pidStrs, ", "))
|
query = amdb.Rebind(query)
|
||||||
|
|
||||||
// Use the SQL to read in all the post headers using a single database query.
|
// Use the SQL to read in all the post headers using a single database query.
|
||||||
var data []PostHeader
|
var data []PostHeader
|
||||||
if err = amdb.SelectContext(ctx, &data, sql); err != nil {
|
if err = amdb.SelectContext(ctx, &data, query, args...); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(data) < len(pids) {
|
if len(data) < len(pids) {
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ func main() {
|
|||||||
|
|
||||||
// Start server
|
// Start server
|
||||||
go func() {
|
go func() {
|
||||||
if err := e.Start(":1323"); err != nil && err != http.ErrServerClosed {
|
if err := e.Start(config.GlobalComputedConfig.Listen); err != nil && err != http.ErrServerClosed {
|
||||||
e.Logger.Fatalf("shutting down the server: %v", err)
|
e.Logger.Fatalf("shutting down the server: %v", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
Reference in New Issue
Block a user