Skip to content

Commit

Permalink
Added logger singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
stratic-dev committed Oct 10, 2024
1 parent 32dbfa7 commit 44692e9
Show file tree
Hide file tree
Showing 12 changed files with 165 additions and 74 deletions.
78 changes: 40 additions & 38 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import (
"erupe-ce/server/channelserver"
"erupe-ce/server/discordbot"
"erupe-ce/server/entranceserver"
"erupe-ce/utils/logger"

"erupe-ce/server/signserver"
"erupe-ce/utils/gametime"

Expand All @@ -22,6 +24,8 @@ import (
"go.uber.org/zap"
)

var mainLogger logger.Logger

// Temporary DB auto clean on startup for quick development & testing.
func cleanDB(db *sqlx.DB) {
_ = db.MustExec("DELETE FROM guild_characters")
Expand All @@ -41,18 +45,22 @@ var Commit = func() string {
return "unknown"
}

func initLogger() {
var zapLogger *zap.Logger
zapLogger, _ = zap.NewDevelopment(zap.WithCaller(false))
defer zapLogger.Sync()
// Initialize the global logger
logger.Init(zapLogger)
mainLogger = logger.Get().Named("main")

}
func main() {
var err error

var zapLogger *zap.Logger
config := _config.ErupeConfig
zapLogger, _ = zap.NewDevelopment()

defer zapLogger.Sync()
logger := zapLogger.Named("main")

logger.Info(fmt.Sprintf("Starting Erupe (9.3b-%s)", Commit()))
logger.Info(fmt.Sprintf("Client Mode: %s (%d)", config.ClientMode, config.ClientID))
initLogger()
mainLogger.Info(fmt.Sprintf("Starting Erupe (9.3b-%s)", Commit()))
mainLogger.Info(fmt.Sprintf("Client Mode: %s (%d)", config.ClientMode, config.ClientID))

if config.Database.Password == "" {
preventClose("Database password is blank")
Expand All @@ -76,31 +84,30 @@ func main() {

if config.Discord.Enabled {
bot, err := discordbot.NewDiscordBot(discordbot.Options{
Logger: logger,
Config: _config.ErupeConfig,
})

DiscordFailMsg := "Discord: Failed to start, %s"
if err != nil {
preventClose(fmt.Sprintf("Discord: Failed to start, %s", err.Error()))
preventClose(fmt.Sprintf(DiscordFailMsg, err.Error()))
}

// Discord bot
err = bot.Start()

if err != nil {
preventClose(fmt.Sprintf("Discord: Failed to start, %s", err.Error()))
preventClose(fmt.Sprintf(DiscordFailMsg, err.Error()))
}

discordBot = bot

_, err = discordBot.Session.ApplicationCommandBulkOverwrite(discordBot.Session.State.User.ID, "", discordbot.Commands)
if err != nil {
preventClose(fmt.Sprintf("Discord: Failed to start, %s", err.Error()))
preventClose(fmt.Sprintf(DiscordFailMsg, err.Error()))
}

logger.Info("Discord: Started successfully")
mainLogger.Info("Discord: Started successfully")
} else {
logger.Info("Discord: Disabled")
mainLogger.Info("Discord: Disabled")
}

// Create the postgres DB pool.
Expand All @@ -123,7 +130,7 @@ func main() {
if err != nil {
preventClose(fmt.Sprintf("Database: Failed to ping, %s", err.Error()))
}
logger.Info("Database: Started successfully")
mainLogger.Info("Database: Started successfully")

// Clear stale data
if config.DebugOptions.ProxyPort == 0 {
Expand All @@ -134,73 +141,70 @@ func main() {

// Clean the DB if the option is on.
if config.DebugOptions.CleanDB {
logger.Info("Database: Started clearing...")
mainLogger.Info("Database: Started clearing...")
cleanDB(db)
logger.Info("Database: Finished clearing")
mainLogger.Info("Database: Finished clearing")
}

logger.Info(fmt.Sprintf("Server Time: %s", gametime.TimeAdjusted().String()))
mainLogger.Info(fmt.Sprintf("Server Time: %s", gametime.TimeAdjusted().String()))

// Now start our server(s).

// Entrance server.
entranceLogger := logger.Get().Named("entrance")

var entranceServer *entranceserver.Server
if config.Entrance.Enabled {
entranceServer = entranceserver.NewServer(
&entranceserver.Config{
Logger: logger.Named("entrance"),
Logger: entranceLogger,
ErupeConfig: _config.ErupeConfig,
DB: db,
})
err = entranceServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Entrance: Failed to start, %s", err.Error()))
}
logger.Info("Entrance: Started successfully")
mainLogger.Info("Entrance: Started successfully")
} else {
logger.Info("Entrance: Disabled")
mainLogger.Info("Entrance: Disabled")
}

// Sign server.

var signServer *signserver.Server
if config.Sign.Enabled {
signServer = signserver.NewServer(
&signserver.Config{
Logger: logger.Named("sign"),
ErupeConfig: _config.ErupeConfig,
DB: db,
})
err = signServer.Start()
if err != nil {
preventClose(fmt.Sprintf("Sign: Failed to start, %s", err.Error()))
}
logger.Info("Sign: Started successfully")
mainLogger.Info("Sign: Started successfully")
} else {
logger.Info("Sign: Disabled")
mainLogger.Info("Sign: Disabled")
}

// New Sign server
// Api server
var ApiServer *api.APIServer
if config.API.Enabled {
ApiServer = api.NewAPIServer(
&api.Config{
Logger: logger.Named("sign"),
ErupeConfig: _config.ErupeConfig,
DB: db,
})
err = ApiServer.Start()
if err != nil {
preventClose(fmt.Sprintf("API: Failed to start, %s", err.Error()))
}
logger.Info("API: Started successfully")
mainLogger.Info("API: Started successfully")
} else {
logger.Info("API: Disabled")
mainLogger.Info("API: Disabled")
}

var channelServers []*channelserver.Server

if config.Channel.Enabled {
channelQuery := ""
si := 0
Expand All @@ -211,7 +215,6 @@ func main() {
sid := (4096 + si*256) + (16 + ci)
c := *channelserver.NewServer(&channelserver.Config{
ID: uint16(sid),
Logger: logger.Named("channel-" + fmt.Sprint(count)),
ErupeConfig: _config.ErupeConfig,
DB: db,
DiscordBot: discordBot,
Expand All @@ -229,7 +232,7 @@ func main() {
} else {
channelQuery += fmt.Sprintf(`INSERT INTO servers (server_id, current_players, world_name, world_description, land) VALUES (%d, 0, '%s', '%s', %d);`, sid, ee.Name, ee.Description, i+1)
channelServers = append(channelServers, &c)
logger.Info(fmt.Sprintf("Channel %d (%d): Started successfully", count, ce.Port))
mainLogger.Info(fmt.Sprintf("Channel %d (%d): Started successfully", count, ce.Port))
ci++
count++
}
Expand All @@ -246,7 +249,7 @@ func main() {
}
}

logger.Info("Finished starting Erupe")
mainLogger.Info("Finished starting Erupe")

// Wait for exit or interrupt with ctrl+C.
c := make(chan os.Signal, 1)
Expand All @@ -259,7 +262,7 @@ func main() {
for _, channelServer := range channelServers {
channelServer.BroadcastChatMessage(message)
}
logger.Info(message)
mainLogger.Warn(message)
time.Sleep(time.Second)
}
}
Expand Down Expand Up @@ -295,9 +298,8 @@ func preventClose(text string) {
if _config.ErupeConfig.DisableSoftCrash {
os.Exit(0)
}
fmt.Println("\nFailed to start Erupe:\n" + text)
mainLogger.Error(fmt.Sprintf(("\nFailed to start Erupe:\n" + text)))
go wait()
fmt.Println("\nPress Enter/Return to exit...")
fmt.Scanln()
mainLogger.Error(fmt.Sprintf(("\nPress Enter/Return to exit...")))
os.Exit(0)
}
8 changes: 5 additions & 3 deletions server/api/api_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,23 @@ import (
"sync"
"time"

"erupe-ce/utils/logger"

"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/jmoiron/sqlx"
"go.uber.org/zap"
)

type Config struct {
Logger *zap.Logger
DB *sqlx.DB
ErupeConfig *_config.Config
}

// APIServer is Erupes Standard API interface
type APIServer struct {
sync.Mutex
logger *zap.Logger
logger logger.Logger
erupeConfig *_config.Config
db *sqlx.DB
httpServer *http.Server
Expand All @@ -33,8 +34,9 @@ type APIServer struct {

// NewAPIServer creates a new Server type.
func NewAPIServer(config *Config) *APIServer {

s := &APIServer{
logger: config.Logger,
logger: logger.Get().Named("API"),
erupeConfig: config.ErupeConfig,
db: config.DB,
httpServer: &http.Server{},
Expand Down
38 changes: 22 additions & 16 deletions server/channelserver/handlers_cast_binary.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ import (
"erupe-ce/network/binpacket"
"erupe-ce/network/mhfpacket"
"erupe-ce/utils/byteframe"
"erupe-ce/utils/logger"
"erupe-ce/utils/mhfcid"
"erupe-ce/utils/mhfcourse"
"erupe-ce/utils/token"
"sync"

"fmt"
"math"
"strconv"
Expand Down Expand Up @@ -39,24 +42,27 @@ const (
BroadcastTypeWorld = 0x0a
)

var commands map[string]_config.Command
var (
commands map[string]_config.Command
once sync.Once // Ensures that initialization happens only once
commandsMu sync.Mutex // Mutex to ensure thread safety for commands map
)

func (server *Server) initCommands() {
once.Do(func() {
commands = make(map[string]_config.Command)

func init() {
commands = make(map[string]_config.Command)
zapConfig := zap.NewDevelopmentConfig()
zapConfig.DisableCaller = true
zapLogger, _ := zapConfig.Build()
defer zapLogger.Sync()
logger := zapLogger.Named("commands")
cmds := _config.ErupeConfig.Commands
for _, cmd := range cmds {
commands[cmd.Name] = cmd
if cmd.Enabled {
logger.Info(fmt.Sprintf("Command %s: Enabled, prefix: %s", cmd.Name, cmd.Prefix))
} else {
logger.Info(fmt.Sprintf("Command %s: Disabled", cmd.Name))
commandLogger := logger.Get().Named("command")
cmds := _config.ErupeConfig.Commands
for _, cmd := range cmds {
commands[cmd.Name] = cmd
if cmd.Enabled {
commandLogger.Info(fmt.Sprintf("%s: Enabled, prefix: %s", cmd.Name, cmd.Prefix))
} else {
commandLogger.Info(fmt.Sprintf("%s: Disabled", cmd.Name))
}
}
}
})
}

func sendDisabledCommandMessage(s *Session, cmd _config.Command) {
Expand Down
8 changes: 4 additions & 4 deletions server/channelserver/sys_channel_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
_config "erupe-ce/config"
"erupe-ce/server/discordbot"
"erupe-ce/utils/gametime"
"erupe-ce/utils/logger"

"github.com/jmoiron/sqlx"
"go.uber.org/zap"
Expand All @@ -17,7 +18,6 @@ import (
// Config struct allows configuring the server.
type Config struct {
ID uint16
Logger *zap.Logger
DB *sqlx.DB
DiscordBot *discordbot.DiscordBot
ErupeConfig *_config.Config
Expand All @@ -39,7 +39,7 @@ type Server struct {
GlobalID string
IP string
Port uint16
logger *zap.Logger
logger logger.Logger
db *sqlx.DB
erupeConfig *_config.Config
acceptConns chan net.Conn
Expand Down Expand Up @@ -92,7 +92,7 @@ func NewServer(config *Config) *Server {
}
server := &Server{
ID: config.ID,
logger: config.Logger,
logger: logger.Get().Named("channel-" + fmt.Sprint(config.ID)),
db: config.DB,
erupeConfig: config.ErupeConfig,
acceptConns: make(chan net.Conn),
Expand All @@ -114,9 +114,9 @@ func NewServer(config *Config) *Server {
questCacheData: make(map[int][]byte),
questCacheTime: make(map[int]time.Time),
}
server.initCommands()

server.i18n = getLangStrings(server)

return server
}

Expand Down
3 changes: 2 additions & 1 deletion server/channelserver/sys_session.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"erupe-ce/network"
"erupe-ce/network/mhfpacket"
"erupe-ce/utils/byteframe"
"erupe-ce/utils/logger"
"erupe-ce/utils/stringstack"

"go.uber.org/zap"
Expand All @@ -23,7 +24,7 @@ import (
// Session holds state for the channel server connection.
type Session struct {
sync.Mutex
logger *zap.Logger
logger logger.Logger
server *Server
rawConn net.Conn
cryptConn *network.CryptConn
Expand Down
Loading

0 comments on commit 44692e9

Please sign in to comment.