Skip to content

Commit

Permalink
Converted to gorm for DB & organized code (#540)
Browse files Browse the repository at this point in the history
  • Loading branch information
jibon57 authored Aug 14, 2024
1 parent 2bebc97 commit 55e7363
Show file tree
Hide file tree
Showing 201 changed files with 11,209 additions and 1,531 deletions.
2 changes: 1 addition & 1 deletion .air.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ tmp_dir = "./etc/tmp"
[build]
args_bin = []
bin = "./etc/tmp/main"
cmd = "go build -race -o ./etc/tmp/main cmd/server/*.go"
cmd = "go build -race -o ./etc/tmp/main main.go"
delay = 1000
exclude_dir = ["tmp", "test", "log", "etc", "github_files", "sql_dump", "upload", "recording_files", "client"]
exclude_file = []
Expand Down
5 changes: 3 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@ RUN echo building for "$TARGETPLATFORM"

WORKDIR /go/src/app

COPY main.go main.go
COPY go.mod go.mod
COPY go.sum go.sum
# download if above files changed
RUN go mod download

# Copy the go source
COPY cmd/ cmd/
COPY helpers/ helpers/
COPY pkg/ pkg/
COPY version/ version/

RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags '-w -s -buildid=' -a -o plugnmeet-server ./cmd/server
RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags '-w -s -buildid=' -a -o plugnmeet-server main.go

FROM debian:stable-slim

Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
NAME=plugnmeet-server
BINDIR=bin
FILE_PATH=cmd/server/*.go
GOBUILD=CGO_ENABLED=0 go build -ldflags '-w -s -buildid='
FILE_PATH=main.go
# The -w and -s flags reduce binary sizes by excluding unnecessary symbols and debug info
# The -buildid= flag makes builds reproducible
GOBUILD=CGO_ENABLED=0 go build -ldflags '-w -s -buildid='

linux-amd64:
GOARCH=amd64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(FILE_PATH)
Expand Down
16 changes: 9 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ require (
github.com/gofiber/template/html/v2 v2.1.2
github.com/google/uuid v1.6.0
github.com/jordic/lti v0.0.0-20160211051708-2c756eacbab9
github.com/livekit/protocol v1.19.1
github.com/livekit/protocol v1.19.3
github.com/livekit/server-sdk-go/v2 v2.2.0
github.com/mynaparrot/plugnmeet-protocol v0.0.0-20240728070254-76539e3c239c
github.com/redis/go-redis/v9 v9.6.1
Expand All @@ -27,6 +27,8 @@ require (
google.golang.org/protobuf v1.34.2
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v3 v3.0.1
gorm.io/driver/mysql v1.5.7
gorm.io/gorm v1.25.11
)

require (
Expand All @@ -47,13 +49,14 @@ require (
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/gofiber/adaptor/v2 v2.2.1 // indirect
github.com/gofiber/template v1.8.3 // indirect
github.com/gofiber/utils v1.1.0 // indirect
github.com/google/cel-go v0.20.1 // indirect
github.com/gorilla/websocket v1.5.2 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/jxskiss/base62 v1.1.0 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
Expand All @@ -64,7 +67,6 @@ require (
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/nats-io/nats.go v1.36.0 // indirect
github.com/pion/datachannel v1.5.6 // indirect
github.com/pion/dtls/v2 v2.2.11 // indirect
github.com/pion/ice/v2 v2.3.24 // indirect
Expand Down Expand Up @@ -101,12 +103,12 @@ require (
go.uber.org/zap v1.27.0 // indirect
go.uber.org/zap/exp v0.2.0 // indirect
golang.org/x/crypto v0.25.0 // indirect
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/net v0.27.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.22.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240401170217-c3f982113cda // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 // indirect
google.golang.org/grpc v1.64.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240725223205-93522f1f2a9f // indirect
google.golang.org/grpc v1.65.0 // indirect
)
125 changes: 27 additions & 98 deletions go.sum

Large diffs are not rendered by default.

26 changes: 26 additions & 0 deletions helpers/close_connections.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package helpers

import (
"github.com/mynaparrot/plugnmeet-server/pkg/config"
"github.com/sirupsen/logrus"
)

func HandleCloseConnections() {
if config.GetConfig() == nil {
return
}

// handle to close DB connection
db, err := config.GetConfig().ORM.DB()
if err == nil {
_ = db.Close()
}

// close redis
_ = config.GetConfig().RDS.Close()

// close logger
logrus.Exit(0)

return
}
50 changes: 50 additions & 0 deletions helpers/startup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package helpers

import (
"github.com/mynaparrot/plugnmeet-protocol/factory"
"github.com/mynaparrot/plugnmeet-server/pkg/config"
"github.com/mynaparrot/plugnmeet-server/pkg/temporary"
"gopkg.in/yaml.v3"
"os"
)

func ReadYamlConfigFile(file string) (*config.AppConfig, error) {
yamlFile, err := os.ReadFile(file)
if err != nil {
return nil, err
}

appCnf := new(config.AppConfig)
err = yaml.Unmarshal(yamlFile, &appCnf)
if err != nil {
return nil, err
}

// get current working dir
wd, err := os.Getwd()
if err != nil {
return nil, err
}

// set the root path
appCnf.RootWorkingDir = wd

return appCnf, err
}

func PrepareServer(appCnf *config.AppConfig) error {
// orm
err := temporary.NewDatabaseConnection(appCnf)
if err != nil {
return err
}

// set redis connection
rds, err := factory.NewRedisConnection(appCnf.RedisInfo)
if err != nil {
return err
}
appCnf.RDS = rds

return nil
}
32 changes: 22 additions & 10 deletions cmd/server/main.go → main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package main

import (
"fmt"
"github.com/mynaparrot/plugnmeet-server/helpers"
"github.com/mynaparrot/plugnmeet-server/pkg/config"
"github.com/mynaparrot/plugnmeet-server/pkg/handler"
"github.com/mynaparrot/plugnmeet-server/pkg/helpers"
"github.com/mynaparrot/plugnmeet-server/pkg/controllers/schedulercontroller"
"github.com/mynaparrot/plugnmeet-server/pkg/controllers/websocketcontroller"
"github.com/mynaparrot/plugnmeet-server/pkg/routers"
"github.com/mynaparrot/plugnmeet-server/version"
log "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"
Expand Down Expand Up @@ -40,25 +42,35 @@ func main() {
}

func startServer(c *cli.Context) error {
err := helpers.PrepareServer(c.String("config"))
appCnf, err := helpers.ReadYamlConfigFile(c.String("config"))
if err != nil {
return err
panic(err)
}
// set this config for global usage
config.New(appCnf)

// now prepare our server
err = helpers.PrepareServer(config.GetConfig())
if err != nil {
log.Fatalln(err)
}

// we'll subscribe to redis channels now
go websocketcontroller.SubscribeToWebsocketChannel()
go schedulercontroller.StartScheduler()

// defer close connections
defer config.AppCnf.DB.Close()
defer config.AppCnf.RDS.Close()
defer helpers.HandleCloseConnections()

router := handler.Router()
rt := routers.New()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)

go func() {
sig := <-sigChan
log.Infoln("exit requested, shutting down", "signal", sig)
_ = router.Shutdown()
log.Exit(1)
_ = rt.Shutdown()
}()

return router.Listen(fmt.Sprintf(":%d", config.AppCnf.Client.Port))
return rt.Listen(fmt.Sprintf(":%d", config.GetConfig().Client.Port))
}
73 changes: 49 additions & 24 deletions pkg/config/config.go
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
package config

import (
"database/sql"
"github.com/mynaparrot/plugnmeet-protocol/factory"
"github.com/mynaparrot/plugnmeet-protocol/utils"
"github.com/redis/go-redis/v9"
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
"gorm.io/gorm"
"io"
"os"
"path/filepath"
"strings"
"sync"
"time"
)

var AppCnf *AppConfig

type AppConfig struct {
DB *sql.DB
RDS *redis.Client
RDS *redis.Client
ORM *gorm.DB
RootWorkingDir string

sync.RWMutex
chatRooms map[string]map[string]ChatParticipant
Expand Down Expand Up @@ -132,33 +133,57 @@ type CopyrightConf struct {
Text string `yaml:"text"`
}

func SetAppConfig(a *AppConfig) {
AppCnf = a
AppCnf.chatRooms = make(map[string]map[string]ChatParticipant)
var appCnf *AppConfig

func New(a *AppConfig) {
if appCnf != nil {
// not allow multiple config
return
}

appCnf = new(AppConfig) // otherwise will give error
// now set the config
appCnf = a
appCnf.chatRooms = make(map[string]map[string]ChatParticipant)

// set default values
if AppCnf.AnalyticsSettings != nil {
if AppCnf.AnalyticsSettings.FilesStorePath == nil {
if appCnf.AnalyticsSettings != nil {
if appCnf.AnalyticsSettings.FilesStorePath == nil {
p := "./analytics"
AppCnf.AnalyticsSettings.FilesStorePath = &p
appCnf.AnalyticsSettings.FilesStorePath = &p
d := time.Minute * 30
AppCnf.AnalyticsSettings.TokenValidity = &d
appCnf.AnalyticsSettings.TokenValidity = &d
}

p := *appCnf.AnalyticsSettings.FilesStorePath
if strings.HasPrefix(p, "./") {
p = filepath.Join(a.RootWorkingDir, p)
}
if _, err := os.Stat(*AppCnf.AnalyticsSettings.FilesStorePath); os.IsNotExist(err) {
_ = os.MkdirAll(*AppCnf.AnalyticsSettings.FilesStorePath, os.ModePerm)

if _, err := os.Stat(p); os.IsNotExist(err) {
_ = os.MkdirAll(p, os.ModePerm)
}
}

setLogger()
a.readClientFiles()
}

func GetConfig() *AppConfig {
return appCnf
}

func setLogger() {
p := appCnf.LogSettings.LogFile
if strings.HasPrefix(p, "./") {
p = filepath.Join(appCnf.RootWorkingDir, p)
}

logWriter := &lumberjack.Logger{
Filename: AppCnf.LogSettings.LogFile,
MaxSize: AppCnf.LogSettings.MaxSize,
MaxBackups: AppCnf.LogSettings.MaxBackups,
MaxAge: AppCnf.LogSettings.MaxAge,
Filename: p,
MaxSize: appCnf.LogSettings.MaxSize,
MaxBackups: appCnf.LogSettings.MaxBackups,
MaxAge: appCnf.LogSettings.MaxAge,
}

logrus.SetReportCaller(true)
Expand All @@ -170,7 +195,7 @@ func setLogger() {
})

var w io.Writer
if AppCnf.Client.Debug {
if appCnf.Client.Debug {
w = io.MultiWriter(os.Stdout, logWriter)
} else {
w = io.Writer(logWriter)
Expand Down Expand Up @@ -230,12 +255,12 @@ func (a *AppConfig) DeleteChatRoom(roomId string) {
}

func (a *AppConfig) readClientFiles() {
// if enable debug mode then we won't cache files
// otherwise changes of files won't be load
// if enable debug mode, then we won't cache files
// otherwise changes of files won't be loaded
if a.Client.Debug {
return
}
AppCnf.ClientFiles = make(map[string][]string)
appCnf.ClientFiles = make(map[string][]string)

css, err := utils.GetFilesFromDir(a.Client.Path+"/assets/css", ".css", "des")
if err != nil {
Expand All @@ -247,6 +272,6 @@ func (a *AppConfig) readClientFiles() {
logrus.Errorln(err)
}

AppCnf.ClientFiles["css"] = css
AppCnf.ClientFiles["js"] = js
appCnf.ClientFiles["css"] = css
appCnf.ClientFiles["js"] = js
}
Loading

0 comments on commit 55e7363

Please sign in to comment.