1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-23 22:45:11 +02:00
Files
starter/fiber_connect/fiber_connect.go

187 lines
4.8 KiB
Go
Raw Normal View History

2023-03-17 11:20:09 +03:00
package fiber_connect
import (
2024-09-27 14:21:03 +03:00
"context"
2023-05-02 09:51:50 +03:00
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/stopapp"
2023-11-14 13:39:20 +03:00
"github.com/gofiber/fiber/v2"
2023-03-17 11:20:09 +03:00
"os"
"path/filepath"
"reflect"
2024-09-27 14:21:03 +03:00
"sync"
2023-03-17 11:20:09 +03:00
)
// empty - пустая структура для имени пакета
type empty struct{}
// PackageName - имя пакета golang
var PackageName = filepath.Base(reflect.TypeOf(empty{}).PkgPath())
// log - глобальный логгер
var log = logger.GetLog()
// Settings хранит все нужные переменные окружения
2025-03-28 11:55:52 +03:00
var Settings = SettingsINI{}
2023-03-17 11:20:09 +03:00
// SettingsINI - структура для хранения всех нужных переменных окружения
type SettingsINI struct {
WEBSERVER_HOST string
WEBSERVER_PORT string
}
2024-03-06 10:01:13 +03:00
// Client - клиент веб сервера
2023-03-17 11:20:09 +03:00
var Client *fiber.App
2024-03-06 10:01:13 +03:00
// WEBSERVER_PORT_DEFAULT - порт веб-сервера по умолчанию
var WEBSERVER_PORT_DEFAULT = "3000"
2023-03-17 11:20:09 +03:00
func Connect() {
if Settings.WEBSERVER_PORT == "" {
FillSettings()
}
Client = fiber.New()
2024-09-27 14:21:03 +03:00
go Listen()
2024-09-27 16:32:56 +03:00
LogInfo_Connected()
}
// LogInfo_Connected - выводит сообщение в Лог, или паника при ошибке
func LogInfo_Connected() {
2023-03-17 11:20:09 +03:00
log.Info("Fiber connected. OK. host: ", Settings.WEBSERVER_HOST, ":", Settings.WEBSERVER_PORT)
}
2024-03-13 16:24:14 +03:00
// FillSettings загружает переменные окружения в структуру из переменных окружения
2023-03-17 11:20:09 +03:00
func FillSettings() {
2025-03-28 11:55:52 +03:00
//Settings = SettingsINI{}
2025-03-28 11:47:44 +03:00
if Settings.WEBSERVER_HOST == "" {
Settings.WEBSERVER_HOST = os.Getenv("WEBSERVER_HOST")
}
if Settings.WEBSERVER_PORT == "" {
Settings.WEBSERVER_PORT = os.Getenv("WEBSERVER_PORT")
}
2023-03-17 11:20:09 +03:00
if Settings.WEBSERVER_HOST == "" {
2024-03-06 10:01:13 +03:00
log.Debug("Need fill WEBSERVER_HOST ! in OS Environment ")
2023-03-17 11:20:09 +03:00
}
if Settings.WEBSERVER_PORT == "" {
2023-09-13 13:48:19 +03:00
Settings.WEBSERVER_HOST = os.Getenv("WEB_SERVER_HOST")
Settings.WEBSERVER_PORT = os.Getenv("WEB_SERVER_PORT")
}
if Settings.WEBSERVER_PORT == "" {
2024-03-06 10:01:13 +03:00
log.Warn("Need fill WEBSERVER_PORT ! in OS Environment. Use default: ", WEBSERVER_PORT_DEFAULT)
Settings.WEBSERVER_PORT = WEBSERVER_PORT_DEFAULT
2023-03-17 11:20:09 +03:00
}
//
}
2024-09-27 14:21:03 +03:00
// Listen_err - начинает прослушивать порт, паника при ошибке
func Listen() {
err := Listen_err()
2023-03-17 11:20:09 +03:00
if err != nil {
2024-09-27 14:21:03 +03:00
log.Panic(PackageName, "Fiber Listen() error: ", err)
2023-03-17 11:20:09 +03:00
}
}
2024-09-27 14:21:03 +03:00
// Listen_err - начинает прослушивать порт, возвращает ошибку
func Listen_err() error {
2023-03-17 11:20:09 +03:00
addr := Settings.WEBSERVER_HOST + ":" + Settings.WEBSERVER_PORT //3002
err := Client.Listen(addr)
2024-09-27 14:21:03 +03:00
return err
2023-03-17 11:20:09 +03:00
}
2023-06-06 18:05:30 +03:00
// WaitStop - ожидает отмену глобального контекста
2023-03-17 11:20:09 +03:00
func WaitStop() {
select {
case <-contextmain.GetContext().Done():
log.Warn("Context app is canceled.")
}
//ждём пока отправляемых сейчас сообщений будет =0
//stopapp.WaitTotalMessagesSendingNow(PackageName)
//закрываем соединение
CloseConnection()
stopapp.GetWaitGroup_Main().Done()
}
func GetHost() string {
Otvet := "127.0.0.1"
if Settings.WEBSERVER_HOST != "" {
Otvet = Settings.WEBSERVER_HOST
}
return Otvet
}
2024-09-27 14:21:03 +03:00
// Start - запускает работу веб-сервера
// Graceful shutdown только для тех кто пользуется этим репозиторием для старта и останова
func Start() {
2024-09-27 16:32:56 +03:00
//var err error
2024-09-27 14:21:03 +03:00
2024-09-27 16:32:56 +03:00
ctx := contextmain.GetContext()
WaitGroup := stopapp.GetWaitGroup_Main()
Start_ctx(&ctx, WaitGroup)
LogInfo_Connected()
2024-09-27 14:21:03 +03:00
}
// Start_ctx - запускает работу веб-сервера
2024-09-27 15:04:30 +03:00
// Свой контекст и WaitGroup нужны для остановки работы сервиса Graceful shutdown
// Для тех кто пользуется этим репозиторием для старта и останова сервиса можно просто Start()
2024-09-27 15:36:29 +03:00
func Start_ctx(ctx *context.Context, WaitGroup *sync.WaitGroup) {
//var err error
2024-09-27 14:21:03 +03:00
2024-09-30 12:05:31 +03:00
//запомним к себе контекст
2024-09-27 14:21:03 +03:00
contextmain.Ctx = ctx
2024-09-30 12:05:31 +03:00
if ctx == nil {
contextmain.GetContext()
}
//запомним к себе WaitGroup
2024-09-27 14:21:03 +03:00
stopapp.SetWaitGroup_Main(WaitGroup)
2024-09-30 12:05:31 +03:00
if WaitGroup == nil {
stopapp.StartWaitStop()
}
2024-09-27 14:21:03 +03:00
//
2024-09-27 16:32:56 +03:00
if Client == nil {
FillSettings()
Connect()
}
stopapp.GetWaitGroup_Main().Add(1)
go WaitStop()
2024-09-27 14:21:03 +03:00
2024-09-27 16:32:56 +03:00
//return err
2024-09-27 14:21:03 +03:00
}
// CloseConnection - закрывает соединения веб-сервера, возвращает ошибку
func CloseConnection_err() error {
err := Client.Shutdown()
return err
}
// CloseConnection - закрывает соединения веб-сервера
func CloseConnection() {
err := CloseConnection_err()
if err != nil {
log.Error("Fiber CloseConnection() error: ", err)
} else {
log.Info("Fiber connection closed.")
}
}