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

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)
}