Added setting for LogLevel

This commit is contained in:
Pijus Kamandulis 2025-01-09 21:07:41 +02:00
parent c2c9dc03b3
commit 8b8b087aab
14 changed files with 200 additions and 84 deletions

View File

@ -78,7 +78,7 @@ To disable SSL and run Cosmium on HTTP instead, you can use the `-DisableTls` fl
- **-InitialData**: Path to JSON containing initial state - **-InitialData**: Path to JSON containing initial state
- **-Persist**: Saves data to the given path on application exit (When `-InitialData` argument is not supplied, it will try to load data from path supplied in `-Persist`) - **-Persist**: Saves data to the given path on application exit (When `-InitialData` argument is not supplied, it will try to load data from path supplied in `-Persist`)
- **-Port**: Listen port (default 8081) - **-Port**: Listen port (default 8081)
- **-Debug**: Runs application in debug mode, this provides additional logging - **-LogLevel**: Sets the logging level (one of: debug, info, error, silent) (default info)
These arguments allow you to configure various aspects of Cosmium's behavior according to your requirements. These arguments allow you to configure various aspects of Cosmium's behavior according to your requirements.
@ -90,7 +90,7 @@ All mentioned arguments can also be set using environment variables:
- **COSMIUM_INITIALDATA** for `-InitialData` - **COSMIUM_INITIALDATA** for `-InitialData`
- **COSMIUM_PERSIST** for `-Persist` - **COSMIUM_PERSIST** for `-Persist`
- **COSMIUM_PORT** for `-Port` - **COSMIUM_PORT** for `-Port`
- **COSMIUM_DEBUG** for `-Debug` - **COSMIUM_LOGLEVEL** for `-LogLevel`
# License # License

View File

@ -26,7 +26,8 @@ func ParseFlags() ServerConfig {
disableAuthentication := flag.Bool("DisableAuth", false, "Disable authentication") disableAuthentication := flag.Bool("DisableAuth", false, "Disable authentication")
disableTls := flag.Bool("DisableTls", false, "Disable TLS, serve over HTTP") disableTls := flag.Bool("DisableTls", false, "Disable TLS, serve over HTTP")
persistDataPath := flag.String("Persist", "", "Saves data to given path on application exit") persistDataPath := flag.String("Persist", "", "Saves data to given path on application exit")
debug := flag.Bool("Debug", false, "Runs application in debug mode, this provides additional logging") logLevel := NewEnumValue("info", []string{"debug", "info", "error", "silent"})
flag.Var(logLevel, "LogLevel", fmt.Sprintf("Sets the logging level %s", logLevel.AllowedValuesList()))
flag.Parse() flag.Parse()
setFlagsFromEnvironment() setFlagsFromEnvironment()
@ -41,8 +42,8 @@ func ParseFlags() ServerConfig {
config.PersistDataFilePath = *persistDataPath config.PersistDataFilePath = *persistDataPath
config.DisableAuth = *disableAuthentication config.DisableAuth = *disableAuthentication
config.DisableTls = *disableTls config.DisableTls = *disableTls
config.Debug = *debug
config.AccountKey = *accountKey config.AccountKey = *accountKey
config.LogLevel = logLevel.value
config.PopulateCalculatedFields() config.PopulateCalculatedFields()
@ -54,7 +55,19 @@ func (c *ServerConfig) PopulateCalculatedFields() {
c.DatabaseDomain = c.Host c.DatabaseDomain = c.Host
c.DatabaseEndpoint = fmt.Sprintf("https://%s:%d/", c.Host, c.Port) c.DatabaseEndpoint = fmt.Sprintf("https://%s:%d/", c.Host, c.Port)
c.ExplorerBaseUrlLocation = ExplorerBaseUrlLocation c.ExplorerBaseUrlLocation = ExplorerBaseUrlLocation
logger.EnableDebugOutput = c.Debug
switch c.LogLevel {
case "debug":
logger.LogLevel = logger.LogLevelDebug
case "info":
logger.LogLevel = logger.LogLevelInfo
case "error":
logger.LogLevel = logger.LogLevelError
case "silent":
logger.LogLevel = logger.LogLevelSilent
default:
logger.LogLevel = logger.LogLevelInfo
}
} }
func (c *ServerConfig) ApplyDefaultsToEmptyFields() { func (c *ServerConfig) ApplyDefaultsToEmptyFields() {

36
api/config/enumFlag.go Normal file
View File

@ -0,0 +1,36 @@
package config
import (
"fmt"
"strings"
)
type EnumValue struct {
allowedValues []string
value string
}
func (e *EnumValue) String() string {
return e.value
}
func (e *EnumValue) Set(v string) error {
for _, allowed := range e.allowedValues {
if v == allowed {
e.value = v
return nil
}
}
return fmt.Errorf("invalid value %q, must be one of: %s", v, strings.Join(e.allowedValues, ", "))
}
func NewEnumValue(defaultValue string, allowedValues []string) *EnumValue {
return &EnumValue{
allowedValues: allowedValues,
value: defaultValue,
}
}
func (e *EnumValue) AllowedValuesList() string {
return fmt.Sprintf("(one of: %s)", strings.Join(e.allowedValues, ", "))
}

View File

@ -15,6 +15,6 @@ type ServerConfig struct {
PersistDataFilePath string `json:"persistDataFilePath"` PersistDataFilePath string `json:"persistDataFilePath"`
DisableAuth bool `json:"disableAuth"` DisableAuth bool `json:"disableAuth"`
DisableTls bool `json:"disableTls"` DisableTls bool `json:"disableTls"`
Debug bool `json:"debug"` LogLevel string `json:"logLevel"`
ExplorerBaseUrlLocation string `json:"explorerBaseUrlLocation"` ExplorerBaseUrlLocation string `json:"explorerBaseUrlLocation"`
} }

View File

@ -135,7 +135,7 @@ func (h *Handlers) PatchDocument(c *gin.Context) {
currentDocumentBytes, err := json.Marshal(document) currentDocumentBytes, err := json.Marshal(document)
if err != nil { if err != nil {
logger.Error("Failed to marshal existing document:", err) logger.ErrorLn("Failed to marshal existing document:", err)
c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to marshal existing document"}) c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to marshal existing document"})
return return
} }
@ -149,7 +149,7 @@ func (h *Handlers) PatchDocument(c *gin.Context) {
var modifiedDocument map[string]interface{} var modifiedDocument map[string]interface{}
err = json.Unmarshal(modifiedDocumentBytes, &modifiedDocument) err = json.Unmarshal(modifiedDocumentBytes, &modifiedDocument)
if err != nil { if err != nil {
logger.Error("Failed to unmarshal modified document:", err) logger.ErrorLn("Failed to unmarshal modified document:", err)
c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to unmarshal modified document"}) c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to unmarshal modified document"})
return return
} }

View File

@ -16,7 +16,7 @@ func RequestLogger() gin.HandlerFunc {
bodyStr := readBody(rdr1) bodyStr := readBody(rdr1)
if bodyStr != "" { if bodyStr != "" {
logger.Debug(bodyStr) logger.DebugLn(bodyStr)
} }
c.Request.Body = rdr2 c.Request.Body = rdr2

View File

@ -16,7 +16,10 @@ import (
func (s *ApiServer) CreateRouter(repository *repositories.DataRepository) { func (s *ApiServer) CreateRouter(repository *repositories.DataRepository) {
routeHandlers := handlers.NewHandlers(repository, s.config) routeHandlers := handlers.NewHandlers(repository, s.config)
if !s.config.Debug { gin.DefaultWriter = logger.InfoWriter()
gin.DefaultErrorWriter = logger.ErrorWriter()
if s.config.LogLevel != "debug" {
gin.SetMode(gin.ReleaseMode) gin.SetMode(gin.ReleaseMode)
} }
@ -24,7 +27,7 @@ func (s *ApiServer) CreateRouter(repository *repositories.DataRepository) {
e.RedirectTrailingSlash = false e.RedirectTrailingSlash = false
}) })
if s.config.Debug { if s.config.LogLevel == "debug" {
router.Use(middleware.RequestLogger()) router.Use(middleware.RequestLogger())
} }
@ -89,10 +92,10 @@ func (s *ApiServer) Start() {
go func() { go func() {
<-s.stopServer <-s.stopServer
logger.Info("Shutting down server...") logger.InfoLn("Shutting down server...")
err := server.Shutdown(context.TODO()) err := server.Shutdown(context.TODO())
if err != nil { if err != nil {
logger.Error("Failed to shutdown server:", err) logger.ErrorLn("Failed to shutdown server:", err)
} }
}() }()
@ -101,7 +104,7 @@ func (s *ApiServer) Start() {
logger.Infof("Listening and serving HTTP on %s\n", server.Addr) logger.Infof("Listening and serving HTTP on %s\n", server.Addr)
err := server.ListenAndServe() err := server.ListenAndServe()
if err != nil { if err != nil {
logger.Error("Failed to start HTTP server:", err) logger.ErrorLn("Failed to start HTTP server:", err)
} }
s.isActive = false s.isActive = false
} else if s.config.TLS_CertificatePath != "" && s.config.TLS_CertificateKey != "" { } else if s.config.TLS_CertificatePath != "" && s.config.TLS_CertificateKey != "" {
@ -110,7 +113,7 @@ func (s *ApiServer) Start() {
s.config.TLS_CertificatePath, s.config.TLS_CertificatePath,
s.config.TLS_CertificateKey) s.config.TLS_CertificateKey)
if err != nil { if err != nil {
logger.Error("Failed to start HTTPS server:", err) logger.ErrorLn("Failed to start HTTPS server:", err)
} }
s.isActive = false s.isActive = false
} else { } else {
@ -120,7 +123,7 @@ func (s *ApiServer) Start() {
logger.Infof("Listening and serving HTTPS on %s\n", server.Addr) logger.Infof("Listening and serving HTTPS on %s\n", server.Addr)
err := server.ListenAndServeTLS("", "") err := server.ListenAndServeTLS("", "")
if err != nil { if err != nil {
logger.Error("Failed to start HTTPS server:", err) logger.ErrorLn("Failed to start HTTPS server:", err)
} }
s.isActive = false s.isActive = false
} }

View File

@ -5,36 +5,100 @@ import (
"os" "os"
) )
var EnableDebugOutput = false type LogLevelType int
var (
LogLevelDebug LogLevelType = 0
LogLevelInfo LogLevelType = 1
LogLevelError LogLevelType = 2
LogLevelSilent LogLevelType = 10
)
type LogWriter struct {
WriterLevel LogLevelType
}
var LogLevel = LogLevelInfo
var DebugLogger = log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile) var DebugLogger = log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile)
var InfoLogger = log.New(os.Stdout, "", log.Ldate|log.Ltime) var InfoLogger = log.New(os.Stdout, "", log.Ldate|log.Ltime)
var ErrorLogger = log.New(os.Stderr, "", log.Ldate|log.Ltime|log.Lshortfile) var ErrorLogger = log.New(os.Stderr, "", log.Ldate|log.Ltime|log.Lshortfile)
func Debug(v ...any) { func DebugLn(v ...any) {
if EnableDebugOutput { if LogLevel <= LogLevelDebug {
DebugLogger.Println(v...) DebugLogger.Println(v...)
} }
} }
func Debug(v ...any) {
if LogLevel <= LogLevelDebug {
DebugLogger.Print(v...)
}
}
func Debugf(format string, v ...any) { func Debugf(format string, v ...any) {
if EnableDebugOutput { if LogLevel <= LogLevelDebug {
DebugLogger.Printf(format, v...) DebugLogger.Printf(format, v...)
} }
} }
func Info(v ...any) { func InfoLn(v ...any) {
if LogLevel <= LogLevelInfo {
InfoLogger.Println(v...) InfoLogger.Println(v...)
}
}
func Info(v ...any) {
if LogLevel <= LogLevelInfo {
InfoLogger.Print(v...)
}
} }
func Infof(format string, v ...any) { func Infof(format string, v ...any) {
if LogLevel <= LogLevelInfo {
InfoLogger.Printf(format, v...) InfoLogger.Printf(format, v...)
}
}
func ErrorLn(v ...any) {
if LogLevel <= LogLevelError {
ErrorLogger.Println(v...)
}
} }
func Error(v ...any) { func Error(v ...any) {
ErrorLogger.Println(v...) if LogLevel <= LogLevelError {
ErrorLogger.Print(v...)
}
} }
func Errorf(format string, v ...any) { func Errorf(format string, v ...any) {
if LogLevel <= LogLevelError {
ErrorLogger.Printf(format, v...) ErrorLogger.Printf(format, v...)
}
}
func (lw *LogWriter) Write(p []byte) (n int, err error) {
switch lw.WriterLevel {
case LogLevelDebug:
Debug(string(p))
case LogLevelInfo:
Info(string(p))
case LogLevelError:
Error(string(p))
}
return len(p), nil
}
func ErrorWriter() *LogWriter {
return &LogWriter{WriterLevel: LogLevelError}
}
func InfoWriter() *LogWriter {
return &LogWriter{WriterLevel: LogLevelInfo}
}
func DebugWriter() *LogWriter {
return &LogWriter{WriterLevel: LogLevelDebug}
} }

View File

@ -23,7 +23,7 @@ func (r *DataRepository) InitializeRepository() {
} }
if stat.IsDir() { if stat.IsDir() {
logger.Error("Argument '-Persist' must be a path to file, not a directory.") logger.ErrorLn("Argument '-Persist' must be a path to file, not a directory.")
os.Exit(1) os.Exit(1)
} }
@ -60,7 +60,7 @@ func (r *DataRepository) LoadStateJSON(jsonData string) error {
r.ensureStoreStateNoNullReferences() r.ensureStoreStateNoNullReferences()
logger.Info("Loaded state:") logger.InfoLn("Loaded state:")
logger.Infof("Databases: %d\n", getLength(r.storeState.Databases)) logger.Infof("Databases: %d\n", getLength(r.storeState.Databases))
logger.Infof("Collections: %d\n", getLength(r.storeState.Collections)) logger.Infof("Collections: %d\n", getLength(r.storeState.Collections))
logger.Infof("Documents: %d\n", getLength(r.storeState.Documents)) logger.Infof("Documents: %d\n", getLength(r.storeState.Documents))
@ -83,7 +83,7 @@ func (r *DataRepository) SaveStateFS(filePath string) {
os.WriteFile(filePath, data, os.ModePerm) os.WriteFile(filePath, data, os.ModePerm)
logger.Info("Saved state:") logger.InfoLn("Saved state:")
logger.Infof("Databases: %d\n", getLength(r.storeState.Databases)) logger.Infof("Databases: %d\n", getLength(r.storeState.Databases))
logger.Infof("Collections: %d\n", getLength(r.storeState.Collections)) logger.Infof("Collections: %d\n", getLength(r.storeState.Collections))
logger.Infof("Documents: %d\n", getLength(r.storeState.Documents)) logger.Infof("Documents: %d\n", getLength(r.storeState.Documents))

View File

@ -9,7 +9,7 @@ import (
func GetDefaultTlsConfig() *tls.Config { func GetDefaultTlsConfig() *tls.Config {
cert, err := tls.X509KeyPair([]byte(certificate), []byte(certificateKey)) cert, err := tls.X509KeyPair([]byte(certificate), []byte(certificateKey))
if err != nil { if err != nil {
logger.Error("Failed to parse certificate and key:", err) logger.ErrorLn("Failed to parse certificate and key:", err)
return &tls.Config{} return &tls.Config{}
} }

View File

@ -30,7 +30,7 @@ func (r rowContext) array_Contains(arguments []interface{}) bool {
if boolValue, ok := boolExpr.(bool); ok { if boolValue, ok := boolExpr.(bool); ok {
partialSearch = boolValue partialSearch = boolValue
} else { } else {
logger.Error("array_Contains - got parameters of wrong type") logger.ErrorLn("array_Contains - got parameters of wrong type")
return false return false
} }
} }
@ -116,13 +116,13 @@ func (r rowContext) array_Slice(arguments []interface{}) []interface{} {
lengthEx := r.resolveSelectItem(arguments[2].(parsers.SelectItem)) lengthEx := r.resolveSelectItem(arguments[2].(parsers.SelectItem))
if length, ok = lengthEx.(int); !ok { if length, ok = lengthEx.(int); !ok {
logger.Error("array_Slice - got length parameters of wrong type") logger.ErrorLn("array_Slice - got length parameters of wrong type")
return []interface{}{} return []interface{}{}
} }
} }
if start, ok = startEx.(int); !ok { if start, ok = startEx.(int); !ok {
logger.Error("array_Slice - got start parameters of wrong type") logger.ErrorLn("array_Slice - got start parameters of wrong type")
return []interface{}{} return []interface{}{}
} }
@ -197,7 +197,7 @@ func (r rowContext) parseArray(argument interface{}) []interface{} {
arrValue := reflect.ValueOf(ex) arrValue := reflect.ValueOf(ex)
if arrValue.Kind() != reflect.Slice { if arrValue.Kind() != reflect.Slice {
logger.Error("parseArray got parameters of wrong type") logger.ErrorLn("parseArray got parameters of wrong type")
return nil return nil
} }
@ -215,7 +215,7 @@ func (r rowContext) partialMatch(item interface{}, exprToSearch interface{}) boo
exprValue := reflect.ValueOf(exprToSearch) exprValue := reflect.ValueOf(exprToSearch)
if itemValue.Kind() != reflect.Map || exprValue.Kind() != reflect.Map { if itemValue.Kind() != reflect.Map || exprValue.Kind() != reflect.Map {
logger.Error("partialMatch got parameters of wrong type") logger.ErrorLn("partialMatch got parameters of wrong type")
return false return false
} }

View File

@ -21,7 +21,7 @@ func (r rowContext) math_Abs(arguments []interface{}) interface{} {
} }
return val return val
default: default:
logger.Debug("math_Abs - got parameters of wrong type") logger.DebugLn("math_Abs - got parameters of wrong type")
return 0 return 0
} }
} }
@ -32,12 +32,12 @@ func (r rowContext) math_Acos(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Acos - got parameters of wrong type") logger.DebugLn("math_Acos - got parameters of wrong type")
return nil return nil
} }
if val < -1 || val > 1 { if val < -1 || val > 1 {
logger.Debug("math_Acos - value out of domain for acos") logger.DebugLn("math_Acos - value out of domain for acos")
return nil return nil
} }
@ -50,12 +50,12 @@ func (r rowContext) math_Asin(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Asin - got parameters of wrong type") logger.DebugLn("math_Asin - got parameters of wrong type")
return nil return nil
} }
if val < -1 || val > 1 { if val < -1 || val > 1 {
logger.Debug("math_Asin - value out of domain for acos") logger.DebugLn("math_Asin - value out of domain for acos")
return nil return nil
} }
@ -68,7 +68,7 @@ func (r rowContext) math_Atan(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Atan - got parameters of wrong type") logger.DebugLn("math_Atan - got parameters of wrong type")
return nil return nil
} }
@ -85,7 +85,7 @@ func (r rowContext) math_Ceiling(arguments []interface{}) interface{} {
case int: case int:
return val return val
default: default:
logger.Debug("math_Ceiling - got parameters of wrong type") logger.DebugLn("math_Ceiling - got parameters of wrong type")
return 0 return 0
} }
} }
@ -96,7 +96,7 @@ func (r rowContext) math_Cos(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Cos - got parameters of wrong type") logger.DebugLn("math_Cos - got parameters of wrong type")
return nil return nil
} }
@ -109,12 +109,12 @@ func (r rowContext) math_Cot(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Cot - got parameters of wrong type") logger.DebugLn("math_Cot - got parameters of wrong type")
return nil return nil
} }
if val == 0 { if val == 0 {
logger.Debug("math_Cot - cotangent undefined for zero") logger.DebugLn("math_Cot - cotangent undefined for zero")
return nil return nil
} }
@ -127,7 +127,7 @@ func (r rowContext) math_Degrees(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Degrees - got parameters of wrong type") logger.DebugLn("math_Degrees - got parameters of wrong type")
return nil return nil
} }
@ -140,7 +140,7 @@ func (r rowContext) math_Exp(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Exp - got parameters of wrong type") logger.DebugLn("math_Exp - got parameters of wrong type")
return nil return nil
} }
@ -157,7 +157,7 @@ func (r rowContext) math_Floor(arguments []interface{}) interface{} {
case int: case int:
return val return val
default: default:
logger.Debug("math_Floor - got parameters of wrong type") logger.DebugLn("math_Floor - got parameters of wrong type")
return 0 return 0
} }
} }
@ -170,7 +170,7 @@ func (r rowContext) math_IntBitNot(arguments []interface{}) interface{} {
case int: case int:
return ^val return ^val
default: default:
logger.Debug("math_IntBitNot - got parameters of wrong type") logger.DebugLn("math_IntBitNot - got parameters of wrong type")
return nil return nil
} }
} }
@ -181,12 +181,12 @@ func (r rowContext) math_Log10(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Log10 - got parameters of wrong type") logger.DebugLn("math_Log10 - got parameters of wrong type")
return nil return nil
} }
if val <= 0 { if val <= 0 {
logger.Debug("math_Log10 - value must be greater than 0") logger.DebugLn("math_Log10 - value must be greater than 0")
return nil return nil
} }
@ -199,7 +199,7 @@ func (r rowContext) math_Radians(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Radians - got parameters of wrong type") logger.DebugLn("math_Radians - got parameters of wrong type")
return nil return nil
} }
@ -216,7 +216,7 @@ func (r rowContext) math_Round(arguments []interface{}) interface{} {
case int: case int:
return val return val
default: default:
logger.Debug("math_Round - got parameters of wrong type") logger.DebugLn("math_Round - got parameters of wrong type")
return nil return nil
} }
} }
@ -243,7 +243,7 @@ func (r rowContext) math_Sign(arguments []interface{}) interface{} {
return 0 return 0
} }
default: default:
logger.Debug("math_Sign - got parameters of wrong type") logger.DebugLn("math_Sign - got parameters of wrong type")
return nil return nil
} }
} }
@ -254,7 +254,7 @@ func (r rowContext) math_Sin(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Sin - got parameters of wrong type") logger.DebugLn("math_Sin - got parameters of wrong type")
return nil return nil
} }
@ -267,7 +267,7 @@ func (r rowContext) math_Sqrt(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Sqrt - got parameters of wrong type") logger.DebugLn("math_Sqrt - got parameters of wrong type")
return nil return nil
} }
@ -280,7 +280,7 @@ func (r rowContext) math_Square(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Square - got parameters of wrong type") logger.DebugLn("math_Square - got parameters of wrong type")
return nil return nil
} }
@ -293,7 +293,7 @@ func (r rowContext) math_Tan(arguments []interface{}) interface{} {
val, valIsNumber := numToFloat64(ex) val, valIsNumber := numToFloat64(ex)
if !valIsNumber { if !valIsNumber {
logger.Debug("math_Tan - got parameters of wrong type") logger.DebugLn("math_Tan - got parameters of wrong type")
return nil return nil
} }
@ -310,7 +310,7 @@ func (r rowContext) math_Trunc(arguments []interface{}) interface{} {
case int: case int:
return float64(val) return float64(val)
default: default:
logger.Debug("math_Trunc - got parameters of wrong type") logger.DebugLn("math_Trunc - got parameters of wrong type")
return nil return nil
} }
} }
@ -325,7 +325,7 @@ func (r rowContext) math_Atn2(arguments []interface{}) interface{} {
x, xIsNumber := numToFloat64(ex2) x, xIsNumber := numToFloat64(ex2)
if !yIsNumber || !xIsNumber { if !yIsNumber || !xIsNumber {
logger.Debug("math_Atn2 - got parameters of wrong type") logger.DebugLn("math_Atn2 - got parameters of wrong type")
return nil return nil
} }
@ -342,7 +342,7 @@ func (r rowContext) math_IntAdd(arguments []interface{}) interface{} {
ex2Number, ex2IsNumber := numToInt(ex2) ex2Number, ex2IsNumber := numToInt(ex2)
if !ex1IsNumber || !ex2IsNumber { if !ex1IsNumber || !ex2IsNumber {
logger.Debug("math_IntAdd - got parameters of wrong type") logger.DebugLn("math_IntAdd - got parameters of wrong type")
return nil return nil
} }
@ -359,7 +359,7 @@ func (r rowContext) math_IntBitAnd(arguments []interface{}) interface{} {
ex2Int, ex2IsInt := numToInt(ex2) ex2Int, ex2IsInt := numToInt(ex2)
if !ex1IsInt || !ex2IsInt { if !ex1IsInt || !ex2IsInt {
logger.Debug("math_IntBitAnd - got parameters of wrong type") logger.DebugLn("math_IntBitAnd - got parameters of wrong type")
return nil return nil
} }
@ -376,7 +376,7 @@ func (r rowContext) math_IntBitLeftShift(arguments []interface{}) interface{} {
num2, num2IsInt := numToInt(ex2) num2, num2IsInt := numToInt(ex2)
if !num1IsInt || !num2IsInt { if !num1IsInt || !num2IsInt {
logger.Debug("math_IntBitLeftShift - got parameters of wrong type") logger.DebugLn("math_IntBitLeftShift - got parameters of wrong type")
return nil return nil
} }
@ -393,7 +393,7 @@ func (r rowContext) math_IntBitOr(arguments []interface{}) interface{} {
num2, num2IsInt := ex2.(int) num2, num2IsInt := ex2.(int)
if !num1IsInt || !num2IsInt { if !num1IsInt || !num2IsInt {
logger.Debug("math_IntBitOr - got parameters of wrong type") logger.DebugLn("math_IntBitOr - got parameters of wrong type")
return nil return nil
} }
@ -410,7 +410,7 @@ func (r rowContext) math_IntBitRightShift(arguments []interface{}) interface{} {
num2, num2IsInt := numToInt(ex2) num2, num2IsInt := numToInt(ex2)
if !num1IsInt || !num2IsInt { if !num1IsInt || !num2IsInt {
logger.Debug("math_IntBitRightShift - got parameters of wrong type") logger.DebugLn("math_IntBitRightShift - got parameters of wrong type")
return nil return nil
} }
@ -427,7 +427,7 @@ func (r rowContext) math_IntBitXor(arguments []interface{}) interface{} {
num2, num2IsInt := ex2.(int) num2, num2IsInt := ex2.(int)
if !num1IsInt || !num2IsInt { if !num1IsInt || !num2IsInt {
logger.Debug("math_IntBitXor - got parameters of wrong type") logger.DebugLn("math_IntBitXor - got parameters of wrong type")
return nil return nil
} }
@ -444,7 +444,7 @@ func (r rowContext) math_IntDiv(arguments []interface{}) interface{} {
num2, num2IsInt := ex2.(int) num2, num2IsInt := ex2.(int)
if !num1IsInt || !num2IsInt || num2 == 0 { if !num1IsInt || !num2IsInt || num2 == 0 {
logger.Debug("math_IntDiv - got parameters of wrong type or divide by zero") logger.DebugLn("math_IntDiv - got parameters of wrong type or divide by zero")
return nil return nil
} }
@ -461,7 +461,7 @@ func (r rowContext) math_IntMul(arguments []interface{}) interface{} {
num2, num2IsInt := ex2.(int) num2, num2IsInt := ex2.(int)
if !num1IsInt || !num2IsInt { if !num1IsInt || !num2IsInt {
logger.Debug("math_IntMul - got parameters of wrong type") logger.DebugLn("math_IntMul - got parameters of wrong type")
return nil return nil
} }
@ -478,7 +478,7 @@ func (r rowContext) math_IntSub(arguments []interface{}) interface{} {
num2, num2IsInt := ex2.(int) num2, num2IsInt := ex2.(int)
if !num1IsInt || !num2IsInt { if !num1IsInt || !num2IsInt {
logger.Debug("math_IntSub - got parameters of wrong type") logger.DebugLn("math_IntSub - got parameters of wrong type")
return nil return nil
} }
@ -495,7 +495,7 @@ func (r rowContext) math_IntMod(arguments []interface{}) interface{} {
num2, num2IsInt := ex2.(int) num2, num2IsInt := ex2.(int)
if !num1IsInt || !num2IsInt || num2 == 0 { if !num1IsInt || !num2IsInt || num2 == 0 {
logger.Debug("math_IntMod - got parameters of wrong type or divide by zero") logger.DebugLn("math_IntMod - got parameters of wrong type or divide by zero")
return nil return nil
} }
@ -512,7 +512,7 @@ func (r rowContext) math_Power(arguments []interface{}) interface{} {
exponent, exponentIsNumber := numToFloat64(ex2) exponent, exponentIsNumber := numToFloat64(ex2)
if !baseIsNumber || !exponentIsNumber { if !baseIsNumber || !exponentIsNumber {
logger.Debug("math_Power - got parameters of wrong type") logger.DebugLn("math_Power - got parameters of wrong type")
return nil return nil
} }
@ -530,21 +530,21 @@ func (r rowContext) math_Log(arguments []interface{}) interface{} {
baseValue, baseValueIsNumber := numToFloat64(baseValueObject) baseValue, baseValueIsNumber := numToFloat64(baseValueObject)
if !baseValueIsNumber { if !baseValueIsNumber {
logger.Debug("math_Log - base parameter must be a numeric value") logger.DebugLn("math_Log - base parameter must be a numeric value")
return nil return nil
} }
if baseValue > 0 && baseValue != 1 { if baseValue > 0 && baseValue != 1 {
base = baseValue base = baseValue
} else { } else {
logger.Debug("math_Log - base must be greater than 0 and not equal to 1") logger.DebugLn("math_Log - base must be greater than 0 and not equal to 1")
return nil return nil
} }
} }
num, numIsNumber := numToFloat64(ex) num, numIsNumber := numToFloat64(ex)
if !numIsNumber || num <= 0 { if !numIsNumber || num <= 0 {
logger.Debug("math_Log - parameter must be a positive numeric value") logger.DebugLn("math_Log - parameter must be a positive numeric value")
return nil return nil
} }
@ -563,21 +563,21 @@ func (r rowContext) math_NumberBin(arguments []interface{}) interface{} {
binSizeValue, binSizeValueIsNumber := numToFloat64(binSizeValueObject) binSizeValue, binSizeValueIsNumber := numToFloat64(binSizeValueObject)
if !binSizeValueIsNumber { if !binSizeValueIsNumber {
logger.Debug("math_NumberBin - base parameter must be a numeric value") logger.DebugLn("math_NumberBin - base parameter must be a numeric value")
return nil return nil
} }
if binSizeValue != 0 { if binSizeValue != 0 {
binSize = binSizeValue binSize = binSizeValue
} else { } else {
logger.Debug("math_NumberBin - base must not be equal to 0") logger.DebugLn("math_NumberBin - base must not be equal to 0")
return nil return nil
} }
} }
num, numIsNumber := numToFloat64(ex) num, numIsNumber := numToFloat64(ex)
if !numIsNumber { if !numIsNumber {
logger.Debug("math_NumberBin - parameter must be a numeric value") logger.DebugLn("math_NumberBin - parameter must be a numeric value")
return nil return nil
} }

View File

@ -172,7 +172,7 @@ func (r rowContext) filters_ComparisonExpression(expression parsers.ComparisonEx
rightExpression, rightExpressionOk := expression.Right.(parsers.SelectItem) rightExpression, rightExpressionOk := expression.Right.(parsers.SelectItem)
if !leftExpressionOk || !rightExpressionOk { if !leftExpressionOk || !rightExpressionOk {
logger.Error("ComparisonExpression has incorrect Left or Right type") logger.ErrorLn("ComparisonExpression has incorrect Left or Right type")
return false return false
} }
@ -351,7 +351,7 @@ func (r rowContext) resolveSelectItem(selectItem parsers.SelectItem) interface{}
return r.selectItem_SelectItemTypeFunctionCall(typedFunctionCall) return r.selectItem_SelectItemTypeFunctionCall(typedFunctionCall)
} }
logger.Error("parsers.SelectItem has incorrect Value type (expected parsers.FunctionCall)") logger.ErrorLn("parsers.SelectItem has incorrect Value type (expected parsers.FunctionCall)")
return nil return nil
} }
@ -379,7 +379,7 @@ func (r rowContext) selectItem_SelectItemTypeConstant(selectItem parsers.SelectI
var ok bool var ok bool
if typedValue, ok = selectItem.Value.(parsers.Constant); !ok { if typedValue, ok = selectItem.Value.(parsers.Constant); !ok {
// TODO: Handle error // TODO: Handle error
logger.Error("parsers.Constant has incorrect Value type") logger.ErrorLn("parsers.Constant has incorrect Value type")
} }
if typedValue.Type == parsers.ConstantTypeParameterConstant && if typedValue.Type == parsers.ConstantTypeParameterConstant &&

View File

@ -119,7 +119,7 @@ func (r rowContext) strings_Left(arguments []interface{}) string {
lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem)) lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
if length, ok = lengthEx.(int); !ok { if length, ok = lengthEx.(int); !ok {
logger.Error("strings_Left - got parameters of wrong type") logger.ErrorLn("strings_Left - got parameters of wrong type")
return "" return ""
} }
@ -158,7 +158,7 @@ func (r rowContext) strings_Replicate(arguments []interface{}) string {
timesEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem)) timesEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
if times, ok = timesEx.(int); !ok { if times, ok = timesEx.(int); !ok {
logger.Error("strings_Replicate - got parameters of wrong type") logger.ErrorLn("strings_Replicate - got parameters of wrong type")
return "" return ""
} }
@ -191,7 +191,7 @@ func (r rowContext) strings_Right(arguments []interface{}) string {
lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem)) lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
if length, ok = lengthEx.(int); !ok { if length, ok = lengthEx.(int); !ok {
logger.Error("strings_Right - got parameters of wrong type") logger.ErrorLn("strings_Right - got parameters of wrong type")
return "" return ""
} }
@ -220,11 +220,11 @@ func (r rowContext) strings_Substring(arguments []interface{}) string {
lengthEx := r.resolveSelectItem(arguments[2].(parsers.SelectItem)) lengthEx := r.resolveSelectItem(arguments[2].(parsers.SelectItem))
if startPos, ok = startPosEx.(int); !ok { if startPos, ok = startPosEx.(int); !ok {
logger.Error("strings_Substring - got start parameters of wrong type") logger.ErrorLn("strings_Substring - got start parameters of wrong type")
return "" return ""
} }
if length, ok = lengthEx.(int); !ok { if length, ok = lengthEx.(int); !ok {
logger.Error("strings_Substring - got length parameters of wrong type") logger.ErrorLn("strings_Substring - got length parameters of wrong type")
return "" return ""
} }
@ -264,7 +264,7 @@ func (r rowContext) parseString(argument interface{}) string {
return str1 return str1
} }
logger.Error("StringEquals got parameters of wrong type") logger.ErrorLn("StringEquals got parameters of wrong type")
return "" return ""
} }