nimo-shake/common/common.go (93 lines of code) (raw):
package utils
import (
"fmt"
"os"
"strings"
LOG "github.com/vinllen/log4go"
)
const (
GolangSecurityTime = "2006-01-02T15:04:05Z"
ConvertTypeRaw = "raw"
ConvertTypeChange = "change"
ConvertMTypeChange = "mchange"
ConvertTypeSame = "same" // used in dynamodb -> dynamo-proxy
SyncModeAll = "all"
SyncModeFull = "full"
SyncModeIncr = "incr"
TargetTypeMongo = "mongodb"
TargetTypeAliyunDynamoProxy = "aliyun_dynamo_proxy"
TargetMongoDBTypeReplica = "replica"
TargetMongoDBTypeSharding = "sharding"
TargetDBExistRename = "rename"
TargetDBExistDrop = "drop"
SIGNALPROFILE = 31
SIGNALSTACK = 30
)
var (
Version = "$"
StartTime string
)
func InitialLogger(logFile string, level string, logBuffer bool) bool {
logLevel := parseLogLevel(level)
if len(logFile) != 0 {
// create logs folder for log4go. because of its mistake that doesn't create !
if err := os.MkdirAll("logs", os.ModeDir|os.ModePerm); err != nil {
return false
}
if logBuffer {
LOG.LogBufferLength = 32
} else {
LOG.LogBufferLength = 0
}
fileLogger := LOG.NewFileLogWriter(fmt.Sprintf("logs/%s", logFile), true)
//fileLogger.SetRotateDaily(true)
fileLogger.SetRotateSize(500 * 1024 * 1024)
// fileLogger.SetFormat("[%D %T] [%L] [%s] %M")
fileLogger.SetFormat("[%D %T] [%L] %M")
fileLogger.SetRotateMaxBackup(100)
LOG.AddFilter("file", logLevel, fileLogger)
} else {
LOG.AddFilter("console", logLevel, LOG.NewConsoleLogWriter())
}
return true
}
func parseLogLevel(level string) LOG.Level {
switch strings.ToLower(level) {
case "debug":
return LOG.DEBUG
case "info":
return LOG.INFO
case "warning":
return LOG.WARNING
case "error":
return LOG.ERROR
default:
return LOG.DEBUG
}
}
/**
* block password in mongo_urls:
* two kind mongo_urls:
* 1. mongodb://username:password@address
* 2. username:password@address
*/
func BlockMongoUrlPassword(url, replace string) string {
colon := strings.Index(url, ":")
if colon == -1 || colon == len(url)-1 {
return url
} else if url[colon+1] == '/' {
// find the second '/'
for colon++; colon < len(url); colon++ {
if url[colon] == ':' {
break
}
}
if colon == len(url) {
return url
}
}
at := strings.Index(url, "@")
if at == -1 || at == len(url)-1 || at <= colon {
return url
}
newUrl := make([]byte, 0, len(url))
for i := 0; i < len(url); i++ {
if i <= colon || i > at {
newUrl = append(newUrl, byte(url[i]))
} else if i == at {
newUrl = append(newUrl, []byte(replace)...)
newUrl = append(newUrl, byte(url[i]))
}
}
return string(newUrl)
}