You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
rdb "git.runcible.io/learning/ratchet/internal/database"
|
|
"git.runcible.io/learning/ratchet/internal/logging"
|
|
"git.runcible.io/learning/ratchet/internal/server"
|
|
"github.com/alexedwards/scs/sqlite3store"
|
|
"github.com/alexedwards/scs/v2"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
// "git.runcible.io/learning/ratchet"
|
|
// ratchethttp "git.runcible.io/learning/ratchet/internal"
|
|
)
|
|
|
|
// var (
|
|
// version string
|
|
// commit string
|
|
// )
|
|
|
|
func main() {
|
|
// CONFIGURATION
|
|
// Parse command line options
|
|
addr := flag.String("addr", "0.0.0.0", "HTTP network address")
|
|
port := flag.String("port", "5001", "HTTP port")
|
|
logLevel := flag.String("logging", "INFO", "Logging Level. Valid values [INFO, DEBUG, WARN, ERROR].")
|
|
dbPath := flag.String("database", "./ratchet.db", "A path to a sqlite3 database")
|
|
// must call parse or all values will be the defaults
|
|
flag.Parse()
|
|
|
|
// DEPENDENCY INJECTION FOR HANDLERS
|
|
// Setup Logging
|
|
logger := logging.InitLogging(*logLevel, false)
|
|
// Setup DB Connection Pool
|
|
db, err := rdb.OpenSqlite3DB(*dbPath)
|
|
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
os.Exit(1)
|
|
}
|
|
// Close db connection before exiting main.
|
|
defer db.Close()
|
|
|
|
tc, err := server.InitTemplateCache()
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
// SessionManager
|
|
sm := scs.New()
|
|
sm.Store = sqlite3store.New(db)
|
|
sm.Lifetime = 12 * time.Hour
|
|
// Propagate build information to root package to share globally
|
|
// ratchet.Version = strings.TrimPrefix(version, "")
|
|
// ratchet.Commit = commit
|
|
server := server.NewRatchetServer(logger, tc, db, sm)
|
|
|
|
// START SERVING REQUESTS
|
|
slog.Debug("Herp dirp!")
|
|
slog.Info(fmt.Sprintf("Listening on http://%s:%s", *addr, *port))
|
|
//log.Fatal(http.ListenAndServe(fmt.Sprintf("%s:%s", *addr, *port), server))
|
|
// there is no log.Fatal equivalent. This is an approximation of the behavior
|
|
err = http.ListenAndServe(fmt.Sprintf("%s:%s", *addr, *port), server)
|
|
slog.Error(err.Error())
|
|
os.Exit(1)
|
|
|
|
}
|