package neo4j import ( "strings" "time" n4Cfg "github.com/neo4j/neo4j-go-driver/v5/neo4j/config" "github.com/neo4j/neo4j-go-driver/v5/neo4j/log" ) const ( defaultMaxConnectionLifetime = 5 * time.Minute defaultMaxConnectionPoolSize = 25 defaultConnectionTimeout = 5 * time.Second ) // Option configures Neo4jInit behaviour. type Option func(*Client) type Client struct { neo4jConf *n4Cfg.Config serviceConf Config } // WithLogLevel sets the log level for the Neo4j driver. func WithLogLevel(level string) Option { return func(neo4ji *Client) { var logger log.Logger switch strings.ToLower(level) { case "panic", "fatal", "error": logger = log.ToConsole(log.ERROR) case "warn", "warning": logger = log.ToConsole(log.WARNING) case "info", "debug", "trace": logger = log.ToConsole(log.INFO) default: logger = log.ToConsole(log.ERROR) } neo4ji.neo4jConf.Log = logger } } // WithPerformance configures the Neo4j driver for performance by setting connection pool size and lifetime. func WithPerformance() Option { return func(neo4ji *Client) { if neo4ji.serviceConf.MaxConnectionPoolSize > 0 { neo4ji.neo4jConf.MaxConnectionPoolSize = neo4ji.serviceConf.MaxConnectionPoolSize } else { neo4ji.neo4jConf.MaxConnectionPoolSize = defaultMaxConnectionPoolSize } if neo4ji.serviceConf.MaxConnectionLifetime > 0 { neo4ji.neo4jConf.MaxConnectionLifetime = neo4ji.serviceConf.MaxConnectionLifetime } else { neo4ji.neo4jConf.MaxConnectionLifetime = defaultMaxConnectionLifetime } } }