Apply .gitignore rules
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package esLogUtil
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/elastic/go-elasticsearch/v8/esutil"
|
||||
"golang.org/x/net/context"
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
var (
|
||||
indexMutex sync.Mutex
|
||||
indexer esutil.BulkIndexer
|
||||
)
|
||||
|
||||
func timedReindex() {
|
||||
go func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logUtil.LogUnknownError(r)
|
||||
|
||||
timedReindex()
|
||||
time.Sleep(time.Second * 1)
|
||||
}
|
||||
}()
|
||||
|
||||
currentIndexName := getIndexName()
|
||||
for {
|
||||
//设置休眠
|
||||
time.Sleep(time.Second * 1)
|
||||
|
||||
newIndexName := getIndexName()
|
||||
if currentIndexName != getIndexName() {
|
||||
newIndexer(newIndexName)
|
||||
currentIndexName = newIndexName
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func newIndexer(newIndexName string) {
|
||||
if indexer != nil {
|
||||
closeIndex()
|
||||
}
|
||||
|
||||
//wait until get the lock
|
||||
indexMutex.Lock()
|
||||
defer indexMutex.Unlock()
|
||||
|
||||
var err error
|
||||
indexer, err = esutil.NewBulkIndexer(esutil.BulkIndexerConfig{
|
||||
Index: getIndexName(), // The default index name
|
||||
Client: esClient, // The Elasticsearch client
|
||||
FlushInterval: time.Second, // The periodic flush interval
|
||||
})
|
||||
if err != nil {
|
||||
logUtil.ErrorLog("[%s]: Creating the indexer err: %s", serverModuleName, err)
|
||||
}
|
||||
}
|
||||
|
||||
func closeIndex() {
|
||||
//wait until get the lock
|
||||
indexMutex.Lock()
|
||||
defer indexMutex.Unlock()
|
||||
|
||||
if indexer == nil {
|
||||
return
|
||||
}
|
||||
|
||||
err := indexer.Close(context.Background())
|
||||
if err != nil {
|
||||
logUtil.ErrorLog("[%s]:Close err:%s", serverModuleName, err.Error())
|
||||
}
|
||||
|
||||
indexer = nil
|
||||
}
|
||||
|
||||
// 批量保存到在线日志系统
|
||||
// 参数:
|
||||
//
|
||||
// 数量
|
||||
//
|
||||
// 返回值:
|
||||
//
|
||||
// 日志列表对象
|
||||
func bulkSendHandler(logObj EsLog) {
|
||||
if esClient == nil || indexer == nil {
|
||||
return
|
||||
}
|
||||
|
||||
//try to get the lock in 10000 milliseconds,if cant obtain it,return false
|
||||
indexMutex.Lock()
|
||||
defer indexMutex.Unlock()
|
||||
|
||||
message, err := json.Marshal(logObj)
|
||||
if err != nil {
|
||||
logUtil.ErrorLog("[%s]: Marshal failed. Err:%s", serverModuleName, err)
|
||||
return
|
||||
}
|
||||
|
||||
err = indexer.Add(
|
||||
context.Background(),
|
||||
esutil.BulkIndexerItem{
|
||||
Action: "index",
|
||||
Body: bytes.NewReader(message),
|
||||
})
|
||||
if err != nil {
|
||||
logUtil.ErrorLog("[%s]: Add data err:%s", serverModuleName, err.Error())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package websocketServer
|
||||
|
||||
/*
|
||||
此包是对web_server包的封装,并扩展出websocket相关功能
|
||||
|
||||
使用方法如下:
|
||||
初始化一个WsServer/WssServer
|
||||
server := NewWsServer(addr string, isCheckIP bool)
|
||||
或
|
||||
server := NewWssServer(addr, certFileName, keyFileName string, isCheckIP bool)
|
||||
|
||||
其它调用方法见 webServer
|
||||
|
||||
websocket扩展方法:
|
||||
// 注册websocket回调
|
||||
server.RegisterWebsocketHandler(path string, eventCallback *eventCallbackFuncs, configObj *web_server.HandlerConfig)
|
||||
server.RegisterRegexWebsocketHandler(path string, eventCallback *eventCallbackFuncs, configObj *web_server.HandlerConfig)
|
||||
|
||||
// 设置websocket配置信息(可以设置握手超时/读写缓存/是否允许跨域等)
|
||||
server.SetUpgrader(upgrader *websocket.Upgrader)
|
||||
|
||||
// 获取websocket配置信息
|
||||
server.GetUpgrader() *websocket.Upgrader
|
||||
|
||||
// 设置接收到Ping消息时,是否自动回复Pong信息
|
||||
server.SetAutoPong(autuPong bool)
|
||||
|
||||
// 获取接收到Ping消息时,是否自动回复Pong信息
|
||||
server.GetAutoPong() bool
|
||||
|
||||
// 设置心跳检测信息
|
||||
server.SetHeartbeatDetectInfo(heartbeatCloseCount int, heartbeatCycle time.Duration)
|
||||
|
||||
// 获取心跳检测信息
|
||||
server.GetHeartbeatDetectInfo() (heartbeatCloseCount int, heartbeatCycle time.Duration)
|
||||
|
||||
// 设置广播并发数
|
||||
server.SetBroadcastConcurrent(n int)
|
||||
|
||||
// 允许新连接
|
||||
server.EnableNewConn()
|
||||
|
||||
// 禁用新连接
|
||||
server.DisableNewConn()
|
||||
|
||||
// 消息广播
|
||||
server.BroadcastMessage(messageType int, data []byte)
|
||||
|
||||
// 关闭所有连接
|
||||
server.CloseAll()
|
||||
|
||||
eventCallbackFuncs 回调:
|
||||
// websocket连接事件
|
||||
OnConnFunc func(ctx *Context)
|
||||
|
||||
// websocket关闭事件
|
||||
OnCloseFunc func(ctx *Context)
|
||||
|
||||
// websocket接收事件
|
||||
OnMsgFunc func(ctx *Context, msgType int, msgData []byte)
|
||||
|
||||
回调参数说明:
|
||||
ctx - websocket环境,提供了以下方法:
|
||||
GetWebServerContext() *web_server.Context - 获取web_server环境
|
||||
GetUserData() interface{} - 获取用户自定义数据
|
||||
SetUserData(userData interface{}) - 设置用户自定义数据
|
||||
SendMessage(messageType int, data []byte) (err error) - 发送websocket数据
|
||||
Close() - 关闭websocket连接
|
||||
msgType - 接收到的websocket类型
|
||||
msgData - 接收到的websocket数据
|
||||
|
||||
使用示例,见 wsServer_test.go
|
||||
*/
|
||||
@@ -0,0 +1,82 @@
|
||||
package webServer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
// Http服务器对象
|
||||
type HttpServer struct {
|
||||
addr string
|
||||
IWebServer
|
||||
server http.Server
|
||||
}
|
||||
|
||||
func (this *HttpServer) SetAddr(addr string) {
|
||||
this.addr = addr
|
||||
this.server.Addr = addr
|
||||
}
|
||||
|
||||
// 启动HttpServer
|
||||
func (this *HttpServer) Start(wg *sync.WaitGroup) {
|
||||
defer func() {
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
// 开启监听
|
||||
msg := fmt.Sprintf("http server begins to listen on: %s...", this.addr)
|
||||
fmt.Println(msg)
|
||||
logUtil.InfoLog(msg)
|
||||
|
||||
if err := this.server.ListenAndServe(); err != nil {
|
||||
panic(fmt.Sprintf("http server ListenAndServe Error:%v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// 创建新的HttpServer
|
||||
// isCheckIP:该属性已丢弃,可以任意赋值
|
||||
func NewHttpServer(addr string, isCheckIP bool) *HttpServer {
|
||||
webServerObj := NewWebServer(isCheckIP)
|
||||
|
||||
return &HttpServer{
|
||||
addr: addr,
|
||||
IWebServer: webServerObj,
|
||||
server: http.Server{
|
||||
Addr: addr,
|
||||
Handler: webServerObj,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// 创建新的HttpServer
|
||||
func NewHttpServer2(addr string, webServerObj IWebServer) *HttpServer {
|
||||
return &HttpServer{
|
||||
addr: addr,
|
||||
IWebServer: webServerObj,
|
||||
server: http.Server{
|
||||
Addr: addr,
|
||||
Handler: webServerObj,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// 创建新的HttpServer
|
||||
// isCheckIP:该属性已丢弃,可以任意赋值
|
||||
func NewHttpServer3(addr string, isCheckIP bool, readTimeout time.Duration, readHeaderTimeout time.Duration, writeTimeout time.Duration) *HttpServer {
|
||||
webServerObj := NewWebServer(isCheckIP)
|
||||
return &HttpServer{
|
||||
addr: addr,
|
||||
IWebServer: webServerObj,
|
||||
server: http.Server{
|
||||
Addr: addr,
|
||||
Handler: webServerObj,
|
||||
ReadTimeout: readTimeout,
|
||||
ReadHeaderTimeout: readHeaderTimeout,
|
||||
WriteTimeout: writeTimeout,
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user