All Downloads are FREE. Search and download functionalities are using the official Maven repository.

zio.nebula.NebulaConfig.scala Maven / Gradle / Ivy

The newest version!
package zio.nebula

import zio.{ Config, IO, ZLayer }
import zio.config._
import zio.config.magnolia.deriveConfig
import zio.config.typesafe.TypesafeConfigProvider
import zio.nebula.meta.SSLParam

import com.typesafe.config.{ Config => TConfig, ConfigFactory }
import com.vesoft.nebula.client.graph.{ NebulaPoolConfig => PoolConfig }

final case class NebulaConfig(
  address: List[NebulaHostAddress],
  timeoutMills: Int,
  executionRetry: Int,
  connectionRetry: Int,
  enableSSL: Boolean = false,
  casSigned: Option[SSLParam] = None,
  selfSigned: Option[SSLParam] = None
)

final case class NebulaMetaConfig(
  underlying: NebulaConfig
)

final case class NebulaStorageConfig(
  underlying: NebulaConfig
)

final case class NebulaPoolConfig(
  minConnsSize: Int = 0,
  maxConnsSize: Int = 10,
  timeoutMills: Int = 0,
  idleTimeMills: Int = 0,
  intervalIdleMills: Int = -1,
  waitTimeMills: Int = 0,
  minClusterHealthRate: Double = 1d,
  enableSsl: Boolean = false,
  sslParam: Option[SSLParam]
) {

  def toJava: PoolConfig = {
    val poolConfig = new PoolConfig()
    poolConfig.setTimeout(timeoutMills)
    poolConfig.setIdleTime(idleTimeMills)
    sslParam.foreach(p => poolConfig.setSslParam(p.toJava))
    poolConfig.setWaitTime(waitTimeMills)
    poolConfig.setEnableSsl(enableSsl)
    poolConfig.setIntervalIdle(intervalIdleMills)
    poolConfig.setMaxConnSize(maxConnsSize)
    poolConfig.setMinClusterHealthRate(minClusterHealthRate)
    poolConfig.setMinConnSize(minConnsSize)
    poolConfig
  }
}

final case class NebulaSessionPoolConfig(
  address: List[NebulaHostAddress], // both for NebulaClient and NebulaSessionClient
  auth: NebulaAuth,                 // both for NebulaClient and NebulaSessionClient
  spaceName: String,                // both for NebulaClient and NebulaSessionClient
  maxSessionSize: Int = 10,
  minSessionSize: Int = 1,
  waitTimeMills: Int = 0,
  retryTimes: Int = 3,
  timeoutMills: Int = 0,
  intervalTimeMills: Int = 0,
  healthCheckTimeSeconds: Int = 600,
  cleanTimeSeconds: Int = 3600,
  reconnect: Boolean = false,       // both for NebulaClient and NebulaSessionClient
  useHttp2: Boolean = false
)

object NebulaConfig {
  private lazy val config       = deriveConfig[NebulaSessionPoolConfig]
  private lazy val clientConfig = deriveConfig[NebulaConfig]
  private lazy val poolConfig   = deriveConfig[NebulaPoolConfig]

  private lazy val defaultGraphConfig: TConfig   = ConfigFactory.load().getConfig("graph")
  private lazy val defaultMetaConfig: TConfig    = ConfigFactory.load().getConfig("meta")
  private lazy val defaultStorageConfig: TConfig = ConfigFactory.load().getConfig("storage")
  private lazy val defaultPoolConfig: TConfig    = ConfigFactory.load().getConfig("pool")

  def fromClientConfig(c: TConfig): IO[Config.Error, NebulaConfig] =
    read(clientConfig.from(TypesafeConfigProvider.fromTypesafeConfig(c)))

  def fromConfig(c: TConfig): IO[Config.Error, NebulaSessionPoolConfig] =
    read(config.from(TypesafeConfigProvider.fromTypesafeConfig(c)))

  def fromPoolConfig(c: TConfig): IO[Config.Error, NebulaPoolConfig] =
    read(poolConfig.from(TypesafeConfigProvider.fromTypesafeConfig(c)))

  lazy val sessionConfigLayer: ZLayer[Any, Nothing, NebulaSessionPoolConfig] =
    ZLayer.fromZIO(fromConfig(defaultGraphConfig).orDie)

  lazy val metaConfigLayer: ZLayer[Any, Nothing, NebulaMetaConfig] =
    ZLayer.fromZIO(fromClientConfig(defaultMetaConfig).orDie.map(NebulaMetaConfig.apply))

  lazy val storageConfigLayer: ZLayer[Any, Nothing, NebulaStorageConfig] =
    ZLayer.fromZIO(fromClientConfig(defaultStorageConfig).orDie.map(NebulaStorageConfig.apply))

  lazy val poolConfigLayer: ZLayer[Any, Nothing, NebulaPoolConfig] =
    ZLayer.fromZIO(fromPoolConfig(defaultPoolConfig).orDie)

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy