package impl_es

import "sync"

const (
	// 批量保存的消息数量
	con_MAX_NUMBER_OF_MESSAGE = 20
)

// logCache
// @description: 日志缓存
type logCache struct {
	logCacheList  []*EsLogModel // logCacheList 日志缓存对象
	logCacheMutex sync.RWMutex  // logCacheMutex 锁
}

// newlogCache
// @description: 构造日志缓存
// parameter:
// return:
//		@*logCache:
func newlogCache() *logCache {
	m := &logCache{
		logCacheList:  make([]*EsLogModel, 0, 256),
		logCacheMutex: sync.RWMutex{},
	}

	return m
}

// 写入在线日志
// 参数:
//		日志信息对象
// 返回值：
//		无
func (c *logCache) addCacheLog(logObj *EsLogModel) {
	c.logCacheMutex.Lock()
	defer c.logCacheMutex.Unlock()

	c.logCacheList = append(c.logCacheList, logObj)
}

// 获取日志数量
// 参数:
//		无
// 返回值：
//		缓存中的日志数量
func (c *logCache) getCacheLogCount() int {
	c.logCacheMutex.RLock()
	defer c.logCacheMutex.RUnlock()

	return len(c.logCacheList)
}

// 获取缓存中的日志
// 参数:
//		数量
// 返回值：
//		日志列表对象
func (c *logCache) getCacheLog(logCount int) (logList []*EsLogModel) {
	if logCount > con_MAX_NUMBER_OF_MESSAGE {
		logCount = con_MAX_NUMBER_OF_MESSAGE
	}

	c.logCacheMutex.Lock()
	defer c.logCacheMutex.Unlock()

	logList = c.logCacheList[:logCount]
	c.logCacheList = c.logCacheList[logCount:]

	return
}
