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

lson.core_2.11.0.9.71.source-code.Http4sConsul.scala Maven / Gradle / Ivy

The newest version!
//: ----------------------------------------------------------------------------
//: Copyright (C) 2017 Verizon.  All Rights Reserved.
//:
//:   Licensed under the Apache License, Version 2.0 (the "License");
//:   you may not use this file except in compliance with the License.
//:   You may obtain a copy of the License at
//:
//:       http://www.apache.org/licenses/LICENSE-2.0
//:
//:   Unless required by applicable law or agreed to in writing, software
//:   distributed under the License is distributed on an "AS IS" BASIS,
//:   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//:   See the License for the specific language governing permissions and
//:   limitations under the License.
//:
//: ----------------------------------------------------------------------------
package nelson

import scalaz.~>
import scalaz.concurrent.Task
import scalaz.stream.{Process, Sink}
import helm.ConsulOp
import helm.ConsulOp.ConsulOpF
import nelson.helmhttp4s.Http4sConsulClient
import org.http4s._
import org.http4s.client._
import journal._
import scala.util.control.NonFatal

object Http4sConsul {

  val log = Logger[Http4sConsul.type]

  def baseUri(consul: Infrastructure.Consul): Uri = {
    val consulHost = consul.endpoint.getHost
    val port = consul.endpoint.getPort
    val port0 = if (port <= 0) 80 else port
    Uri.fromString(s"http://$consulHost:$port0").toOption.yolo("Invalid URI for consul")
  }

  def token(consul: Infrastructure.Consul): Option[String] =
    consul.aclToken.filter(_.nonEmpty)

  def creds(consul: Infrastructure.Consul): Option[(String,String)] =
    consul.creds.map(x => x.username -> x.password)

  def client(consul: Infrastructure.Consul, http4sClient: Client): ConsulOp ~> Task =
    new Http4sConsulClient(baseUri(consul), http4sClient, token(consul), creds(consul))

  def consulSink: Sink[Task,(Datacenter,ConsulOpF[Unit])] =
    Process.constant {
      case (dc, op) => helm.run(dc.consul,op) handle {
        case NonFatal(e) => log.error(s"error while attempting to perform consul operation", e)
      }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy