Initial commit (code only without large binaries)
This commit is contained in:
157
EdgeCommon/pkg/serverconfigs/access_log_storages.go
Normal file
157
EdgeCommon/pkg/serverconfigs/access_log_storages.go
Normal file
@@ -0,0 +1,157 @@
|
||||
package serverconfigs
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
)
|
||||
|
||||
// AccessLogStorageType 访问日志存储类型(含「存储+写入目标」组合)
|
||||
type AccessLogStorageType = string
|
||||
|
||||
const (
|
||||
AccessLogStorageTypeFile AccessLogStorageType = "file"
|
||||
AccessLogStorageTypeFileMySQL AccessLogStorageType = "file_mysql"
|
||||
AccessLogStorageTypeFileClickhouse AccessLogStorageType = "file_clickhouse"
|
||||
AccessLogStorageTypeFileMySQLClickhouse AccessLogStorageType = "file_mysql_clickhouse"
|
||||
AccessLogStorageTypeES AccessLogStorageType = "es"
|
||||
AccessLogStorageTypeTCP AccessLogStorageType = "tcp"
|
||||
AccessLogStorageTypeSyslog AccessLogStorageType = "syslog"
|
||||
AccessLogStorageTypeCommand AccessLogStorageType = "command"
|
||||
)
|
||||
|
||||
// FindAllAccessLogStorageTypes 所有存储引擎列表(含写入目标组合:文件、文件+MySQL、文件+ClickHouse 等)
|
||||
func FindAllAccessLogStorageTypes() []*shared.Definition {
|
||||
return []*shared.Definition{
|
||||
{Name: "文件", Code: AccessLogStorageTypeFile, Description: "节点写本地 JSON 文件"},
|
||||
{Name: "文件+MySQL", Code: AccessLogStorageTypeFileMySQL, Description: "节点写文件 + API 写 MySQL"},
|
||||
{Name: "文件+ClickHouse", Code: AccessLogStorageTypeFileClickhouse, Description: "节点写文件 + 落 ClickHouse(Fluent Bit 或 API 直写)"},
|
||||
{Name: "文件+MySQL+ClickHouse", Code: AccessLogStorageTypeFileMySQLClickhouse, Description: "节点写文件 + API 写 MySQL + ClickHouse"},
|
||||
{Name: "ElasticSearch", Code: AccessLogStorageTypeES, Description: "将日志存储在ElasticSearch中"},
|
||||
{Name: "TCP Socket", Code: AccessLogStorageTypeTCP, Description: "将日志通过TCP套接字输出"},
|
||||
{Name: "Syslog", Code: AccessLogStorageTypeSyslog, Description: "将日志通过syslog输出,仅支持Linux"},
|
||||
{Name: "命令行输入流", Code: AccessLogStorageTypeCommand, Description: "启动一个命令通过读取stdin接收日志信息"},
|
||||
}
|
||||
}
|
||||
|
||||
// FindAccessLogStorageTypeName 根据类型查找名称
|
||||
func FindAccessLogStorageTypeName(storageType string) string {
|
||||
for _, m := range FindAllAccessLogStorageTypes() {
|
||||
if m.Code == storageType {
|
||||
return m.Name
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// IsFileBasedStorageType 是否为基于文件的存储(需要显示文件路径等配置)
|
||||
func IsFileBasedStorageType(code string) bool {
|
||||
switch code {
|
||||
case AccessLogStorageTypeFile, AccessLogStorageTypeFileMySQL, AccessLogStorageTypeFileClickhouse, AccessLogStorageTypeFileMySQLClickhouse:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// NormalizeAccessLogStorageType 统一存储类型编码(兼容历史别名)。
|
||||
func NormalizeAccessLogStorageType(storageType string) string {
|
||||
switch storageType {
|
||||
case "clickhouse":
|
||||
return AccessLogStorageTypeFileClickhouse
|
||||
case "mysql_clickhouse":
|
||||
return AccessLogStorageTypeFileMySQLClickhouse
|
||||
default:
|
||||
return storageType
|
||||
}
|
||||
}
|
||||
|
||||
// BuildWriteTargetsByStorageType 按 type(唯一真源)构建写入目标。
|
||||
// disableDefaultDB 用于控制是否保留 MySQL 写入。
|
||||
func BuildWriteTargetsByStorageType(storageType string, disableDefaultDB bool) *AccessLogWriteTargets {
|
||||
storageType = NormalizeAccessLogStorageType(storageType)
|
||||
|
||||
targets := &AccessLogWriteTargets{}
|
||||
switch storageType {
|
||||
case AccessLogStorageTypeFile:
|
||||
targets.File = true
|
||||
case AccessLogStorageTypeFileMySQL:
|
||||
targets.File = true
|
||||
targets.MySQL = true
|
||||
case AccessLogStorageTypeFileClickhouse:
|
||||
targets.File = true
|
||||
targets.ClickHouse = true
|
||||
case AccessLogStorageTypeFileMySQLClickhouse:
|
||||
targets.File = true
|
||||
targets.MySQL = true
|
||||
targets.ClickHouse = true
|
||||
case AccessLogStorageTypeES, AccessLogStorageTypeTCP, AccessLogStorageTypeSyslog, AccessLogStorageTypeCommand:
|
||||
// 保持现有兼容语义:非 file 类型默认写 MySQL(除非停用默认数据库)
|
||||
targets.MySQL = true
|
||||
default:
|
||||
// 兜底保持可用
|
||||
targets.File = true
|
||||
targets.MySQL = true
|
||||
}
|
||||
|
||||
if disableDefaultDB {
|
||||
targets.MySQL = false
|
||||
}
|
||||
|
||||
if !targets.File && !targets.MySQL && !targets.ClickHouse {
|
||||
targets.File = true
|
||||
}
|
||||
return targets
|
||||
}
|
||||
|
||||
// ParseStorageTypeAndWriteTargets 从下拉框选中的类型解析出「实际存储类型」与「写入目标」
|
||||
// 用于创建/更新策略:options 按 baseType 填(如 file),writeTargets 按组合填。
|
||||
func ParseStorageTypeAndWriteTargets(selectedType string) (baseType string, writeTargets *AccessLogWriteTargets) {
|
||||
selectedType = NormalizeAccessLogStorageType(selectedType)
|
||||
writeTargets = &AccessLogWriteTargets{}
|
||||
switch selectedType {
|
||||
case AccessLogStorageTypeFile:
|
||||
baseType = AccessLogStorageTypeFile
|
||||
writeTargets.File = true
|
||||
case AccessLogStorageTypeFileMySQL:
|
||||
baseType = AccessLogStorageTypeFile
|
||||
writeTargets.File = true
|
||||
writeTargets.MySQL = true
|
||||
case AccessLogStorageTypeFileClickhouse:
|
||||
baseType = AccessLogStorageTypeFile
|
||||
writeTargets.File = true
|
||||
writeTargets.ClickHouse = true
|
||||
case AccessLogStorageTypeFileMySQLClickhouse:
|
||||
baseType = AccessLogStorageTypeFile
|
||||
writeTargets.File = true
|
||||
writeTargets.MySQL = true
|
||||
writeTargets.ClickHouse = true
|
||||
case AccessLogStorageTypeES, AccessLogStorageTypeTCP, AccessLogStorageTypeSyslog, AccessLogStorageTypeCommand:
|
||||
baseType = selectedType
|
||||
writeTargets.MySQL = true
|
||||
default:
|
||||
baseType = selectedType
|
||||
writeTargets.File = true
|
||||
writeTargets.MySQL = true
|
||||
}
|
||||
return baseType, writeTargets
|
||||
}
|
||||
|
||||
// ComposeStorageTypeDisplay 根据策略的 Type + WriteTargets 得到下拉框显示用的类型 code(用于编辑页回显)
|
||||
func ComposeStorageTypeDisplay(policyType string, writeTargets *AccessLogWriteTargets) string {
|
||||
policyType = NormalizeAccessLogStorageType(policyType)
|
||||
if policyType != AccessLogStorageTypeFile {
|
||||
return policyType
|
||||
}
|
||||
if writeTargets == nil {
|
||||
return AccessLogStorageTypeFile
|
||||
}
|
||||
if writeTargets.File && writeTargets.MySQL && writeTargets.ClickHouse {
|
||||
return AccessLogStorageTypeFileMySQLClickhouse
|
||||
}
|
||||
if writeTargets.File && writeTargets.MySQL {
|
||||
return AccessLogStorageTypeFileMySQL
|
||||
}
|
||||
if writeTargets.File && writeTargets.ClickHouse {
|
||||
return AccessLogStorageTypeFileClickhouse
|
||||
}
|
||||
return AccessLogStorageTypeFile
|
||||
}
|
||||
Reference in New Issue
Block a user