scala.language.postfixOps Scala Examples

The following examples show how to use scala.language.postfixOps. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example.
Example 1
Source File: WordEmbedding.scala    From scorch   with BSD 2-Clause "Simplified" License 5 votes vote down vote up
package scorch.sandbox.rnn

import botkop.numsca.Tensor
import botkop.{numsca => ns}
import scorch.autograd._
import scorch.nn.Module

import scala.language.postfixOps

case class WordEmbedding(w: Variable) extends Module(Seq(w)) {
  override def forward(x: Variable): Variable =
    WordEmbeddingFunction(x, w).forward()
}

object WordEmbedding {

  
  def apply(v: Int, d: Int): WordEmbedding = {
    val w = ns.randn(v, d)
    WordEmbedding(Variable(w))
  }
}

case class WordEmbeddingFunction(x: Variable, w: Variable) extends Function {

  val List(n, t) = x.shape
  val List(v, d) = w.shape

  override def forward(): Variable = {
    // todo: write idiomatic implementation in numsca
    val out = for {
      i <- 0 until n
      j <- 0 until t
    } yield {
      val wix = x.data(i, j).squeeze().toInt
      w.data(wix).data
    }

    val td = Tensor(out.toArray.flatten).reshape(n, t, d)

    Variable(td, Some(this))
  }

  override def backward(gradOutput: Variable): Unit = {

    // x = n * t
    // w = v * d
    // g = n * t * d

    val dW = ns.zerosLike(w.data)

    for {
      i <- 0 until n
      j <- 0 until t
    } {
      val gWord = gradOutput.data(i, j).reshape(1, d)
      val wordIx = x.data(i, j).squeeze().toInt
      dW(wordIx) += gWord
    }

    w.backward(Variable(dW))
    x.backward()
  }

} 
Example 2
Source File: SampleActorSpec.scala    From coral   with Apache License 2.0 5 votes vote down vote up
package io.coral.actors.transform

import akka.actor.{ActorSystem, Props}
import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe}
import akka.util.Timeout
import io.coral.lib.{NotSoRandom, Random}
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike}

import scala.concurrent.duration._
import scala.language.postfixOps

class SampleActorSpec(_system: ActorSystem)
	extends TestKit(_system)
	with ImplicitSender
	with WordSpecLike
	with Matchers
	with BeforeAndAfterAll
	with ScalaFutures {
	def this() = this(ActorSystem("SampleActorSpec"))

	override def afterAll() {
		TestKit.shutdownActorSystem(system)
	}

	def arbitrarySampleActor(): SampleActor = {
		val json = parse(
			"""{ "type": "sample",
			  | "params": { "fraction": 0.707 } }
			""".stripMargin)
		val props = SampleActor(json).get
		TestActorRef[SampleActor](props).underlyingActor
	}

	def notSoRandomSampleActor(fraction: Double, randoms: Double*): SampleActor = {
		val json = parse(
			s"""{ "type": "sample", "params": { "fraction": ${fraction} } }
     		 """.stripMargin)
		val source = NotSoRandom(randoms: _*)
		val props = Props(classOf[SampleActor], json, Random(source))
		TestActorRef[SampleActor](props).underlyingActor
	}

	implicit val timeout = Timeout(100 millis)

	"A SampleActor" should {

		"Be instantiated with sample fraction" in {
			val json = parse("""{ "type": "sample", "params": { "fraction": 0.5 }}""".stripMargin)
			val props = SampleActor(json).get
			props.actorClass() should be(classOf[SampleActor])
			val actor = TestActorRef[SampleActor](props).underlyingActor
			actor.fraction should be(0.5)
		}

		"Not be instantiated without fraction or percentage" in {
			val json = parse("""{ "type": "sample", "params": { "bla": "blabla" }}""".stripMargin)
			SampleActor(json) should be(None)
		}

		"Be constructible with a io.coral.lib.Random for random boolean stream" in {
			val actor = notSoRandomSampleActor(fraction = 0.5, randoms = 0.1, 0.49, 0.50, 0.51, 0.8, 0.4)
			actor.next() should be(true)
			actor.next() should be(true)
			actor.next() should be(false)
			actor.next() should be(false)
			actor.next() should be(false)
			actor.next() should be(true)
		}

		"Should trigger true or false according to random binomial sequence" in {
			val actor = notSoRandomSampleActor(fraction = 0.7, randoms = 0.8, 0.6)
			val json = parse( """{ "something": "whatever" }""").asInstanceOf[JObject]

			val result1 = actor.simpleEmitTrigger(json)
			result1 should be(Some(JNothing))

			val result2 = actor.simpleEmitTrigger(json)
			result2 should be(Some(json))
		}

		"Should have trigger and emit cooperate" in {
			val actor = notSoRandomSampleActor(fraction = 0.7, randoms = 0.6, 0.8)
			val ref = actor.self
			val json = parse( """{ "something": "whatever" }""").asInstanceOf[JObject]
			val probe = TestProbe()
			actor.emitTargets += probe.ref
			ref ! json
			probe.expectMsg(json)
			ref ! json
			probe.expectNoMsg(100 millis)
		}
	}
} 
Example 3
Source File: ReadTreesTest.scala    From apache-spark-test   with Apache License 2.0 5 votes vote down vote up
package com.github.dnvriend.spark.dataset

import com.github.dnvriend.TestSpec
import com.github.dnvriend.spark._

import scala.language.postfixOps

// note: in dutch, a tree is called 'boom'
class ReadTreesTest extends TestSpec {
  val oldestTree =
    Tree("BOMEN.fid-42c8dacd_14bfe306016_aff", "950572", "boom in verharding", "Onbekend", Some("overig"), Some(8586), "Verharding", "POINT (147106.879 483519.092)")

  it should "get the oldest tree using sql" in withTrees { spark => trees =>
    import spark.implicits._
    trees.createOrReplaceTempView("trees")
    trees.show(10, truncate = false)

    // number of trees in the dataset
    trees.count shouldBe 148648 // 148k trees in the city

    trees.sqlContext.sql("FROM trees ORDER BY jaar DESC LIMIT 1").as[Tree].head shouldBe oldestTree
  }

  it should "get the oldest tree using dsl" in withTrees { spark => trees =>
    import spark.implicits._
    trees
      .orderBy('jaar.desc)
      .limit(1)
      .head shouldBe oldestTree
  }

  it should "get the tree family there is most of" in withTrees { spark => trees =>
    import spark.implicits._
    import org.apache.spark.sql.functions._
    trees
      .filter('soort isNotNull)
      .filter('soort notEqual "overig")
      .groupBy('soort)
      .agg(count('soort).as("count"))
      .orderBy('count.desc)
      .select('soort)
      .limit(1)
      .as[String].head shouldBe "Populier"
  }
} 
Example 4
Source File: VwLabelRowCreatorTest.scala    From aloha   with MIT License 5 votes vote down vote up
package com.eharmony.aloha.dataset.vw.labeled

import com.eharmony.aloha.dataset.SparseFeatureExtractorFunction
import com.eharmony.aloha.semantics.func.GenFunc.f0
import org.junit.Assert._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.BlockJUnit4ClassRunner

import scala.language.{postfixOps, implicitConversions}

@RunWith(classOf[BlockJUnit4ClassRunner])
final class VwLabelRowCreatorTest {

    private[this] val lab = 3d
    private[this] val imp0 = 0d
    private[this] val imp1 = 1d
    private[this] val imp2 = 2d
    private[this] val emptyTag = ""
    private[this] val tag = "t"

    private[this] implicit def liftToOption[A](a: A): Option[A] = Option(a)

    private[this] def spec(lab: Option[Double] = None, imp: Option[Double] = None, tag: Option[String] = None): VwLabelRowCreator[Any] = {
        val fef = new SparseFeatureExtractorFunction[Any](Vector("f1" -> f0("Empty", _ => Nil)))
        VwLabelRowCreator(fef, 0 to 0 toList, Nil, None, f0("", _ => lab), f0("", _ => imp), f0("", _ => tag))
    }

    private[this] def testLabelRemoval(spec: VwLabelRowCreator[Any], exp: String = ""): Unit = assertEquals(exp, spec(())._2.toString)

    // All of these should return empty label because the Label function returns a missing label.
    @Test def testS___() = testLabelRemoval(spec())
    @Test def testS__e() = testLabelRemoval(spec(tag = emptyTag))
    @Test def testS__t() = testLabelRemoval(spec(tag = tag))
    @Test def testS_0_() = testLabelRemoval(spec(imp = imp0))
    @Test def testS_0e() = testLabelRemoval(spec(imp = imp0, tag = emptyTag))
    @Test def testS_0t() = testLabelRemoval(spec(imp = imp0, tag = tag))
    @Test def testS_1_() = testLabelRemoval(spec(imp = imp1))
    @Test def testS_1e() = testLabelRemoval(spec(imp = imp1, tag = emptyTag))
    @Test def testS_1t() = testLabelRemoval(spec(imp = imp1, tag = tag))
    @Test def testS_2_() = testLabelRemoval(spec(imp = imp2))
    @Test def testS_2e() = testLabelRemoval(spec(imp = imp2, tag = emptyTag))
    @Test def testS_2t() = testLabelRemoval(spec(imp = imp2, tag = tag))

    // Importance not provided makes entire label vanish
    @Test def testS1_e() = testLabelRemoval(spec(lab = lab, tag = emptyTag))
    @Test def testS1_t() = testLabelRemoval(spec(lab = lab, tag = tag))

    // Importance of zero is given explicitly.
    @Test def testS10_() = testLabelRemoval(spec(lab = lab, imp = imp0), "3 0 |")
    @Test def testS10e() = testLabelRemoval(spec(lab = lab, imp = imp0, tag = emptyTag), "3 0 |")
    @Test def testS10t() = testLabelRemoval(spec(lab = lab, imp = imp0, tag = tag), "3 0 t|")

    // Importance of 1 is omitted.
    @Test def testS11_() = testLabelRemoval(spec(lab = lab, imp = imp1), "3 |")
    @Test def testS11e() = testLabelRemoval(spec(lab = lab, imp = imp1, tag = emptyTag), "3 |")
    @Test def testS11t() = testLabelRemoval(spec(lab = lab, imp = imp1, tag = tag), "3 t|")

    @Test def testS12_() = testLabelRemoval(spec(lab = lab, imp = imp2), "3 2 |")
    @Test def testS12e() = testLabelRemoval(spec(lab = lab, imp = imp2, tag = emptyTag), "3 2 |")
    @Test def testS12t() = testLabelRemoval(spec(lab = lab, imp = imp2, tag = tag), "3 2 t|")


    @Test def testStringLabel() {
        val spec = new VwLabelRowCreator(
            new SparseFeatureExtractorFunction(Vector("f1" -> f0("Empty", (_: Double) => Nil))),
            0 to 0 toList,
            Nil,
            None,
            f0("", (s: Double) => Option(s)),  // Label
            f0("", (_: Double) => Option(1d)), // Importance
            f0("", (_: Double) => None))       // Tag

        val values = Seq(
            -1.0                 -> "-1",
            -0.99999999999999999 -> "-1",
            -0.9999999999999999  -> "-0.9999999999999999",
            -1.0E-16             -> "-0.0000000000000001",
            -1.0E-17             -> "-0.00000000000000001",
            -1.0E-18             -> "-0",
             0.0                 ->  "0",
             1.0E-18             ->  "0",
             1.0E-17             ->  "0.00000000000000001",
             1.0E-16             ->  "0.0000000000000001",
             0.9999999999999999  ->  "0.9999999999999999",
             0.99999999999999999 ->  "1",
             1.0                 ->  "1"
        )

        values foreach { case(v, ex) => assertEquals(s"for line: $v", Option(ex), spec.stringLabel(v)) }
    }
} 
Example 5
Source File: MappingsHelper.scala    From sbt-jib   with Apache License 2.0 5 votes vote down vote up
package de.gccc.jib

import java.io.File

import sbt._
import sbt.io.{ IO, PathFinder }

import scala.language.postfixOps


  def fromClasspath(entries: Seq[Attributed[File]],
                    target: String,
                    includeArtifact: Artifact => Boolean,
                    includeOnNoArtifact: Boolean = false): Seq[(File, String)] =
    entries.filter(attr => attr.get(sbt.Keys.artifact.key) map includeArtifact getOrElse includeOnNoArtifact).map {
      attribute =>
        val file = attribute.data
        file -> s"$target/${file.getName}"
    }

} 
Example 6
Source File: NetworkTest.scala    From jvm-toxcore-c   with GNU General Public License v3.0 5 votes vote down vote up
package im.tox.tox4j.core

import im.tox.core.network.Port
import im.tox.tox4j.DhtNodeSelector.node
import im.tox.tox4j.TestConstants.Timeout
import im.tox.tox4j._
import im.tox.tox4j.core.NetworkTest.logger
import im.tox.tox4j.core.data.ToxPublicKey
import im.tox.tox4j.impl.jni.ToxCoreImplFactory.{ withToxUnit, withToxes }
import org.scalatest.FlatSpec
import org.scalatest.concurrent.Timeouts
import org.slf4j.LoggerFactory

import scala.language.postfixOps

object NetworkTest {
  private val logger = LoggerFactory.getLogger(classOf[NetworkTest])
  private val ToxCount = 10
}

@SuppressWarnings(Array("org.wartremover.warts.While"))
final class NetworkTest extends FlatSpec with Timeouts {

  // TODO(iphydf): Figure out why the bootstrap tests all fail on Travis.
  

  "LAN discovery" should "connect all nodes" in {
    failAfter(Timeout) {
      withToxes(NetworkTest.ToxCount) { toxes =>
        val action = s"Connecting all of ${toxes.size} toxes with LAN discovery"
        logger.info(action)

        val start = System.currentTimeMillis

        while (!toxes.isAllConnected) {
          toxes.iterate()
          Thread.sleep(toxes.iterationInterval)
        }

        val end = System.currentTimeMillis

        logger.info(s"$action took ${end - start} ms")
      }
    }
  }

  it should "connect at least one instance" in {
    failAfter(Timeout) {
      withToxes(NetworkTest.ToxCount) { toxes =>
        val action = s"Connecting one of ${toxes.size} toxes with LAN discovery"
        logger.info(action)

        val start = System.currentTimeMillis

        while (!toxes.isAnyConnected) {
          toxes.iterate()
          try {
            Thread.sleep(toxes.iterationInterval)
          } catch {
            case e: InterruptedException =>
          }
        }

        val end = System.currentTimeMillis

        logger.info(s"$action took ${end - start} ms")
      }
    }
  }

} 
Example 7
Source File: ExampleApi.scala    From caliban   with Apache License 2.0 5 votes vote down vote up
package caliban

import scala.language.postfixOps
import caliban.ExampleData._
import caliban.ExampleService.ExampleService
import caliban.GraphQL.graphQL
import caliban.schema.Annotations.{ GQLDeprecated, GQLDescription }
import caliban.schema.GenericSchema
import caliban.wrappers.ApolloTracing.apolloTracing
import caliban.wrappers.Wrappers.{ maxDepth, maxFields, printSlowQueries, timeout }
import zio.URIO
import zio.clock.Clock
import zio.console.Console
import zio.duration._
import zio.stream.ZStream

object ExampleApi extends GenericSchema[ExampleService] {

  case class Queries(
    @GQLDescription("Return all characters from a given origin")
    characters: CharactersArgs => URIO[ExampleService, List[Character]],
    @GQLDeprecated("Use `characters`")
    character: CharacterArgs => URIO[ExampleService, Option[Character]]
  )
  case class Mutations(deleteCharacter: CharacterArgs => URIO[ExampleService, Boolean])
  case class Subscriptions(characterDeleted: ZStream[ExampleService, Nothing, String])

  implicit val roleSchema           = gen[Role]
  implicit val characterSchema      = gen[Character]
  implicit val characterArgsSchema  = gen[CharacterArgs]
  implicit val charactersArgsSchema = gen[CharactersArgs]

  val api: GraphQL[Console with Clock with ExampleService] =
    graphQL(
      RootResolver(
        Queries(
          args => ExampleService.getCharacters(args.origin),
          args => ExampleService.findCharacter(args.name)
        ),
        Mutations(args => ExampleService.deleteCharacter(args.name)),
        Subscriptions(ExampleService.deletedEvents)
      )
    ) @@
      maxFields(200) @@               // query analyzer that limit query fields
      maxDepth(30) @@                 // query analyzer that limit query depth
      timeout(3 seconds) @@           // wrapper that fails slow queries
      printSlowQueries(500 millis) @@ // wrapper that logs slow queries
      apolloTracing // wrapper for https://github.com/apollographql/apollo-tracing

} 
Example 8
Source File: ParallelModuleSpec.scala    From scorch   with BSD 2-Clause "Simplified" License 5 votes vote down vote up
package scorch.nn

import botkop.{numsca => ns}
import org.nd4j.linalg.api.buffer.DataBuffer
import org.nd4j.linalg.factory.Nd4j
import org.scalatest.{FlatSpec, Matchers}
import scorch.autograd.Variable
import scorch._
import scorch.autograd.Variable._
import scorch.TestUtil._
import scorch.nn.ParallelModule.ParallelizeFunction

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Random

class ParallelModuleSpec extends FlatSpec with Matchers {

  Nd4j.setDataType(DataBuffer.Type.DOUBLE)
  ns.rand.setSeed(231)
  Random.setSeed(231)

  "A Parallelization module" should "correctly reconstitute output in forward pass" in {
    val batchSize = 32
    val numFeatures = 20

    case class Net() extends Module {
      override def forward(x: Variable): Variable = Variable(x.data.copy())
    }

    val net = Net()
    val p = ParallelModule(net, parallelism = 4)
    val input = Variable(ns.randn(batchSize, numFeatures))
    val yHat = p(input)

    assert(yHat.data.sameElements(input.data))
    assert(yHat.data.sameShape(input.data))
  }

  it should "update the gradients of the module" in {
    val batchSize = 32
    val numFeatures = 20
    val numClasses = 10

    case class Net() extends Module {
      val fc = Linear(numFeatures, numClasses)
      override def forward(x: Variable): Variable = x ~> fc ~> relu
    }
    val net = Net()

    val parCopies = net.parameters.map { p =>
      Variable(p.data.copy())
    }

    val p = ParallelModule(net, parallelism = 4)

    val input = Variable(ns.randn(batchSize, numFeatures))

    val yHat = p(input)

    val target = Variable(ns.randint(numClasses, Array(batchSize, 1)))
    val loss = softmaxLoss(yHat, target)

    loss.backward()

    net.parameters.map(_.grad).foreach(println)

    net.parameters.foreach { p =>
      assert(p.grad.data.sameShape(p.data))
      assert(ns.sum(p.grad.data) != 0.0)
    }

  }

  "The parallelization function" should "calulate the correct gradients" in {
    val batchSize = 90
    val numFeatures = 20
    val numClasses = 10
    case class Net() extends Module {
      val fc = Linear(numFeatures, numClasses)
      override def forward(x: Variable): Variable = x ~> fc ~> relu
    }
    val net = Net()

    def f(a: Variable) =
      ParallelizeFunction(a,
                          module = net,
                          parallelism = 4)
        .forward()

    val input = Variable(ns.randn(batchSize, numFeatures))
    oneOpGradientCheck(f, input, 1e-7)
  }

} 
Example 9
Source File: DataLoaderSpec.scala    From scorch   with BSD 2-Clause "Simplified" License 5 votes vote down vote up
package scorch.data.loader

import botkop.numsca.Tensor
import botkop.{numsca => ns}
import org.nd4j.linalg.api.buffer.DataBuffer
import org.nd4j.linalg.factory.Nd4j
import org.scalatest.{FlatSpec, Matchers}
import scorch._
import scorch.autograd.Variable
import scorch.nn.cnn.{Conv2d, MaxPool2d}
import scorch.nn.{Linear, Module}
import scorch.optim.Adam

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Random

class DataLoaderSpec extends FlatSpec with Matchers {

  Nd4j.setDataType(DataBuffer.Type.DOUBLE)
  ns.rand.setSeed(231)
  Random.setSeed(231)

  "A cifar-10 loader" should "load data" in {

    val miniBatchSize = 8
    val take = 10

    val loader =
      new Cifar10DataLoader(miniBatchSize = miniBatchSize,
                            mode = "train",
                            take = Some(take * miniBatchSize)).toSeq

    assert(loader.size == take)

    loader.foreach {
      case (x, y) =>
        assert(x.shape.head == miniBatchSize)
        // assert(x.shape(1) == 3 * 32 * 32)
        assert(y.shape.head == miniBatchSize)
        assert(y.shape(1) == 1)
    }
  }

  it should "feed a network" in {

    val batchSize = 16
    val numBatches = 2
    val numEpochs = 5
    val parallelism = 8

    val (numChannels, imageSize) = (3, 32)
    val inputShape = List(batchSize, numChannels, imageSize, imageSize)
    val numClasses = 10

    case class Net() extends Module {
      val conv = Conv2d(numChannels = 3,
                        numFilters = 4,
                        filterSize = 5,
                        weightScale = 1e-3,
                        stride = 1,
                        pad = 1)
      val pool = MaxPool2d(poolSize = 2, stride = 2)
      val numFlatFeatures: Int =
        pool.outputShape(conv.outputShape(inputShape)).tail.product
      def flatten(v: Variable): Variable = v.reshape(-1, numFlatFeatures)
      val fc = Linear(numFlatFeatures, numClasses)

      override def forward(x: Variable): Variable =
        x ~> conv ~> relu ~> pool ~> flatten ~> fc ~> relu
    }

    val net = Net().par(parallelism)

    val optimizer = Adam(net.parameters, lr = 0.01)
    val loader = new Cifar10DataLoader(miniBatchSize = batchSize,
                                       mode = "train",
                                       take = Some(numBatches * batchSize))

    val seq = loader.toSeq

    for (epoch <- 1 to numEpochs) {
      seq.zipWithIndex
        .foreach {
          case ((x, y), i) =>
            optimizer.zeroGrad()
            val yHat = net(x)
            val loss = softmaxLoss(yHat, y)

            val guessed = ns.argmax(yHat.data, axis = 1)
            val accuracy = ns.sum(y.data == guessed) / batchSize
            println(
              s"$epoch:$i: loss: ${loss.data.squeeze()} accuracy: $accuracy")

            loss.backward()
            optimizer.step()
        }
    }
  }
} 
Example 10
Source File: recfun.scala    From bolts   with Apache License 2.0 5 votes vote down vote up
package recfun

import stainless.lang._
import stainless.collection._
import scala.language.postfixOps

object Main {
  // Exercise 1
  def pascal(c: BigInt, r: BigInt): BigInt = {
    require(c>=0 && r>=0 && c<=r)
    decreases(r)
    if(c==0) 1
    else if(r==c) 1
    else pascal(c-1, r-1) + pascal(c, r-1)
  }

  def checkPascal(c: BigInt): Boolean = {
    c<0 || pascal(c, c) == 1
  }.holds

  def checkPascal2(c: BigInt, r: BigInt): Boolean = {
    require(c>=0 && r>=0 && c<=r)
    pascal(c,r)==1 || pascal(c,r) == pascal(c-1,r-1) + pascal(c,r-1)
  }.holds

  // Exercise 2
  def balance(chars: List[Char]): Boolean = {
     def recbalance(chars: List[Char], n: BigInt) : Boolean = {
       decreases(chars)
       if (n < 0) false
       else if (chars.isEmpty) {
        if (n == 0) true
        else false
       }
       else if (chars.head == '(') recbalance(chars.tail, n+1)
       else if (chars.head == ')') recbalance(chars.tail, n-1)
       else recbalance(chars.tail, n)
     }
     recbalance(chars, 0)
  }

  def checkBalance(chars: List[Char]) : Boolean = {
    !balance(')' :: chars)
  }.holds

  // Exercise 3
  def distinct[T](l: List[T]): Boolean = {
    decreases(l)
    l match {
      case Nil() => true
      case Cons(x,xs) => !xs.contains(x) && distinct(xs)
    }
  }

  def max(x: BigInt, y: BigInt) = if (x > y) x else y

  def countChange(money: BigInt, coins: List[BigInt]): BigInt = {
    require(coins.forall(_ > 0) && distinct(coins))
    decreases(max(0, money), coins)

    if (money == 0) BigInt(1)
    else if (money < 0 || coins.isEmpty) BigInt(0)
    else countChange(money-coins.head, coins) + countChange(money, coins.tail)
  } ensuring(_ >= 0)
} 
Example 11
Source File: MnistDataLoader.scala    From scorch   with BSD 2-Clause "Simplified" License 5 votes vote down vote up
package scorch.data.loader

import botkop.numsca.Tensor
import com.typesafe.scalalogging.LazyLogging
import scorch.autograd.Variable

import scala.io.Source
import scala.language.postfixOps
import scala.util.Random

class MnistDataLoader(val mode: String,
                      miniBatchSize: Int,
                      take: Option[Int] = None,
                      seed: Long = 231)
    extends DataLoader
    with LazyLogging {

  val file: String = mode match {
    case "train"    => "data/mnist/mnist_train.csv"
    case "validate" => "data/mnist/mnist_test.csv"
  }

  val numEntries: Int =
    Source.fromFile(file).getLines().length

  override val numSamples: Int = take match {
    case Some(n) => math.min(n, numEntries)
    case None    => numEntries
  }

  override val numBatches: Int =
    (numSamples / miniBatchSize) +
      (if (numSamples % miniBatchSize == 0) 0 else 1)

  // this should fit in memory
  val data: Seq[(Variable, Variable)] = Random
    .shuffle(
      Source
        .fromFile(file)
        .getLines()
    )
    .take(take.getOrElse(numSamples))
    .sliding(miniBatchSize, miniBatchSize)
    .map { lines =>
      val (xData, yData) = lines
        .foldLeft(List.empty[Float], List.empty[Float]) {
          case ((xs, ys), line) =>
            val tokens = line.split(",")
            val (y, x) =
              (tokens.head.toFloat, tokens.tail.map(_.toFloat / 255).toList)
            (x ::: xs, y :: ys)
        }

      val x = Variable(Tensor(xData.toArray).reshape(yData.length, 784))
      val y = Variable(Tensor(yData.toArray).reshape(yData.length, 1))

    (x, y)
  } toSeq

  override def iterator: Iterator[(Variable, Variable)] = data.toIterator

} 
Example 12
Source File: JSCarousels.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.carousel

import scala.language.postfixOps
import scala.scalajs.js

import rx.Rx

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.icons.Icons
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext
import com.karasiq.bootstrap.utils.Utils

trait JSCarousels extends UniversalCarousels { self: JSRenderingContext with Carousels with Utils with Icons with BootstrapComponents with BootstrapJQueryContext ⇒
  import scalaTags.all._

  type Carousel = JSCarousel
  object Carousel extends CarouselFactory {
    def apply(data: Rx[Seq[Modifier]], id: String = Bootstrap.newId): JSCarousel = {
      new JSCarousel(id, data)
    }

    def slide(image: String, content: Modifier*): Modifier = {
      UniversalCarousel.slide(image, content)
    }
  }

  class JSCarousel(carouselId: String, content: Rx[Seq[Modifier]]) extends UniversalCarousel(carouselId, content) {
    def create(interval: Int = 5000, pause: String = "hover",
               wrap: Boolean = true, keyboard: Boolean = true,
               modifiers: Modifier = Bootstrap.noModifier): Element = {
      val element = carousel(modifiers).render
      val options = js.Object().asInstanceOf[JSCarouselOptions]
      options.interval = interval
      options.pause = pause
      options.wrap = wrap
      options.keyboard = keyboard
      jQuery(element).carousel(options)
      element
    }

    override def render(md: Modifier*): Modifier = {
      create(modifiers = md)
    }
  }
} 
Example 13
Source File: JSModals.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.modal

import scala.language.postfixOps
import scala.scalajs.js
import scala.scalajs.js.|

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext

trait JSModals { self: JSRenderingContext with Modals with BootstrapComponents with BootstrapJQueryContext ⇒
  implicit class JSModalOps(modal: Modal) {
    def show(backdrop: Boolean | String = true, keyboard: Boolean = true,
             show: Boolean = true, events: Map[String, js.Any] = Map.empty): Unit = {

      val dialog = jQuery(modal.renderTag().render)
      val options = js.Object().asInstanceOf[JSModalOptions]
      options.backdrop = backdrop
      options.keyboard = keyboard
      options.show = show
      dialog.modal(options)

      dialog.on("hidden.bs.modal", () ⇒ {
        // Remove from DOM
        dialog.remove()
      })

      events.foreach { case (event, handler) ⇒
        dialog.on(event, handler)
      }

      dialog.modal("show")
    }
  }
} 
Example 14
Source File: JSPopovers.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.popover

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext
import com.karasiq.bootstrap.tooltip.Tooltips

trait JSPopovers { self: JSRenderingContext with BootstrapComponents with Popovers with Tooltips with BootstrapJQueryContext ⇒
  import scalaTags.all._

  class JSPopover(val options: PopoverOptions) extends Popover {
    def toggle: Modifier = new Modifier {
      def applyTo(t: Element): Unit = {
        val jsOptions = scalajs.js.Object().asInstanceOf[JSPopoverOptions]
        def set(value: String, f: String ⇒ Unit) = if (value.nonEmpty) f(value)
        jsOptions.animation = options.animation
        jsOptions.content = options.content.render
        jsOptions.title = options.title.render
        jsOptions.html = options.html
        jsOptions.placement = options.placement.toString
        set(options.container, jsOptions.container = _)
        set(options.delay, jsOptions.delay = _)
        set(options.selector, jsOptions.selector = _)
        set(options.template, jsOptions.template = _)
        set(options.trigger, jsOptions.trigger = _)
        set(options.viewport, jsOptions.viewport = _)
        jQuery(t).popover(jsOptions)
      }
    }

    override def render(md: Modifier*): Modifier = {
      toggle +: md
    }
  }

  
  object Popover extends PopoverFactory {
    def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): JSPopover = {
      new JSPopover(PopoverOptions(html = true, title = title, content = content, placement = placement))
    }
  }
} 
Example 15
Source File: JSBootstrapBundle.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap

import scala.language.postfixOps

import rx.Ctx

import com.karasiq.bootstrap.carousel.JSCarousels
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext
import com.karasiq.bootstrap.modal.JSModals
import com.karasiq.bootstrap.navbar.JSNavigationBars
import com.karasiq.bootstrap.popover.JSPopovers
import com.karasiq.bootstrap.tooltip.JSTooltips

// JS components implementation
trait JSBootstrapBundle extends UniversalBootstrapBundle with JSRenderingContext with JSModals with JSTooltips
  with JSPopovers with JSNavigationBars with JSCarousels with BootstrapJQueryContext

object JSBootstrapBundle {
  def apply()(implicit rx: Ctx.Owner): JSBootstrapBundle = {
    new JSBootstrapBundle {
      implicit val scalaRxContext = rx
    }
  }
} 
Example 16
Source File: Buttons.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.buttons

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap.utils.Utils

trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { self: RenderingContext with BootstrapComponents with ClassModifiers with Utils ⇒
  import scalaTags.all._

  type Button <: AbstractButton
  val Button: ButtonFactory

  trait AbstractButton extends BootstrapHtmlComponent {
    def style: ButtonStyle
    def size: ButtonSize
    def block: Boolean
    def active: Boolean
    def disabled: Boolean
  }

  trait ButtonFactory {
    
    def apply(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default,
              block: Boolean = false, active: Boolean = false, disabled: Boolean = false): Button
  }
} 
Example 17
Source File: UniversalButtons.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.buttons

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}

trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups { self: RenderingContext with BootstrapComponents with ClassModifiers with Buttons ⇒
  import scalaTags.all._

  type Button = ButtonBuilder
  object Button extends ButtonFactory {
    
  case class ButtonBuilder(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default,
                           block: Boolean = false, active: Boolean = false, disabled: Boolean = false)
    extends UniversalButton {

    def withStyle(style: ButtonStyle): ButtonBuilder = copy(style = style)
    def withSize(size: ButtonSize): ButtonBuilder = copy(size = size)
  }
} 
Example 18
Source File: PagedTables.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.table

import scala.language.postfixOps

import rx._

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap.pagination.PageSelectors

trait PagedTables { self: RenderingContext with BootstrapComponents with Tables with PageSelectors with ClassModifiers ⇒
  import scalaTags.all._

  type PagedTable <: AbstractPagedTable with BootstrapHtmlComponent
  val PagedTable: PagedTableFactory

  
  trait AbstractPagedTable {
    def table: Table
    def pageSelector: PageSelector
  }

  trait PagedTableFactory {
    def apply(heading: Rx[Seq[Modifier]], content: Rx[Seq[TableRow]], perPage: Int = 20): PagedTable

    def static(heading: Seq[Modifier], content: Seq[TableRow], perPage: Int = 20): PagedTable = {
      this.apply(Var(heading), Var(content), perPage)
    }

    private[table] def pagesRx(allContent: Rx[Seq[TableRow]], rowsPerPage: Int): Rx[Int] = {
      Rx {
        val data = allContent()
        val result = if (data.isEmpty) {
          1
        } else if (data.length % rowsPerPage == 0) {
          data.length / rowsPerPage
        } else {
          data.length / rowsPerPage + 1
        }
        result
      }
    }

    private[table] def pagedDataRx(allContent: Rx[Seq[TableRow]], currentPage: Rx[Int], rowsPerPage: Int): Rx[Seq[TableRow]] = {
      Rx {
        val data = allContent()
        val page = currentPage()
        data.slice(rowsPerPage * (page - 1), rowsPerPage * (page - 1) + rowsPerPage)
      }
    }
  }

  trait AbstractStaticPagedTable extends AbstractPagedTable {
    def allContent: Rx[Seq[TableRow]]
    def rowsPerPage: Int
  }
} 
Example 19
Source File: ProxyRequestCodec.scala    From aws-lambda-scala   with MIT License 5 votes vote down vote up
package io.github.mkotsur.aws.codecs

import java.io.ByteArrayInputStream
import cats.syntax.either.catsSyntaxEither
import io.circe.generic.auto._
import io.github.mkotsur.aws.handler.CanDecode
import io.github.mkotsur.aws.proxy.ProxyRequest
import shapeless.Generic

import scala.language.{higherKinds, postfixOps}

private[aws] trait ProxyRequestCodec extends AllCodec with FutureCodec {

  
  def GenericProxyRequestOf[T] = shapeless.Generic[ProxyRequest[T]]

  implicit def canDecodeProxyRequest[T](implicit canDecode: CanDecode[T]) = CanDecode.instance[ProxyRequest[T]] { is =>
    {
      def extractBody(s: ProxyRequest[String]) = s.body match {
        case Some(bodyString) => canDecode.readStream(new ByteArrayInputStream(bodyString.getBytes)).map(Option.apply)
        case None             => Right(None)
      }

      def produceProxyResponse(decodedRequestString: ProxyRequest[String], bodyOption: Option[T]) = {
        val reqList = Generic[ProxyRequest[String]].to(decodedRequestString)
        Generic[ProxyRequest[T]].from((bodyOption :: reqList.reverse.tail).reverse)
      }

      for (decodedRequest$String <- CanDecode[ProxyRequest[String]].readStream(is);
           decodedBodyOption     <- extractBody(decodedRequest$String))
        yield produceProxyResponse(decodedRequest$String, decodedBodyOption)
    }
  }

} 
Example 20
Source File: FutureCodec.scala    From aws-lambda-scala   with MIT License 5 votes vote down vote up
package io.github.mkotsur.aws.codecs

import java.io.ByteArrayOutputStream
import java.nio.charset.Charset

import io.circe.Encoder
import io.github.mkotsur.aws.handler.CanEncode
import io.github.mkotsur.aws.proxy.ProxyResponse
import io.circe.generic.auto._
import io.circe.syntax._
import cats.syntax.either.catsSyntaxEither

import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.{Failure, Success, Try}

private[aws] trait FutureCodec {
  implicit def canEncodeFuture[I: Encoder](implicit canEncode: Encoder[I]) =
    CanEncode.instance[Future[I]]((os, responseEither, ctx) => {
      (for {
        response     <- responseEither.toTry
        futureResult <- Try(Await.result(response, ctx.getRemainingTimeInMillis millis))
        json         <- Try(canEncode(futureResult).noSpaces.getBytes)
        _            <- Try(os.write(json))
      } yield {
        ()
      }) match {
        case Success(v) => Right(v)
        case Failure(e) => Left(e)
      }
    })

  implicit def canEncodeProxyResponse[T](implicit canEncode: CanEncode[T]) = CanEncode.instance[ProxyResponse[T]](
    (output, proxyResponseEither, ctx) => {

      def writeBody(bodyOption: Option[T]): Either[Throwable, Option[String]] =
        bodyOption match {
          case None => Right(None)
          case Some(body) =>
            val os     = new ByteArrayOutputStream()
            val result = canEncode.writeStream(os, Right(body), ctx)
            os.close()
            result.map(_ => Some(os.toString()))
        }

      val proxyResposeOrError = for {
        proxyResponse <- proxyResponseEither
        bodyOption    <- writeBody(proxyResponse.body)
      } yield
        ProxyResponse[String](
          proxyResponse.statusCode,
          proxyResponse.headers,
          bodyOption
        )

      val response = proxyResposeOrError match {
        case Right(proxyRespose) =>
          proxyRespose
        case Left(e) =>
          ProxyResponse[String](
            500,
            Some(Map("Content-Type" -> s"text/plain; charset=${Charset.defaultCharset().name()}")),
            Some(e.getMessage)
          )
      }

      output.write(response.asJson.noSpaces.getBytes)

      Right(())
    }
  )
} 
Example 21
Source File: Lambda.scala    From aws-lambda-scala   with MIT License 5 votes vote down vote up
package io.github.mkotsur.aws.handler

import java.io.{InputStream, OutputStream}

import com.amazonaws.services.lambda.runtime.{Context, RequestStreamHandler}
import io.circe.generic.auto._
import io.github.mkotsur.aws.codecs._
import io.github.mkotsur.aws.proxy.{ProxyRequest, ProxyResponse}
import org.slf4j.LoggerFactory
import cats.syntax.either.catsSyntaxEither
import io.github.mkotsur.aws.handler.Lambda.HandleResult

import scala.language.{higherKinds, postfixOps}
import scala.util.{Failure, Success, Try}

object Lambda extends AllCodec with ProxyRequestCodec {

  type Handle[I, O]    = (I, Context) => HandleResult[O]
  type HandleResult[O] = Either[Throwable, O]
  type Proxy[I, O]     = Lambda[ProxyRequest[I], ProxyResponse[O]]

  object Proxy {
    type Handle[I, O]    = (ProxyRequest[I], Context) => HandleResult[O]
    type HandleResult[O] = Either[Throwable, ProxyResponse[O]]

    private type CanDecodeProxyRequest[A] = CanDecode[ProxyRequest[A]]
    private type CanEncodeProxyRequest[A] = CanEncode[ProxyResponse[A]]

    def instance[I: CanDecodeProxyRequest, O: CanEncodeProxyRequest](
        doHandle: Proxy.Handle[I, O]): Lambda[ProxyRequest[I], ProxyResponse[O]] =
      new Lambda.Proxy[I, O] {
        override protected def handle(i: ProxyRequest[I], c: Context) = doHandle(i, c)
      }
  }

  def instance[I: CanDecode, O: CanEncode](doHandle: Handle[I, O]) =
    new Lambda[I, O] {
      override protected def handle(i: I, c: Context): Either[Throwable, O] = {
        super.handle(i, c)
        doHandle(i, c)
      }
    }

  type ReadStream[I]       = InputStream => Either[Throwable, I]
  type ObjectHandler[I, O] = I => Either[Throwable, O]
  type WriteStream[O]      = (OutputStream, Either[Throwable, O], Context) => Either[Throwable, Unit]

  private val logger = LoggerFactory.getLogger(getClass)

}

abstract class Lambda[I: CanDecode, O: CanEncode] extends RequestStreamHandler {

  
  final def handle(input: InputStream, output: OutputStream, context: Context): Unit =
    handleRequest(input, output, context)

  // This function will ultimately be used as the external handler
  final def handleRequest(input: InputStream, output: OutputStream, context: Context): Unit = {
    val read = implicitly[CanDecode[I]].readStream(input)
    val handled = read.flatMap { input =>
      Try(handle(input, context)) match {
        case Success(v) => v
        case Failure(e) =>
          Lambda.logger.error(s"Error while executing lambda handler: ${e.getMessage}", e)
          Left(e)
      }
    }
    val written = implicitly[CanEncode[O]].writeStream(output, handled, context)
    output.close()
    written.left.foreach(e => throw e)
  }

} 
Example 22
Source File: RandomStateSpec.scala    From Scalaprof   with GNU General Public License v2.0 5 votes vote down vote up
package edu.neu.coe.csye._7200.random

import org.scalatest.{FlatSpec, Matchers}

import scala.language.postfixOps


class RandomStateSpec extends FlatSpec with Matchers {

  def stdDev(xs: Seq[Double]): Double = math.sqrt(xs.reduceLeft((a, x) => a + x * x)) / xs.length

  def mean(xs: Seq[Double]) = xs.sum / xs.length

  // XXX Clearly, this doesn't look good. We will soon learn how to write
  // generic methods like sum and mean. But for now, this is what we've got.
  def sumU(xs: Seq[UniformDouble]): Double = xs.foldLeft(0.0)((a, x) => x + a)

  def meanU(xs: Seq[UniformDouble]) = sumU(xs) / xs.length

  "RandomState(0L)" should "match case RandomState(4804307197456638271)" in {
    val r: RandomState[Long] = RandomState(0L)
    r.next should matchPattern { case JavaRandomState(4804307197456638271L, _) => }
  }
  it should "match case RandomState(-1034601897293430941) on next" in {
    val r: RandomState[Long] = RandomState(0L)
    r.next.next should matchPattern { case JavaRandomState(-1034601897293430941L, _) => }
  }
  "7th element of RandomState(0)" should "match case RandomState(5082315122564986995L)" in {
    val lrs = RandomState(0).toStream.slice(6, 7)
    (lrs head) should matchPattern { case 5082315122564986995L => }
  }
  "Double stream" should "have zero mean" in {
    val xs = RandomState(0).map(RandomState.longToDouble).toStream take 10001 toList
    val mu = mean(xs) //xs.sum/xs.length
    math.abs(mu) shouldBe <= (2E-2)
  }
  "0..1 stream" should "have mean = 0.5" in {
    val xs = RandomState(0).map(RandomState.longToDouble).map(RandomState.doubleToUniformDouble).toStream take 1001 toList;
    math.abs(meanU(xs) - 0.5) shouldBe <=(5E-3)
  }
  "map" should "work" in {
    val rLong: RandomState[Long] = RandomState(0)
    val rInt = rLong.map(_.toInt)
    rInt.get shouldBe -723955400
    val next = rInt.next
    next.get shouldBe 406937919
    val next2 = next.next
    next2.get shouldBe 1407270755
  }
  it should "work with map of map" in {
    val rLong: RandomState[Long] = RandomState(0L)
    val rInt = rLong.map(_.toInt)
    val rBoolean = rInt.map(_ % 2 == 0)
    rBoolean.get shouldBe true
  }
  "flatMap" should "work" in {
    val r1 = RandomState(0)
    val r2 = r1.flatMap(RandomState(_))
    r2.get shouldBe 4804307197456638271L
  }
  "for comprehension" should "work" in {
    val r1 = RandomState(0)
    // TODO this looks wrong: y is never used
    val z: RandomState[Double] = for (x <- r1; y <- RandomState(x)) yield x.toDouble/Long.MaxValue
    z.get shouldBe -0.5380644352028887 +- 0.0001
  }
} 
Example 23
Source File: HedgeFund.scala    From Scalaprof   with GNU General Public License v2.0 5 votes vote down vote up
package com.phasmid.hedge_fund

import com.phasmid.hedge_fund.model._
import com.phasmid.hedge_fund.actors._
import com.phasmid.hedge_fund.portfolio.{Portfolio,PortfolioParser}
import akka.actor.{ Actor, ActorSystem, Props, ActorRef }
import com.typesafe.config.{ ConfigFactory, Config }
import scala.io.Source
import scala.concurrent.ExecutionContext.Implicits.global


object HedgeFund extends App {

    val config = ConfigFactory.load()
    implicit val system = ActorSystem("HedgeFund")
    println(s"""${config.getString("name")}, ${config.getString("appVersion")}""")
    val engines: Seq[Query] = config.getString("engine") match {
      case "YQL" => Seq(YQLQuery(config.getString("format"), false))
      case "Google" => Seq(GoogleQuery("NASDAQ"))
      case "YQL,Google" => Seq(YQLQuery(config.getString("format"), false),GoogleQuery("NASDAQ"))
      case _ => Seq()
    }
    println(s"engines: $engines")
    val portfolio = getPortfolio(config)
    val blackboard = system.actorOf(Props.create(classOf[HedgeFundBlackboard]), "blackboard")
    val symbols = getSymbols(config,portfolio)
    for (engine <- engines) blackboard ! ExternalLookup(engine.getProtocol, engine.createQuery(symbols))
    val optionEngine = new GoogleOptionQuery
    symbols foreach {
      s => blackboard ! ExternalLookup(optionEngine.getProtocol, optionEngine.createQuery(List(s)))
    }
    blackboard ! PortfolioUpdate(portfolio)

import scala.language.postfixOps
  def getSymbols(config: Config, portfolio: Portfolio) = {
    // TODO add in the symbols from the portfolio
    config.getString("symbols") split ("\\,") toList;
  }

def getPortfolio(config: Config): Portfolio = {
   val json = Source.fromFile(config.getString("portfolio")) mkString
   val portfolio = PortfolioParser.decode(json)
   println(s"portfolio: $portfolio")
  portfolio
  }
} 
Example 24
Source File: UpdateLogger.scala    From Scalaprof   with GNU General Public License v2.0 5 votes vote down vote up
package com.phasmid.hedge_fund.actors

import akka.actor.{ ActorRef, Props }
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._
import scala.concurrent.Await
import scala.language.postfixOps
import com.phasmid.hedge_fund.model.Model
import com.phasmid.hedge_fund.portfolio._


class UpdateLogger(blackboard: ActorRef) extends BlackboardActor(blackboard) {

  var portfolio = new Portfolio("", Nil)

  override def receive =
    {
      case Confirmation(id, model, attrs) =>
        log.debug(s"update for identifier: $id")
        if (model.isOption)
          processOption(id, model, attrs)
        else
          processStock(id, model)

      case PortfolioUpdate(p) =>
        log.debug(s"portfolio update for: ${p.name}")
        portfolio = p
        showPortfolio

      case m => super.receive(m)
    }

  implicit val timeout = Timeout(5 seconds)

  def processStock(identifier: String, model: Model) = {
    model.getKey("price") match {
      case Some(p) => {
        // sender is the MarketData actor
        val future = (sender ? SymbolQuery(identifier, List(p))).mapTo[QueryResponse]
        // TODO why are we waiting for this here?
        val result = Await.result(future, timeout.duration)
        result match {
          case QueryResponseValid(k,a) =>
            a map {
              case (k, v) => log.info(s"$identifier attribute $k has been updated to: $v")
            }
          case _ =>
        }
      }
      case None => log.warning(s"'price' not defined in model")
    }
  }

  def processOption(identifier: String, model: Model, attributes: Map[String, Any]) = {
    val key = "underlying"
    attributes.get(key) match {
      case Some(value) =>
        val future = (blackboard ? OptionQuery("id", value)).mapTo[QueryResponse]
        // TODO why are we waiting for this here?
        val result = Await.result(future, timeout.duration)
        result match {
          case QueryResponseValid(k,a) =>
              println(s"Action Required: re: qualifying option $identifier with underlying symbol: $k and attributes: $a")
          case _ =>
        }
      case None => log.warning(s"processOption: value not present for $key")
    }
  }

  def showPortfolio {
    println(s"Portfolio for ${portfolio.name}")
    portfolio.positions foreach { showPosition(_) }
  }

  def showPosition(position: Position) {
    println(s"position for ${position.symbol}: quantity=${position.quantity}; options=")
    position.contracts foreach { showContract(_) }
  }

  def showContract(contract: Contract) {
    println(s"contract: $contract")
  }
} 
Example 25
Source File: models.scala    From Scalaprof   with GNU General Public License v2.0 5 votes vote down vote up
package com.phasmid.hedge_fund.rss

import java.net.URL
import scala.language.postfixOps
import java.util.Date

case class RssUrl(url: URL) {
  override def toString = "RSS: " + url.toString
}

trait RssFeed {
  val link: String
  val title: String
  val desc: String
  val items: Seq[RssItem]
  override def toString = title + "\n" + desc + "\n**"

  def latest = items sortWith ((a, b) => a.date.compareTo(b.date) > 0) head
}

case class AtomRssFeed(title: String, link: String, desc: String, items: Seq[RssItem]) extends RssFeed
case class XmlRssFeed(title: String, link: String, desc: String, language: String, items: Seq[RssItem]) extends RssFeed

case class RssItem(title: String, link: String, desc: String, date: Date, guid: String) {
  override def toString = date + " " + title
} 
Example 26
Source File: JsonYQLParserSpec.scala    From Scalaprof   with GNU General Public License v2.0 5 votes vote down vote up
package com.phasmid.hedge_fund.actors

import akka.actor.{ ActorSystem, Actor, Props, ActorRef }
import akka.testkit._
import org.scalatest.{ WordSpecLike, Matchers, BeforeAndAfterAll }
import scala.io.Source
import scala.concurrent.duration._
import spray.http._
import spray.http.MediaTypes._
import org.scalatest.Inside
import scala.language.postfixOps
import spray.http.ContentType.apply


class JsonYQLParserSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender
    with WordSpecLike with Matchers with Inside with BeforeAndAfterAll {

  def this() = this(ActorSystem("JsonYQLParserSpec"))

  override def afterAll {
    TestKit.shutdownActorSystem(system)
  }

  import scala.language.postfixOps
  val json = Source.fromFile("src/test/resources/yqlExample.json") mkString

  "json conversion" in {
    val body = HttpEntity(MediaTypes.`application/json`, json.getBytes())
    val ok = JsonYQLParser.decode(body) match {
      case Right(x) =>
        val count = x.query.count
        count should equal(4)
        x.query.results.quote.length should equal(count)
        x.query.results.get(count - 1, "symbol") should matchPattern { case Some("MSFT") => }

      case Left(x) =>
        fail("decoding error: " + x)
    }
  }

  "send back" in {
    val blackboard = system.actorOf(Props.create(classOf[MockYQLBlackboard], testActor), "blackboard")
    val entityParser = _system.actorOf(Props.create(classOf[EntityParser], blackboard), "entityParser")
    val entity = HttpEntity(MediaTypes.`application/json`, json.getBytes())
    entityParser ! EntityMessage("json:YQL", entity)
    val msg = expectMsgClass(3.seconds, classOf[QueryResponseValid])
    println("msg received: " + msg)
    msg should matchPattern {
      case QueryResponseValid("MSFT", _) =>
    }
    inside(msg) {
      case QueryResponseValid(symbol, attributes) => attributes.get("Ask") should matchPattern { case Some("46.17") => }
    }
  }

}

import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._
import scala.concurrent.Await
import com.phasmid.hedge_fund.model.Model

class MockYQLUpdateLogger(blackboard: ActorRef) extends UpdateLogger(blackboard) {
  override def processStock(identifier: String, model: Model) = {
    model.getKey("price") match {
      case Some(p) => {
        // sender is the MarketData actor
        val future = sender ? SymbolQuery(identifier, List(p))
        val result = Await.result(future, timeout.duration).asInstanceOf[QueryResponseValid]
        result.attributes map {
          case (k, v) =>
            log.info(s"$identifier attribute $k has been updated to: $v")
            blackboard ! result
        }
      }
      case None => log.warning(s"'price' not defined in model")
    }
  }
}

class MockYQLBlackboard(testActor: ActorRef) extends Blackboard(Map(classOf[KnowledgeUpdate] -> "marketData", classOf[SymbolQuery] -> "marketData", classOf[OptionQuery] -> "marketData", classOf[CandidateOption] -> "optionAnalyzer", classOf[Confirmation] -> "updateLogger"),
  Map("marketData" -> classOf[MarketData], "optionAnalyzer" -> classOf[OptionAnalyzer], "updateLogger" -> classOf[MockYQLUpdateLogger])) {

  override def receive =
    {
      case msg: Confirmation => msg match {
        // Cut down on the volume of messages
        case Confirmation("MSFT", _, _) => super.receive(msg)
        case _ =>
      }
      case msg: QueryResponseValid => testActor forward msg

      case msg => super.receive(msg)
    }
} 
Example 27
Source File: NotebookRestClient.scala    From seahorse-workflow-executor   with Apache License 2.0 5 votes vote down vote up
package io.deepsense.commons.rest.client

import java.net.URL

import scala.concurrent._
import scala.concurrent.duration._
import scala.language.postfixOps

import akka.actor._
import akka.util.Timeout
import spray.client.pipelining._
import spray.http.{HttpResponse, StatusCodes}
import spray.httpx.SprayJsonSupport

import io.deepsense.commons.json.NotebookRestClientProtocol._
import io.deepsense.commons.models.Id
import io.deepsense.commons.rest.client.req.NotebookClientRequest
import io.deepsense.commons.utils.Logging


case class NotebookHttpException(
    httpResponse: HttpResponse,
    msg: String,
    cause: Throwable = null)
  extends Exception(msg, cause)


class NotebookRestClient(
    notebooksServerAddress: URL,
    workflowId: Id,
    nodeId: Id,
    pollInterval: FiniteDuration,
    retryCountLimit: Int
)(implicit override val as: ActorSystem)
  extends Logging with RestClient with SprayJsonSupport {

  def apiUrl: java.net.URL = new URL(notebooksServerAddress, "/jupyter/")
  def credentials: Option[spray.http.HttpCredentials] = None
  def userId: Option[java.util.UUID] = None
  def userName: Option[String] = None

  implicit val timeout: Timeout = 70 minutes

  private val filenameExtension = "html"

  private val postPath = endpointPath("HeadlessNotebook")
  private val getPath = endpointPath(s"HeadlessNotebook/${workflowId}_$nodeId.$filenameExtension")

  private val poller = NotebookPoller(this, pollInterval, retryCountLimit, workflowId, nodeId, getPath)

  def pollForNotebookData(): Future[Array[Byte]] = poller.tryWork

  def generateNotebookData(language: String): Future[HttpResponse] = {
    val req = NotebookClientRequest(workflowId, nodeId, language)
    fetchHttpResponse(Post(postPath, req)).flatMap { resp => resp.status match {
      case StatusCodes.Success(_) => Future.successful(resp)
      case statusCode => Future.failed(NotebookHttpException(resp,
        s"Notebook server responded with $statusCode when asked to generate notebook data"
      ))
    }}
  }

  def generateAndPollNbData(language: String): Future[Array[Byte]] = {
    generateNotebookData(language).flatMap(_ => pollForNotebookData())
  }

  def toFactory: NotebooksClientFactory =
    new NotebooksClientFactory(notebooksServerAddress, pollInterval, retryCountLimit)

}

class NotebooksClientFactory(notebooksServerAddress: URL, pollInterval: FiniteDuration, retryCountLimit: Int)
  (implicit system: ActorSystem) {
  def createNotebookForNode(workflow: Id, node: Id): NotebookRestClient = {
    new NotebookRestClient(notebooksServerAddress, workflow, node, pollInterval, retryCountLimit)
  }
} 
Example 28
Source File: RetrySpec.scala    From seahorse-workflow-executor   with Apache License 2.0 5 votes vote down vote up
package io.deepsense.commons.utils

import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import scala.language.postfixOps

import akka.actor.ActorSystem
import akka.util.Timeout
import org.scalatest.{Matchers, WordSpec}

import io.deepsense.commons.utils.RetryActor.{RetriableException, RetryLimitReachedException}

class RetrySpec extends WordSpec with Matchers {

  val uutName = classOf[Retry[_]].getSimpleName.filterNot(_ == '$')

  trait Setup {
    def generateUUT[T](retryLimitCount: Int)(toDo: => Future[T]): Retry[T] = new {
      override val workDescription = Some("test work")

      override val actorSystem: ActorSystem = ActorSystem()

      override val retryInterval = 1 nano

      override val retryLimit = retryLimitCount

      override val timeout = Timeout(1 minute)

    } with Retry[T] {
      override def work: Future[T] = toDo
    }
  }

  s"A $uutName" should {
    "complete its work" when {
      "no exceptions are thrown" in {
        new Setup {
          val uut = generateUUT(0) {
            Future.successful(2 * 3 + 8)
          }

          Await.result(
            uut.tryWork, Duration.Inf) shouldBe 14
        }
      }

      "only retriable exceptions are thrown and retry limit is not reached" in {
        new Setup {
          var count = 3
          val uut = generateUUT(3) {
            if (count > 0) {
              count -= 1
              Future.failed(RetriableException(s"Thrown because count is ${count + 1}", None))
            } else {
              Future.successful("success")
            }
          }

          Await.result(
            uut.tryWork, Duration.Inf
          ) shouldBe "success"

          count shouldBe 0
        }
      }
    }

    "fail" when {
      "retry limit is reached" in {
        new Setup {
          val uut = generateUUT(10) {
            Future.failed(RetriableException(s"This will never succeed, yet we keep trying", None))
          }

          a [RetryLimitReachedException] shouldBe thrownBy (Await.result(uut.tryWork, Duration.Inf))

        }
      }

      "unexpected exception is thrown" in {
        var count = 1
        new Setup {
          val uut = generateUUT(10) {
            if (count == 0) {
              Future.failed(new RuntimeException("Thrown because counter reached zero"))
            } else {
              count -= 1
              Future.failed(RetriableException(s"Thrown because counter was ${count + 1}", None))
            }
          }

          a [RuntimeException] shouldBe thrownBy (Await.result(uut.tryWork, Duration.Inf))
          count shouldBe 0
        }
      }
    }
  }
} 
Example 29
Source File: thunk.scala    From Scala-High-Performance-Programming   with MIT License 5 votes vote down vote up
package highperfscala.free

import scala.language.{higherKinds, implicitConversions, postfixOps}
import scalaz.{-\/, Free, Functor, \/, \/-}

case class LimitMs(value: Long) extends AnyVal

sealed trait Thunk[A]
case class Timed[A](
  whenActive: () => A,
  whenExpired: () => A,
  limit: LimitMs) extends Thunk[A]
case class StartProcessing[A](
  whenActive: BboUpdated => A,
  whenExpired: BboUpdated => A,
  limit: LimitMs) extends Thunk[A]
case class TradingDecision[A](
  makeDecision: TradingStrategy => A) extends Thunk[A]

object Thunk {
  implicit val functor: Functor[Thunk] = new Functor[Thunk] {
    def map[A, B](t: Thunk[A])(f: (A) => B): Thunk[B] = t match {
      case Timed(whenActive, whenExpired, limit) =>
        Timed(() => f(whenActive()), () => f(whenExpired()), limit)
      case StartProcessing(whenActive, whenExpired, limit) =>
        StartProcessing(c => f(whenActive(c)), c => f(whenExpired(c)), limit)
      case TradingDecision(makeDecision) => TradingDecision(
        (makeDecision.apply _).andThen(f))
    }
  }

  def timed[L, R](
    f: () => R,
    exp: () => L,
    limit: LimitMs): Free[Thunk, L \/ R] = Free.liftF(
    Timed(() => \/-(f()), () => -\/(exp()), limit))
  def startProcessing[L, R](
    f: BboUpdated => R,
    exp: BboUpdated => L,
    limit: LimitMs): Free[Thunk, L \/ R] =
    Free.liftF(StartProcessing(f.andThen(\/-(_)), exp.andThen(-\/(_)), limit))
  def tradingDecision[L, R](f: TradingStrategy => R): Free[Thunk, L \/ R] =
    Free.liftF(TradingDecision((f.apply _).andThen(\/-(_))))
} 
Example 30
Source File: QuickSort2.scala    From learning-scala   with Apache License 2.0 5 votes vote down vote up
package com.es.scala.chapter02

import scala.language.postfixOps

class QuickSort2 {
  def sort(xs: Array[Int]): Array[Int] = {
    if (xs.length <= 1) xs
    else {
      val pivot = xs(xs.length / 2)
      Array.concat(
        sort(xs filter (pivot >)),
        xs filter (pivot ==),
        sort(xs filter (pivot <)))
    }
  }
} 
Example 31
Source File: BasicAuthenticationSpec.scala    From scruid   with Apache License 2.0 5 votes vote down vote up
package ing.wbaa.druid.auth.basic

import scala.concurrent.duration._
import scala.language.postfixOps

import akka.http.scaladsl.model.StatusCodes
import ing.wbaa.druid.{ DruidConfig, QueryHost, TimeSeriesQuery }
import ing.wbaa.druid.client.{ DruidAdvancedHttpClient, HttpStatusException }
import ing.wbaa.druid.definitions._
import io.circe.generic.auto._
import org.scalatest.concurrent._
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

class BasicAuthenticationSpec extends AnyWordSpec with Matchers with ScalaFutures {

  override implicit def patienceConfig: PatienceConfig = PatienceConfig(5 minutes, 100 millis)
  private val totalNumberOfEntries                     = 39244
  private val basicAuthenticationAddition =
    new BasicAuthenticationExtension(username = "user", password = "aloha")

  case class TimeseriesCount(count: Int)

  "TimeSeriesQuery without Basic Auth" should {

    implicit val config = DruidConfig(
      clientBackend = classOf[DruidAdvancedHttpClient],
      clientConfig = DruidAdvancedHttpClient
        .ConfigBuilder()
        .build(),
      hosts = Seq(QueryHost("localhost", 8088))
    )

    "get 401 Auth Required when querying Druid without Authentication config" in {
      val request = TimeSeriesQuery(
        aggregations = List(
          CountAggregation(name = "count")
        ),
        granularity = GranularityType.Hour,
        intervals = List("2011-06-01/2017-06-01")
      ).execute

      whenReady(request.failed) { throwable =>
        throwable shouldBe a[HttpStatusException]
        throwable.asInstanceOf[HttpStatusException].status shouldBe StatusCodes.Unauthorized
      }
    }
  }

  "TimeSeriesQuery with Basic Auth" should {

    implicit val config = DruidConfig(
      clientBackend = classOf[DruidAdvancedHttpClient],
      clientConfig = DruidAdvancedHttpClient
        .ConfigBuilder()
        .withRequestInterceptor(basicAuthenticationAddition)
        .build(),
      hosts = Seq(QueryHost("localhost", 8088))
    )

    "successfully query Druid when an Authentication config is set" in {
      val request = TimeSeriesQuery(
        aggregations = List(
          CountAggregation(name = "count")
        ),
        granularity = GranularityType.Hour,
        intervals = List("2011-06-01/2017-06-01")
      ).execute

      whenReady(request) { response =>
        response.list[TimeseriesCount].map(_.count).sum shouldBe totalNumberOfEntries
      }
    }
  }

} 
Example 32
Source File: IdeaSources.scala    From sbt-idea-plugin   with Apache License 2.0 5 votes vote down vote up
package org.jetbrains.sbtidea.download.idea

import java.net.URL
import java.nio.file.{Files, Path}

import org.jetbrains.sbtidea.download.FileDownloader
import org.jetbrains.sbtidea.{PluginLogger, pathToPathExt}
import sbt._
import org.jetbrains.sbtidea.download.api._

import scala.language.postfixOps

abstract class IdeaSources extends IdeaArtifact {
  override type R = IdeaSources
  override protected def usedInstaller: Installer[IdeaSources] = new Installer[IdeaSources] {
    override def isInstalled(art: IdeaSources)(implicit ctx: InstallContext): Boolean =
      ctx.baseDirectory / "sources.zip" exists
    override def downloadAndInstall(art: IdeaSources)(implicit ctx: InstallContext): Unit = {
      val file = FileDownloader(ctx.baseDirectory.getParent).download(art.dlUrl, optional = true)
      Files.move(file, ctx.baseDirectory.resolve("sources.zip"))
      PluginLogger.info(s"${caller.buildInfo.edition.name} sources installed")
    }
  }
}

class IdeaSourcesImpl(override val caller: AbstractIdeaDependency, dlUrlProvider: () => URL) extends IdeaSources {
  override def dlUrl: URL = dlUrlProvider()
}

object IdeaSourcesImpl {
  def apply(caller: AbstractIdeaDependency, dlUrlProvider: () => URL): IdeaSourcesImpl = new IdeaSourcesImpl(caller, dlUrlProvider)
} 
Example 33
Source File: IntellijPluginParserTest.scala    From sbt-idea-plugin   with Apache License 2.0 5 votes vote down vote up
package org.jetbrains.sbtidea.download.plugin

import org.jetbrains.sbtidea.Keys.IntellijPlugin._
import org.jetbrains.sbtidea.Keys._
import org.scalatest.{FunSuite, Matchers}

import scala.language.postfixOps

final class IntellijPluginParserTest extends FunSuite with Matchers {

  private def id(str: String) = str.toPlugin.asInstanceOf[Id]

  test("Id parser should parse simple id") {
    "org.jetbrains.scala".toPlugin shouldBe a [Id]
  }

  test("plugin url should parse as Url") {
    "https://foo.bar/a.zip".toPlugin shouldBe an [Url]
    "http://foo.bar/a.zip".toPlugin shouldBe an [Url]
    "plugin:http://foo.bar/a.zip".toPlugin shouldBe an [Url]
  }

  test("id should parse with with mixed segments") {
    id("foo").id shouldBe "foo"
    id("foo:").id shouldBe "foo"
    id("foo::").id shouldBe "foo"
    id("foo::baz").id shouldBe "foo"
    id("foo:123:").id shouldBe "foo"
    id("foo:123:baz").id shouldBe "foo"
  }

  test("parser should not parse invalid strings") {
    assertThrows[RuntimeException]("::".toPlugin)
    assertThrows[RuntimeException](":123:foo".toPlugin)
    assertThrows[RuntimeException](":123:".toPlugin)
  }
} 
Example 34
Source File: UniversalButtons.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.buttons

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}

trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups { self: RenderingContext with BootstrapComponents with ClassModifiers with Buttons ⇒
  import scalaTags.all._

  type Button = ButtonBuilder
  object Button extends ButtonFactory {
    
  case class ButtonBuilder(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default,
                           block: Boolean = false, active: Boolean = false, disabled: Boolean = false)
    extends UniversalButton {

    def withStyle(style: ButtonStyle): ButtonBuilder = copy(style = style)
    def withSize(size: ButtonSize): ButtonBuilder = copy(size = size)
  }
} 
Example 35
Source File: TodoList.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.test.frontend

import java.util.UUID

import scala.language.postfixOps

import rx._

import com.karasiq.bootstrap.Bootstrap.default._
import scalaTags.all._

object TodoList {
  sealed abstract class ItemPriority(val style: TableRowStyle)

  object ItemPriority {
    case object Low extends ItemPriority(TableRowStyle.success)
    case object Normal extends ItemPriority(TableRowStyle.info)
    case object High extends ItemPriority(TableRowStyle.danger)
    def fromString(s: String): ItemPriority = Seq(Low, Normal, High).find(_.toString == s).get
  }

  case class Item(title: String, priority: ItemPriority = ItemPriority.Normal, completed: Boolean = false)

  def apply(): TodoList = {
    new TodoList()
  }
}

final class TodoList extends BootstrapHtmlComponent {
  import TodoList._

  val items: Var[Seq[Var[Item]]] = Var(Nil)

  def removeCompleted(): Unit = {
    items() = items.now.filterNot(_.now.completed)
  }

  def addTestData(): Unit = {
    items() = items.now ++ (for (_ <- 1 to 20) yield Var(Item(s"Test ${UUID.randomUUID()}", ItemPriority.Low)))
  }

  private[this] def showDialog(title: String, priority: ItemPriority)(onApply: (String, ItemPriority) ⇒ Unit): Unit = {
    val titleText = Var(title)
    val prioritySelect = FormInput.simpleSelect("Priority", "Low", "Normal", "High")
    prioritySelect.selected.update(Seq(priority.toString))
    Modal("Add/edit item")
      .withBody(Form(
        FormInputGroup(FormInputGroup.label("Title"), FormInputGroup.addon("file-text-o".fontAwesome(FontAwesome.fixedWidth)), FormInputGroup.text(placeholder := "Write description", titleText.reactiveInput)),
        prioritySelect
      ))
      .withButtons(Modal.closeButton("Cancel"), Modal.button("Apply", Modal.dismiss, onclick := Callback.onClick { _ ⇒
        onApply(titleText.now, ItemPriority.fromString(prioritySelect.selected.now.head))
      }))
      .show(backdrop = false)
  }

  def showEditDialog(item: Var[Item]): Unit = {
    showDialog(item.now.title, item.now.priority) { (title, priority) ⇒
      item() = item.now.copy(title, priority)
    }
  }

  def showAddDialog(): Unit = {
    showDialog("", ItemPriority.Normal) { (title, priority) ⇒
      items() = items.now :+ Var(Item(title, priority))
    }
  }

  private[this] def renderItem(item: Var[Item]): TableRow = {
    def todoTitle = Rx(if (item().completed) s(item().title, color.gray) else b(item().title))
    def buttons = ButtonGroup(ButtonGroupSize.small,
      Button(ButtonStyle.primary)("Edit", onclick := Callback.onClick(_ ⇒ showEditDialog(item))),
      Button(ButtonStyle.danger)("Remove", onclick := Callback.onClick(_ ⇒ items.update(items.now.filter(_.ne(item)))))
    )
    TableRow(
      Seq(
        Seq[Modifier](todoTitle, GridSystem.col(10), onclick := Callback.onClick(_ ⇒ item.update(item.now.copy(completed = !item.now.completed)))),
        Seq[Modifier](buttons, GridSystem.col(2), textAlign.center)
      ),
      Rx(`class` := {
        if (item().completed) "" else item().priority.style.styleClass.getOrElse("")
      }).auto
    )
  }

  override def renderTag(md: ModifierT*): TagT = {
    val heading = Rx(Seq[Modifier](
      Seq[Modifier]("Description", GridSystem.col(10)),
      Seq[Modifier]("Actions", GridSystem.col(2)))
    )
    val table = PagedTable(heading, items.map(_.map(renderItem)), 5)

    Panel(style = PanelStyle.success)
      .withHeader(Panel.title("th-list".glyphicon, span("Scala.js Todo", Bootstrap.nbsp, Rx(Bootstrap.badge(items().count(i ⇒ !i().completed)))), Panel.buttons(
        Panel.button("plus".glyphicon, onclick := Callback.onClick(_ ⇒ showAddDialog())),
        Panel.button("trash".glyphicon, onclick := Callback.onClick(_ ⇒ removeCompleted())),
        Panel.button("flash".glyphicon, onclick := Callback.onClick(_ ⇒ addTestData()))
      )))
      .renderTag(table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped, TableStyle.condensed))
  }
} 
Example 36
Source File: TestHtmlPage.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.test.frontend

import scala.language.postfixOps

import rx._

import com.karasiq.bootstrap.Bootstrap.text._
import scalaTags.all._

object TestHtmlPage {
  def apply(): String = {
    "<!doctype html>" + html(head(
      base(href := "/"),
      meta(httpEquiv := "content-type", content := "text/html; charset=utf-8"),
      meta(name := "viewport", content := "width=device-width, initial-scale=1.0"),
      script(src := "https://code.jquery.com/jquery-1.12.0.js"),
      raw(bootstrapCdnLinks),
      scalaTags.tags2.style(raw(fontAwesomeCss)),
      script(raw(activateTooltipScript)),
      scalaTags.tags2.title("Bootstrap text page")
    ), body(
      new TestContainer
    ))
  }

  private[this] class TestContainer extends BootstrapComponent {
    def render(md: ModifierT*): ModifierT = {
      val testModal = this.createModal
      val rxText = Var("ERROR") // Pseudo-reactive binding
      val navigationBar = NavigationBar()
        .withBrand(rxText, href := "http://getbootstrap.com/components/#navbar")
        .withTabs(
          NavigationTab("Table", "table", "table".faFwIcon, this.createTable),
          NavigationTab("Carousel", "carousel", "picture".glyphicon, this.createCarousel),
          NavigationTab("Buttons", "empty", "address-book".faFwIcon, Bootstrap.jumbotron(
            Bootstrap.button("Modal", testModal.toggle)
          ))
        )
        .withContentContainer(e ⇒ GridSystem.container(GridSystem.mkRow(e), marginTop := 60.px))
        .build()
      rxText() = "Scala.js Bootstrap Test"
      Seq[ModifierT](testModal, navigationBar)
    }

    private[this] def createTable = {
      val table = PagedTable(Rx(Seq("Number", "Square")), Rx(TableRow(Seq(1, 1), Tooltip(b("First row")),
        onclick := Callback.onClick(_ ⇒ println("Pseudo callback"))) +: (2 to 100).map(i ⇒ TableRow.data(i, i * i))))
      table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped)
    }

    private[this] def createModal = {
      Modal()
        .withBody("Text-rendered modal")
    }

    private[this] def createCarousel = {
      TestCarousel("https://upload.wikimedia.org/wikipedia/commons/9/9e/Scorpius_featuring_Mars_and_Saturn._%2828837147345%29.jpg")
    }
  }

  private[this] def bootstrapCdnLinks: String =
    """
      |<!-- Latest compiled and minified CSS -->
      |<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
      |
      |<!-- Optional theme -->
      |<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
      |
      |<!-- Latest compiled and minified JavaScript -->
      |<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
      |""".stripMargin

  private[this] def fontAwesomeCss: String =
    """
      |
      |@import url('https://use.fontawesome.com/releases/v4.7.0/css/font-awesome-css.min.css');
      |@font-face {
      |  font-family: 'FontAwesome';
      |  src: url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.eot');
      |  src: url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff2') format('woff2'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff') format('woff'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.ttf') format('truetype'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.svg#fontawesomeregular') format('svg');
      |  font-weight: normal;
      |  font-style: normal;
      |}
    """.stripMargin

  private[this] def activateTooltipScript: String =
    """
      |$(function () {
      |  $('[data-toggle="tooltip"]').tooltip()
      |})
    """.stripMargin
} 
Example 37
Source File: TestHtmlPage.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.test.frontend

import scala.language.postfixOps

import rx._

import com.karasiq.bootstrap4.Bootstrap.text._
import scalaTags.all._

object TestHtmlPage {
  def apply(): String = {
    "<!doctype html>" + html(head(
      base(href := "/"),
      meta(httpEquiv := "content-type", content := "text/html; charset=utf-8"),
      meta(name := "viewport", content := "width=device-width, initial-scale=1.0"),
      script(src := "https://code.jquery.com/jquery-3.2.1.js"),
      raw(bootstrapCdnLinks),
      scalaTags.tags2.style(raw(fontAwesomeCss)),
      script(raw(activateTooltipScript)),
      scalaTags.tags2.title("Bootstrap text page")
    ), body(
      new TestContainer
    ))
  }

  private[this] class TestContainer extends BootstrapComponent {
    def render(md: ModifierT*): ModifierT = {
      val testModal = this.createModal
      val rxText = Var("ERROR") // Pseudo-reactive binding
      val navigationBar = NavigationBar()
        .withBrand(rxText, href := "http://getbootstrap.com/components/#navbar")
        .withTabs(
          NavigationTab("Table", "table", "table".faFwIcon, this.createTable),
          NavigationTab("Carousel", "carousel", "file-image-o".faFwIcon, this.createCarousel),
          NavigationTab("Buttons", "empty", "address-book".faFwIcon, Bootstrap.jumbotron(
            Bootstrap.button("Modal", testModal.toggle)
          ))
        )
        .withContentContainer(e ⇒ GridSystem.container(GridSystem.mkRow(e), marginTop := 60.px))
        .build()
      rxText() = "Scala.js Bootstrap Test"
      Seq[ModifierT](testModal, navigationBar)
    }

    private[this] def createTable = {
      val table = PagedTable(Rx(Seq("Number", "Square")), Rx(TableRow(Seq(1, 1), Tooltip(b("First row")),
        onclick := Callback.onClick(_ ⇒ println("Pseudo callback"))) +: (2 to 100).map(i ⇒ TableRow.data(i, i * i))))
      table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped)
    }

    private[this] def createModal = {
      Modal()
        .withBody("Text-rendered modal")
    }

    private[this] def createCarousel = {
      TestCarousel("https://upload.wikimedia.org/wikipedia/commons/9/9e/Scorpius_featuring_Mars_and_Saturn._%2828837147345%29.jpg")
    }
  }

  private[this] def bootstrapCdnLinks: String =
    """
      |<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
      |""".stripMargin

  private[this] def fontAwesomeCss: String =
    """
      |
      |@import url('https://use.fontawesome.com/releases/v4.7.0/css/font-awesome-css.min.css');
      |@font-face {
      |  font-family: 'FontAwesome';
      |  src: url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.eot');
      |  src: url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff2') format('woff2'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff') format('woff'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.ttf') format('truetype'),
      |       url('https://use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.svg#fontawesomeregular') format('svg');
      |  font-weight: normal;
      |  font-style: normal;
      |}
    """.stripMargin

  private[this] def activateTooltipScript: String =
    """
      |$(function () {
      |  $('[data-toggle="tooltip"]').tooltip()
      |})
    """.stripMargin
} 
Example 38
Source File: JSCarousels.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.carousel

import scala.language.postfixOps
import scala.scalajs.js

import rx.Rx

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext
import com.karasiq.bootstrap4.icons.Icons
import com.karasiq.bootstrap4.utils.Utils

trait JSCarousels extends UniversalCarousels { self: JSRenderingContext with Carousels with Utils with Icons with BootstrapComponents with BootstrapJQueryContext ⇒
  import scalaTags.all._

  type Carousel = JSCarousel
  object Carousel extends CarouselFactory {
    def apply(data: Rx[Seq[Modifier]], id: String = Bootstrap.newId): JSCarousel = {
      new JSCarousel(id, data)
    }

    def slide(image: String, content: Modifier*): Modifier = {
      UniversalCarousel.slide(image, content)
    }
  }

  class JSCarousel(carouselId: String, content: Rx[Seq[Modifier]]) extends UniversalCarousel(carouselId, content) {
    def create(interval: Int = 5000, pause: String = "hover",
               wrap: Boolean = true, keyboard: Boolean = true,
               modifiers: Modifier = Bootstrap.noModifier): Element = {
      val element = carousel(modifiers).render
      val options = js.Object().asInstanceOf[JSCarouselOptions]
      options.interval = interval
      options.pause = pause
      options.wrap = wrap
      options.keyboard = keyboard
      jQuery(element).carousel(options)
      element
    }

    override def render(md: Modifier*): Modifier = {
      create(modifiers = md)
    }
  }
} 
Example 39
Source File: JSModals.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.modal

import scala.language.postfixOps
import scala.scalajs.js
import scala.scalajs.js.|

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext

trait JSModals { self: JSRenderingContext with Modals with BootstrapComponents with BootstrapJQueryContext ⇒
  implicit class JSModalOps(modal: Modal) {
    def show(backdrop: Boolean | String = true, keyboard: Boolean = true,
             show: Boolean = true, events: Map[String, js.Any] = Map.empty): Unit = {

      val dialog = jQuery(modal.renderTag().render)
      val options = js.Object().asInstanceOf[JSModalOptions]
      options.backdrop = backdrop
      options.keyboard = keyboard
      options.show = show
      dialog.modal(options)

      dialog.on("hidden.bs.modal", () ⇒ {
        // Remove from DOM
        dialog.remove()
      })

      events.foreach { case (event, handler) ⇒
        dialog.on(event, handler)
      }

      dialog.modal("show")
    }
  }
} 
Example 40
Source File: JSPopovers.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.popover

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext
import com.karasiq.bootstrap4.tooltip.Tooltips

trait JSPopovers { self: JSRenderingContext with BootstrapComponents with Popovers with Tooltips with BootstrapJQueryContext ⇒
  import scalaTags.all._

  class JSPopover(val options: PopoverOptions) extends Popover {
    def toggle: Modifier = new Modifier {
      def applyTo(t: Element): Unit = {
        val jsOptions = scalajs.js.Object().asInstanceOf[JSPopoverOptions]
        def set(value: String, f: String ⇒ Unit) = if (value.nonEmpty) f(value)
        jsOptions.animation = options.animation
        jsOptions.content = options.content.render
        jsOptions.title = options.title.render
        jsOptions.html = options.html
        jsOptions.placement = options.placement.toString
        set(options.container, jsOptions.container = _)
        set(options.delay, jsOptions.delay = _)
        set(options.selector, jsOptions.selector = _)
        set(options.template, jsOptions.template = _)
        set(options.trigger, jsOptions.trigger = _)
        set(options.viewport, jsOptions.viewport = _)
        jQuery(t).popover(jsOptions)
      }
    }

    override def render(md: Modifier*): Modifier = {
      toggle +: md
    }
  }

  
  object Popover extends PopoverFactory {
    def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): JSPopover = {
      new JSPopover(PopoverOptions(html = true, title = title, content = content, placement = placement))
    }
  }
} 
Example 41
Source File: JSBootstrapBundle.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4

import scala.language.postfixOps

import rx.Ctx

import com.karasiq.bootstrap.context.JSRenderingContext
import com.karasiq.bootstrap.jquery.BootstrapJQueryContext
import com.karasiq.bootstrap4.carousel.JSCarousels
import com.karasiq.bootstrap4.modal.JSModals
import com.karasiq.bootstrap4.navbar.JSNavigationBars
import com.karasiq.bootstrap4.popover.JSPopovers
import com.karasiq.bootstrap4.tooltip.JSTooltips

// JS components implementation
trait JSBootstrapBundle extends UniversalBootstrapBundle with JSRenderingContext with JSModals with JSTooltips
  with JSPopovers with JSNavigationBars with JSCarousels with BootstrapJQueryContext

object JSBootstrapBundle {
  def apply()(implicit rx: Ctx.Owner): JSBootstrapBundle = {
    new JSBootstrapBundle {
      implicit val scalaRxContext = rx
    }
  }
} 
Example 42
Source File: Buttons.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.buttons

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap4.utils.Utils

trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { self: RenderingContext with BootstrapComponents with ClassModifiers with Utils ⇒
  import scalaTags.all._

  type Button <: AbstractButton
  val Button: ButtonFactory

  trait AbstractButton extends BootstrapHtmlComponent {
    def style: ButtonStyle
    def size: ButtonSize
    def block: Boolean
    def active: Boolean
    def disabled: Boolean
  }

  trait ButtonFactory {
    
    def apply(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default,
              block: Boolean = false, active: Boolean = false, disabled: Boolean = false): Button
  }
} 
Example 43
Source File: BootstrapTestApp.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.test.frontend

import scala.language.postfixOps

import org.scalajs.dom
import org.scalajs.dom.window
import rx._

import com.karasiq.bootstrap.Bootstrap.default._
import scalaTags.all._

import com.karasiq.bootstrap.jquery.BootstrapJQueryContext

object BootstrapTestApp {
  def main(args: Array[String]): Unit = {
    BootstrapJQueryContext.useNpmImports()
    jQuery(() ⇒ {
      // Table tab will appear after 3 seconds
      val tableVisible = Var(false)
      val tabTitle = Var("Wait...")

      // Show table tab in 3 seconds
      window.setTimeout(() ⇒ {
        tableVisible.update(true)
        window.setTimeout(() ⇒ { tabTitle() = "Table" }, 1000)
      }, 3000)
      
      val tabs = Var(Seq[NavigationTab](
        NavigationTab(tabTitle, "table", "table".faFwIcon, TestTable(), tableVisible.reactiveShow),
        NavigationTab("Carousel", "carousel", "picture".glyphicon, TestCarousel("https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Big_Wood%2C_N2.JPG/1280px-Big_Wood%2C_N2.JPG")),
        NavigationTab("ToDo list", "todo", "fort-awesome".faFwIcon, TodoList()),
        NavigationTab("Text rendering", "text", "envelope".glyphicon, Bootstrap.jumbotron(
          FormInput.textArea(a("Text rendering", href := "./serverside.html"), rows := 30, readonly, TestHtmlPage())
        ))
      ))

      val navigationBar = NavigationBar()
        .withBrand("Scala.js Bootstrap Test", href := "https://github.com/Karasiq/scalajs-bootstrap")
        .withTabs(tabs)
        .withContentContainer(content ⇒ GridSystem.container(id := "main-container", GridSystem.mkRow(content)))
        .withStyles(NavigationBarStyle.inverse, NavigationBarStyle.fixedTop)
        .build()

      // Render page
      navigationBar.applyTo(dom.document.body)

      // Reactive navbar test
      tabs() = tabs.now :+ NavigationTab("Buttons", "buttons", "log-in".glyphicon, TestPanel("Serious business panel", PanelStyle.warning))
      navigationBar.selectTab(2)
    })
  }
} 
Example 44
Source File: PagedTables.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.table

import scala.language.postfixOps

import rx._

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap4.pagination.PageSelectors

trait PagedTables { self: RenderingContext with BootstrapComponents with Tables with PageSelectors with ClassModifiers ⇒
  import scalaTags.all._

  type PagedTable <: AbstractPagedTable with BootstrapHtmlComponent
  val PagedTable: PagedTableFactory

  
  trait AbstractPagedTable {
    def table: Table
    def pageSelector: PageSelector
  }

  trait PagedTableFactory {
    def apply(heading: Rx[Seq[Modifier]], content: Rx[Seq[TableRow]], perPage: Int = 20): PagedTable

    def static(heading: Seq[Modifier], content: Seq[TableRow], perPage: Int = 20): PagedTable = {
      this.apply(Var(heading), Var(content), perPage)
    }

    private[table] def pagesRx(allContent: Rx[Seq[TableRow]], rowsPerPage: Int): Rx[Int] = {
      Rx {
        val data = allContent()
        val result = if (data.isEmpty) {
          1
        } else if (data.length % rowsPerPage == 0) {
          data.length / rowsPerPage
        } else {
          data.length / rowsPerPage + 1
        }
        result
      }
    }

    private[table] def pagedDataRx(allContent: Rx[Seq[TableRow]], currentPage: Rx[Int], rowsPerPage: Int): Rx[Seq[TableRow]] = {
      Rx {
        val data = allContent()
        val page = currentPage()
        data.slice(rowsPerPage * (page - 1), rowsPerPage * (page - 1) + rowsPerPage)
      }
    }
  }

  trait AbstractStaticPagedTable extends AbstractPagedTable {
    def allContent: Rx[Seq[TableRow]]
    def rowsPerPage: Int
  }
} 
Example 45
Source File: SortableTables.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.table

import scala.language.{higherKinds, postfixOps}

import rx._

import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap4.utils.Utils

trait SortableTables extends TableCols { self: RenderingContext with PagedTables with Utils ⇒
  import scalaTags.all._

  type SortableTable[T] <: AbstractSortableTable[T] with BootstrapHtmlComponent
  val SortableTable: AbstractSortableTableFactory

  trait AbstractSortableTableFactory {
    def apply[T](items: Rx[Seq[T]], columns: Rx[Seq[TableCol[T, _]]],
                 rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier,
                 filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)): SortableTable[T]
  }

  trait AbstractSortableTable[T] {
    def items: Rx[Seq[T]]

    def columns: Rx[GenTableCols[T]]
    def sortByColumn: Var[GenTableCol[T]]
    def reverseOrdering: Var[Boolean]

    def filter: Var[String]
    def filterItem(item: T, filter: String): Boolean

    def rowModifiers(item: T): Modifier

    def setOrdering(column: TableCol[T, _]): Unit = {
      if (sortByColumn.now == column) reverseOrdering() = !reverseOrdering.now
      else sortByColumn() = column
    }

    def pagedTable: PagedTable
  }
} 
Example 46
Source File: Tables.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.table

import scala.language.postfixOps

import rx.{Rx, Var}

import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap4.utils.Utils

trait Tables extends TableRows with TableStyles { self: RenderingContext with Utils ⇒
  import scalaTags.all._

  type Table <: AbstractTable with BootstrapHtmlComponent
  val Table: TableFactory

  trait AbstractTable {
    def heading: Rx[Seq[Modifier]]
    def content: Rx[Seq[TableRow]]
  }

  trait TableFactory {
    def apply(heading: Rx[Seq[Modifier]], content: Rx[Seq[TableRow]]): Table

    def static(heading: Seq[Modifier], content: Seq[TableRow]): Table = {
      apply(Var(heading), Var(content))
    }
  }
} 
Example 47
Source File: TextCarousels.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.carousel

import scala.language.postfixOps

import rx.Rx

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap4.icons.Icons
import com.karasiq.bootstrap4.utils.Utils

trait TextCarousels extends UniversalCarousels { self: RenderingContext with Carousels with Utils with Icons with BootstrapComponents ⇒
  import scalaTags.all._

  type Carousel = UniversalCarousel
  object Carousel extends CarouselFactory {
    def apply(data: Rx[Seq[Modifier]], id: String = Bootstrap.newId): UniversalCarousel = {
      new UniversalCarousel(id, data)
    }

    def slide(image: String, content: Modifier*): Modifier = {
      UniversalCarousel.slide(image, content)
    }
  }
} 
Example 48
Source File: TextPopovers.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.popover

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap4.tooltip.Tooltips
import com.karasiq.bootstrap4.utils.Utils

trait TextPopovers { self: RenderingContext with BootstrapComponents with Tooltips with Popovers with Utils ⇒
  import scalaTags.all._

  import BootstrapAttrs._
  
  class TextPopover(val options: PopoverOptions) extends Popover {
    override def render(md: ModifierT*): ModifierT = {
      (`data-toggle` := "popover") +: Bootstrap.dataProps(options.toStrings: _*) +: md
    }
  }

  
  object Popover extends PopoverFactory {
    def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover = {
      val options = PopoverOptions(html = true, title = title, content = content, placement = placement)
      new TextPopover(options)
    }
  }
} 
Example 49
Source File: Popovers.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.popover

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap4.tooltip.Tooltips
import com.karasiq.bootstrap4.utils.Utils

trait Popovers { self: RenderingContext with BootstrapComponents with Tooltips with Utils ⇒
  import scalaTags.all._

  case class PopoverOptions(animation: Boolean = true, container: String = "", content: Frag = "", delay: String = "",
                            html: Boolean = false, placement: TooltipPlacement = TooltipPlacement.right, selector: String = "", template: String = "",
                            title: Frag = "", trigger: String = "", viewport: String = "") {
    def toStrings: Seq[(String, String)] = {
      def opt[T](name: String, value: T, default: T) = Option(name → value).filterNot(_._2 == default)
      Seq(
        opt("animation", animation, true),
        opt("container", container, ""),
        opt("content", content, ""),
        opt("delay", delay, ""),
        opt("html", html, false),
        opt("placement", placement, TooltipPlacement.right),
        opt("selector", selector, ""),
        opt("template", template, ""),
        opt("title", title, ""),
        opt("trigger", trigger, ""),
        opt("viewport", viewport, "")
      ).flatten.map(kv ⇒ kv._1 → kv._2.toString)
    }
  }

  trait Popover extends BootstrapComponent {
    def options: PopoverOptions
  }

  
  trait PopoverFactory {
    def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover
  }

  val Popover: PopoverFactory
} 
Example 50
Source File: TextBootstrapBundle.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4

import scala.language.postfixOps

import rx.Ctx

import com.karasiq.bootstrap.context.TextRenderingContext
import com.karasiq.bootstrap4.carousel.TextCarousels
import com.karasiq.bootstrap4.popover.TextPopovers
import com.karasiq.bootstrap4.tooltip.TextTooltips

// Text components implementation
trait TextBootstrapBundle extends UniversalBootstrapBundle with TextRenderingContext
  with TextCarousels with TextTooltips with TextPopovers

object TextBootstrapBundle {
  def apply()(implicit ctx: Ctx.Owner): TextBootstrapBundle = {
    new TextBootstrapBundle {
      implicit val scalaRxContext = ctx
    }
  }
} 
Example 51
Source File: BootstrapBundle.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap4.alert.{Alerts, UniversalAlerts}
import com.karasiq.bootstrap4.buttons.{Buttons, UniversalButtons}
import com.karasiq.bootstrap4.card.{Cards, UniversalCards}
import com.karasiq.bootstrap4.carousel.{Carousels, UniversalCarousels}
import com.karasiq.bootstrap4.collapse.{Collapses, UniversalCollapses}
import com.karasiq.bootstrap4.dropdown.{Dropdowns, UniversalDropdowns}
import com.karasiq.bootstrap4.form.{Forms, UniversalForms}
import com.karasiq.bootstrap4.grid.{Grids, UniversalGrids}
import com.karasiq.bootstrap4.icons.{Icons, UniversalIcons}
import com.karasiq.bootstrap4.modal.{Modals, UniversalModals}
import com.karasiq.bootstrap4.navbar.{NavigationBars, UniversalNavigationBars}
import com.karasiq.bootstrap4.pagination.{PageSelectors, UniversalPageSelectors}
import com.karasiq.bootstrap4.popover.Popovers
import com.karasiq.bootstrap4.progressbar.{ProgressBars, UniversalProgressBars}
import com.karasiq.bootstrap4.table._
import com.karasiq.bootstrap4.tooltip.Tooltips
import com.karasiq.bootstrap4.utils.{UniversalUtils, Utils}

// Abstract components
trait BootstrapBundle extends RenderingContext with BootstrapComponents with ClassModifiers with Alerts with Buttons
  with Carousels with Collapses with Dropdowns with Forms with Grids with Icons with Modals with NavigationBars
  with Cards with Popovers with ProgressBars with Tables with PageSelectors with PagedTables with SortableTables
  with Tooltips with Utils

// Default components implementation
trait UniversalBootstrapBundle extends BootstrapBundle
  with UniversalPageSelectors with UniversalTables with UniversalPagedTables with UniversalSortableTables
  with UniversalProgressBars with UniversalCards with UniversalNavigationBars with UniversalModals
  with UniversalIcons with UniversalGrids with UniversalForms with UniversalDropdowns with UniversalCollapses
  with UniversalCarousels with UniversalButtons with UniversalAlerts with UniversalUtils 
Example 52
Source File: TestPanel.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.test.frontend

import scala.concurrent.duration._
import scala.language.postfixOps

import org.scalajs.dom.window
import rx._

import com.karasiq.bootstrap.Bootstrap.default._
import scalaTags.all.{span, _}

object TestPanel {
  def apply(panelTitle: String, style: PanelStyle): TestPanel = {
    new TestPanel(panelTitle, style)
  }
}

final class TestPanel(panelTitle: String, style: PanelStyle) extends BootstrapHtmlComponent {
  override def renderTag(md: ModifierT*): TagT = {
    val titleVar = Var[Frag]("ERROR")
    val successButton = Button(ButtonStyle.success)("Win 10000000$", onclick := Callback.onClick(_ ⇒ TestModal().show()), Tooltip(i("Press me"), TooltipPlacement.left)).render
    val dangerButton = Button(ButtonStyle.danger)("Format C:\\", Popover(span(titleVar), "Popover test", TooltipPlacement.right)).render
    titleVar() = i("Boom")

    val toggleButton = ToggleButton(Bootstrap.button("Toggle me"))
    val disabledButton = DisabledButton(Bootstrap.button("Heavy computation"))

    disabledButton.state.foreach { pressed ⇒
      if (pressed) {
        window.setTimeout(() ⇒ {
          window.alert(s"Answer: ${if (toggleButton.state.now) 321 else 123}")
          disabledButton.state() = false
        }, 1000)
      }
    }

    // Render panel
    val panelId = Bootstrap.newId
    val collapseBtnTitle = Var("ERROR")
    val panel = Panel(panelId, style)
      .withHeader(Panel.title("euro".glyphicon, Panel.collapse(panelId, panelTitle, Bootstrap.nbsp, Bootstrap.badge("42")), Panel.buttons(
        Panel.button("plus".glyphicon, onclick := Callback.onClick(_ ⇒ window.alert("Panel add"))),
        Panel.button("minus".glyphicon, onclick := Callback.onClick(_ ⇒ window.alert("Panel remove")))
      )))
      .renderTag(
        new TestProgressBar(ProgressBarStyle.success, 300 millis),
        Navigation.tabs(
          NavigationTab("Simple buttons", Bootstrap.newId, "remove".glyphicon, Bootstrap.well(
            GridSystem.mkRow(
              small("Hint: press the green button for reactive forms test", Bootstrap.textStyle.info)
            ),
            GridSystem.mkRow(
              ButtonGroup(ButtonGroupSize.default, successButton, dangerButton)
            ),
            GridSystem.mkRow(Collapse(collapseBtnTitle)(
              GridSystem.row(
                GridSystem.col(6)(Dropdown("Dropdown", Dropdown.item("Test 1", onclick := Callback.onClick(_ ⇒ window.alert("Test 1"))), Dropdown.item("Test 2"))),
                GridSystem.col(6)(Dropdown.dropup("Dropup", Dropdown.item("Test 3", onclick := Callback.onClick(_ ⇒ window.alert("Test 3"))), Dropdown.item("Test 4")))
              )
            ))
          )),
          NavigationTab("Reactive buttons", Bootstrap.newId, "play-circle".glyphicon, Bootstrap.well(
            ButtonGroup(ButtonGroupSize.large, toggleButton, disabledButton)
          ))
        )
      )

    collapseBtnTitle() = "Dropdowns"
    panel
  }
} 
Example 53
Source File: BootstrapTestApp.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.test.frontend

import scala.language.postfixOps

import org.scalajs.dom
import org.scalajs.dom.window
import rx._

import com.karasiq.bootstrap4.Bootstrap.default._
import scalaTags.all._

import com.karasiq.bootstrap.jquery.BootstrapJQueryContext

object BootstrapTestApp {
  def main(args: Array[String]): Unit = {
    BootstrapJQueryContext.useNpmImports()
    jQuery(() ⇒ {
      // Table tab will appear after 3 seconds
      val tableVisible = Var(false)
      val tabTitle = Var("Wait...")

      // Show table tab in 3 seconds
      window.setTimeout(() ⇒ {
        tableVisible.update(true)
        window.setTimeout(() ⇒ { tabTitle() = "Table" }, 1000)
      }, 3000)
      
      val tabs = Var(Seq[NavigationTab](
        NavigationTab(tabTitle, "table", "table".faFwIcon, TestTable(), tableVisible.reactiveShow),
        NavigationTab("Carousel", "carousel", "file-image-o".faFwIcon, TestCarousel("https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Big_Wood%2C_N2.JPG/1280px-Big_Wood%2C_N2.JPG")),
        NavigationTab("ToDo list", "todo", "fort-awesome".faFwIcon, TodoList()),
        NavigationTab("Text rendering", "text", "file-text-o".faFwIcon, Bootstrap.jumbotron(
          FormInput.textArea(a("Text rendering", href := "./serverside.html"), rows := 30, readonly, TestHtmlPage())
        ))
      ))

      val navigationBar = NavigationBar()
        .withBrand("Scala.js Bootstrap Test", href := "https://github.com/Karasiq/scalajs-bootstrap")
        .withTabs(tabs)
        .withContentContainer(content ⇒ GridSystem.container(id := "main-container", GridSystem.mkRow(content)))
        .build()

      // Render page
      navigationBar.applyTo(dom.document.body)

      // Reactive navbar test
      tabs() = tabs.now :+ NavigationTab("Buttons", "buttons", "hand-o-right".faFwIcon, TestPanel("Serious business panel"))
      navigationBar.selectTab(2)
    })
  }
} 
Example 54
Source File: TestPanel.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap4.test.frontend

import scala.concurrent.duration._
import scala.language.postfixOps

import org.scalajs.dom.window
import rx._

import com.karasiq.bootstrap4.Bootstrap.default._
import scalaTags.all.{span, _}

object TestPanel {
  def apply(panelTitle: String): TestPanel = {
    new TestPanel(panelTitle)
  }
}

final class TestPanel(panelTitle: String) extends BootstrapHtmlComponent {
  override def renderTag(md: ModifierT*): TagT = {
    val titleVar = Var[Frag]("ERROR")
    val successButton = Button(ButtonStyle.success)("Win 10000000$", onclick := Callback.onClick(_ ⇒ TestModal().show()), Tooltip(i("Press me"), TooltipPlacement.left)).render
    val dangerButton = Button(ButtonStyle.danger)("Format C:\\", Popover(span(titleVar), "Popover test", TooltipPlacement.right)).render
    titleVar() = i("Boom")

    val toggleButton = ToggleButton(Bootstrap.button("Toggle me"))
    val disabledButton = DisabledButton(Bootstrap.button("Heavy computation"))

    disabledButton.state.foreach { pressed ⇒
      if (pressed) {
        window.setTimeout(() ⇒ {
          window.alert(s"Answer: ${if (toggleButton.state.now) 321 else 123}")
          disabledButton.state() = false
        }, 1000)
      }
    }

    // Render panel
    val panelId = Bootstrap.newId
    val collapseBtnTitle = Var("ERROR")
    val panel = Card(panelId)
      .withHeader("euro".faFwIcon, Card.collapse(panelId, panelTitle, Bootstrap.nbsp, Bootstrap.badge("42")), Card.buttons(
        Card.button("plus".faFwIcon, onclick := Callback.onClick(_ ⇒ window.alert("Panel add"))),
        Card.button("minus".faFwIcon, onclick := Callback.onClick(_ ⇒ window.alert("Panel remove")))
      ))
      .withBody(
        new TestProgressBar(Bootstrap.background.success, 200 millis),
        Navigation.tabs(
          NavigationTab("Simple buttons", Bootstrap.newId, "remove".faFwIcon, Card().withBody(
            GridSystem.mkRow(
              small("Hint: press the green button for reactive forms test", Bootstrap.textStyle.info)
            ),
            GridSystem.mkRow(
              ButtonGroup(ButtonGroupSize.default, successButton, dangerButton)
            ),
            GridSystem.mkRow(Collapse(collapseBtnTitle)(
              GridSystem.row(
                GridSystem.col(6).asDiv(Dropdown("Dropdown", Dropdown.item("Test 1", onclick := Callback.onClick(_ ⇒ window.alert("Test 1"))), Dropdown.item("Test 2"))),
                GridSystem.col(6).asDiv(Dropdown.dropup("Dropup", Dropdown.item("Test 3", onclick := Callback.onClick(_ ⇒ window.alert("Test 3"))), Dropdown.item("Test 4")))
              )
            ))
          )),
          NavigationTab("Reactive buttons", Bootstrap.newId, "play-circle".faFwIcon, Card().withBody(ButtonGroup(ButtonGroupSize.large, toggleButton, disabledButton)))
        )
      )
      .renderTag(Bootstrap.borderStyle.warning, Bootstrap.textStyle.info)

    collapseBtnTitle() = "Dropdowns"
    panel
  }
} 
Example 55
Source File: BootstrapTestApp.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.test.backend

import java.util.concurrent.TimeUnit

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

import akka.actor._
import akka.io.IO
import akka.pattern.ask
import akka.util.Timeout
import spray.can.Http
import spray.http._
import spray.routing.HttpService

import com.karasiq.bootstrap.test.frontend.TestHtmlPage

object BootstrapTestApp extends App {
  final class AppHandler extends Actor with HttpService {
    override def receive: Actor.Receive = runRoute {
      get {
         {
          // Server-rendered page
          path("serverside.html") {
            complete(HttpResponse(entity = HttpEntity(ContentType(MediaTypes.`text/html`), TestHtmlPage())))
          } ~
          // Index page
          (pathSingleSlash & respondWithMediaType(MediaTypes.`text/html`)) {
            getFromResource("webapp/index.html")
          } ~
          // Other resources
          getFromResourceDirectory("webapp")
        }
      }
    }

    override def actorRefFactory: ActorRefFactory = context
  }

  def startup(): Unit = {
    implicit val timeout = Timeout(20 seconds)

    implicit val actorSystem = ActorSystem("bootstrap-test")

    Runtime.getRuntime.addShutdownHook(new Thread(new Runnable {
      override def run(): Unit = {
        Await.result(actorSystem.terminate(), FiniteDuration(5, TimeUnit.MINUTES))
      }
    }))

    val service = actorSystem.actorOf(Props[AppHandler], "webService")
    IO(Http) ? Http.Bind(service, interface = "localhost", port = 9000)
  }

  startup()
} 
Example 56
Source File: NavigationBars.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.navbar

import scala.language.{implicitConversions, postfixOps}

import rx.Rx

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap.grid.Grids
import com.karasiq.bootstrap.icons.Icons
import com.karasiq.bootstrap.utils.Utils

trait NavigationBars extends NavigationBarStyles { self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers ⇒
  import scalaTags.all._

  // -----------------------------------------------------------------------
  // Tabs
  // -----------------------------------------------------------------------
  case class NavigationTab(name: Modifier, id: String, icon: IconModifier, content: Modifier, modifiers: Modifier*)
  case class NavigationTabs(tabs: Rx[Seq[NavigationTab]])

  object NavigationTabs {
    implicit def toRxSeq(nt: NavigationTabs): Rx[Seq[NavigationTab]] = nt.tabs
    implicit def fromRxSeq(seq: Rx[Seq[NavigationTab]]): NavigationTabs = new NavigationTabs(seq)
    implicit def fromSeq(seq: Seq[NavigationTab]): NavigationTabs = fromRxSeq(Rx(seq))
  }

  // -----------------------------------------------------------------------
  // Component definitions
  // -----------------------------------------------------------------------
  type Navigation <: AbstractNavigation with BootstrapComponent
  val Navigation: NavigationFactory

  val NavigationBar: NavigationBarFactory
  type NavigationBar <: AbstractNavigationBar with BootstrapComponent

  trait NavComponent {
    val navId: String
    val navTabs: NavigationTabs
    def tabId(id: String): String = s"$navId-$id-tab"
  }

  trait AbstractNavigation extends NavComponent {
    def navType: String
  }

  trait AbstractNavigationBar extends NavComponent

  trait NavigationFactory {
    def tabs(tabs: NavigationTab*): Navigation
    def pills(tabs: NavigationTab*): Navigation
  }

  trait NavigationBarFactory {
    
    def apply(tabs: Seq[NavigationTab] = Nil, barId: String = Bootstrap.newId, brand: Modifier = "Navigation",
              styles: Seq[NavigationBarStyle] = Seq(NavigationBarStyle.default, NavigationBarStyle.fixedTop),
              container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md),
              contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md))): NavigationBar
  }
} 
Example 57
Source File: Tooltips.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.tooltip

import scala.language.{implicitConversions, postfixOps}

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext

trait Tooltips extends TooltipStyles { self: RenderingContext with BootstrapComponents ⇒
  import scalaTags.all._

  type Tooltip <: AbstractTooltip
  val Tooltip: TooltipFactory

  case class TooltipOptions(animation: Boolean = true, container: String = "", delay: String = "",
                            html: Boolean = false, placement: TooltipPlacement = TooltipPlacement.right, selector: String = "", template: String = "",
                            title: Frag = "", trigger: String = "", viewport: String = "") {
    def toStrings: Seq[(String, String)] = {
      def opt[T](name: String, value: T, default: T) = Option(name → value).filterNot(_._2 == default)
      Seq(
        opt("animation", animation, true),
        opt("container", container, ""),
        opt("delay", delay, ""),
        opt("html", html, false),
        opt("placement", placement.placement, TooltipPlacement.right),
        opt("selector", selector, ""),
        opt("template", template, ""),
        opt("title", title, ""),
        opt("trigger", trigger, ""),
        opt("viewport", viewport, "")
      ).flatten.map(kv ⇒ kv._1 → kv._2.toString)
    }
  }

  trait AbstractTooltip extends BootstrapComponent {
    def options: TooltipOptions
  }

  
  trait TooltipFactory {
    def apply(content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): AbstractTooltip
  }
} 
Example 58
Source File: TextTooltips.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.tooltip

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap.utils.Utils

trait TextTooltips { self: RenderingContext with BootstrapComponents with Tooltips with Utils ⇒
  import scalaTags.all._

  import BootstrapAttrs._

  class TextTooltip(val options: TooltipOptions) extends AbstractTooltip {
    override def render(md: ModifierT*): ModifierT = {
      (`data-toggle` := "tooltip") +: Bootstrap.dataProps(options.toStrings:_*) +: md
    }
  }

  
  object Tooltip extends TooltipFactory {
    def apply(content: Frag, placement: TooltipPlacement): AbstractTooltip = {
      new TextTooltip(TooltipOptions(html = true, title = content, placement = placement))
    }
  }
} 
Example 59
Source File: Grids.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.grid

import scala.language.{implicitConversions, postfixOps}

import com.karasiq.bootstrap.context.RenderingContext

trait Grids { self: RenderingContext ⇒
  import scalaTags.all._

  type GridSystem <: AbstractGridSystem
  val GridSystem: GridSystem

  
  trait AbstractGridSystem {
    type ContainerT = Tag
    type RowT = Tag

    def container: ContainerT
    def containerFluid: ContainerT
    def row: RowT

    def col: AbstractColumnFactory
    def hidden: AbstractGridVisibilityFactory
    def visible: AbstractGridVisibilityFactory

    def mkRow(md: Modifier*): Tag = {
      row(col(col.maxSize).asDiv(md))
    }

    def visibility(xs: Boolean = true, sm: Boolean = true, md: Boolean = true, lg: Boolean = true): Modifier = {
      Array[Modifier](
        if (xs) visible.xs else hidden.xs,
        if (sm) visible.sm else hidden.sm,
        if (md) visible.md else hidden.md,
        if (lg) visible.lg else hidden.lg
      )
    }
  }

  trait AbstractColumn extends ModifierFactory {
    def size: Int
    def asDiv: Tag
    def apply(md: ModifierT*): Tag = this.asDiv.apply(md:_*)
  }

  trait AbstractColumnFactory {
    def minSize: Int
    def maxSize: Int

    def xs(size: Int): AbstractColumn
    def sm(size: Int): AbstractColumn
    def md(size: Int): AbstractColumn
    def lg(size: Int): AbstractColumn

    def responsive(xsSize: Int, smSize: Int, mdSize: Int, lgSize: Int): AbstractColumn = new AbstractColumn {
      override val createModifier: ModifierT = Seq[ModifierT](xs(xsSize), sm(smSize), md(mdSize), lg(lgSize))
      def size: Int = lgSize
      def asDiv: Tag = div(createModifier)
    }

    def apply(size: Int): AbstractColumn = this.responsive(size, size, size, size)
  }

  trait AbstractGridVisibility extends ModifierFactory {
    def screenSize: String
    def hidden: Boolean
  }

  trait AbstractGridVisibilityFactory {
    def xs: AbstractGridVisibility
    def sm: AbstractGridVisibility
    def md: AbstractGridVisibility
    def lg: AbstractGridVisibility
    def print: AbstractGridVisibility
  }
} 
Example 60
Source File: BootstrapBundle.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap

import scala.language.postfixOps

import com.karasiq.bootstrap.alert.{Alerts, UniversalAlerts}
import com.karasiq.bootstrap.buttons.{Buttons, UniversalButtons}
import com.karasiq.bootstrap.carousel.{Carousels, UniversalCarousels}
import com.karasiq.bootstrap.collapse.{Collapses, UniversalCollapses}
import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap.dropdown.{Dropdowns, UniversalDropdowns}
import com.karasiq.bootstrap.form.{Forms, UniversalForms}
import com.karasiq.bootstrap.grid.{Grids, UniversalGrids}
import com.karasiq.bootstrap.icons.{Icons, UniversalIcons}
import com.karasiq.bootstrap.modal.{Modals, UniversalModals}
import com.karasiq.bootstrap.navbar.{NavigationBars, UniversalNavigationBars}
import com.karasiq.bootstrap.pagination.{PageSelectors, UniversalPageSelectors}
import com.karasiq.bootstrap.panel.{Panels, UniversalPanels}
import com.karasiq.bootstrap.popover.Popovers
import com.karasiq.bootstrap.progressbar.{ProgressBars, UniversalProgressBars}
import com.karasiq.bootstrap.table._
import com.karasiq.bootstrap.tooltip.Tooltips
import com.karasiq.bootstrap.utils.{UniversalUtils, Utils}

// Abstract components
trait BootstrapBundle extends RenderingContext with BootstrapComponents with ClassModifiers with Alerts with Buttons
  with Carousels with Collapses with Dropdowns with Forms with Grids with Icons with Modals with NavigationBars
  with Panels with Popovers with ProgressBars with Tables with PageSelectors with PagedTables with SortableTables
  with Tooltips with Utils

// Default components implementation
trait UniversalBootstrapBundle extends BootstrapBundle
  with UniversalPageSelectors with UniversalTables with UniversalPagedTables with UniversalSortableTables
  with UniversalProgressBars with UniversalPanels with UniversalNavigationBars with UniversalModals
  with UniversalIcons with UniversalGrids with UniversalForms with UniversalDropdowns with UniversalCollapses
  with UniversalCarousels with UniversalButtons with UniversalAlerts with UniversalUtils 
Example 61
Source File: TextBootstrapBundle.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap

import scala.language.postfixOps

import rx.Ctx

import com.karasiq.bootstrap.carousel.TextCarousels
import com.karasiq.bootstrap.context.TextRenderingContext
import com.karasiq.bootstrap.popover.TextPopovers
import com.karasiq.bootstrap.tooltip.TextTooltips

// Text components implementation
trait TextBootstrapBundle extends UniversalBootstrapBundle with TextRenderingContext
  with TextCarousels with TextTooltips with TextPopovers

object TextBootstrapBundle {
  def apply()(implicit ctx: Ctx.Owner): TextBootstrapBundle = {
    new TextBootstrapBundle {
      implicit val scalaRxContext = ctx
    }
  }
} 
Example 62
Source File: Popovers.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.popover

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap.tooltip.Tooltips
import com.karasiq.bootstrap.utils.Utils

trait Popovers { self: RenderingContext with BootstrapComponents with Tooltips with Utils ⇒
  import scalaTags.all._

  case class PopoverOptions(animation: Boolean = true, container: String = "", content: Frag = "", delay: String = "",
                            html: Boolean = false, placement: TooltipPlacement = TooltipPlacement.right, selector: String = "", template: String = "",
                            title: Frag = "", trigger: String = "", viewport: String = "") {
    def toStrings: Seq[(String, String)] = {
      def opt[T](name: String, value: T, default: T) = Option(name → value).filterNot(_._2 == default)
      Seq(
        opt("animation", animation, true),
        opt("container", container, ""),
        opt("content", content, ""),
        opt("delay", delay, ""),
        opt("html", html, false),
        opt("placement", placement, TooltipPlacement.right),
        opt("selector", selector, ""),
        opt("template", template, ""),
        opt("title", title, ""),
        opt("trigger", trigger, ""),
        opt("viewport", viewport, "")
      ).flatten.map(kv ⇒ kv._1 → kv._2.toString)
    }
  }

  trait Popover extends BootstrapComponent {
    def options: PopoverOptions
  }

  
  trait PopoverFactory {
    def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover
  }

  val Popover: PopoverFactory
} 
Example 63
Source File: TextPopovers.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.popover

import scala.language.postfixOps

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap.tooltip.Tooltips
import com.karasiq.bootstrap.utils.Utils

trait TextPopovers { self: RenderingContext with BootstrapComponents with Tooltips with Popovers with Utils ⇒
  import scalaTags.all._

  import BootstrapAttrs._
  
  class TextPopover(val options: PopoverOptions) extends Popover {
    override def render(md: ModifierT*): ModifierT = {
      (`data-toggle` := "popover") +: Bootstrap.dataProps(options.toStrings: _*) +: md
    }
  }

  
  object Popover extends PopoverFactory {
    def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover = {
      val options = PopoverOptions(html = true, title = title, content = content, placement = placement)
      new TextPopover(options)
    }
  }
} 
Example 64
Source File: TextCarousels.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.carousel

import scala.language.postfixOps

import rx.Rx

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap.icons.Icons
import com.karasiq.bootstrap.utils.Utils

trait TextCarousels extends UniversalCarousels { self: RenderingContext with Carousels with Utils with Icons with BootstrapComponents ⇒
  import scalaTags.all._

  type Carousel = UniversalCarousel
  object Carousel extends CarouselFactory {
    def apply(data: Rx[Seq[Modifier]], id: String = Bootstrap.newId): UniversalCarousel = {
      new UniversalCarousel(id, data)
    }

    def slide(image: String, content: Modifier*): Modifier = {
      UniversalCarousel.slide(image, content)
    }
  }
} 
Example 65
Source File: Tables.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.table

import scala.language.postfixOps

import rx.{Rx, Var}

import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext}
import com.karasiq.bootstrap.utils.Utils

trait Tables extends TableRows with TableStyles { self: RenderingContext with ClassModifiers with Utils ⇒
  import scalaTags.all._

  type Table <: AbstractTable with BootstrapHtmlComponent
  val Table: TableFactory

  trait AbstractTable {
    def heading: Rx[Seq[Modifier]]
    def content: Rx[Seq[TableRow]]
  }

  trait TableFactory {
    def apply(heading: Rx[Seq[Modifier]], content: Rx[Seq[TableRow]]): Table

    def static(heading: Seq[Modifier], content: Seq[TableRow]): Table = {
      apply(Var(heading), Var(content))
    }
  }
} 
Example 66
Source File: SortableTables.scala    From scalajs-bootstrap   with MIT License 5 votes vote down vote up
package com.karasiq.bootstrap.table

import scala.language.{higherKinds, postfixOps}

import rx._

import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap.utils.Utils

trait SortableTables extends TableCols { self: RenderingContext with PagedTables with Utils ⇒
  import scalaTags.all._

  type SortableTable[T] <: AbstractSortableTable[T] with BootstrapHtmlComponent
  val SortableTable: AbstractSortableTableFactory

  trait AbstractSortableTableFactory {
    def apply[T](items: Rx[Seq[T]], columns: Rx[Seq[TableCol[T, _]]],
                 rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier,
                 filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)): SortableTable[T]
  }

  trait AbstractSortableTable[T] {
    def items: Rx[Seq[T]]

    def columns: Rx[GenTableCols[T]]
    def sortByColumn: Var[GenTableCol[T]]
    def reverseOrdering: Var[Boolean]

    def filter: Var[String]
    def filterItem(item: T, filter: String): Boolean

    def rowModifiers(item: T): Modifier

    def setOrdering(column: TableCol[T, _]): Unit = {
      if (sortByColumn.now == column) reverseOrdering() = !reverseOrdering.now
      else sortByColumn() = column
    }

    def pagedTable: PagedTable
  }
} 
Example 67
Source File: ParallelOrSpec.scala    From chymyst-core   with Apache License 2.0 5 votes vote down vote up
package io.chymyst.test

import io.chymyst.jc._

import scala.annotation.tailrec
import scala.concurrent.duration._
import scala.language.postfixOps

class ParallelOrSpec extends LogSpec {

  behavior of "test"

  
  def firstResult[T](b1: B[Unit, T], b2: B[Unit, T], tp: Pool): B[Unit, T] = {
    val get = b[Unit, T]
    val res = b[Unit, T]
    val res1 = m[Unit]
    val res2 = m[Unit]
    val done = m[T]

    site(tp)(
      go { case res1(_) => val x = b1(); done(x) }, // IntelliJ 2016.3 CE insists on `b1(())` here, but scalac is fine with `b1()`.
      go { case res2(_) => val x = b2(); done(x) }
    )

    site(tp)(go { case get(_, r) + done(x) => r(x) })

    site(tp)(go { case res(_, r) => res1() + res2(); val x = get(); r(x) })

    res
  }

  @tailrec
  final def neverReturn[T]: T = {
    Thread.sleep(1000000)
    neverReturn[T]
  }

  it should "implement the First Result operation correctly" in {

    val never = b[Unit, String]
    val fast = b[Unit, String]
    val slow = b[Unit, String]

    val tp = FixedPool(30)

    site(tp)(
      go { case never(_, r) => r(neverReturn[String]) },
      go { case fast(_, r) => Thread.sleep(10); r("fast") },
      go { case slow(_, r) => Thread.sleep(200); r("slow") }
    )

    firstResult(fast, fast, tp)() shouldEqual "fast"
    firstResult(fast, slow, tp)() shouldEqual "fast"
    firstResult(slow, fast, tp)() shouldEqual "fast"
    firstResult(slow, slow, tp)() shouldEqual "slow"
    firstResult(fast, never, tp)() shouldEqual "fast"
    firstResult(never, slow, tp)() shouldEqual "slow"

    tp.shutdownNow()
  }

} 
Example 68
Source File: KafkaStreamSuite.scala    From drizzle-spark   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.streaming.kafka

import scala.collection.mutable
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Random

import kafka.serializer.StringDecoder
import org.scalatest.BeforeAndAfterAll
import org.scalatest.concurrent.Eventually

import org.apache.spark.{SparkConf, SparkFunSuite}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Milliseconds, StreamingContext}

class KafkaStreamSuite extends SparkFunSuite with Eventually with BeforeAndAfterAll {
  private var ssc: StreamingContext = _
  private var kafkaTestUtils: KafkaTestUtils = _

  override def beforeAll(): Unit = {
    kafkaTestUtils = new KafkaTestUtils
    kafkaTestUtils.setup()
  }

  override def afterAll(): Unit = {
    if (ssc != null) {
      ssc.stop()
      ssc = null
    }

    if (kafkaTestUtils != null) {
      kafkaTestUtils.teardown()
      kafkaTestUtils = null
    }
  }

  test("Kafka input stream") {
    val sparkConf = new SparkConf().setMaster("local[4]").setAppName(this.getClass.getSimpleName)
    ssc = new StreamingContext(sparkConf, Milliseconds(500))
    val topic = "topic1"
    val sent = Map("a" -> 5, "b" -> 3, "c" -> 10)
    kafkaTestUtils.createTopic(topic)
    kafkaTestUtils.sendMessages(topic, sent)

    val kafkaParams = Map("zookeeper.connect" -> kafkaTestUtils.zkAddress,
      "group.id" -> s"test-consumer-${Random.nextInt(10000)}",
      "auto.offset.reset" -> "smallest")

    val stream = KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](
      ssc, kafkaParams, Map(topic -> 1), StorageLevel.MEMORY_ONLY)
    val result = new mutable.HashMap[String, Long]()
    stream.map(_._2).countByValue().foreachRDD { r =>
      r.collect().foreach { kv =>
        result.synchronized {
          val count = result.getOrElseUpdate(kv._1, 0) + kv._2
          result.put(kv._1, count)
        }
      }
    }

    ssc.start()

    eventually(timeout(10000 milliseconds), interval(100 milliseconds)) {
      assert(result.synchronized { sent === result })
    }
  }
} 
Example 69
Source File: FlumeStreamSuite.scala    From drizzle-spark   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.streaming.flume

import java.util.concurrent.ConcurrentLinkedQueue

import scala.collection.JavaConverters._
import scala.concurrent.duration._
import scala.language.postfixOps

import org.jboss.netty.channel.ChannelPipeline
import org.jboss.netty.channel.socket.SocketChannel
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory
import org.jboss.netty.handler.codec.compression._
import org.scalatest.{BeforeAndAfter, Matchers}
import org.scalatest.concurrent.Eventually._

import org.apache.spark.{SparkConf, SparkFunSuite}
import org.apache.spark.internal.Logging
import org.apache.spark.network.util.JavaUtils
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Milliseconds, StreamingContext, TestOutputStream}

class FlumeStreamSuite extends SparkFunSuite with BeforeAndAfter with Matchers with Logging {
  val conf = new SparkConf().setMaster("local[4]").setAppName("FlumeStreamSuite")
  var ssc: StreamingContext = null

  test("flume input stream") {
    testFlumeStream(testCompression = false)
  }

  test("flume input compressed stream") {
    testFlumeStream(testCompression = true)
  }

  
  private class CompressionChannelFactory(compressionLevel: Int)
    extends NioClientSocketChannelFactory {

    override def newChannel(pipeline: ChannelPipeline): SocketChannel = {
      val encoder = new ZlibEncoder(compressionLevel)
      pipeline.addFirst("deflater", encoder)
      pipeline.addFirst("inflater", new ZlibDecoder())
      super.newChannel(pipeline)
    }
  }
} 
Example 70
Source File: StatusTrackerSuite.scala    From drizzle-spark   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark

import scala.concurrent.duration._
import scala.language.implicitConversions
import scala.language.postfixOps

import org.scalatest.Matchers
import org.scalatest.concurrent.Eventually._

import org.apache.spark.JobExecutionStatus._

class StatusTrackerSuite extends SparkFunSuite with Matchers with LocalSparkContext {

  test("basic status API usage") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    val jobFuture = sc.parallelize(1 to 10000, 2).map(identity).groupBy(identity).collectAsync()
    val jobId: Int = eventually(timeout(10 seconds)) {
      val jobIds = jobFuture.jobIds
      jobIds.size should be(1)
      jobIds.head
    }
    val jobInfo = eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobInfo(jobId).get
    }
    jobInfo.status() should not be FAILED
    val stageIds = jobInfo.stageIds()
    stageIds.size should be(2)

    val firstStageInfo = eventually(timeout(10 seconds)) {
      sc.statusTracker.getStageInfo(stageIds(0)).get
    }
    firstStageInfo.stageId() should be(stageIds(0))
    firstStageInfo.currentAttemptId() should be(0)
    firstStageInfo.numTasks() should be(2)
    eventually(timeout(10 seconds)) {
      val updatedFirstStageInfo = sc.statusTracker.getStageInfo(stageIds(0)).get
      updatedFirstStageInfo.numCompletedTasks() should be(2)
      updatedFirstStageInfo.numActiveTasks() should be(0)
      updatedFirstStageInfo.numFailedTasks() should be(0)
    }
  }

  test("getJobIdsForGroup()") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    // Passing `null` should return jobs that were not run in a job group:
    val defaultJobGroupFuture = sc.parallelize(1 to 1000).countAsync()
    val defaultJobGroupJobId = eventually(timeout(10 seconds)) {
      defaultJobGroupFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup(null).toSet should be (Set(defaultJobGroupJobId))
    }
    // Test jobs submitted in job groups:
    sc.setJobGroup("my-job-group", "description")
    sc.statusTracker.getJobIdsForGroup("my-job-group") should be (Seq.empty)
    val firstJobFuture = sc.parallelize(1 to 1000).countAsync()
    val firstJobId = eventually(timeout(10 seconds)) {
      firstJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group") should be (Seq(firstJobId))
    }
    val secondJobFuture = sc.parallelize(1 to 1000).countAsync()
    val secondJobId = eventually(timeout(10 seconds)) {
      secondJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group").toSet should be (
        Set(firstJobId, secondJobId))
    }
  }

  test("getJobIdsForGroup() with takeAsync()") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    sc.setJobGroup("my-job-group2", "description")
    sc.statusTracker.getJobIdsForGroup("my-job-group2") shouldBe empty
    val firstJobFuture = sc.parallelize(1 to 1000, 1).takeAsync(1)
    val firstJobId = eventually(timeout(10 seconds)) {
      firstJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group2") should be (Seq(firstJobId))
    }
  }

  test("getJobIdsForGroup() with takeAsync() across multiple partitions") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    sc.setJobGroup("my-job-group2", "description")
    sc.statusTracker.getJobIdsForGroup("my-job-group2") shouldBe empty
    val firstJobFuture = sc.parallelize(1 to 1000, 2).takeAsync(999)
    val firstJobId = eventually(timeout(10 seconds)) {
      firstJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group2") should have size 2
    }
  }
} 
Example 71
Source File: LauncherBackendSuite.scala    From drizzle-spark   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.launcher

import java.util.concurrent.TimeUnit

import scala.concurrent.duration._
import scala.language.postfixOps

import org.scalatest.Matchers
import org.scalatest.concurrent.Eventually._

import org.apache.spark._

class LauncherBackendSuite extends SparkFunSuite with Matchers {

  private val tests = Seq(
    "local" -> "local",
    "standalone/client" -> "local-cluster[1,1,1024]")

  tests.foreach { case (name, master) =>
    test(s"$name: launcher handle") {
      testWithMaster(master)
    }
  }

  private def testWithMaster(master: String): Unit = {
    val env = new java.util.HashMap[String, String]()
    env.put("SPARK_PRINT_LAUNCH_COMMAND", "1")
    val handle = new SparkLauncher(env)
      .setSparkHome(sys.props("spark.test.home"))
      .setConf(SparkLauncher.DRIVER_EXTRA_CLASSPATH, System.getProperty("java.class.path"))
      .setConf("spark.ui.enabled", "false")
      .setConf(SparkLauncher.DRIVER_EXTRA_JAVA_OPTIONS, s"-Dtest.appender=console")
      .setMaster(master)
      .setAppResource(SparkLauncher.NO_RESOURCE)
      .setMainClass(TestApp.getClass.getName().stripSuffix("$"))
      .startApplication()

    try {
      eventually(timeout(30 seconds), interval(100 millis)) {
        handle.getAppId() should not be (null)
      }

      handle.stop()

      eventually(timeout(30 seconds), interval(100 millis)) {
        handle.getState() should be (SparkAppHandle.State.KILLED)
      }
    } finally {
      handle.kill()
    }
  }

}

object TestApp {

  def main(args: Array[String]): Unit = {
    new SparkContext(new SparkConf()).parallelize(Seq(1)).foreach { i =>
      Thread.sleep(TimeUnit.SECONDS.toMillis(20))
    }
  }

} 
Example 72
Source File: SignInController.scala    From play-silhouette-4.0-slick-postgres-seed   with Apache License 2.0 5 votes vote down vote up
package controllers.auth

import javax.inject.Inject

import com.mohiva.play.silhouette.api.Authenticator.Implicits._
import com.mohiva.play.silhouette.api._
import com.mohiva.play.silhouette.api.exceptions.ProviderException
import com.mohiva.play.silhouette.api.repositories.AuthInfoRepository
import com.mohiva.play.silhouette.api.util.{ Clock, Credentials }
import com.mohiva.play.silhouette.impl.exceptions.IdentityNotFoundException
import com.mohiva.play.silhouette.impl.providers._
import controllers.{ WebJarAssets, auth, pages }
import forms.auth.SignInForm
import models.services.UserService
import net.ceedubs.ficus.Ficus._
import play.api.Configuration
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
import play.api.libs.concurrent.Execution.Implicits._
import play.api.mvc.{ Action, AnyContent, Controller }
import utils.auth.DefaultEnv

import scala.concurrent.Future
import scala.concurrent.duration._
import scala.language.postfixOps


  def submit: Action[AnyContent] = silhouette.UnsecuredAction.async { implicit request =>
    SignInForm.form.bindFromRequest.fold(
      form => Future.successful(BadRequest(views.html.auth.signIn(form, socialProviderRegistry))),
      data => {
        val credentials = Credentials(data.email, data.password)
        credentialsProvider.authenticate(credentials).flatMap { loginInfo =>
          val result = Redirect(pages.routes.ApplicationController.index())
          userService.retrieve(loginInfo).flatMap {
            case Some(user) if !user.activated =>
              Future.successful(Ok(views.html.auth.activateAccount(data.email)))
            case Some(user) =>
              val c = configuration.underlying
              silhouette.env.authenticatorService.create(loginInfo).map {
                case authenticator if data.rememberMe =>
                  authenticator.copy(
                    expirationDateTime = clock.now + c.as[FiniteDuration]("silhouette.authenticator.rememberMe.authenticatorExpiry"),
                    idleTimeout = c.getAs[FiniteDuration]("silhouette.authenticator.rememberMe.authenticatorIdleTimeout"),
                    cookieMaxAge = c.getAs[FiniteDuration]("silhouette.authenticator.rememberMe.cookieMaxAge")
                  )
                case authenticator => authenticator
              }.flatMap { authenticator =>
                silhouette.env.eventBus.publish(LoginEvent(user, request))
                silhouette.env.authenticatorService.init(authenticator).flatMap { v =>
                  silhouette.env.authenticatorService.embed(v, result)
                }
              }
            case None => Future.failed(new IdentityNotFoundException("Couldn't find user"))
          }
        }.recover {
          case e: ProviderException =>
            Redirect(auth.routes.SignInController.view()).flashing("error" -> Messages("invalid.credentials"))
        }
      }
    )
  }
} 
Example 73
Source File: ActivateAccountController.scala    From play-silhouette-4.0-slick-postgres-seed   with Apache License 2.0 5 votes vote down vote up
package controllers.auth

import java.net.URLDecoder
import java.util.UUID
import javax.inject.Inject

import com.mohiva.play.silhouette.api._
import com.mohiva.play.silhouette.impl.providers.CredentialsProvider
import controllers.{ WebJarAssets, auth }
import models.services.{ AuthTokenService, UserService }
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.mailer.{ Email, MailerClient }
import play.api.mvc.{ Action, AnyContent, Controller }
import utils.auth.DefaultEnv

import scala.concurrent.Future
import scala.language.postfixOps


  def activate(token: UUID): Action[AnyContent] = silhouette.UnsecuredAction.async { implicit request =>
    authTokenService.validate(token).flatMap {
      case Some(authToken) => userService.retrieve(authToken.userID).flatMap {
        case Some(user) if user.loginInfo.providerID == CredentialsProvider.ID =>
          userService.save(user.copy(activated = true)).map { _ =>
            Redirect(auth.routes.SignInController.view()).flashing("success" -> Messages("account.activated"))
          }
        case _ => Future.successful(Redirect(auth.routes.SignInController.view()).flashing("error" -> Messages("invalid.activation.link")))
      }
      case None => Future.successful(Redirect(auth.routes.SignInController.view()).flashing("error" -> Messages("invalid.activation.link")))
    }
  }
} 
Example 74
Source File: AudioLength.scala    From jvm-toxcore-api   with GNU General Public License v3.0 5 votes vote down vote up
package im.tox.tox4j.av.data

import im.tox.core.error.CoreError
import im.tox.core.typesafe.DiscreteValueCompanion

import scala.concurrent.duration._
import scala.language.postfixOps

final case class AudioLength private (value: Duration) extends AnyVal

// scalastyle:off magic.number
case object AudioLength extends DiscreteValueCompanion[Duration, AudioLength](
  _.value,
  2500 microseconds,
  5000 microseconds,
  10000 microseconds,
  20000 microseconds,
  40000 microseconds,
  60000 microseconds
) {

  protected override def unsafeFromValue(value: Duration): AudioLength = new AudioLength(value)

  val Length2_5: AudioLength = new AudioLength(values(0))
  val Length5: AudioLength = new AudioLength(values(1))
  val Length10: AudioLength = new AudioLength(values(2))
  val Length20: AudioLength = new AudioLength(values(3))
  val Length40: AudioLength = new AudioLength(values(4))
  val Length60: AudioLength = new AudioLength(values(5))

  final override def equals(a: AudioLength, b: AudioLength): Boolean = {
    a.value == b.value
  }

} 
Example 75
Source File: WalLogStat.scala    From incubator-s2graph   with Apache License 2.0 5 votes vote down vote up
package org.apache.s2graph.loader.subscriber

import kafka.producer.KeyedMessage
import kafka.serializer.StringDecoder
import org.apache.s2graph.spark.spark.{WithKafka, SparkApp}
import org.apache.spark.streaming.Durations._
import org.apache.spark.streaming.kafka.HasOffsetRanges
import scala.collection.mutable.{HashMap => MutableHashMap}
import scala.language.postfixOps

object WalLogStat extends SparkApp with WithKafka {

  override def run() = {

    validateArgument("kafkaZkQuorum", "brokerList", "topics", "intervalInSec", "dbUrl", "statTopic")

    val kafkaZkQuorum = args(0)
    val brokerList = args(1)
    val topics = args(2)
    val intervalInSec = seconds(args(3).toLong)
    val dbUrl = args(4)
    val statTopic = args(5)


    val conf = sparkConf(s"$topics: ${getClass.getSimpleName}")
    val ssc = streamingContext(conf, intervalInSec)
    val sc = ssc.sparkContext

    val groupId = topics.replaceAll(",", "_") + "_stat"

    val kafkaParams = Map(
      "zookeeper.connect" -> kafkaZkQuorum,
      "group.id" -> groupId,
      "metadata.broker.list" -> brokerList,
      "zookeeper.connection.timeout.ms" -> "10000",
      "auto.offset.reset" -> "largest")

    val stream = getStreamHelper(kafkaParams).createStream[String, String, StringDecoder, StringDecoder](ssc, topics.split(",").toSet)
    val statProducer = getProducer[String, String](brokerList)

    stream.foreachRDD { (rdd, time) =>

      val offsets = rdd.asInstanceOf[HasOffsetRanges].offsetRanges

      val ts = time.milliseconds

      val elements = rdd.mapPartitions { partition =>
        // set executor setting.
        val phase = System.getProperty("phase")
        GraphSubscriberHelper.apply(phase, dbUrl, "none", brokerList)
        partition.map { case (key, msg) =>
          GraphSubscriberHelper.g.elementBuilder.toGraphElement(msg) match {
            case Some(elem) =>
              val serviceName = elem.serviceName
              msg.split("\t", 7) match {
                case Array(_, operation, log_type, _, _, label, _*) =>
                  Seq(serviceName, label, operation, log_type).mkString("\t")
                case _ =>
                  Seq("no_service_name", "no_label", "no_operation", "parsing_error").mkString("\t")
              }
            case None =>
              Seq("no_service_name", "no_label", "no_operation", "no_element_error").mkString("\t")
          }
        }
      }

      val countByKey = elements.map(_ -> 1L).reduceByKey(_ + _).collect()
      val totalCount = countByKey.map(_._2).sum
      val keyedMessage = countByKey.map { case (key, value) =>
        new KeyedMessage[String, String](statTopic, s"$ts\t$key\t$value\t$totalCount")
      }

      statProducer.send(keyedMessage: _*)

      elements.mapPartitionsWithIndex { (i, part) =>
        // commit offset range
        val osr = offsets(i)
        getStreamHelper(kafkaParams).commitConsumerOffset(osr)
        Iterator.empty
      }.foreach {
        (_: Nothing) => ()
      }

    }

    ssc.start()
    ssc.awaitTermination()
  }
} 
Example 76
Source File: ExactCounterStreaming.scala    From incubator-s2graph   with Apache License 2.0 5 votes vote down vote up
package org.apache.s2graph.counter.loader.stream

import kafka.serializer.StringDecoder
import org.apache.s2graph.counter.config.S2CounterConfig
import org.apache.s2graph.counter.loader.config.StreamingConfig
import org.apache.s2graph.counter.loader.core.CounterFunctions
import org.apache.s2graph.spark.config.S2ConfigFactory
import org.apache.s2graph.spark.spark.{WithKafka, SparkApp, HashMapParam}
import org.apache.spark.streaming.Durations._
import org.apache.spark.streaming.kafka.KafkaRDDFunctions.rddToKafkaRDDFunctions
import org.apache.spark.streaming.kafka.{HasOffsetRanges, StreamHelper}
import scala.collection.mutable.{HashMap => MutableHashMap}
import scala.language.postfixOps

object ExactCounterStreaming extends SparkApp with WithKafka {
  lazy val config = S2ConfigFactory.config
  lazy val s2Config = new S2CounterConfig(config)
  lazy val className = getClass.getName.stripSuffix("$")

  lazy val producer = getProducer[String, String](StreamingConfig.KAFKA_BROKERS)

  val inputTopics = Set(StreamingConfig.KAFKA_TOPIC_COUNTER)
  val strInputTopics = inputTopics.mkString(",")
  val groupId = buildKafkaGroupId(strInputTopics, "counter_v2")
  val kafkaParam = Map(
//    "auto.offset.reset" -> "smallest",
    "group.id" -> groupId,
    "metadata.broker.list" -> StreamingConfig.KAFKA_BROKERS,
    "zookeeper.connect" -> StreamingConfig.KAFKA_ZOOKEEPER,
    "zookeeper.connection.timeout.ms" -> "10000"
  )
  val streamHelper = StreamHelper(kafkaParam)

  override def run() = {
    validateArgument("interval", "clear")
    val (intervalInSec, clear) = (seconds(args(0).toLong), args(1).toBoolean)

    if (clear) {
      streamHelper.kafkaHelper.consumerGroupCleanup()
    }

    val conf = sparkConf(s"$strInputTopics: $className")
    val ssc = streamingContext(conf, intervalInSec)
    val sc = ssc.sparkContext

    implicit val acc: HashMapAccumulable = sc.accumulable(MutableHashMap.empty[String, Long], "Throughput")(HashMapParam[String, Long](_ + _))

    // make stream
    val stream = streamHelper.createStream[String, String, StringDecoder, StringDecoder](ssc, inputTopics)
    stream.foreachRDD { (rdd, ts) =>
      val offsets = rdd.asInstanceOf[HasOffsetRanges].offsetRanges

      val exactRDD = CounterFunctions.makeExactRdd(rdd, offsets.length)

      // for at-least once semantic
      exactRDD.foreachPartitionWithIndex { (i, part) =>
        // update exact counter
        val trxLogs = CounterFunctions.updateExactCounter(part.toSeq, acc)
        CounterFunctions.produceTrxLog(trxLogs)

        // commit offset range
        streamHelper.commitConsumerOffset(offsets(i))
      }
    }

    ssc.start()
    ssc.awaitTermination()
  }
} 
Example 77
Source File: CollectionCache.scala    From incubator-s2graph   with Apache License 2.0 5 votes vote down vote up
package org.apache.s2graph.counter.util

import java.net.InetAddress
import java.util.concurrent.TimeUnit

import com.google.common.cache.{Cache, CacheBuilder}
import org.slf4j.LoggerFactory

import scala.concurrent.{ExecutionContext, Future}
import scala.language.{postfixOps, reflectiveCalls}

case class CollectionCacheConfig(maxSize: Int, ttl: Int, negativeCache: Boolean = false, negativeTTL: Int = 600)

class CollectionCache[C <: { def nonEmpty: Boolean; def isEmpty: Boolean } ](config: CollectionCacheConfig) {
  private val cache: Cache[String, C] = CacheBuilder.newBuilder()
    .expireAfterWrite(config.ttl, TimeUnit.SECONDS)
    .maximumSize(config.maxSize)
    .build[String, C]()

//  private lazy val cache = new SynchronizedLruMap[String, (C, Int)](config.maxSize)
  private lazy val className = this.getClass.getSimpleName

  private lazy val log = LoggerFactory.getLogger(this.getClass)
  val localHostname = InetAddress.getLocalHost.getHostName

  def size = cache.size
  val maxSize = config.maxSize

  // cache statistics
  def getStatsString: String = {
    s"$localHostname ${cache.stats().toString}"
  }

  def withCache(key: String)(op: => C): C = {
    Option(cache.getIfPresent(key)) match {
      case Some(r) => r
      case None =>
        val r = op
        if (r.nonEmpty || config.negativeCache) {
          cache.put(key, r)
        }
        r
    }
  }

  def withCacheAsync(key: String)(op: => Future[C])(implicit ec: ExecutionContext): Future[C] = {
    Option(cache.getIfPresent(key)) match {
      case Some(r) => Future.successful(r)
      case None =>
        op.map { r =>
          if (r.nonEmpty || config.negativeCache) {
            cache.put(key, r)
          }
          r
        }
    }
  }

  def purgeKey(key: String) = {
    cache.invalidate(key)
  }

  def contains(key: String): Boolean = {
    Option(cache.getIfPresent(key)).nonEmpty
  }
} 
Example 78
Source File: Server.scala    From incubator-s2graph   with Apache License 2.0 5 votes vote down vote up
package org.apache.s2graph.http

import java.time.Instant

import scala.language.postfixOps
import scala.concurrent.{Await, ExecutionContext, Future}
import scala.concurrent.duration.Duration
import scala.util.{Failure, Success}
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.{ContentTypes, HttpEntity, HttpResponse, StatusCodes}
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import com.typesafe.config.ConfigFactory
import org.apache.s2graph.core.S2Graph
import org.slf4j.LoggerFactory

object Server extends App
  with S2GraphTraversalRoute
  with S2GraphAdminRoute
  with S2GraphMutateRoute
  with S2GraphQLRoute {

  implicit val system: ActorSystem = ActorSystem("S2GraphHttpServer")
  implicit val materializer: ActorMaterializer = ActorMaterializer()
  implicit val executionContext: ExecutionContext = system.dispatcher

  val config = ConfigFactory.load()

  override val s2graph = new S2Graph(config)
  override val logger = LoggerFactory.getLogger(this.getClass)

  val port = sys.props.get("http.port").fold(8000)(_.toInt)
  val interface = sys.props.get("http.interface").fold("0.0.0.0")(identity)

  val startAt = System.currentTimeMillis()

  def uptime = System.currentTimeMillis() - startAt

  def serverHealth = s"""{ "port": ${port}, "interface": "${interface}", "started_at": ${Instant.ofEpochMilli(startAt)}, "uptime": "${uptime} millis" """

  def health = HttpResponse(status = StatusCodes.OK, entity = HttpEntity(ContentTypes.`application/json`, serverHealth))

  // Allows you to determine routes to expose according to external settings.
  lazy val routes: Route = concat(
    pathPrefix("graphs")(traversalRoute),
    pathPrefix("mutate")(mutateRoute),
    pathPrefix("admin")(adminRoute),
    pathPrefix("graphql")(graphqlRoute),
    get(complete(health))
  )

  val binding: Future[Http.ServerBinding] = Http().bindAndHandle(routes, interface, port)
  binding.onComplete {
    case Success(bound) => logger.info(s"Server online at http://${bound.localAddress.getHostString}:${bound.localAddress.getPort}/")
    case Failure(e) => logger.error(s"Server could not start!", e)
  }

  scala.sys.addShutdownHook { () =>
    s2graph.shutdown()
    system.terminate()
    logger.info("System terminated")
  }

  Await.result(system.whenTerminated, Duration.Inf)
} 
Example 79
Source File: KafkaTopicAdmin.scala    From kafka-configurator   with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
package com.sky.kafka.configurator

import java.util.concurrent.ExecutionException

import cats.data.Reader
import com.sky.kafka.configurator.error.TopicNotFound
import org.apache.kafka.clients.admin.AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG
import org.apache.kafka.clients.admin._
import org.apache.kafka.common.config.ConfigResource
import org.apache.kafka.common.errors.UnknownTopicOrPartitionException
import org.zalando.grafter.{ Stop, StopResult }

import scala.collection.JavaConverters._
import scala.language.postfixOps
import scala.util.{ Failure, Success, Try }

object KafkaTopicAdmin {
  def apply(adminClient: AdminClient): KafkaTopicAdmin = new KafkaTopicAdmin(adminClient)

  def reader: Reader[AppConfig, KafkaTopicAdmin] = Reader { config =>
    import com.sky.kafka.utils.MapToJavaPropertiesConversion.mapToProperties
    KafkaTopicAdmin(AdminClient.create(Map(BOOTSTRAP_SERVERS_CONFIG -> config.bootstrapServers) ++ config.props))
  }
}

class KafkaTopicAdmin(ac: AdminClient) extends TopicReader with TopicWriter with Stop {

  override def fetch(topicName: String) = {

    def topicDescription = Try {
      val allDescriptions = ac.describeTopics(Seq(topicName).asJava).all.get
      allDescriptions.get(topicName)
    } match {
      case Success(result) => Success(result)
      case Failure(e: ExecutionException) if e.getCause.isInstanceOf[UnknownTopicOrPartitionException] => Failure(TopicNotFound(topicName))
      case other => other
    }

    def topicConfig = Try {
      val allConfigs = ac.describeConfigs(Seq(configResourceForTopic(topicName)).asJava).all.get
      allConfigs.get(configResourceForTopic(topicName))
    }

    for {
      desc <- topicDescription
      partitions = desc.partitions().size()
      replicationFactor = desc.partitions().asScala.head.replicas().size()
      config <- topicConfig
    } yield Topic(desc.name(), partitions, replicationFactor, config)

  }

  override def create(topic: Topic) = Try {
    val newTopic = new NewTopic(topic.name, topic.partitions, topic.replicationFactor.toShort).configs(topic.config.asJava)
    ac.createTopics(Seq(newTopic).asJava).all().get
  }

  override def updateConfig(topicName: String, config: Map[String, Object]) = Try {
    val c = config.map {
      case (key, value) => new ConfigEntry(key, value.toString)
    }.toList.asJava
    ac.alterConfigs(Map(configResourceForTopic(topicName) -> new Config(c)).asJava).all().get
  }

  override def updatePartitions(topicName: String, numPartitions: Int) = Try {
    ac.createPartitions(Map(topicName -> NewPartitions.increaseTo(numPartitions)).asJava).all().get()
  }

  override def stop = StopResult.eval("KafkaAdminClient")(ac.close())

  private def configResourceForTopic(topicName: String) = new ConfigResource(ConfigResource.Type.TOPIC, topicName)

  private implicit def kafkaConfigToMap(config: Config): Map[String, String] = config.entries().asScala.map { entry =>
    entry.name() -> entry.value()
  } toMap
} 
Example 80
Source File: Signing.scala    From parquet4s   with MIT License 5 votes vote down vote up
import java.io.File

import sbt.Keys._
import sbt.io.IO
import sbt.librarymanagement.{Artifact, Configuration}
import sbt.{Def, TaskKey, _}

import scala.language.postfixOps

object Signing {

  private val SignatureExtension = "asc"

  private def createSignatureFile(artifactFile: File): File = {
    val signatureFile = file(artifactFile.getAbsolutePath + "." + SignatureExtension)
    if (signatureFile.exists()) IO.delete(signatureFile)

    val command = "gpg"
    val keyRingArgs = Seq("--no-default-keyring", "--keyring", (file(System.getProperty("user.home")) / ".gnupg" / "pubring.kbx").getAbsolutePath)
    val actionArgs = Seq("--detach-sign", "--armor")
    val passwordArgs = Seq("--pinentry-mode", "loopback", "--passphrase", sys.env("GPG_PASSWORD"))
    val outputArgs = Seq("--output", signatureFile.getAbsolutePath)
    val targetArgs = Seq(artifactFile.getAbsolutePath)
    val args: Seq[String] = keyRingArgs ++ actionArgs ++ passwordArgs ++ outputArgs ++ targetArgs

    sys.process.Process(command, args) ! match {
      case 0 => ()
      case n => sys.error(s"""Failure running '${args.mkString(command + " ", " ", "")}'. Exit code: $n""")
    }

    signatureFile
  }

  private def addSignatureArtifact(configuration: Configuration, packageTask: TaskKey[File]): Def.SettingsDefinition = {

    val signTaskDef = Def.task {
      val (artifact, artifactFile) = packagedArtifact.in(configuration, packageTask).value
      streams.value.log.info("Signing: " + artifact)
      createSignatureFile(artifactFile)
    }

    val artifactDef = Def.setting {
      val sourceArtifact = artifact.in(configuration, packageTask).value
      Artifact(
        name = sourceArtifact.name,
        `type` = SignatureExtension,
        extension = sourceArtifact.extension + "." + SignatureExtension,
        classifier = sourceArtifact.classifier,
        configurations = Vector.empty,
        url = None
      )
    }

    addArtifact(artifactDef, signTaskDef)
  }

  def signingSettings: Seq[Def.Setting[_]] =
    addSignatureArtifact(Compile, packageBin).settings ++
    addSignatureArtifact(Compile, packageDoc).settings ++
    addSignatureArtifact(Compile, packageSrc).settings ++
    addSignatureArtifact(Compile, makePom).settings

} 
Example 81
Source File: Mnemonics.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _980_problem_solving

import scala.io.Source
import scala.language.postfixOps


  def encode(number: String): Set[List[String]] =
    if (number.isEmpty) Set(List())
    else {
      for {
        split <- 1 to number.length
        word <- wordsForNum(number take split)
        rest <- encode(number drop split)
      } yield word :: rest
    }.toSet

  def translate(number: String): Set[String] =
    encode(number) map (_ mkString " ")

  // testing
  println(translate("7225247386"))
  println(translate("72252"))
  println(translate("783364"))
} 
Example 82
Source File: NQueens.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _980_problem_solving

import scala.language.postfixOps


object NQueens extends App {
  // Tests
  println(queens(4))
  println((queens(4) map show) mkString "\n")
  println
  println("==========================")
  val queens8 = queens(8)
  println(queens8)
  println(queens8 size)
  println((queens8 take 3 map show) mkString "\n")
  println
  println("==========================")

  // n: # of rows.
  def queens(n: Int): Set[List[Int]] = {
    def placeQueens(k: Int): Set[List[Int]] =
      if (k == 0) Set(List())
      else
        for {
          queens <- placeQueens(k - 1)
          col <- 0 until n
          if isSafe(col, queens)
        } yield col :: queens

    def isSafe(col: Int, queens: List[Int]): Boolean = {
      val row = queens.length
      val queensWithRow = (row - 1 to 0 by -1) zip queens
      queensWithRow forall {
        case (r, c) => col != c && math.abs(col - c) != row - r
      }
    }

    placeQueens(n)
  }

  def show(queens: List[Int]): String = {
    val lines =
      for (col <- queens.reverse)
        yield Vector.fill(queens.length)(" * ").updated(col, " X ").mkString
    "\n" + (lines mkString "\n")
  }


} 
Example 83
Source File: _02_1_HigherOrderFunctions.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _010_functions

import scala.language.postfixOps


object _02_1_HigherOrderFunctions extends App {
  // Functions with functions (Higher order functions)
  // function2...
  //  val f: (Int, Int => Int) => Int = (x: Int, y: Int => Int) => y(x)
  val f = (x: Int, y: Int => Int) => y(x)

  // all following are the same!
  println(f(3, (m: Int) => m + 1))
  println(f(3, m => m + 1))
  println(f(3, _ + 1))
  println(f(3, 1 + _))
  println(f(3, 1 +))


  val g = (x: Int) => (y: Int) => x + y
  println(g(4)(5))

  val gg = g(5)
  println(gg(10))
} 
Example 84
Source File: _01_2_Functions.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _010_functions

object _01_2_Functions extends App {
  //  val f0 = (s: String) => s.length
  val f0: String => Int = _.length
  print("f0(\"Hello\"): ")
  println(f0("Hello"))

  println("======================")

  
  {
    val tupleFirst = (t: (String, Int)) => t._1
    val getFirstThreeLetters = (s: String) => s.substring(0, 3)
    val andThenFunction = tupleFirst.andThen(getFirstThreeLetters)

    print("andThenFunction(\"Fellow\", 100): ")
    println(andThenFunction("Fellow", 100))
    println("======================")
  }
} 
Example 85
Source File: RationalTest.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _030_oop_introductory_example

import scala.language.postfixOps

object RationalTest extends App {
  println(s"Rational(1, 2): ${Rational(1, 2)}")
  println(s"Rational(10, 20): ${Rational(10, 20)}")
  println()

  val r1 = Rational(1, 2)
  val r2 = Rational(3, 4)
  val r3 = Rational(6, 16)

  println(s"r1: $r1")
  println(s"r2: $r2")
  println(s"r3: $r3")
  println()

  println(s"r1 + r2 ==> ${r1 + r2}")
  println(s"r1 - r2 ==> ${r1 - r2}")
  println(s"r1 * r2 ==> ${r1 * r2}")
  println(s"r1 / r2 ==> ${r1 / r2}")
  println()
  println(s"r1 + 5 ==> ${r1 + 5}")
  println(s"r1 - 5 ==> ${r1 - 5}")
  println(s"r1 * 5 ==> ${r1 * 5}")
  println(s"r1 / 5 ==> ${r1 / 5}")
  println()

  println(s"r1 + r2 * r3 ==> ${r1 + r2 * r3}")
  println(s"r1 * r2 + r3 ==> ${r1 * r2 + r3}")
  println()

  println(s"r1 > r2 : ${r1 > r2}")
  println(s"r1 < r2 : ${r1 < r2}")
  println(s"r1 >= r2 : ${r1 >= r2}")
  println(s"r1 <= r2 : ${r1 <= r2}")
  println(s"r1 == r2 : ${r1 == r2}")
  println(s"r1 != r2 : ${r1 != r2}")
  println()

  // using implicit conversion implemented by the companion object
  println(s"5 + r1 ==> ${5 + r1}")
  println(s"5 - r1 ==> ${5 - r1}")
  println(s"5 * r1 ==> ${5 * r1}")
  println(s"5 / r1 ==> ${5 / r1}")
  println()

  println(s"r1 max r2 ==> ${r1 max r2}")
  println(s"r1 min r2 ==> ${r1 min r2}")
  println()

  println(s"r1 abs ==> ${r1 abs}")
  println(s"Rational(-5, 3) abs ==> ${Rational(-5, 3) abs}")
} 
Example 86
Source File: _99_MoreFunctions.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _021_collections_with_functions

import scala.language.postfixOps

object _99_MoreFunctions extends App {
  val a = List(1, 2, 3, 4, 5, 6)
  //  val b = a partition (x => x % 2 == 0)
  
  val viewResult = (1 to 1000000000).view.map(x => x * 2).take(10).mkString(", ")
  println(viewResult)

  println()

  println("===== by name example =====")
  val f = List.fill(10) {
    val x = 10
    val y = 20
    x + y + 19
  }

  println(f)
} 
Example 87
Source File: _02_Filter_FilterNot_Exsits_Functions.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _021_collections_with_functions

import scala.language.postfixOps

object _02_Filter_FilterNot_Exsits_Functions extends App {
  val a = 1 to 10
  println(s"a.filter(x => x % 2 == 0) ==> ${a.filter(x => x % 2 == 0)}")
  println(s"a.filter(_ % 2 == 0) ==> ${a.filter(_ % 2 == 0)}")
  println()

  println(s"a.filterNot(x => x % 2 == 0) ==> ${a.filterNot(x => x % 2 == 0)}")
  println(s"a.filterNot(_ % 2 == 0) ==> ${a.filterNot(_ % 2 == 0)}")
  println()

  println(s"a.exists(x => x % 2 == 0) ==> ${a.exists(x => x % 2 == 0)}")
  println(s"a.exists(_ % 2 == 0) ==> ${a.exists(_ % 2 == 0)}")
  println()

  println(s"a.forall(x => x % 2 == 0) ==> ${a.forall(x => x % 2 == 0)}")
  println(s"a.forall(_ % 2 == 0) ==> ${a.forall(_ % 2 == 0)}")
  println()

  // you may use Regex for this!
  def filterVowels(s: String): String = s.toLowerCase.filter(c => Set('a', 'e', 'i', 'o', 'u').contains(c))

  print("filterVowels(\"Orange\") ==> ")
  println(filterVowels("Orange"))
  println()

  val b = Set("Brown", "Red", "Green", "purple", "Gray", "Yellow")
  println(s"b.filter(s => filterVowels(s).length > 1) ==> ${b.filter(s => filterVowels(s).length > 1)}")
  println()

  val m = Map(1 -> "One", 2 -> "Two", 3 -> "Three", 4 -> "Four")
  println(s"m.filterKeys(_ % 2 == 0) ==> ${m.filterKeys(_ % 2 == 0)}")
  println()

  println(s"Some(5).filter(_ % 2 == 0) ==> ${Some(5).filter(_ % 2 == 0)}") // THIS IS WOW!
  println(s"Some(4).filter(_ % 2 == 0) ==> ${Some(4).filter(_ % 2 == 0)}")
  println()

  // convert to list only to show contents
  println(s"(Array(1, 2, 3, 44) map (2 *)).toList ==> ${(Array(1, 2, 3, 44) map (2 *)).toList}")
  println()

  print("\"Hello World\" filter (_.isUpper) ==> ")
  println("Hello World" filter (_.isUpper))
} 
Example 88
Source File: _02_EncodeList.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _021_collections_with_functions.examples

import scala.language.postfixOps

object _02_EncodeList extends App {
  println(pack(List("a", "a", "a", "b", "c", "c", "a")))
  println(packEncode1(List("a", "a", "a", "b", "c", "c", "a")))
  println(packEncode2(List("a", "a", "a", "b", "c", "c", "a")))

  def pack[T](xs: List[T]): List[List[T]] = xs match {
    case Nil => Nil
    case x :: _ =>
      val (first, rest) = xs span (p => p == x)
      first :: pack(rest)
  }

  def packEncode1[T](xs: List[T]): List[(T, Int)] = xs match {
    case Nil => Nil
    case x :: _ =>
      val (first, rest) = xs span (p => p == x)
      (first head, first length) :: packEncode1(rest)
  }

  def packEncode2[T](xs: List[T]): List[(T, Int)] =
    pack(xs) map (ys => (ys head, ys length))
} 
Example 89
Source File: _01_MapFunction.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _021_collections_with_functions

import scala.language.postfixOps

object _01_MapFunction extends App {
  val a = (1 to 5).toList
  val f = (x: Int) => x + 1
  println(a)
  println("*******************")
  println(a.map(f))
  println(a.map((x: Int) => x + 1))
  println(a.map(x => x + 1))
  println(a.map(_ + 1))
  println(a.map(1 + _))
  println(a.map(1 +))

  println()

  println(a map (x => x * x))

  println()

  val b = Set("Brown", "Red", "Green", "purple", "Gray", "Yellow")
  println(b)
  println("********************************************")
  println(b.map(x => x.length))
  println(b.map(_.length))
  println("***************")
  println(b.map(x => (x, x.length)))
  println("***************")

  println()
  println()

  val fifaMensChamps = Map('Germany -> 4, 'Brazil -> 5, 'Italy -> 4, 'Argentina -> 2)
  println(fifaMensChamps.map(t => (Symbol("Team " + t._1.name), t._2)))

  println()
  println()

  println("Hello!".map(x => (x + 1).toChar))

  println(Some(4).map(1 +))

  println(None.asInstanceOf[Option[Int]].map(1 +))

  val age: Option[Int] = None
  println(age.map(1 +))
} 
Example 90
Source File: _07_ZipAndUnzip.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _021_collections_with_functions

import scala.language.postfixOps


object _07_ZipAndUnzip extends App {
  val a = List(1, 2, 3, 4)
  val b = List(5, 6, 7, 8)
  val z = a zip b

  println("zip: " + z)
  println()

  println(s"(1 to 5) zip (6 to 9) ==> ${(1 to 5) zip (6 to 9)}")
  println(s"(1 to 2) zip (6 to 9) ==> ${(1 to 2) zip (6 to 9)}")
  println()

  println(s"a zipWithIndex ==> ${a zipWithIndex}")
  println()

  println("unzip: " + z.unzip)
  println()

  val intPair = (List(10, 20), List(3, 4, 5))
  val stringLengths = (List("abc", "de"), List(3, 2))
  println(s"intPair.zipped.map(_ * _) ==> ${intPair.zipped.map(_ * _)}")
  println(s"stringLengths.zipped.forall(_.length == _) ==> ${stringLengths.zipped.forall(_.length == _)}")
  println(s"stringLengths.zipped.exists(_.length != _) ==> ${stringLengths.zipped.exists(_.length != _)}")
} 
Example 91
Source File: _05_1_ForComprehensions.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _021_collections_with_functions

import scala.language.postfixOps

object _05_1_ForComprehensions extends App {
  //  for (i <- 1 to 10)
  //    println(i)
  //
  //  println

  val result = for (i <- 1 to 10) yield i + 1
  println(result)

  val result2 = (1 to 10).map(1 +)
  println(result2)

  val result3 = for (i <- Some(100)) yield i + 40
  println(result3)

  val result4 = Some(100).map(40 +)

  val result5 = for (i <- List(1, 2, 3, 4);
                     j <- List(5, 6, 7, 8, 9)) yield (i, j)
  println(result5)

  val result6 = List(1, 2, 3, 4).map(i => List(5, 6, 7, 8).map(j => (i, j)))
  println(result6)

  val result6b = List(1, 2, 3, 4).flatMap(i => List(5, 6, 7, 8, 9).map(j => (i, j)))
  println(result6b)

  val result7 = for (i <- List(1, 2, 3, 4) if (i % 2 == 0);
                     j <- List(5, 6, 7, 8)) yield (i, j)
  println(result7)

  val result7b = for (i <- List(1, 2, 3, 4) if i % 2 == 0;
                      j <- List(5, 6, 7, 8)) yield (i, j)
  println(result7b)

  val result7c = for (i <- List(1, 2, 3, 4)
                      if i % 2 == 0;
                      j <- List(5, 6, 7, 8)) yield (i, j)
  println(result7c)

  val result7d = List(1, 2, 3, 4).filter(i => i % 2 == 0).flatMap(i => List(5, 6, 7, 8).map(j => (i, j)))
  println(result7d)

  // lazy filter
  val result7e = List(1, 2, 3, 4).withFilter(i => i % 2 == 0).flatMap(i => List(5, 6, 7, 8).map(j => (i, j)))
  println(result7e)

  val result8 = for (i <- List(1, 2, 3, 4);
                     j <- List(5, 6, 7, 8) if j < 7) yield (i, j)
  println(result8)

  val result8c = for (i <- List(1, 2, 3, 4);
                      j <- List(5, 6, 7, 8)
                      if j < 7) yield (i, j)
  println(result8c)

  val result8d =
    List(1, 2, 3, 4)
      .flatMap(i => List(5, 6, 7, 8)
        .filter(j => j < 7)
        .map(j => (i, j)))
  println(result8d)

  // lazy filter
  val result8e =
    List(1, 2, 3, 4)
      .flatMap(i => List(5, 6, 7, 8)
        .withFilter(j => j < 7)
        .map(j => (i, j)))
} 
Example 92
Source File: _06_Tuples.scala    From LearningScala   with Apache License 2.0 5 votes vote down vote up
package _000_intro

import scala.language.postfixOps

object _06_Tuples extends App {
  val t = (1, "Hello", 3.2)

  println(t._1)
  println(t._2)
  println(t._3)

  // or...
  //  val t2: (Int, String, Double) = t
  //  val t3:Tuple3[Int, String, Double] = t

  val tuple2 = (1, "Hello")
  println(tuple2)
  println(tuple2 swap)
  println(tuple2.swap)
  println(tuple2)

  val (x, y) = (1, 2)
  println(x)
  println(y)
} 
Example 93
Source File: RecommendationIntegrationTest.scala    From algoliasearch-client-scala   with MIT License 5 votes vote down vote up
package algolia.integration

import algolia.AlgoliaDsl._
import algolia.AlgoliaTest
import algolia.responses.GetStrategyResponse

import scala.concurrent.Future
import scala.language.postfixOps

class RecommendationIntegrationTest extends AlgoliaTest {

  describe("recommendation API test") {

    it("should get personalization strategy without failing") {
      val task: Future[GetStrategyResponse] = AlgoliaTest.client.execute {
        get personalizationRecommendationStrategy
      }

      whenReady(task) { strategy =>
        strategy should not be None
      }
    }

  }
} 
Example 94
Source File: File.scala    From nescala   with GNU General Public License v2.0 5 votes vote down vote up
package com.owlandrews.nescala.helpers

import com.owlandrews.nescala.Console

object File {
  import java.io.File
  import java.net.URL
  import java.io.{FileFilter, FileInputStream, FileOutputStream, ObjectInputStream, ObjectOutputStream}
  import javax.imageio.ImageIO

  import scala.util.Try
  import scala.xml.XML
  import scala.language.postfixOps

  import sys.process._

  import com.typesafe.config.ConfigFactory

  def Download(url: String, filename: String) = (for{
    url <- Try(new URL(url))
    conn <- Try(url.openConnection().connect())
    file <- Try(new File(filename))
  } yield Try(url  #> file !!)) map {x => new File(filename)}

  def Writer(filename: String)(op: java.io.PrintWriter => Unit) = {
    val p = new java.io.PrintWriter(new File(filename))
    try op(p)
    finally p.close()
  }

  def Write(filename: String, content: String) = {
    val res = new java.io.PrintWriter(new File(filename))
    res.write(content)
    res.close()
  }

  def Filter = new FileFilter {
    override def accept(pathname: File): Boolean = pathname.getName.toLowerCase.endsWith(".nes")
  }

  def Image(file:Try[File]) = file.map(ImageIO.read)

  def Image(filename:String) = Try(ImageIO.read(resource(filename)))

  def Xml(filename:String) = XML.load(resource("/database.xml"))

  def Config(filename:String) = {
    val file = new File(filename)
    file.exists() match {
      case true => ConfigFactory.parseFile(file)
      case false => ConfigFactory.empty()
    }
  }

  def SaveState(console:Console) = {
    val fos = new FileOutputStream(s"$ApplicationFolder/${console.cartridge.CRC}.save")
    val oos = new ObjectOutputStream(fos)

    oos.writeObject(console)
    oos.close()
  }

  def LoadState(crc:String):Try[Console] = Try {
    val fis = new FileInputStream(s"$ApplicationFolder/$crc.save")
    val ois = new ObjectInputStreamWithCustomClassLoader(fis)

    val console = ois.readObject.asInstanceOf[Console]
    ois.close()
    console
  }

  // Taken from: https://gist.github.com/ramn/5566596
  private class ObjectInputStreamWithCustomClassLoader(fileInputStream: FileInputStream) extends ObjectInputStream(fileInputStream) {
    override def resolveClass(desc: java.io.ObjectStreamClass): Class[_] = {
      try { Class.forName(desc.getName, false, getClass.getClassLoader) }
      catch { case ex: ClassNotFoundException => super.resolveClass(desc) }
    }
  }

  lazy val ApplicationFolder: File = {
    val settingDirectory = System.getProperty("user.home") + "/.nescala"
    val settings = new java.io.File(settingDirectory)
    if (!settings.exists()) settings.mkdir()
    settings
  }

  private def resource(filename:String) = getClass.getResourceAsStream(filename)
} 
Example 95
Source File: TaskService.scala    From ddd-on-scala   with MIT License 5 votes vote down vote up
package crossroad0201.dddonscala.application.task

import crossroad0201.dddonscala.application._
import crossroad0201.dddonscala.domain.task._
import crossroad0201.dddonscala.domain.user.{UserId, UserRepository}
import crossroad0201.dddonscala.domain.{EntityIdGenerator, EntityMetaDataCreator}

import scala.language.postfixOps

trait TaskService extends TransactionAware {

  

  def createNewTask(name: TaskName, authorId: UserId): Either[ServiceError, Task] =
    tx { implicit uow =>
      // NOTE: 他集約のエンティティを、自集約のロール型に変換するために、パッケージをimportします。
      import crossroad0201.dddonscala.domain.task.{TaskService => TaskDomainService, _}

      for {
        author <- userRepository.get(authorId) ifNotExists NotFoundError("USER", authorId)
        createdTask  = author.createTask(name)
        exampledTask = TaskDomainService.applyBusinessRuleTo(createdTask.entity)
        savedTask <- taskRepository.save(exampledTask) ifFailureThen asServiceError
        _         <- taskEventPublisher.publish(createdTask.event) ifFailureThen asServiceError
      } yield savedTask
    }

  def assignToTask(taskId: TaskId, assigneeId: UserId): Either[ServiceError, Task] =
    tx { implicit uow =>
      import crossroad0201.dddonscala.domain.task._

      for {
        task         <- taskRepository.get(taskId) ifNotExists NotFoundError("TASK", taskId)
        assignee     <- userRepository.get(assigneeId) ifNotExists NotFoundError("USER", assigneeId)
        assignedTask <- assignee.assignTo(task) ifLeftThen asServiceError
        savedTask    <- taskRepository.save(assignedTask.entity) ifFailureThen asServiceError
        _            <- taskEventPublisher.publish(assignedTask.event) ifFailureThen asServiceError
      } yield savedTask
    }

  def unAssignFromTask(taskId: TaskId): Either[ServiceError, Task] =
    tx { implicit uow =>
      for {
        task           <- taskRepository.get(taskId) ifNotExists NotFoundError("TASK", taskId)
        unAssignedTask <- task.unAssign ifLeftThen asServiceError
        savedTask      <- taskRepository.save(unAssignedTask.entity) ifFailureThen asServiceError
        _              <- taskEventPublisher.publish(unAssignedTask.event) ifFailureThen asServiceError
      } yield savedTask
    }

  def commentToTask(taskId: TaskId, commenterId: UserId, message: CommentMessage): Either[ServiceError, Task] =
    tx { implicit uow =>
      import crossroad0201.dddonscala.domain.task._

      for {
        task      <- taskRepository.get(taskId) ifNotExists NotFoundError("TASK", taskId)
        commenter <- userRepository.get(commenterId) ifNotExists NotFoundError("USER", commenterId)
        commentedTask = commenter.commentTo(task, message)
        savedTask <- taskRepository.save(commentedTask.entity) ifFailureThen asServiceError
        _         <- taskEventPublisher.publish(commentedTask.event) ifFailureThen asServiceError
      } yield savedTask
    }

  def closeTask(taskId: TaskId): Either[ServiceError, Task] =
    tx { implicit uow =>
      for {
        task       <- taskRepository.get(taskId) ifNotExists NotFoundError("TASK", taskId)
        closedTask <- task.close ifLeftThen asServiceError
        savedTask  <- taskRepository.save(closedTask.entity) ifFailureThen asServiceError
        _          <- taskEventPublisher.publish(closedTask.event) ifFailureThen asServiceError
      } yield savedTask
    }

  def reOpenTask(taskId: TaskId): Either[ServiceError, Task] =
    tx { implicit uow =>
      for {
        task         <- taskRepository.get(taskId) ifNotExists NotFoundError("TASK", taskId)
        reOpenedTask <- task.reOpen ifLeftThen asServiceError
        savedTask    <- taskRepository.save(reOpenedTask.entity) ifFailureThen asServiceError
        _            <- taskEventPublisher.publish(reOpenedTask.event) ifFailureThen asServiceError
      } yield savedTask
    }

}

case class IllegalTaskOperationError(task: Task)
    extends ApplicationError(ServiceErrorCodes.InvalidTaskOperation, task.id, task.state) 
Example 96
Source File: WebsocketServer.scala    From akka_streams_tutorial   with MIT License 5 votes vote down vote up
package alpakka.env

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.ws._
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.server.directives.WebSocketDirectives
import akka.stream.scaladsl.{Flow, Sink, Source}

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.{Failure, Success}


object WebsocketServer extends App with WebSocketDirectives {
  implicit val system = ActorSystem("WebsocketServer")
  implicit val executionContext = system.dispatcher

  val (address, port) = ("127.0.0.1", 6002)
  server(address, port)

  def server(address: String, port: Int) = {

    def echoFlow: Flow[Message, Message, Any] =
      Flow[Message].mapConcat {
        case tm: TextMessage =>
          println(s"Server received: $tm")
          TextMessage(Source.single("Echo: ") ++ tm.textStream) :: Nil
        case bm: BinaryMessage =>
          // ignore binary messages but drain content to avoid the stream being clogged
          bm.dataStream.runWith(Sink.ignore)
          Nil
      }

    val websocketRoute: Route =
      path("echo") {
        handleWebSocketMessages(echoFlow)
      }

    val bindingFuture = Http().bindAndHandle(websocketRoute, address, port)
    bindingFuture.onComplete {
      case Success(b) =>
        println("Server started, listening on: " + b.localAddress)
      case Failure(e) =>
        println(s"Server could not bind to $address:$port. Exception message: ${e.getMessage}")
        system.terminate()
    }

    sys.addShutdownHook {
      println("About to shutdown...")
      val fut = bindingFuture.map(serverBinding => serverBinding.terminate(hardDeadline = 3.seconds))
      println("Waiting for connections to terminate...")
      val onceAllConnectionsTerminated = Await.result(fut, 10.seconds)
      println("Connections terminated")
      onceAllConnectionsTerminated.flatMap { _ => system.terminate()
      }
    }
  }
} 
Example 97
Source File: LatencyAnalyzer.scala    From spatial   with MIT License 5 votes vote down vote up
package spatial.dse

import argon._
import spatial.lang._
import spatial.node._
import spatial.util.spatialConfig
import spatial.util.modeling._
import spatial.traversal._
import spatial.targets._
import java.io.File
import models._
import argon.node._


case class LatencyAnalyzer(IR: State, latencyModel: LatencyModel) extends AccelTraversal {
  var cycleScope: List[Double] = Nil
  var intervalScope: List[Double] = Nil
  var totalCycles: Seq[Long] = Seq()
  val batchSize = 1000

  def getListOfFiles(d: String):List[String] = {
    import java.nio.file.{FileSystems, Files}
    import scala.collection.JavaConverters._
    val dir = FileSystems.getDefault.getPath(d) 
    Files.walk(dir).iterator().asScala.filter(Files.isRegularFile(_)).map(_.toString).toList//.foreach(println)
  }
  
  override def silence(): Unit = {
    super.silence()
  }


  def test(rewriteParams: Seq[Seq[Any]]): Unit = {
    import scala.language.postfixOps
    import java.io.File
    import sys.process._

    val gen_dir = if (config.genDir.startsWith("/")) config.genDir + "/" else config.cwd + s"/${config.genDir}/"
    val modelJar = getListOfFiles(gen_dir + "/model").filter(_.contains("RuntimeModel-assembly")).head
    totalCycles = rewriteParams.grouped(batchSize).flatMap{params => 
      val batchedParams = params.map{rp => "tune " + rp.mkString(" ")}.mkString(" ")
      val cmd = s"""java -jar ${modelJar} ni ${batchedParams}"""
      // println(s"running cmd: $cmd")
      val output = Process(cmd, new File(gen_dir)).!!
      output.split("\n").filter(_.contains("Total Cycles for App")).map{r => 
        "^.*: ".r.replaceAllIn(r,"").trim.toLong
      }.toSeq
    }.toSeq
    // println(s"DSE Model result: $totalCycles")

  }

  override protected def preprocess[A](b: Block[A]): Block[A] = {

    super.preprocess(b)
  }

  override protected def postprocess[A](b: Block[A]): Block[A] = {
    super.postprocess(b)
  }

  override protected def visit[A](lhs: Sym[A], rhs: Op[A]): Unit = {  }



} 
Example 98
Source File: DotHierarchicalCodegen.scala    From spatial   with MIT License 5 votes vote down vote up
package spatial.codegen.dotgen

import argon._
import scala.collection.mutable
import utils.io.files._
import sys.process._
import scala.language.postfixOps
import spatial.metadata.control._
import spatial.metadata.bounds._

trait DotHierarchicalCodegen extends DotCodegen {

  override def entryFile: String = s"Top.$ext"

  //override def clearGen(): Unit = {} // everything cleared in DotFlatCodegen

  override protected def gen(lhs: Sym[_], rhs: Op[_]): Unit = {
    currScope.addNode(lhs)
    emitNode(lhs)
    if (blocks(lhs).nonEmpty) {
      scope(Some(lhs)).begin {
        open(src"subgraph cluster_${lhs} {")
          emit(src"""${graphAttr(lhs).map { case (k,v) => s"$k=$v" }.mkString(" ")}""")
          //strMeta(lhs)
          rhs.binds.filter(_.isBound).foreach{ b =>
            currScope.addNode(b)
            emitNode(b)
          }
          rhs.blocks.foreach(ret)
        close(src"}")
      }
    }
  }

  
  def ancestryBetween(a:Sym[_], b:Sym[_]):(List[Sym[_]], List[Sym[_]], List[Sym[_]]) = {
    val branchA = ancestors(a)
    val branchB = ancestors(b)
    val shared = (branchA intersect branchB)
    (shared, branchA.filterNot(shared.contains(_)), branchB.filterNot(shared.contains(_)))
  }

  override def addEdge(from:Sym[_], to:Sym[_], alias:Map[Sym[_], String]=Map.empty):Unit = {
    if (!nodes.contains(from)) dbgblk(src"emitEscapeEdge($from, $to):"){
      assert(from.vecConst.isEmpty)
      val (shared, fromBranch, toBranch) = ancestryBetween(from, to)
      dbgs(src"from=$from")
      dbgs(src"to=$to")
      dbgs(src"shared=$shared")
      dbgs(src"fromBranch=$fromBranch")
      dbgs(src"toBranch=$toBranch")
      toBranch.filterNot{ sym => sym == to }.foreach { ancestor =>
        val toNode = toBranch(toBranch.indexOf(ancestor)-1)
        scope(Some(ancestor))
          .addExternNode(from)
          .addEdge(from, to, alias + (to -> getAlias(toNode, alias)))
      }
      fromBranch.filterNot{ sym => sym == from }.foreach { ancestor =>
        val fromNode = fromBranch(fromBranch.indexOf(ancestor)-1)
        scope(Some(ancestor))
          .addExternNode(to)
          .addEdge(from, to, alias + (from -> getAlias(fromNode, alias)))
      }
      scope(shared.headOption)
        .addEdge(from, to, alias + (from -> getAlias(fromBranch.last, alias)) + (to -> getAlias(toBranch.last, alias)))
    } else {
      currScope.addEdge(from, to, alias)
    }
  }

  override def nodeAttr(lhs:Sym[_]):Map[String,String] = lhs match {
    case lhs if blocks(lhs).nonEmpty => 
      super.nodeAttr(lhs) + ("URL" -> s""""${scope(Some(lhs)).fileName}.html"""")
    case lhs => super.nodeAttr(lhs)
  }

  override def graphAttr(lhs:Sym[_]):Map[String,String] = lhs match {
    case lhs if blocks(lhs).nonEmpty => 
      // navigate back to parent graph, or flat dot graph if already at top level
      super.graphAttr(lhs) + ("URL" -> s""""${scope(lhs.blk.s).fileName}.html"""")
    case lhs => super.graphAttr(lhs)
  }

} 
Example 99
Source File: DotFlatCodegen.scala    From spatial   with MIT License 5 votes vote down vote up
package spatial.codegen.dotgen

import argon._
import scala.collection.mutable
import utils.io.files._
import sys.process._
import scala.language.postfixOps

trait DotFlatCodegen extends DotCodegen {

  override def entryFile: String = s"Main.$ext"

  // Remove all dot files. First dot gen
  //override def clearGen(): Unit = super.clearGen()

  override protected def gen(lhs: Sym[_], rhs: Op[_]): Unit = {
    currScope.addNode(lhs)
    if (rhs.blocks.nonEmpty) {
      open(src"subgraph cluster_${lhs} {")
      emit(src"""${graphAttr(lhs).map { case (k,v) => s"$k=$v" }.mkString(" ")}""")
      //strMeta(lhs)
      if (inputs(lhs).nonEmpty) emitNode(lhs)
      rhs.binds.filter(_.isBound).foreach{ b =>
        currScope.addNode(b)
        emitNode(b)
        emitEdge(lhs, b)
      }
      rhs.blocks.foreach(ret)
      close(src"}")
    } else {
      emitNode(lhs)
    }
  }

  override def graphAttr(lhs:Sym[_]):Map[String,String] = lhs match {
    case lhs if blocks(lhs).nonEmpty => 
      super.graphAttr(lhs) + ("URL" -> s""""${s"$lhs.html"}"""")
    case lhs => super.graphAttr(lhs)
  }

} 
Example 100
Source File: Timing.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.{Future, Await}
import scala.concurrent.ExecutionContext.Implicits._

case class TimeClass() extends ClassLogging with Timing {
  def b(id: RequestId): Unit = {
    Time(id, "bbb") {
      Thread.sleep(100)
    }
  }

  def a(id: RequestId): Unit = {
    Time(id, "top") {
      Time(id, "aaa1") {
        Thread.sleep(200)
      }
      b(id)
      Time(id, "aaa2") {
        Thread.sleep(300)
      }
      b(id)
    }
  }
}

case class FutureClass() extends ClassLogging with Timing {
  def demo(id: RequestId): Future[Int] = {
    val token = time.start(id, "top")
    val f1 = Future {
      Time(id, "f1") {
        Thread.sleep(100)
        100
      }
    }
    val f2 = f1.map { i =>
      val result = Time(id, "f2") {
        Thread.sleep(200)
        Time(id, "f2a") {
           i * 2
        }
      }
      result
    }
    val f3 = f2.recover{ case ex:Throwable =>
      log.error("Timing test failed", ex)
      -1
    }
    f3.map {  i =>
      time.end(id, "top", token)
      i
    }
  }
}

object Timing {

  case class F() extends ClassLogging {
    val fc = FutureClass()
    val f = fc.demo(RequestId())
    val i = Await.result(f, 3 seconds)
    log.info(Map("@msg" -> "Future result", "val" -> i))
  }

  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val tc = new TimeClass()
    tc.a(RequestId())
    tc.a(RequestId())

    F()


    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 101
Source File: ActorDemo.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.{Props, Actor, ActorSystem}
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await


object DemoActor {
  def props() = Props(new DemoActor())
}

class DemoActor() extends Actor with ActorLogging {
  println(this.getClass.getSimpleName)

  def receive = {
    case "foo" => log.info("Saw foo")
    case "done" => context.stop(self)
    case x: Any => log.error(Map("@msg" -> "Unexpected actor message",
      "message" -> x.toString))
  }
}

case class ActorDemo(system: ActorSystem) {
  def demo(): Unit = {
    val a = system.actorOf(DemoActor.props(), name = "Demo")
    a ! "foo"
    a ! "bar"
    a ! "done"
  }
}

object ActorDemo {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val act = ActorDemo(system)
    act.demo()

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 102
Source File: Exceptions.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

case class MyException(msg: RichMsg) extends RichException(msg)

case class ExceptionClass() extends ClassLogging {
  def demo(): Unit = {
    log.error("Test", new Exception("Bad Code"))
    log.warn("Rich", RichException(Map("@msg" -> "Fail", "count" -> 23)))
    log.error("Special", MyException(Map("@msg" -> "Fail", "count" -> 23)))
    try {
      throw MyException(Map("@msg" -> "Die", "name" -> "abc"))
    } catch {
      case ex: Exception => log.error("Caught exception", ex)
    }
  }
}

object Exceptions {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val ec = new ExceptionClass()
    ec.demo()

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 103
Source File: OtherApis.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.{Props, Actor, ActorSystem}
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await
import org.slf4j.LoggerFactory

case class Slf4jDemo() {
  val slf4jlog = LoggerFactory.getLogger(classOf[Slf4jDemo])

  def demo(): Unit = {
    slf4jlog.warn("slf4j")
  }
}

object AkkaActor {
  def props() = Props(new AkkaActor())
}

class AkkaActor() extends Actor with akka.actor.ActorLogging {
  def receive = {
    case "foo" => log.warning("Saw foo")
    case "done" => context.stop(self)
    case x: Any => log.error(s"Unexpected actor message: ${x}")
  }
}

case class AkkaDemo(system: ActorSystem) {
  def demo(): Unit = {
    val a = system.actorOf(AkkaActor.props(), name="Demo")
    a ! "foo"
    a ! "bar"
    a ! "done"
  }

}

object OtherApis {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val slf = Slf4jDemo()
    slf.demo()

    val act = AkkaDemo(system)
    act.demo()

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 104
Source File: Appender.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.{ActorRefFactory, ActorSystem}
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Future

case class AppenderClass() extends ClassLogging {

  def demo(): Unit = {
    log.info("Test")
    log.error("Foo failed")
    log.warn(Map("@msg" -> "fail", "value" -> 23))
  }
}

object FlatAppender extends LogAppenderBuilder {
  def apply(factory: ActorRefFactory, stdHeaders: Map[String, RichMsg])
  = new FlatAppender(factory, stdHeaders)
}

class FlatAppender(factory: ActorRefFactory, stdHeaders: Map[String, RichMsg]) extends LogAppender {

  def append(msg: Map[String, RichMsg], category: String) {
    if (category == "common") {
      val level = msg.get("@severity") match {
        case Some(s: String) => s
        case _ => "???"
      }
      val time = msg.get("@timestamp") match {
        case Some(s: String) => s
        case _ => "???"
      }
      val message = richToString(msg.getOrElse("msg","???"))
      println(s"$time\t$level\t$message")
    }
  }

  def finish(): Future[Unit] = Future.successful(())

  def stop(): Future[Unit] = Future.successful(())
}

object Appender {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name,
      BuildInfo.version, host, appenderBuilders = Seq(FileAppender, FlatAppender))

    val sc = new SimpleClass()
    sc.demo()

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 105
Source File: Alternative.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await

case class AltClass() extends ClassLogging {

  def demo(): Unit = {
    log.alternative("foo", Map("message"->"test"))
    log.alternative("foo", Map("a" -> "x", "b" -> false, "c" -> 65))
    log.alternative("bar", Map("message"->"btest"))
  }
}

object Alternative {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val alt = new AltClass()
    alt.demo()

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 106
Source File: RequestIds.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await

case class RequestB() extends ClassLogging {

  def demo(id: AnyId): Unit = {
    log.trace("In B", id = id)
    log info("BBB", id = id)
  }
}

case class RequestC() extends ClassLogging {
  def demo(id: AnyId): Unit = {
    log.trace("In C", id = id)
    log.info("CCC", id = id)
  }
}

case class RequestA() extends ClassLogging {
  val b = RequestB()
  val c = RequestC()

  def demo(id: AnyId): Unit = {
    log.trace("Enter A", id = id)
    b.demo(id)
    log.info("AAA", id = id)
    c.demo(id)
    log.trace("Exit A", id = id)
  }
}

object RequestIds {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val a = new RequestA()
    a.demo(noId)
    a.demo(RequestId())
    a.demo(RequestId(level = Some(LoggingLevels.TRACE)))

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 107
Source File: Simple.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await

case class SimpleClass() extends ClassLogging {

  def demo(): Unit = {
    log.info("Test")
    log.error("Foo failed")
    log.warn(Map("@msg" -> "fail", "value" -> 23))
  }
}

object Simple {
  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val sc = new SimpleClass()
    sc.demo()

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 108
Source File: Filter.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package demo.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging._
import logging_demo.BuildInfo
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await

case class Class1() extends ClassLogging {
  def demo(name: String): Unit = {
    log.debug(name)
    log.warn(name)
  }
}

case class Class2() extends ClassLogging {
  def demo(name: String): Unit = {
    log.debug(name)
    log.warn(name)
  }
}

object Filter {

  import LoggingLevels._


  def filter(fields: Map[String, RichMsg], level:Level): Boolean = {
    val cls = fields.get("class") match {
      case Some(s: String) => s
      case _ => ""
    }
    if (cls == "demo.test.Class1") {
      level >= DEBUG
    } else {
      level >= WARN
    }
  }

  def main(args: Array[String]) {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name, BuildInfo.version, host)

    val c1 = new Class1()
    val c2 = new Class2()

    c1.demo("no filter")
    c2.demo("no filter")

    // Add filter and change level
    val oldLevel = loggingSystem.getLevel.current
    loggingSystem.setFilter(Some(filter))
    loggingSystem.setLevel(DEBUG)

    c1.demo("filter")
    c2.demo("filter")

    // Reset it back
    loggingSystem.setLevel(oldLevel)
    loggingSystem.setFilter(None)

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 109
Source File: TestKafka.scala    From logging   with Apache License 2.0 5 votes vote down vote up
package com.persist.logging.test

import java.net.InetAddress
import akka.actor.ActorSystem
import com.persist.logging.kafka.KafkaAppender
import com.persist.logging._
import kafka_logging_demo.BuildInfo
import scala.language.postfixOps
import scala.concurrent.duration._
import scala.concurrent.Await

case class TestKafka() extends ClassLogging {
  def send: Unit = {
    for (i <- 1 to 5) {
      log.warn(Map("msg" -> "test", "i" -> i))
      Thread.sleep(500)
    }
  }
}

object TestKafka {
  def main(args: Array[String]): Unit = {
    val system = ActorSystem("test")

    val host = InetAddress.getLocalHost.getHostName
    val loggingSystem = LoggingSystem(system, BuildInfo.name,
      BuildInfo.version, host, appenderBuilders = Seq(StdOutAppender, KafkaAppender))

    val tc = TestKafka()
    tc.send

    //Thread.sleep(60000)

    Await.result(loggingSystem.stop, 30 seconds)
    Await.result(system.terminate(), 20 seconds)
  }
} 
Example 110
Source File: RepositoryTest.scala    From akka-http-slick-sample   with MIT License 5 votes vote down vote up
package net.softler.data

import java.util.UUID

import akka.actor.ActorSystem
import akka.testkit.TestKit
import net.softler.data.model.User
import net.softler.data.persistence.{H2, UserComponent}
import org.scalatest._
import org.scalatest.concurrent.ScalaFutures

import scala.concurrent.ExecutionContext
import scala.concurrent.duration._
import scala.language.postfixOps


class RepositoryTest
    extends TestKit(ActorSystem("test-system"))
    with FlatSpecLike
    with Matchers
    with ScalaFutures
    with UserComponent
    with H2 {

  implicit val ec: ExecutionContext = system.dispatcher

  val repo: UserRepository = new UserRepository

  private val testId = UUID.fromString("00000000-0000-0000-0000-000000000000")

  override implicit def patienceConfig: PatienceConfig = PatienceConfig(5 seconds)

  "The generic repository" should "handle a in memory database" in {
    whenReady(repo.all)(_.size shouldBe 3)
  }

  it should "retrieve a user by id" in {
    whenReady(repo.byId(testId)) { user =>
      user.get.login shouldBe "tom"
    }
  }

  it should "update a single entity" in {
    val testEntity: User = repo.byId(testId).futureValue.get

    val result = repo.update(testEntity).futureValue

    result shouldBe 1
  }

  it should "delete a single user by id" in {
    whenReady(repo.delete(testId)) { result =>
      result shouldBe true
    }

    whenReady(repo.byId(testId)) { user =>
      user shouldBe None
    }

    whenReady(repo.all)(_.size shouldBe 2)
  }
} 
Example 111
Source File: Search.scala    From Principles-of-Reactive-Programming   with GNU General Public License v3.0 5 votes vote down vote up
package suggestions
package search

import org.json4s._
import scala.concurrent.{ ExecutionContext, Future, Promise }
import ExecutionContext.Implicits.global
import scala.language.postfixOps
import scala.collection._
import scala.collection.JavaConverters._
import scala.util.Try
import scala.async.Async._

import rx.lang.scala.Observable
import observablex.{SchedulerEx, ObservableEx}
import ObservableEx._

import dispatch._
import org.json4s.native._
import retrofit.http.{GET, Query}
import retrofit.Callback
import retrofit.client.Response
import retrofit.{RetrofitError, Callback, RestAdapter}
import com.google.gson.annotations.SerializedName

object Search {

  
  trait WikipediaService {
    @GET("/w/api.php?action=opensearch&format=json&limit=15")
    def suggestions(@Query("search") term: String, callback: Callback[Array[AnyRef]]): Unit

    @GET("/w/api.php?action=parse&format=json&prop=text&section=0")
    def page(@Query("page") term: String, callback: Callback[Page]): Unit
  }

  val restAdapter = new RestAdapter.Builder().setEndpoint("https://en.wikipedia.org").build()

  val service = restAdapter.create(classOf[WikipediaService])

  def callbackFuture[T]: (Callback[T], Future[T]) = {
    val p = Promise[T]()
    val cb = new Callback[T] {
      def success(t: T, response: Response) = {
        p success t
      }
      def failure(error: RetrofitError) = {
        p failure error
      }
    }

    (cb, p.future)
  }

  def wikipediaSuggestionRetrofit(term: String): Future[List[String]] = {
    async {
      val (cb, f) = callbackFuture[Array[AnyRef]]
      service.suggestions(term, cb)
      val result = await { f }
      val arraylist = result(1).asInstanceOf[java.util.List[String]]

      arraylist.asScala.toList
    }
  }

  def wikipediaPageRetrofit(term: String): Future[String] = {
    async {
      val (cb, f) = callbackFuture[Page]
      service.page(term, cb)
      val result = await { f }
      result.parse.text.all
    }
  }

  def wikipediaSuggestion(term: String): Future[List[String]] = wikipediaSuggestionRetrofit(term)

  def wikipediaPage(term: String): Future[String] = wikipediaPageRetrofit(term)

} 
Example 112
Source File: package.scala    From Principles-of-Reactive-Programming   with GNU General Public License v3.0 5 votes vote down vote up
import scala.language.postfixOps
import scala.io.StdIn
import scala.util._
import scala.util.control.NonFatal
import scala.concurrent._
import scala.concurrent.duration._
import ExecutionContext.Implicits.global
import scala.async.Async.{async, await}


    def apply() = new CancellationTokenSource {
      val p = Promise[Unit]()
      val cancellationToken = new CancellationToken {
        def isCancelled = p.future.value != None
      }
      def unsubscribe() {
        p.trySuccess(())
      }
    }
  }
} 
Example 113
Source File: JacksonSupport.scala    From Sidechains-SDK   with MIT License 5 votes vote down vote up
package com.horizen.api.http

import akka.http.scaladsl.model.HttpRequest
import akka.http.scaladsl.unmarshalling._
import akka.stream.Materializer
import com.fasterxml.jackson.databind._
import com.fasterxml.jackson.module.scala.DefaultScalaModule

import scala.concurrent.{ExecutionContext, Future}
import scala.reflect.ClassTag
import scala.language.postfixOps

object JacksonSupport {

  private val mapper = new ObjectMapper().registerModule(DefaultScalaModule)

  implicit def JacksonRequestUnmarshaller[T <: AnyRef](implicit c: ClassTag[T]): FromRequestUnmarshaller[T] = {
    new FromRequestUnmarshaller[T] {
      override def apply(request: HttpRequest)(implicit ec: ExecutionContext, materializer: Materializer): Future[T] = {
        Unmarshal(request.entity).to[String].map(str => {
          if (str.isEmpty) mapper.readValue("{}", c.runtimeClass).asInstanceOf[T]
          else mapper.readValue(str, c.runtimeClass).asInstanceOf[T]
        })
      }
    }
  }
} 
Example 114
Source File: FeatureUtils.scala    From automl   with Apache License 2.0 5 votes vote down vote up
package com.tencent.angel.spark.automl.feature

import org.apache.spark.ml.linalg.{DenseVector, SparseVector, Vector}
import org.apache.spark.sql.{Dataset, Row}

import scala.language.postfixOps

object FeatureUtils {

  def maxDim(dataset: Dataset[Row], col: String = "features"): Int = {
    dataset.select(col).rdd.mapPartitions { rows: Iterator[Row] =>
      val dim = rows.map { case Row(v: Vector) =>
        v match {
          case sv: SparseVector => sv.indices.last
          case dv: DenseVector => dv.size
        }
      }.max
      Iterator(dim)
    }.max + 1
  }

  def countNonZero(dataset: Dataset[Row], col: String = "features"): Array[Int] = {
    dataset.select(col).rdd.mapPartitions { rows: Iterator[Row] =>
      val mergeIndices = rows.map { case Row(v: Vector) =>
        v match {
          case sv: SparseVector =>
            sv.indices.toList
        }
      }.reduce(_ union _ distinct)
      Iterator(mergeIndices)
    }.reduce((a, b) => (a union b).distinct).toArray
  }

} 
Example 115
Source File: DefaultIngestionHandler.scala    From hydra   with Apache License 2.0 5 votes vote down vote up
package hydra.ingest.services

import akka.actor._
import hydra.common.config.ConfigSupport
import hydra.core.ingest.{HydraRequest, IngestionReport}
import hydra.core.protocol.HydraApplicationError

import scala.concurrent.duration._
import scala.language.postfixOps


class DefaultIngestionHandler(
    val request: HydraRequest,
    val registry: ActorRef,
    val requestor: ActorRef,
    val timeout: FiniteDuration
) extends Actor
    with IngestionHandler
    with ActorLogging {

  private implicit val ec = context.dispatcher

  // private val mediator = DistributedPubSub(context.system).mediator

  //mediator ! Subscribe(HydraRequestPublisher.TopicName, Some(HydraRequestPublisher.GroupName), self)

  override def complete(report: IngestionReport): Unit = {
    requestor ! report
    context.stop(self)
  }

  override def fail(e: Throwable): Unit = {
    requestor ! HydraApplicationError(e)
    context.stop(self)
  }
}

object DefaultIngestionHandler extends ConfigSupport {

  def props(
      request: HydraRequest,
      registry: ActorRef,
      requestor: ActorRef
  ): Props = {
    import ConfigSupport._

    val timeout = applicationConfig
      .getDurationOpt("ingestion.timeout")
      .getOrElse(3.seconds)

    props(request, registry, requestor, timeout)
  }

  def props(
      request: HydraRequest,
      registry: ActorRef,
      requestor: ActorRef,
      timeout: FiniteDuration
  ): Props = {
    Props(new DefaultIngestionHandler(request, registry, requestor, timeout))
  }
} 
Example 116
Source File: KinesisProducerIntegrationSpec.scala    From reactive-kinesis   with Apache License 2.0 5 votes vote down vote up
package com.weightwatchers.reactive.kinesis

import java.io.File

import com.amazonaws.services.kinesis.producer.{KinesisProducer => AWSKinesisProducer}
import com.typesafe.config.ConfigFactory
import com.weightwatchers.reactive.kinesis.common.{
  KinesisSuite,
  KinesisTestConsumer,
  TestCredentials
}
import com.weightwatchers.reactive.kinesis.consumer.KinesisConsumer.ConsumerConf
import com.weightwatchers.reactive.kinesis.models.ProducerEvent
import com.weightwatchers.reactive.kinesis.producer.{KinesisProducer, ProducerConf}
import org.scalatest.concurrent.Eventually
import org.scalatest.mockito.MockitoSugar
import org.scalatest.time.{Millis, Seconds, Span}
import org.scalatest.{BeforeAndAfterAll, FreeSpec, Matchers}

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Random

//scalastyle:off magic.number
class KinesisProducerIntegrationSpec
    extends FreeSpec
    with Matchers
    with MockitoSugar
    with BeforeAndAfterAll
    with Eventually
    with KinesisSuite {

  implicit val ece = scala.concurrent.ExecutionContext.global

  val TestStreamNrOfMessagesPerShard: Long = 0

  implicit override val patienceConfig: PatienceConfig =
    PatienceConfig(timeout = Span(5, Seconds), interval = Span(100, Millis))

  "The KinesisProducer" - {

    "Should publish a message to a stream" in new withKinesisConfForApp(
      "int-test-stream-producer-1"
    ) {

      val conf     = producerConf()
      val producer = KinesisProducer(conf)

      val existingRecordCount = testConsumer.retrieveRecords(conf.streamName, 10).size

      val event = ProducerEvent("1234", Random.alphanumeric.take(10).mkString)
      producer.addUserRecord(event)

      eventually {
        val records: Seq[String] = testConsumer.retrieveRecords(conf.streamName, 10)
        records.size shouldBe (existingRecordCount + 1)
        records should contain(
          new String(event.payload.array(), java.nio.charset.StandardCharsets.UTF_8)
        )
      }
    }
  }
}

//scalastyle:on 
Example 117
Source File: StringHelperTrees.scala    From sbt-actor-api   with MIT License 5 votes vote down vote up
package im.actor.api

import im.actor.api.Categories.Danger
import treehugger.forest._, definitions._
import treehuggerDSL._

import scala.language.postfixOps

trait StringHelperTrees extends TreeHelpers with Hacks {

  private val DANGER_NOTE = DocTag.Note("Contains sensitive data!!!")

  protected def generateDoc(doc: Doc): Vector[DocElement] = {
    val attrDocs = doc.attributeDocs map { aDoc ⇒
      val nameDesc = List(hackAttributeName(aDoc.argument), aDoc.description)
      val args = if (aDoc.category == Danger) nameDesc :+ DANGER_NOTE else nameDesc
      DocTag.Param(args: _*)
    }
    DocText(doc.generalDoc) +: attrDocs
  }

  protected val stringHelpersTree: Tree = OBJECTDEF("StringHelpers") withFlags PRIVATEWITHIN("api") := BLOCK(
    DEF("escapeSpecial", StringClass).withParams(PARAM("source", StringClass)) :=
      REF("source") DOT "flatMap" APPLY BLOCK(
        CASE(
          ID("c"),
          IF((REF("c") ANY_== LIT('\n')) OR (REF("c") ANY_== LIT('\r')) OR (REF("c") ANY_== LIT('\t')) OR (REF("c") ANY_== LIT('\f')))
        ) ==> INTERP("s", LIT("\\"), REF("c")),
        CASE(
          ID("c"),
          IF(REF("c") ANY_== LIT('"'))
        ) ==> LIT("\\\""),
        CASE(ID("c")) ==> REF("c") TOSTRING
      )
  )

  protected def generateToString(name: String, attributes: Vector[Attribute], attribureDocs: Vector[AttributeDoc]): DefDef = {
    DEF("toString", StringClass) withFlags Flags.OVERRIDE := IF(REF("Debug") DOT "isDebug") THEN
      INFIX_CHAIN("+", debug(name, attributes)) ELSE INFIX_CHAIN("+", prod(name, attributes, attribureDocs))
  }

  private def prod(name: String, attributes: Vector[Attribute], attribureDocs: Vector[AttributeDoc]) = {
    val docMapped = attribureDocs.map(e ⇒ e.argument → e).toMap
    val body = className(name) +: (attributes foldLeft Vector.empty[Vector[Tree]]) { (acc, elem) ⇒
      val show = docMapped.get(elem.name) map (ad ⇒ Categories.Category.isVisible(ad.category)) getOrElse true
      if (show) acc :+ ((wrapQoutes(LIT(elem.name)) :+ LIT(": ")) ++ wrapAttr(elem.typ, elem.name)) else acc
    }
    jsonTree(flattenTree(body))
  }

  private def debug(name: String, attributes: Vector[Attribute]) = {
    val body = className(name) +: (attributes foldLeft Vector.empty[Vector[Tree]]) { (acc, elem) ⇒
      acc :+ ((wrapQoutes(LIT(elem.name)) :+ LIT(": ")) ++ wrapAttr(elem.typ, elem.name))
    }
    jsonTree(flattenTree(body))
  }

  private def jsonTree(body: Vector[Tree]): Vector[Tree] = (LIT("{ ") +: body) :+ LIT(" }")

  private def flattenTree(elements: Vector[Vector[Tree]]): Vector[Tree] = elements match {
    case Vector() ⇒ Vector.empty[Tree]
    case v        ⇒ v reduce ((a, b) ⇒ (a :+ LIT(",")) ++ b)
  }

  private def className(name: String): Vector[Tree] =
    (wrapQoutes(LIT("_name")) :+ LIT(": ")) ++ wrapQoutes(LIT(name))

  private def wrapQoutes(e: Tree): Vector[Tree] = Vector(LIT("\""), e, LIT("\""))

  private def wrapAttr(attrType: Types.AttributeType, attrName: String): Vector[Tree] = {
    attrType match {
      case Types.Int32 | Types.Int64 | Types.Bool | Types.Double | Types.Bytes ⇒ Vector(REF(attrName))
      case Types.String ⇒ wrapQoutes(REF("StringHelpers") DOT "escapeSpecial" APPLY REF(attrName))
      case Types.Enum(_) ⇒ Vector(REF(attrName) DOT "id")
      case Types.Opt(typ) ⇒
        val optMapToString = REF(attrName) MAP LAMBDA(PARAM("e")) ==> INFIX_CHAIN("+", wrapAttr(typ, "e"))
        Vector(optMapToString DOT "getOrElse" APPLY NULL)
      case Types.List(typ) ⇒
        val listMapToString =
          REF(attrName) MAP LAMBDA(PARAM("e")) ==> INFIX_CHAIN("+", wrapAttr(typ, "e")) DOT "mkString" APPLY LIT(", ")
        Vector(LIT("[ "), listMapToString, LIT(" ]"))
      case Types.Struct(_) | Types.Trait(_) ⇒ Vector(REF(attrName) TOSTRING)
      case Types.Alias(aliasName)           ⇒ wrapAttr(aliasesPrim.get(aliasName).get, attrName)
      case _                                ⇒ Vector(REF(attrName))
    }
  }

} 
Example 118
Source File: RichScheduledExecutorService.scala    From mango   with Apache License 2.0 5 votes vote down vote up
package com.kakao.mango.concurrent

import java.util.concurrent.{Callable, ScheduledFuture, TimeUnit, ScheduledExecutorService}

import scala.concurrent.duration.Duration
import scala.concurrent.duration._
import scala.language.postfixOps


class RichScheduledExecutorService(underlying: ScheduledExecutorService) extends RichExecutorService(underlying) with ScheduledExecutorService {

  def scheduleIn[T](delay: Duration)(command: => T): ScheduledFuture[T] = schedule(new Callable[T] {
    override def call(): T = command
  }, delay.toMillis, TimeUnit.MILLISECONDS)

  def withFixedRate[T](rate: Duration, initialDelay: Duration = 0.second)(command: => Unit) = scheduleAtFixedRate(new Runnable {
    override def run(): Unit = command
  }, initialDelay.toMillis, rate.toMillis, TimeUnit.MILLISECONDS)

  def withFixedDelay[T](delay: Duration, initialDelay: Duration = 0.second)(command: => Unit) = scheduleWithFixedDelay(new Runnable {
    override def run(): Unit = command
  }, initialDelay.toMillis, delay.toMicros, TimeUnit.MILLISECONDS)

  // delegating to underlying
  override def schedule(command: Runnable, delay: Long, unit: TimeUnit): ScheduledFuture[_] = underlying.schedule(wrap(command), delay, unit)
  override def scheduleAtFixedRate(command: Runnable, initialDelay: Long, period: Long, unit: TimeUnit): ScheduledFuture[_] = underlying.scheduleAtFixedRate(wrap(command), initialDelay, period, unit)
  override def schedule[V](callable: Callable[V], delay: Long, unit: TimeUnit): ScheduledFuture[V] = underlying.schedule(wrap(callable), delay, unit)
  override def scheduleWithFixedDelay(command: Runnable, initialDelay: Long, delay: Long, unit: TimeUnit): ScheduledFuture[_] = underlying.scheduleWithFixedDelay(wrap(command), initialDelay, delay, unit)
} 
Example 119
Source File: TransactionDBSpec.scala    From zio-rocksdb   with Apache License 2.0 5 votes vote down vote up
package zio.rocksdb

import java.nio.charset.StandardCharsets.UTF_8

import org.{ rocksdb => jrocks }
import zio.duration._
import zio.rocksdb.internal.internal.ManagedPath
import zio.test.Assertion._
import zio.test.TestAspect._
import zio.test._
import zio.{ console, RIO, ZIO }

import scala.language.postfixOps

object TransactionDBSpec extends DefaultRunnableSpec {
  override def spec = {
    val rocksSuite = suite("TransactionDB")(
      testM("get/put") {
        val key   = "key".getBytes(UTF_8)
        val value = "value".getBytes(UTF_8)

        for {
          _      <- TransactionDB.put(key, value)
          result <- TransactionDB.get(key)
        } yield assert(result)(isSome(equalTo(value)))
      },
      testM("delete") {
        val key   = "key".getBytes(UTF_8)
        val value = "value".getBytes(UTF_8)

        for {
          _      <- TransactionDB.put(key, value)
          before <- TransactionDB.get(key)
          _      <- TransactionDB.delete(key)
          after  <- TransactionDB.get(key)
        } yield assert(before)(isSome(equalTo(value))) && assert(after)(isNone)
      },
      testM("newIterator") {
        val data = (1 to 10).map(i => (s"key$i", s"value$i")).toList

        for {
          _          <- RIO.foreach_(data) { case (k, v) => TransactionDB.put(k.getBytes(UTF_8), v.getBytes(UTF_8)) }
          results    <- TransactionDB.newIterator.runCollect
          resultsStr = results.map { case (k, v) => new String(k, UTF_8) -> new String(v, UTF_8) }
        } yield assert(resultsStr)(hasSameElements(data))
      },
      testM("get/put with Console") {
        val key   = "key".getBytes(UTF_8)
        val value = "value".getBytes(UTF_8)

        for {
          result <- TransactionDB.atomically(for {
                     _      <- Transaction.put(key, value)
                     result <- Transaction.get(key)
                     _      <- console.putStrLn(result.toString)
                   } yield result)
        } yield assert(result)(isSome(equalTo(value)))
      },
      testM("concurrent updates to the same key") {
        val count    = 10
        val key      = "COUNT".getBytes(UTF_8)
        val expected = isSome(equalTo(count))

        for {
          _ <- TransactionDB.put(key, 0.toString.getBytes(UTF_8))
          _ <- concurrent(count) {
                TransactionDB.atomically {
                  Transaction.getForUpdate(key, exclusive = true) >>= { iCount =>
                    Transaction.put(key, iCount.map(bytesToInt).map(_ + 1).getOrElse(-1).toString.getBytes(UTF_8))
                  }
                }
              }
          actual <- TransactionDB.get(key)
        } yield assert(actual.map(bytesToInt))(expected)
      },
      testM("thread safety inside transaction") {
        checkM(byteArray, byteArray) { (b1, b2) =>
          for {
            _ <- TransactionDB.atomically {
                  Transaction.put(b1, b2) <&> Transaction.put(b2, b1)
                }
          } yield assertCompletes
        }
      } @@ nonFlaky(10)
    ) @@ timeout(5 second)

    rocksSuite.provideCustomLayerShared(database)
  }
  private def bytesToInt(bytes: Array[Byte]): Int                                = new String(bytes, UTF_8).toInt
  private def concurrent[R, E, A](n: Int)(zio: ZIO[R, E, A]): ZIO[R, E, List[A]] = ZIO.foreachPar(0 until n)(_ => zio)

  private val database = (for {
    dir <- ManagedPath()
    db <- {
      val opts = new jrocks.Options().setCreateIfMissing(true)
      TransactionDB.Live.open(opts, dir.toAbsolutePath.toString)
    }
  } yield db).toLayer.mapError(TestFailure.die)

  private def byteArray = Gen.listOf(Gen.anyByte).map(_.toArray)
} 
Example 120
Source File: ParameterValues.scala    From rug   with GNU General Public License v3.0 5 votes vote down vote up
package com.atomist.param

import scala.language.postfixOps

trait ParameterValues {

  
  @throws[IllegalArgumentException]
  def stringParamValue(name: String): String = paramValue(name) match {
    case null => null
    case s: String => s.toString
    case _ => throw new IllegalArgumentException(s"'$name' is not a String")
  }

  override def toString: String = {
    val parms = new StringBuilder()
    parameterValues.foreach(p => parms.append(s"${p.getName} -> ${p.getValue}\n"))
    parms.toString()
  }
} 
Example 121
Source File: TestApplication.scala    From vat-api   with Apache License 2.0 5 votes vote down vote up
package uk.gov.hmrc.vatapi

import com.github.tomakehurst.wiremock.WireMockServer
import com.github.tomakehurst.wiremock.client.WireMock
import com.github.tomakehurst.wiremock.client.WireMock._
import com.github.tomakehurst.wiremock.core.WireMockConfiguration._
import com.github.tomakehurst.wiremock.stubbing.StubMapping
import org.scalamock.scalatest.MockFactory
import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach}
import play.api.http.Status._

import scala.concurrent.duration._
import scala.language.postfixOps

trait TestApplication
  extends UnitSpec
    with BeforeAndAfterEach
    with BeforeAndAfterAll
    with MockFactory {

  override implicit val timeout: FiniteDuration = 100 seconds

  val mockPort = 22222
  val mockHost = "localhost"

  protected val wiremockBaseUrl: String = s"http://$mockHost:$mockHost"
  private val wireMockServer = new WireMockServer(wireMockConfig().port(mockPort))

  protected def baseBeforeAll(): StubMapping = {
    wireMockServer.stop()
    wireMockServer.start()
    WireMock.configureFor(mockHost, mockPort)
    // the below stub is here so that the application finds the registration endpoint which is called on startup
    stubFor(post(urlPathEqualTo("/registration")).willReturn(aResponse().withStatus(OK)))
  }

  override def beforeAll(): Unit = {
    super.beforeAll()
    baseBeforeAll()
  }

  override def afterAll(): Unit = {
    super.afterAll()
    wireMockServer.stop()
  }

  override def beforeEach(): Unit = {
    super.beforeEach()
    WireMock.reset()
  }

} 
Example 122
Source File: UnitSpec.scala    From vat-api   with Apache License 2.0 5 votes vote down vote up
package uk.gov.hmrc.vatapi

import org.joda.time.{DateTime, DateTimeZone, LocalDate}
import org.scalatest.OptionValues
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.{AnyWordSpec, AsyncWordSpec}
import play.api.test.{DefaultAwaitTimeout, FutureAwaits}

import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
import scala.language.postfixOps

trait BaseUnitSpec extends Matchers with OptionValues with TestUtils with FutureAwaits
  with DefaultAwaitTimeout {
  implicit val timeout: FiniteDuration = 5 seconds

  def await[T](f: Future[T])(implicit duration: FiniteDuration = timeout): T =
    Await.result(f, duration)
}

trait UnitSpec extends AnyWordSpec with BaseUnitSpec{
  implicit def extractAwait[A](future: Future[A]): A = await[A](future)

  def await[A](future: Future[A])(implicit timeout: Duration): A = Await.result(future, timeout)
}

trait AsyncUnitSpec extends AsyncWordSpec with BaseUnitSpec

trait TestUtils {
  private val vrnGenerator = VrnGenerator()

  def now: DateTime = DateTime.now(DateTimeZone.UTC)
  def generateVrn = vrnGenerator.nextVrn()

  implicit def toLocalDate(d: DateTime): LocalDate = d.toLocalDate
}

object TestUtils extends TestUtils 
Example 123
Source File: GuideDefaultStyles.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.guide.styles

import io.udash.css.CssBase
import io.udash.web.commons.styles.DefaultStyles
import io.udash.web.commons.styles.utils.{FontWeight, MediaQueries, UdashFonts}

import scala.language.postfixOps

object GuideDefaultStyles extends CssBase with DefaultStyles {
  import dsl._

  style(
    unsafeRoot("body") (
      fontSize(1 rem)
    ),

    unsafeRoot("pre") (
      backgroundColor(c"#f5f5f5"),
      overflow.auto
    ),

    unsafeRoot("p")(
      marginTop(1.5625 rem),
      fontSize(1 rem),
      lineHeight(1.3),

      &.firstChild (
        marginTop(`0`)
      )
    ),

    unsafeRoot("h3") (
      UdashFonts.roboto(FontWeight.Thin),
      marginTop(2.8125 rem),
      marginBottom(.9375 rem),
      lineHeight(1.2),
      fontSize(2 rem),

      MediaQueries.phone(
        fontSize(1.625 rem)
      )
    ),

    unsafeRoot("h4") (
      UdashFonts.roboto(FontWeight.Thin),
      marginTop(2.1875 rem),
      marginBottom(.9375 rem),
      lineHeight(1.2),
      fontSize(1.5 rem),

      MediaQueries.phone(
        fontSize(1.25 rem)
      )
    )
  )
} 
Example 124
Source File: MediaQueries.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.guide.styles.utils

import io.udash.css.{CssBase, CssStyle}
import io.udash.web.commons.styles.utils.StyleConstants
import scalacss.internal.DslBase.ToStyle

import scala.language.postfixOps


object MediaQueries extends CssBase {
  import dsl._

  def desktop(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(StyleConstants.MediaQueriesBounds.TabletLandscapeMax + 1 px)(
      properties: _*
    )
  )

  def tabletLandscape(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(1 px).maxWidth(StyleConstants.MediaQueriesBounds.TabletLandscapeMax px) (
      properties:_*
    )
  )

  def tabletPortrait(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(1 px).maxWidth(StyleConstants.MediaQueriesBounds.TabletMax px) (
      properties:_*
    )
  )

  def phone(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(1 px).maxWidth(StyleConstants.MediaQueriesBounds.PhoneMax px) (
      properties:_*
    )
  )
} 
Example 125
Source File: GuideStyleUtils.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.guide.styles.utils

import io.udash.css.{CssBase, CssStyle}
import io.udash.web.commons.styles.utils.StyleConstants
import scalacss.internal.Macros.Color
import scalacss.internal.{AV, Attr, Length}

import scala.concurrent.duration.{DurationInt, FiniteDuration}
import scala.language.postfixOps

object GuideStyleUtils extends CssBase {
  import dsl._

  val relativeMiddle: CssStyle = mixin(
    top(50 %%),
    transform := "translateY(-50%)",
    position.relative
  )

  def transition(property: Attr = all, duration: FiniteDuration = 250 milliseconds): CssStyle = mixin(
    transitionProperty := property.toString(),
    transitionDuration(duration),
    transitionTimingFunction.easeInOut
  )

  def border(bColor: Color = StyleConstants.Colors.GreyExtra, bWidth: Length[Double] = 1.0 px, bStyle: AV = borderStyle.solid): CssStyle = mixin(
    borderWidth(bWidth),
    bStyle,
    borderColor(bColor)
  )
} 
Example 126
Source File: HeaderStyles.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.guide.styles.partials

import io.udash.css.{CssBase, CssStyle}
import io.udash.web.commons.styles.components.{HeaderButtonsStyles, HeaderNavStyles}
import io.udash.web.commons.styles.utils.StyleConstants
import io.udash.web.guide.styles.utils.{GuideStyleUtils, MediaQueries}

import scala.language.postfixOps


object HeaderStyles extends CssBase with HeaderButtonsStyles with HeaderNavStyles {
  import dsl._

  val header: CssStyle = style(
    position.relative,
    backgroundColor.black,
    height(StyleConstants.Sizes.HeaderHeight px),
    fontSize(1 rem),
    zIndex(99),
    position.fixed,
    top(`0`),
    width(100 %%),

    MediaQueries.tabletPortrait(
      height(StyleConstants.Sizes.GuideHeaderHeightMobile px)
    )
  )

  val headerLeft: CssStyle = style(
    position.relative,
    float.left,
    height(100 %%)
  )

  val headerLogo: CssStyle = style(
    GuideStyleUtils.relativeMiddle,
    display.inlineBlock,
    verticalAlign.top,
    width(130 px),
    marginRight(25 px),

    MediaQueries.tabletLandscape(
      marginLeft(StyleConstants.Sizes.GuideHeaderHeightMobile px)
    ),

    MediaQueries.tabletPortrait(
      width(130 * .8 px)
    )
  )
} 
Example 127
Source File: MarkdownStyles.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.guide.styles

import io.udash.css.{CssBase, CssStyle}

import scala.language.postfixOps

object MarkdownStyles extends CssBase {
  import dsl._

  val markdownPage: CssStyle = style(
    unsafeChild("li") (
      position.relative,
      paddingLeft(2 rem),
      margin(.5 rem, `0`, .5 rem, 4.5 rem),

      &.before(
        position.absolute,
        left(`0`),
        top(`0`),
        content := "\"•\""
      )
    ),

    unsafeChild("iframe")(
      marginTop(2.5 rem),

      &.firstChild (
        marginTop(`0`)
      )
    ),

    unsafeChild("pre")(
      marginTop(2.5 rem),

      &.firstChild (
        marginTop(`0`)
      )
    ),

    unsafeChild("code") (
      backgroundColor(c"#f5f2f0"),
      fontFamily :=! "Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace"
    ),
  )
} 
Example 128
Source File: MediaQueries.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.commons.styles.utils

import io.udash.css.{CssBase, CssStyle}
import scalacss.internal.DslBase.ToStyle

import scala.language.postfixOps


object MediaQueries extends CssBase {
  import dsl._

  def desktop(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(StyleConstants.MediaQueriesBounds.TabletLandscapeMax + 1 px) (
      properties:_*
    )
  )

  def tabletLandscape(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(1 px).maxWidth(StyleConstants.MediaQueriesBounds.TabletLandscapeMax px) (
      properties:_*
    )
  )

  def tabletPortrait(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(1 px).maxWidth(StyleConstants.MediaQueriesBounds.TabletMax px) (
      properties:_*
    )
  )

  def phone(properties: ToStyle*): CssStyle = mixin(
    media.screen.minWidth(1 px).maxWidth(StyleConstants.MediaQueriesBounds.PhoneMax px) (
      properties:_*
    )
  )
} 
Example 129
Source File: CommonStyleUtils.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.commons.styles.utils

import io.udash.css.{CssBase, CssStyle}
import scalacss.internal.Macros.Color
import scalacss.internal.{AV, Attr, Length}

import scala.concurrent.duration.{DurationInt, FiniteDuration}
import scala.language.postfixOps

object CommonStyleUtils extends CssBase {
  import dsl._

  val middle: CssStyle = mixin(
    top(50 %%),
    transform := "translateY(-50%)"
  )

  val center: CssStyle = mixin(
    top(50 %%),
    left(50 %%),
    transform := "translateY(-50%) translateX(-50%)"
  )

  val relativeMiddle: CssStyle = mixin(
    middle,
    position.relative
  )

  val absoluteMiddle: CssStyle = mixin(
    middle,
    position.absolute
  )

  val absoluteCenter: CssStyle = mixin(
    center,
    position.absolute
  )

  def transition(property: Attr = all, duration: FiniteDuration = 250 milliseconds): CssStyle = style(
    transitionProperty := property.toString(),
    transitionDuration(duration),
    transitionTimingFunction.easeInOut
  )

  def border(bColor: Color = StyleConstants.Colors.GreyExtra, bWidth: Length[Double] = 1.0 px, bStyle: AV = borderStyle.solid): CssStyle = style(
    borderWidth(bWidth),
    bStyle,
    borderColor(bColor)
  )
} 
Example 130
Source File: MobileMenuStyles.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.commons.styles.components



import io.udash.css.{CssBase, CssStyle}
import io.udash.web.commons.styles.attributes.Attributes
import io.udash.web.commons.styles.utils.{CommonStyleUtils, MediaQueries, StyleConstants}

import scala.language.postfixOps

object MobileMenuStyles extends CssBase {
  import dsl._

  private val lineHeight = 4
  val btnMobileLines: CssStyle = style(
    CommonStyleUtils.absoluteCenter,
    width(60 %%)
  )

  private val btnMobileLine: CssStyle = mixin(
    CommonStyleUtils.transition(),
    position.relative,
    display.block,
    height(lineHeight px),
    width(100 %%),
    marginTop(lineHeight px),
    marginBottom(lineHeight px),
    backgroundColor(StyleConstants.Colors.Red)
  )

  val btnMobileLineTop: CssStyle = style(
    btnMobileLine,
    transformOrigin := s"50% calc(50% + ${lineHeight * 2}px)"
  )

  val btnMobileLineMiddle: CssStyle = style(
    btnMobileLine
  )

  val btnMobileLineBottom: CssStyle = style(
    btnMobileLine,
    transformOrigin := s"50% calc(50% - ${lineHeight * 2}px)"
  )

  private val btnMobileActive = mixin(
    unsafeChild(s".${btnMobileLineTop.className}") (
      transform := s"rotate(45deg) translateY(${lineHeight * 2}px)"
    ),

    unsafeChild(s".${btnMobileLineBottom.className}") (
      transform := s"rotate(-45deg) translateY(-${lineHeight * 2}px)"
    ),

    unsafeChild(s".${btnMobileLineMiddle.className}") (
      opacity(0)
    )
  )

  val btnMobile: CssStyle = style(
    display.none,
    width(StyleConstants.Sizes.GuideHeaderHeightMobile + 1 px),
    height(StyleConstants.Sizes.GuideHeaderHeightMobile  px),
    zIndex(9),

    MediaQueries.tabletPortrait(
      display.inlineBlock,
      verticalAlign.middle
    ),

    &.attr(Attributes.data(Attributes.Active), "true") (
      btnMobileActive
    )
  )
} 
Example 131
Source File: HomepageDefaultStyles.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.homepage.styles

import io.udash.css.CssBase
import io.udash.web.commons.styles.DefaultStyles
import io.udash.web.commons.styles.utils.MediaQueries

import scala.language.postfixOps

object HomepageDefaultStyles extends CssBase with DefaultStyles {
  import dsl._

  style(
    unsafeRoot("body") (
      fontSize(1.0625 rem)
    ),

    unsafeRoot("p")(
      fontSize(1 rem)
    ),

    unsafeRoot("h1") (
      marginBottom(3.125 rem),

      MediaQueries.phone(
        paddingTop(3.125 rem),
        marginBottom(1.875 rem)
      )
    )
  )
} 
Example 132
Source File: HeaderStyles.scala    From udash-core   with Apache License 2.0 5 votes vote down vote up
package io.udash.web.homepage.styles.partials

import io.udash.css.{CssBase, CssStyle}
import io.udash.web.commons.styles.attributes.Attributes
import io.udash.web.commons.styles.components.{HeaderButtonsStyles, HeaderNavStyles}
import io.udash.web.commons.styles.utils.{CommonStyleUtils, MediaQueries, StyleConstants}
import scalacss.internal.Literal

import scala.concurrent.duration.DurationInt
import scala.language.postfixOps

object HeaderStyles extends CssBase with HeaderButtonsStyles with HeaderNavStyles {
  import dsl._

  val header: CssStyle = style(
    position.absolute,
    top(`0`),
    left(`0`),
    width(100 %%),
    height(StyleConstants.Sizes.LandingPageHeaderHeight px),
    fontSize(1 rem),
    zIndex(999),

    &.attr(Attributes.data(Attributes.Pinned), "true")(
      position.fixed,
      height(StyleConstants.Sizes.HeaderHeightPin px),
      backgroundColor.black,
      animationName(headerAnimation),
      animationIterationCount.count(1),
      animationDuration(300 milliseconds),

      MediaQueries.tabletLandscape(
        height(StyleConstants.Sizes.HeaderHeightPin * .85 px)
      ),

      unsafeChild(s".${headerLogo.className}")(
        width(48 px),
        height(56 px),
        backgroundImage := "url(/assets/images/udash_logo.png)",

        MediaQueries.tabletPortrait(
          display.none
        )
      ),

      unsafeChild(s".${btnMobile.className}")(
        CommonStyleUtils.middle
      )
    ),

    MediaQueries.tabletPortrait(
      height(StyleConstants.Sizes.HeaderHeight * .9 px)
    )
  )

  private lazy val headerAnimation: CssStyle = keyframes(
    0d -> keyframe(
      transform := "translateY(-100%)"
    ),

    100d -> keyframe(
      transform := "translateY(0)"
    )
  )

  val headerLeft: CssStyle = style(
    position.relative,
    float.left,
    height(100 %%)
  )

  lazy val headerLogo: CssStyle = style(
    CommonStyleUtils.relativeMiddle,
    display.inlineBlock,
    verticalAlign.middle,
    width(65 px),
    height(96 px),
    marginRight(25 px),
    backgroundImage := "url(/assets/images/udash_logo_l.png)",
    backgroundRepeat.noRepeat,
    backgroundSize := "100%",

    MediaQueries.tabletPortrait(
      display.block,
      width(StyleConstants.Sizes.GuideHeaderHeightMobile px),
      height(14 px),
      backgroundPosition := Literal.bottom,
      transform := none,
      top.auto
    )
  )

  lazy val btnMobile: CssStyle = style(
    position.relative
  )
} 
Example 133
Source File: DependencyGraphReadyCheckSpec.scala    From docker-it-scala   with MIT License 5 votes vote down vote up
package com.whisk.docker

import com.whisk.docker.impl.spotify.DockerKitSpotify
import org.scalatest.{FlatSpec, Matchers}
import org.slf4j.LoggerFactory

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

class DependencyGraphReadyCheckSpec extends FlatSpec with Matchers with DockerKitSpotify {

  override val StartContainersTimeout = 45 seconds

  private lazy val log = LoggerFactory.getLogger(this.getClass)

  val zookeeperContainer =
    DockerContainer("confluentinc/cp-zookeeper:3.1.2", name = Some("zookeeper"))
      .withEnv("ZOOKEEPER_TICK_TIME=2000", "ZOOKEEPER_CLIENT_PORT=2181")
      .withReadyChecker(DockerReadyChecker.LogLineContains("binding to port"))

  val kafkaContainer = DockerContainer("confluentinc/cp-kafka:3.1.2", name = Some("kafka"))
    .withEnv("KAFKA_BROKER_ID=1",
             "KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181",
             "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092")
    .withLinks(ContainerLink(zookeeperContainer, "zookeeper"))
    .withReadyChecker(DockerReadyChecker.LogLineContains("[Kafka Server 1], started"))

  val schemaRegistryContainer = DockerContainer("confluentinc/cp-schema-registry:3.1.2",
                                                name = Some("schema_registry"))
    .withEnv("SCHEMA_REGISTRY_HOST_NAME=schema_registry",
             "SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zookeeper:2181")
    .withLinks(ContainerLink(zookeeperContainer, "zookeeper"),
               ContainerLink(kafkaContainer, "kafka"))
    .withReadyChecker(DockerReadyChecker.LogLineContains("Server started, listening for requests"))

  override def dockerContainers =
    schemaRegistryContainer :: kafkaContainer :: zookeeperContainer :: super.dockerContainers

  "all containers except the leaves of the dependency graph" should "be ready after initialization" in {
    startAllOrFail()

    try {
      containerManager.isReady(zookeeperContainer).isCompleted shouldBe true
      containerManager.isReady(kafkaContainer).isCompleted shouldBe true
      containerManager.isReady(schemaRegistryContainer).isCompleted shouldBe false

      Await.ready(containerManager.isReady(schemaRegistryContainer), 45 seconds)

      containerManager.isReady(schemaRegistryContainer).isCompleted shouldBe true
    } catch {
      case e: RuntimeException => log.error("Test failed during readychecks", e)
    } finally {
      Await.ready(containerManager.stopRmAll(), StopContainersTimeout)
    }
  }

  override def startAllOrFail(): Unit = {
    Await.result(containerManager.pullImages(), PullImagesTimeout)
    containerManager.initReadyAll(StartContainersTimeout).map(_.map(_._2).forall(identity))
    sys.addShutdownHook(
      containerManager.stopRmAll()
    )
  }
} 
Example 134
Source File: ActivationStoreBehaviorBase.scala    From openwhisk   with Apache License 2.0 5 votes vote down vote up
package org.apache.openwhisk.core.database.test.behavior

import java.time.Instant

import akka.stream.ActorMaterializer
import common.{StreamLogging, WskActorSystem}
import org.apache.openwhisk.common.TransactionId
import org.apache.openwhisk.core.database.{ActivationStore, CacheChangeNotification, UserContext}
import org.apache.openwhisk.core.database.test.behavior.ArtifactStoreTestUtil.storeAvailable
import org.apache.openwhisk.core.entity._
import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures}
import org.scalatest.{BeforeAndAfterEach, FlatSpec, Matchers, Outcome}

import scala.collection.mutable.ListBuffer
import scala.concurrent.Await
import scala.concurrent.duration.Duration
import scala.concurrent.duration.DurationInt
import scala.language.postfixOps
import scala.util.{Random, Try}

trait ActivationStoreBehaviorBase
    extends FlatSpec
    with ScalaFutures
    with Matchers
    with StreamLogging
    with WskActorSystem
    with IntegrationPatience
    with BeforeAndAfterEach {

  protected implicit val materializer: ActorMaterializer = ActorMaterializer()
  protected implicit val notifier: Option[CacheChangeNotification] = None

  def context: UserContext
  def activationStore: ActivationStore
  private val docsToDelete = ListBuffer[(UserContext, ActivationId)]()

  def storeType: String

  protected def transId() = TransactionId(Random.alphanumeric.take(32).mkString)

  override def afterEach(): Unit = {
    cleanup()
    stream.reset()
  }

  override protected def withFixture(test: NoArgTest): Outcome = {
    assume(storeAvailable(storeAvailableCheck), s"$storeType not configured or available")
    val outcome = super.withFixture(test)
    if (outcome.isFailed) {
      println(logLines.mkString("\n"))
    }
    outcome
  }

  protected def storeAvailableCheck: Try[Any] = Try(true)
  //~----------------------------------------< utility methods >

  protected def store(activation: WhiskActivation, context: UserContext)(
    implicit transid: TransactionId,
    notifier: Option[CacheChangeNotification]): DocInfo = {
    val doc = activationStore.store(activation, context).futureValue
    docsToDelete.append((context, ActivationId(activation.docid.asString)))
    doc
  }

  protected def newActivation(ns: String, actionName: String, start: Long): WhiskActivation = {
    WhiskActivation(
      EntityPath(ns),
      EntityName(actionName),
      Subject(),
      ActivationId.generate(),
      Instant.ofEpochMilli(start),
      Instant.ofEpochMilli(start + 1000))
  }

  
  def cleanup()(implicit timeout: Duration = 10 seconds): Unit = {
    implicit val tid: TransactionId = transId()
    docsToDelete.map { e =>
      Try {
        Await.result(activationStore.delete(e._2, e._1), timeout)
      }
    }
    docsToDelete.clear()
  }

} 
Example 135
Source File: LogLimit.scala    From openwhisk   with Apache License 2.0 5 votes vote down vote up
package org.apache.openwhisk.core.entity

import pureconfig._
import pureconfig.generic.auto._

import scala.language.postfixOps
import scala.util.Failure
import scala.util.Success
import scala.util.Try
import spray.json._
import org.apache.openwhisk.core.ConfigKeys
import org.apache.openwhisk.core.entity.size._

case class LogLimitConfig(min: ByteSize, max: ByteSize, std: ByteSize)


  @throws[IllegalArgumentException]
  protected[core] def apply(megabytes: ByteSize): LogLimit = {
    require(megabytes >= MIN_LOGSIZE, s"log size $megabytes below allowed threshold of $MIN_LOGSIZE")
    require(megabytes <= MAX_LOGSIZE, s"log size $megabytes exceeds allowed threshold of $MAX_LOGSIZE")
    new LogLimit(megabytes.toMB.toInt)
  }

  override protected[core] implicit val serdes = new RootJsonFormat[LogLimit] {
    def write(m: LogLimit) = JsNumber(m.megabytes)

    def read(value: JsValue) =
      Try {
        val JsNumber(mb) = value
        require(mb.isWhole, "log limit must be whole number")
        LogLimit(mb.intValue MB)
      } match {
        case Success(limit)                       => limit
        case Failure(e: IllegalArgumentException) => deserializationError(e.getMessage, e)
        case Failure(e: Throwable)                => deserializationError("log limit malformed", e)
      }
  }
} 
Example 136
Source File: MemoryLimit.scala    From openwhisk   with Apache License 2.0 5 votes vote down vote up
package org.apache.openwhisk.core.entity

import scala.language.postfixOps
import scala.util.Failure
import scala.util.Success
import scala.util.Try

import spray.json._
import org.apache.openwhisk.core.entity.size._
import org.apache.openwhisk.core.ConfigKeys
import pureconfig._
import pureconfig.generic.auto._

case class MemoryLimitConfig(min: ByteSize, max: ByteSize, std: ByteSize)


  @throws[IllegalArgumentException]
  protected[core] def apply(megabytes: ByteSize): MemoryLimit = {
    require(megabytes >= MIN_MEMORY, s"memory $megabytes below allowed threshold of $MIN_MEMORY")
    require(megabytes <= MAX_MEMORY, s"memory $megabytes exceeds allowed threshold of $MAX_MEMORY")
    new MemoryLimit(megabytes.toMB.toInt)
  }

  override protected[core] implicit val serdes = new RootJsonFormat[MemoryLimit] {
    def write(m: MemoryLimit) = JsNumber(m.megabytes)

    def read(value: JsValue) =
      Try {
        val JsNumber(mb) = value
        require(mb.isWhole, "memory limit must be whole number")
        MemoryLimit(mb.intValue MB)
      } match {
        case Success(limit)                       => limit
        case Failure(e: IllegalArgumentException) => deserializationError(e.getMessage, e)
        case Failure(e: Throwable)                => deserializationError("memory limit malformed", e)
      }
  }
} 
Example 137
Source File: Entities.scala    From openwhisk   with Apache License 2.0 5 votes vote down vote up
package org.apache.openwhisk.core.controller

import scala.concurrent.Future
import scala.language.postfixOps
import scala.util.Try
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import akka.http.scaladsl.model.StatusCodes.PayloadTooLarge
import akka.http.scaladsl.model.headers.RawHeader
import akka.http.scaladsl.server.Directive0
import akka.http.scaladsl.server.Directives
import akka.http.scaladsl.server.RequestContext
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.server.RouteResult
import spray.json.JsonPrinter
import org.apache.openwhisk.common.TransactionId
import org.apache.openwhisk.core.entitlement.Privilege._
import org.apache.openwhisk.core.entitlement.Privilege
import org.apache.openwhisk.core.entitlement.Privilege.READ
import org.apache.openwhisk.core.entitlement.Resource
import org.apache.openwhisk.core.entity._
import org.apache.openwhisk.core.entity.ActivationEntityLimit
import org.apache.openwhisk.core.entity.size._
import org.apache.openwhisk.http.ErrorResponse.terminate
import org.apache.openwhisk.http.Messages

protected[controller] trait ValidateRequestSize extends Directives {

  protected def validateSize(check: => Option[SizeError])(implicit tid: TransactionId, jsonPrinter: JsonPrinter) =
    new Directive0 {
      override def tapply(f: Unit => Route) = {
        check map {
          case e: SizeError => terminate(PayloadTooLarge, Messages.entityTooBig(e))
        } getOrElse f(None)
      }
    }

  
  protected final def isEntity(n: String) = Try { EntityName(n) } isSuccess
} 
Example 138
Source File: MultiDataStreamer.scala    From structured-streaming-application   with Apache License 2.0 5 votes vote down vote up
package knolx.kafka

import java.util.Properties

import akka.actor.ActorSystem
import knolx.Config.{bootstrapServer, topic}
import knolx.KnolXLogger
import org.apache.kafka.clients.producer.{KafkaProducer, ProducerConfig, ProducerRecord}
import org.apache.kafka.common.serialization.StringSerializer

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.DurationInt
import scala.language.postfixOps
import scala.util.Random


object MultiDataStreamer extends App with KnolXLogger {
  val system = ActorSystem("DataStreamer")

  val props = new Properties()
  props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServer)
  props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, classOf[StringSerializer].getName)
  props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, classOf[StringSerializer].getName)

  val producer = new KafkaProducer[String, String](props)

  info("Streaming data into Kafka...")
  system.scheduler.schedule(0 seconds, 3000 milliseconds) {
    (1 to Random.nextInt(100)).foreach { id =>
      producer.send(new ProducerRecord[String, String](topic,s"device$id", (Math.random * 2 + 1).toString))
    }
  }
} 
Example 139
Source File: UsageSpec.scala    From dependency   with MIT License 5 votes vote down vote up
package controllers

import io.flow.test.utils.FlowPlaySpec
import io.flow.usage.util.UsageUtil
import io.flow.usage.v0.Client
import io.flow.usage.v0.models.json._
import play.api.libs.json.Json

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

class UsageSpec extends FlowPlaySpec {
  private[this] def uu = app.injector.instanceOf[UsageUtil]

  import scala.concurrent.ExecutionContext.Implicits.global

  "Check usage"  in {
    val j = Json.toJson(uu.currentUsage)
    println(s"Found API Usage: $j" )
    val r = Json.toJson(
      Await.result(
        new Client(
          wsClient,
          s"http://localhost:$port"
        ).Usages.getUsage(), 3 seconds
      )
    )

    j must be(r)
  }
} 
Example 140
Source File: CollectionTypes.scala    From xmlrpc   with MIT License 5 votes vote down vote up
package xmlrpc.protocol

import xmlrpc.protocol.Deserializer.Deserialized

import scala.xml.{NodeSeq, Node}
import scala.language.postfixOps
import scalaz.Scalaz._

trait CollectionTypes extends Protocol {
  import Deserializer.StringToError

  // We only support array of the same type, if an array contains elements with different
  // types, we deserialize it with case classes
  implicit def ArrayXmlrpc[T: Datatype]: Datatype[Seq[T]] = new Datatype[Seq[T]] {
    override def serialize(value: Seq[T]): Node =
      <array><data>{for {elem <- value} yield toXmlrpc(elem)}</data></array>.inValue

    override def deserialize(from: NodeSeq): Deserialized[Seq[T]] =
      from \\ "array" headOption match {
        case Some(<array><data>{array @ _*}</data></array>) =>
          (for { value <- array}
            yield fromXmlrpc[T](value)).toList.sequence[Deserialized, T]

        case _ => "Expected array structure in $from".toError.failures
      }
  }

  implicit def StructXmlrpc[T: Datatype]: Datatype[Map[String, T]] = new Datatype[Map[String, T]] {
    override def serialize(map: Map[String, T]): Node = {
      def inName(name: String): Node = <name>{name}</name>
      def inMember(elems: NodeSeq): NodeSeq = <member>{elems}</member>

      lazy val struct: NodeSeq = (for {
        (key, value) <- map
      } yield inMember(inName(key) ++ toXmlrpc(value))).reduce(_ ++ _)

      <struct>{struct}</struct>.inValue
    }

    override def deserialize(from: NodeSeq): Deserialized[Map[String, T]] =
      from \\ "struct" headOption match {
        case Some(<struct>{members @ _*}</struct>) =>
          (for { member <- members }
            yield fromXmlrpc[T](member \ "value" head) map ((member \ "name" text) -> _))
            .toList
            .sequence[Deserialized, (String, T)]
            .map(_.toMap[String, T])

        case _ => s"Expected struct in:\n$from".toError.failures
      }
  }
} 
Example 141
Source File: ScalaTypes.scala    From xmlrpc   with MIT License 5 votes vote down vote up
package xmlrpc.protocol

import xmlrpc.protocol.Deserializer.Deserialized

import scala.language.{postfixOps, implicitConversions}
import scala.xml.NodeSeq

import scalaz.Scalaz._

trait ScalaTypes extends Protocol {
  implicit def optionXmlrpc[T: Datatype]: Datatype[Option[T]] = new Datatype[Option[T]] {
    override def serialize(value: Option[T]): NodeSeq = value match {
      case Some(a) => toXmlrpc[T](a)
      case None => NodeSeq.Empty
    }

    override def deserialize(from: NodeSeq): Deserialized[Option[T]] =
      from \\ "value" headOption match {
        case Some(a) => fromXmlrpc[T](a) map (Some(_))
        case None => None.success
      }
  }
} 
Example 142
Source File: XmlrpcConnection.scala    From xmlrpc   with MIT License 5 votes vote down vote up
package xmlrpc

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.util.Timeout
import org.scalatest.FunSpec
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.time.{Millis, Seconds, Span}
import xmlrpc.protocol.XmlrpcProtocol

import scala.concurrent.duration._
import scala.language.postfixOps
import scalaz.{Success, Failure}

class XmlrpcConnection extends FunSpec with ScalaFutures {
  // Xmlrpc imports
  import Xmlrpc._
  import XmlrpcProtocol._

  // Scalatest setup
  implicit val default: PatienceConfig = PatienceConfig(timeout = Span(5, Seconds), interval = Span(500, Millis))

  // Xmrpc setup, server is up but it is not mine, found on Internet
  implicit val testServer = XmlrpcServer("http://betty.userland.com/RPC2")

  // Spray setup
  implicit val system = ActorSystem()
  implicit val ma = ActorMaterializer()
  implicit val timeout = Timeout(5 seconds)
  import system.dispatcher

  describe("The connection with a XML-RPC server") {
    it("should invoke the test method successfully in the server") {
      val invocation = invokeMethod[Int, String]("examples.getStateName", 41).underlying
      val responseMessage = "South Dakota"

      whenReady(invocation) {
        case Success(value) => assertResult(responseMessage) {value}
        case Failure(errors) => fail("Errors when deserializing\n" + errors)
      }
    }
  }
} 
Example 143
Source File: EventHubsRelation.scala    From azure-event-hubs-spark   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.sql.eventhubs

import org.apache.spark.eventhubs.rdd.{ EventHubsRDD, OffsetRange }
import org.apache.spark.internal.Logging
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{ Row, SQLContext }
import org.apache.spark.sql.sources.{ BaseRelation, TableScan }
import org.apache.spark.sql.types.StructType

import scala.language.postfixOps


private[eventhubs] class EventHubsRelation(override val sqlContext: SQLContext,
                                           parameters: Map[String, String])
    extends BaseRelation
    with TableScan
    with Logging {

  import org.apache.spark.eventhubs._

  private val ehConf = EventHubsConf.toConf(parameters)
  private val eventHubClient = EventHubsSourceProvider.clientFactory(parameters)(ehConf)

  override def schema: StructType = EventHubsSourceProvider.eventHubsSchema

  override def buildScan(): RDD[Row] = {
    val partitionCount: Int = eventHubClient.partitionCount

    val fromSeqNos = eventHubClient.translate(ehConf, partitionCount)
    val untilSeqNos = eventHubClient.translate(ehConf, partitionCount, useStart = false)

    require(fromSeqNos.forall(f => f._2 >= 0L),
            "Currently only sequence numbers can be passed in your starting positions.")
    require(untilSeqNos.forall(u => u._2 >= 0L),
            "Currently only sequence numbers can be passed in your ending positions.")

    val offsetRanges = untilSeqNos.keySet.map { p =>
      val fromSeqNo = fromSeqNos
        .getOrElse(p, throw new IllegalStateException(s"$p doesn't have a fromSeqNo"))
      val untilSeqNo = untilSeqNos(p)
      OffsetRange(ehConf.name, p, fromSeqNo, untilSeqNo, None)
    }.toArray
    eventHubClient.close()

    logInfo(
      "GetBatch generating RDD of with offsetRanges: " +
        offsetRanges.sortBy(_.nameAndPartition.toString).mkString(", "))

    val rdd = EventHubsSourceProvider.toInternalRow(
      new EventHubsRDD(sqlContext.sparkContext, ehConf.trimmed, offsetRanges))
    sqlContext.internalCreateDataFrame(rdd, schema, isStreaming = false).rdd
  }
} 
Example 144
Source File: FutureResultSupport.scala    From sangria-slowlog   with Apache License 2.0 5 votes vote down vote up
package sangria.slowlog.util

import sangria.execution.{ErrorWithResolver, QueryAnalysisError}
import sangria.marshalling.ResultMarshallerForType

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scala.concurrent.{Await, ExecutionContext, Future}
import scala.language.postfixOps

trait FutureResultSupport {
  implicit class FutureResult[T](f: Future[T]) {
    def await = Await.result(f, 10 seconds)
    def await(duration: Duration) = Await.result(f, duration)

    def awaitAndRecoverQueryAnalysis(implicit m: ResultMarshallerForType[T]): T = Await.result(recoverQueryAnalysis, 10 seconds)

    def recoverQueryAnalysis(implicit m: ResultMarshallerForType[T]): Future[T] = f.recover {
      case analysisError: QueryAnalysisError => analysisError.resolveError(m.marshaller).asInstanceOf[T]
    }

    def awaitAndRecoverQueryAnalysisScala(implicit ev: T =:= Any) = Await.result(recoverQueryAnalysisScala, 10 seconds)

    def recoverQueryAnalysisScala(implicit ev: T =:= Any) = f.recover {
      case analysisError: ErrorWithResolver => analysisError.resolveError
    }
  }


  object sync {
    val executionContext = ExecutionContext.fromExecutor(new java.util.concurrent.Executor {
      def execute(command: Runnable) = command.run()
    })
  }
} 
Example 145
Source File: DiscoveryClient.scala    From temperature-machine   with Apache License 2.0 5 votes vote down vote up
package bad.robot.temperature.client

import java.net.{DatagramPacket, DatagramSocket, InetAddress, NetworkInterface, Socket => _}

import bad.robot.logging._
import bad.robot.temperature.server.DatagramPacketOps
import bad.robot.temperature.server.DiscoveryServer._
import bad.robot.temperature.server.Socket._

import scala.collection.JavaConverters._
import scala.concurrent.duration._
import scala.language.postfixOps

object DiscoveryClient {

  def discover: InetAddress = {
    val socket = new DatagramSocket()
    socket.setBroadcast(true)

    allBroadcastAddresses.foreach(ping(_, socket))

    Log.info("Awaiting discovery server...")
    socket.await(30 seconds).fold(error => {
      Log.error(error.message)
      retry
    }, sender => {
      sender.payload match {
        case ServerAddressResponseMessage => sender.getAddress
        case _                            => retry
      }
    })
  }

  private def retry = {
    Thread.sleep((30 seconds).toMillis)
    discover
  }

  private def allNetworkInterfaces: List[NetworkInterface] = {
    NetworkInterface.getNetworkInterfaces
      .asScala
      .toList
      .filter(_.isUp)
      .filterNot(_.isLoopback)
  }

  private val broadcastAddresses: (NetworkInterface) => List[InetAddress] = (interface) => {
    interface.getInterfaceAddresses.asScala.toList.map(_.getBroadcast).filter(_ != null)
  }

  def allBroadcastAddresses: List[InetAddress] = {
    InetAddress.getByName(LocalNetworkBroadcastAddress) :: allNetworkInterfaces.flatMap(broadcastAddresses)
  }

  def ping: (InetAddress, DatagramSocket) => Unit = (address, socket) => {
    try {
      val data = ServerAddressRequestMessage.getBytes
      Log.info(s"Sending ping request to $address")
      socket.send(new DatagramPacket(data, data.length, address, ServerPort))
    } catch {
      case e: Throwable => Log.error(s"An error occurred pinging server. ${e.getMessage}")
    }
  }
} 
Example 146
Source File: TemperatureEndpoint.scala    From temperature-machine   with Apache License 2.0 5 votes vote down vote up
package bad.robot.temperature.server

import java.time.Clock

import bad.robot.logging.Log
import bad.robot.temperature.rrd.Host
import bad.robot.temperature.{jsonEncoder, _}
import cats.effect.IO
import io.circe._
import fs2.{Sink, _}
import org.http4s.HttpService
import org.http4s.dsl.io._
import org.http4s.headers.`X-Forwarded-For`
import org.http4s.server.websocket._
import org.http4s.websocket.WebsocketBits._

import scala.concurrent.duration._
import scala.language.postfixOps

object TemperatureEndpoint {

  private implicit val encoder = jsonEncoder[Json]
  private implicit val decoder = jsonDecoder[Measurement]

  implicit def jsonMapEncoder: Encoder[Map[Host, Measurement]] = new Encoder[Map[Host, Measurement]] {
    def apply(measurements: Map[Host, Measurement]): Json = Json.obj(
      ("measurements", Encoder[List[Measurement]].apply(measurements.values.toList))
    )
  }

  private val latestTemperatures = CurrentTemperatures(Clock.systemDefaultZone)
  
  private val sink: Sink[IO, WebSocketFrame] = _.evalMap { (ws: WebSocketFrame) => ws match {
    case Text(fromClient, _) => IO(Log.debug(s"Client sent ws data: $fromClient"))
    case frame               => IO(Log.debug(s"Unknown type sent from ws client: $frame"))
  }}
  
  
  import scala.concurrent.ExecutionContext.Implicits.global // todo replace with explicit one

  def apply(scheduler: Scheduler, sensors: TemperatureReader, allTemperatures: AllTemperatures, connections: Connections) = HttpService[IO] {

    case GET -> Root / "temperatures" / "average" => {
      Ok(encode(latestTemperatures.average))
    }

    case GET -> Root / "temperatures" / "live" / "average" => {
      val source: Stream[IO, WebSocketFrame] = scheduler.awakeEvery[IO](1 second).map { _ =>
        Text(encode(latestTemperatures.average).spaces2ps)
      }
      
      WebSocketBuilder[IO].build(source, sink)
    }

    case GET -> Root / "temperatures" => {
      Ok(encode(latestTemperatures.all))
    }

    case GET -> Root / "temperatures" / "live" => {
      val source: Stream[IO, WebSocketFrame] = scheduler.awakeEvery[IO](1 second).map { _ =>
        Text(encode(latestTemperatures.all).spaces2ps)
      }

      WebSocketBuilder[IO].build(source, sink)
    }
      
    case DELETE -> Root / "temperatures" => {
      latestTemperatures.clear()
      NoContent()
    }

    case request @ PUT -> Root / "temperature" => {
      request.decode[Measurement](measurement => {
        val result = connections.update(measurement.host, request.headers.get(`X-Forwarded-For`))

        result.toHttpResponse(_ => {
          latestTemperatures.updateWith(measurement)
          allTemperatures.put(measurement)
          NoContent()
        })
      })
    }
  }

} 
Example 147
Source File: IOs.scala    From temperature-machine   with Apache License 2.0 5 votes vote down vote up
package bad.robot.temperature.task

import java.util.concurrent.Executors._

import bad.robot.logging._
import bad.robot.temperature.ds18b20.{SensorFile, SensorReader}
import bad.robot.temperature.rrd.RrdFile.MaxSensors
import bad.robot.temperature.rrd.{Host, RrdFile}
import bad.robot.temperature.server.AllTemperatures
import bad.robot.temperature.task.Scheduler.ScheduledExecutorServiceOps
import bad.robot.temperature.{FixedTimeMeasurementWriter, JsonExport, TemperatureWriter, XmlExport}
import cats.effect.IO
import cats.implicits._

import scala.concurrent.duration._
import scala.language.postfixOps

object IOs {

  def init(hosts: List[Host]) = {
    for {
      exists <- RrdFile.exists
      _      <- info(s"Creating RRD for ${hosts.map(_.name).mkString("'", "', '", "'")} (with up to $MaxSensors sensors each)...").unlessA(exists)
      _      <- IO(RrdFile(hosts, 30 seconds).create()).unlessA(exists)
      _      <- info("RRD created Ok").unlessA(exists)
    } yield ()
  }

  def gather(temperatures: AllTemperatures, destination: FixedTimeMeasurementWriter) = {
    val frequency = 30 seconds
    val executor = newSingleThreadScheduledExecutor(TemperatureMachineThreadFactory("rrd-writing-thread"))
    for {
      _     <- info(s"Writing to the RRD every $frequency (sample times may be off by +/- $frequency, maybe a little more)")
      tasks <- IO(executor.schedule(frequency, RecordTemperatures(temperatures, destination, Log)))
    } yield tasks
  }
  
  def record(host: Host, sensors: List[SensorFile], destination: TemperatureWriter) = {
    val executor = newSingleThreadScheduledExecutor(TemperatureMachineThreadFactory("reading-thread"))
    for {
      _     <- info(s"Monitoring sensor file(s) on '${host.name}' ${sensors.mkString("\n\t", "\n\t", "\n")}")
      tasks <- IO(executor.schedule(1 second, RecordTemperature(SensorReader(host, sensors), destination, Log)))
    } yield tasks
  }

  def graphing(implicit hosts: List[Host]) = {
    val executor = newScheduledThreadPool(3, TemperatureMachineThreadFactory("graphing-thread"))
    for {
      _ <- IO(executor.schedule(90 seconds, GenerateGraph(24 hours)))
      _ <- IO(executor.schedule(12 hours, GenerateGraph(7 days)))
      _ <- IO(executor.schedule(24 hours, GenerateGraph(30 days)))
    } yield ()
  }

  def exportXml(implicit hosts: List[Host]) = {
    val executor = newSingleThreadScheduledExecutor(TemperatureMachineThreadFactory("xml-export-thread"))
    IO(executor.schedule(100 seconds, XmlExport(24 hours)))
  }

  def exportJson(implicit hosts: List[Host]) = {
    val executor = newSingleThreadScheduledExecutor(TemperatureMachineThreadFactory("json-export-thread"))
    IO(executor.schedule(100 seconds, JsonExport(24 hours)))
  }

} 
Example 148
Source File: Io.scala    From sbt-flaky   with Apache License 2.0 5 votes vote down vote up
package flaky

import java.io._
import java.net.{HttpURLConnection, URL}
import java.util.Scanner

import sbt.{File, Logger}

import scala.language.postfixOps
import scala.util.{Failure, Success, Try}

object Io {

  def writeToFile(file: File, content: String): Unit = {
    new PrintWriter(file) {
      write(content)
      close()
    }
  }

  def writeToFile(file: File, content: Array[Byte]): Unit = {
    new FileOutputStream(file) {
      write(content)
      close()
    }
  }

  def writeToFile(file: File, is: InputStream): Unit = {
    val array: Array[Byte] = Stream.continually(is.read).takeWhile(_ != -1).map(_.toByte).toArray
    writeToFile(file, array)
  }


  def sendToSlack(webHook: String, jsonMsg: String, log: Logger, backupFile: File): Unit = {
    log.info("Sending report to slack")
    log.debug("Dumping slack msg to file")
    new PrintWriter(backupFile) {
      write(jsonMsg)
      close()
    }

    val send: Try[Unit] = Try {
      val url = new URL(webHook)
      val urlConnection = url.openConnection().asInstanceOf[HttpURLConnection]
      // Indicate that we want to write to the HTTP request body
      urlConnection.setDoOutput(true)
      urlConnection.setRequestMethod("POST")

      // Writing the post data to the HTTP request body
      log.debug(jsonMsg)
      val httpRequestBodyWriter = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream))
      httpRequestBodyWriter.write(jsonMsg)
      httpRequestBodyWriter.close()

      val scanner = new Scanner(urlConnection.getInputStream)
      log.debug("Response from SLACK:")
      while (scanner.hasNextLine) {
        log.debug(s"Response from SLACK: ${scanner.nextLine()}")
      }
      scanner.close()
    }
    send match {
      case Success(_) => log.info("Notification successfully send to Slack")
      case Failure(e) => log.error(s"Can't send message to slack: ${e.getMessage}")
    }

  }
} 
Example 149
Source File: ChangeStream.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream

import java.io.IOException
import java.util.concurrent.TimeoutException

import com.github.shyiko.mysql.binlog.BinaryLogClient
import com.typesafe.config.ConfigFactory
import org.slf4j.LoggerFactory

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.ExecutionContext.Implicits.global

object ChangeStream extends App {
  protected val log = LoggerFactory.getLogger(getClass)
  protected val config = ConfigFactory.load().getConfig("changestream")
  protected val mysqlHost = config.getString("mysql.host")
  protected val mysqlPort = config.getInt("mysql.port")
  protected val overridePosition = System.getenv("OVERRIDE_POSITION") match {
    case position:String if (position != null && position.length > 0) => Some(position) //scalastyle:ignore
    case _ => None
  }
  protected val client = new BinaryLogClient(
    mysqlHost,
    mysqlPort,
    config.getString("mysql.user"),
    config.getString("mysql.password")
  )

  
  client.setKeepAliveInterval(config.getLong("mysql.keepalive"))

  ChangeStreamEventListener.setConfig(config)
  ChangestreamEventDeserializerConfig.setConfig(config)

  ChangeStreamEventListener.startControlServer(config)

  client.registerEventListener(ChangeStreamEventListener)
  client.setEventDeserializer(ChangeStreamEventDeserializer)
  client.registerLifecycleListener(ChangeStreamLifecycleListener)

  getConnected(overridePosition)

  def serverName = s"${mysqlHost}:${mysqlPort}"
  def clientId = client.getServerId
  def isConnected = client.isConnected

  def getConnectedAndWait(startingPosition: Option[String]) = Await.result(getConnected(startingPosition), 60.seconds)
  def disconnectClient = client.disconnect()

  def getConnected(startingPosition: Option[String]) = {
    log.info("Starting changestream...")

    val getPositionFuture = startingPosition match {
      case Some(_) =>
        log.info("Overriding starting binlog position with OVERRIDE_POSITION={}", overridePosition)
        ChangeStreamEventListener.setPosition(startingPosition)
      case _ =>
        ChangeStreamEventListener.getStoredPosition
    }

    getPositionFuture.map { position =>
      setBinlogClientPosition(position)
      getInternalClientConnected
    }
  }

  protected def setBinlogClientPosition(position: Option[String]) = position match {
    case Some(position) =>
      log.info("Setting starting binlog position at {}.", position)
      val Array(fileName, posLong) = position.split(":")
      client.setBinlogFilename(fileName)
      client.setBinlogPosition(java.lang.Long.valueOf(posLong))
    case None =>
      log.info("Starting binlog position in real time")
      client.setBinlogFilename(null) //scalastyle:ignore
      client.setBinlogPosition(4L)
  }

  protected def getInternalClientConnected = {
    while(!client.isConnected) {
      try {
        client.connect(5000)
      }
      catch {
        case e: IOException =>
          log.error("Failed to connect to MySQL to stream the binlog, retrying in 5 seconds...", e)
          Thread.sleep(5000)
        case e: TimeoutException =>
          log.error("Timed out connecting to MySQL to stream the binlog, retrying in 5 seconds...", e)
          Thread.sleep(5000)
        case e: Exception =>
          log.error("Failed to connect, exiting...", e)
          Await.result(ChangeStreamEventListener.shutdownAndExit(1), 60.seconds)
      }
    }
  }
} 
Example 150
Source File: ControlInterface.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.actors

import akka.util.Timeout
import spray.httpx.SprayJsonSupport._
import spray.routing._
import akka.actor._
import ch.qos.logback.classic.Level
import changestream.{ChangeStream, ChangeStreamEventDeserializer, ChangeStreamEventListener}
import org.slf4j.LoggerFactory
import ch.qos.logback.classic.Logger
import spray.http.StatusCodes
import spray.routing.HttpService
import spray.json.DefaultJsonProtocol

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

class ControlInterfaceActor extends Actor with ControlInterface {
  def actorRefFactory = context
  def receive = runRoute(controlRoutes)
}

trait ControlInterface extends HttpService with DefaultJsonProtocol {
  import ControlActor._

  protected val log = LoggerFactory.getLogger(getClass)

  // yes this is backward on purpose
  implicit val memoryInfoFormat = jsonFormat3(MemoryInfo)
  implicit val statusFormat = jsonFormat7(Status)
  implicit def executionContext = actorRefFactory.dispatcher
  implicit val timeout = Timeout(10 seconds)

  def controlRoutes: Route = {
    get {
      pathSingleSlash {
        detach() {
          complete(getStatus)
        }
      } ~
      path("status") {
        detach() {
          complete(getStatus)
        }
      } ~
      path("logs") {
        parameter('level) { level => setLogLevel(level) }
      }
    }
  }

  def setLogLevel(level: String) = {
    level.toLowerCase match {
      case "all" | "trace" | "debug" | "info" | "warn" | "error" | "off" =>
        val rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME).asInstanceOf[Logger]
        rootLogger.setLevel(Level.toLevel(level))
        complete("ChangeStream logging level has been set to {}.", level)
      case _ =>
        log.error("ControlActor received invalid log level {}.", level)
        complete(StatusCodes.BadRequest, s"Invalid log level: ${level}")
    }
  }

  def getStatus = {
    val storedPosition = Await.result(ChangeStreamEventListener.getStoredPosition, 60 seconds)

    Status(
      server = ChangeStream.serverName,
      clientId = ChangeStream.clientId,
      isConnected = ChangeStream.isConnected,
      binlogClientPosition = ChangeStreamEventListener.getCurrentPosition,
      lastStoredPosition = storedPosition.getOrElse(""),
      binlogClientSequenceNumber = ChangeStreamEventDeserializer.getCurrentSequenceNumber,
      memoryInfo = MemoryInfo(
        Runtime.getRuntime().totalMemory(),
        Runtime.getRuntime().maxMemory(),
        Runtime.getRuntime().freeMemory()
      )
    )
  }
}

object ControlActor {
  case class Status(
                     server: String,
                     clientId: Long,
                     isConnected: Boolean,
                     binlogClientPosition: String,
                     lastStoredPosition: String,
                     binlogClientSequenceNumber: Long,
                     memoryInfo: MemoryInfo
                   )

  case class MemoryInfo(heapSize: Long, maxHeap: Long, freeHeap: Long)
} 
Example 151
Source File: BenchBase.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.helpers

import akka.actor.{ActorRefFactory, ActorSystem, Props}
import akka.testkit.{TestActorRef, TestProbe}
import com.github.mauricio.async.db.Configuration
import com.github.mauricio.async.db.mysql.MySQLConnection
import com.typesafe.config.ConfigFactory
import org.scalameter.api._
import org.scalameter.picklers.Implicits._

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.concurrent.Await

class BenchBase extends Bench[Double] {
  lazy val executor = LocalExecutor(
    new Executor.Warmer.Default,
    Aggregator.min[Double],
    measurer)
  lazy val measurer = new Measurer.Default
  lazy val reporter = new LoggingReporter[Double]
  lazy val persistor = Persistor.None

  implicit val system = ActorSystem("changestream", ConfigFactory.load("test.conf"))
  implicit val ec = system.dispatcher
  val probe = TestProbe()
  val maker = (_: ActorRefFactory) => probe.ref

  val testConfig = ConfigFactory.load("test.conf")

  def getProbedActorOf[K](klass: Predef.Class[K], configPath: String = "changestream") =
    TestActorRef(Props(klass, maker, testConfig.getConfig(configPath)))

  protected val config = testConfig.getConfig("changestream.mysql")
  protected val mysqlConfig = new Configuration(
    config.getString("user"),
    config.getString("host"),
    config.getInt("port"),
    Some(config.getString("password"))
  )

  protected val connectionTimeout = config.getLong("timeout")
  protected val connection = new MySQLConnection(mysqlConfig)
  Await.result(connection.connect, connectionTimeout milliseconds)
  val result = connection.sendQuery("drop database if exists changestream_test")
    .flatMap(_ => connection.sendQuery("create database changestream_test"))
    .flatMap(_ => connection.sendQuery(s"""
                                          | CREATE TABLE changestream_test.users (
                                          |   `id` int(11) NOT NULL AUTO_INCREMENT,
                                          |   `username` varchar(32) DEFAULT NULL,
                                          |   `password` varchar(32) DEFAULT NULL,
                                          |   `login_count` int(11) NOT NULL DEFAULT '0',
                                          |   `bio` text DEFAULT NULL,
                                          |   PRIMARY KEY (`id`)
                                          | ) ENGINE=InnoDB
        """.stripMargin))
  Await.result(result, (connectionTimeout * 3) milliseconds)
} 
Example 152
Source File: Database.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.helpers

import com.github.mauricio.async.db.Configuration
import com.github.mauricio.async.db.mysql.MySQLConnection
import org.scalatest.BeforeAndAfterAll

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

trait Database extends Base with Config with BeforeAndAfterAll {
  val INSERT = s"""INSERT INTO changestream_test.users VALUES (
                  | NULL, "peter", "hello", 10, "I Am Peter", 0,
                  | 0.18289882, 0.23351681013224323546495497794239781796932220458984375, NOW(), CURDATE(), CURTIME(), NOW(), null)
        """.stripMargin.trim
  val INSERT_MULTI = s"""${INSERT},
       | (NULL, "multiguy", "stupid", 1000000, "Leeloo Dallas Multiguy", 0, 0.18289882,
       | 0.23351681013224323546495497794239781796932220458984375, NOW(), CURDATE(), CURTIME(), NOW(), null)""".stripMargin
  val UPDATE = s"""UPDATE changestream_test.users set username = "username2", password = "password2", login_count = login_count + 1, bio = "bio2""""
  val UPDATE_ALL = "UPDATE changestream_test.users set login_count = login_count + 1"
  val DELETE = "DELETE from changestream_test.users LIMIT 1"
  val DELETE_ALL = "DELETE from changestream_test.users"

  protected val config = testConfig.getConfig("changestream.mysql")
  protected val mysqlConfig = new Configuration(
    config.getString("user"),
    config.getString("host"),
    config.getInt("port"),
    Some(config.getString("password"))
  )
  protected val connectionTimeout = config.getLong("timeout")
  protected val connection = new MySQLConnection(mysqlConfig)

  def queryAndWait(sql: String): Unit = Await.result(connection.sendQuery(sql), connectionTimeout milliseconds)

  override def beforeAll(): Unit = {
    try {
      Await.result(connection.connect, connectionTimeout milliseconds)
    } catch {
      case e: Exception =>
        println(s"Could not connect to MySQL server for Metadata: ${e.getMessage}\n${e.getStackTrace.mkString("\n")}")
    }
  }

  override def afterAll(): Unit = {
    Await.result(connection.disconnect, connectionTimeout milliseconds)
  }

  before {
    try {
      val result = connection.sendQuery("drop database if exists changestream_test")
        .flatMap(_ => connection.sendQuery("create database changestream_test"))
        .flatMap(_ => connection.sendQuery(s"""
                                              | CREATE TABLE changestream_test.users (
                                              |   `id` int(11) NOT NULL AUTO_INCREMENT,
                                              |   `username` varchar(32) DEFAULT NULL,
                                              |   `password` varchar(32) DEFAULT NULL,
                                              |   `login_count` int(11) NOT NULL DEFAULT '0',
                                              |   `bio` text DEFAULT NULL,
                                              |   `two_bit_field` bit DEFAULT NULL,
                                              |   `float_field` float DEFAULT NULL,
                                              |   `big_decimal_field` decimal DEFAULT NULL,
                                              |   `java_util_date` datetime DEFAULT NULL,
                                              |   `java_sql_date` date DEFAULT NULL,
                                              |   `java_sql_time` time DEFAULT NULL,
                                              |   `java_sql_timestamp` timestamp DEFAULT NOW(),
                                              |   `blob_that_should_be_ignored` blob DEFAULT NULL,
                                              |   PRIMARY KEY (`id`)
                                              | ) ENGINE=InnoDB;
          """.stripMargin))
      Await.result(result, (connectionTimeout * 3) milliseconds)
    } catch {
      case e: Exception =>
        println(s"Could not initialize database for tests ${e.getMessage}\n${e.getStackTrace.mkString("\n")}")
    }
  }

  after {
    try {
      val result = connection.sendQuery("drop database if exists changestream_test")
      Await.result(result, connectionTimeout milliseconds)
    } catch {
      case e: Exception =>
        println(s"Could not tear down database for tests ${e.getMessage}\n${e.getStackTrace.mkString("\n")}")
    }
  }
} 
Example 153
Source File: StdoutActorSpec.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.actors

import akka.actor.{ActorRefFactory, Props}
import akka.testkit.{TestActorRef, TestProbe}
import changestream.actors.PositionSaver.EmitterResult
import changestream.helpers.{Config, Emitter}

import scala.concurrent.duration._
import scala.language.postfixOps

class StdoutActorSpec extends Emitter with Config {
  val probe = TestProbe()
  val maker = (_: ActorRefFactory) => probe.ref
  val actorRef = TestActorRef(Props(classOf[StdoutActor], maker, awsConfig))

  "When StdoutActor receives a single valid message" should {
    "Print to stdout and forward result" in {
      actorRef ! message

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be(message.nextPosition)
    }
  }
} 
Example 154
Source File: SqsActorSpec.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.actors

import akka.actor.{ActorRefFactory, Props}
import akka.testkit.{TestActorRef, TestProbe}
import changestream.actors.PositionSaver.EmitterResult
import changestream.actors.SqsActor.BatchResult
import changestream.helpers.{Config, Emitter}

import scala.concurrent.duration._
import scala.language.postfixOps

class SqsActorSpec extends Emitter with Config {
  val probe = TestProbe()
  val maker = (_: ActorRefFactory) => probe.ref
  val actorRef = TestActorRef(Props(classOf[SqsActor], maker, awsConfig))

  "When SqsActor receives a single valid message" should {
    "Add the message to the SQS queue in a batch of one" in {
      actorRef ! message

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be(message.nextPosition)
      result.meta.get shouldBe a[BatchResult]
      result.meta.get.asInstanceOf[BatchResult].failed shouldBe empty
      result.meta.get.asInstanceOf[BatchResult].queued should have length 1
    }
  }

  "When SqsActor receives multiple valid messages in quick succession" should {
    "Add the messages to the SQS queue in a batch of multiple" in {
      actorRef ! message
      actorRef ! message.copy(nextPosition = "FOOBAZ")

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be("FOOBAZ")
      result.meta.get shouldBe a[BatchResult]
      result.meta.get.asInstanceOf[BatchResult].failed shouldBe empty
      result.meta.get.asInstanceOf[BatchResult].queued should have length 2
    }
  }

  "When SqsActor receives multiple valid messages in slow succession" should {
    "Add the messages to the SQS queue in multiple batches of one message" in {
      actorRef ! message
      Thread.sleep(500)
      actorRef ! message.copy(nextPosition = "FOOBAZ")

      val result1 = probe.expectMsgType[EmitterResult](5000 milliseconds)
      val result2 = probe.expectMsgType[EmitterResult](5000 milliseconds)

      result1.position should be(message.nextPosition)
      result1.meta.get shouldBe a[BatchResult]
      result1.meta.get.asInstanceOf[BatchResult].failed shouldBe empty
      result1.meta.get.asInstanceOf[BatchResult].queued should have length 1

      result2.position should be("FOOBAZ")
      result2.meta.get shouldBe a[BatchResult]
      result2.meta.get.asInstanceOf[BatchResult].failed shouldBe empty
      result2.meta.get.asInstanceOf[BatchResult].queued should have length 1
    }
  }
} 
Example 155
Source File: SnsActorSpec.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.actors

import akka.actor.{ActorRefFactory, Props}
import akka.testkit.{TestActorRef, TestProbe}
import changestream.actors.PositionSaver.EmitterResult
import changestream.helpers.{Config, Emitter}
import com.typesafe.config.ConfigFactory

import scala.concurrent.duration._
import scala.language.postfixOps

class SnsActorSpec extends Emitter with Config {
  val probe = TestProbe()
  val maker = (_: ActorRefFactory) => probe.ref

  val actorRef = TestActorRef(Props(classOf[SnsActor], maker, awsConfig))

  val configWithInterpolation = ConfigFactory.
    parseString("aws.sns.topic = \"__integration_tests-{database}-{tableName}\"").
    withFallback(awsConfig)
  val snsWithInterpolation = TestActorRef(Props(classOf[SnsActor], maker, configWithInterpolation))


  "When SnsActor receives a single valid message" should {
    "Immediately publish the message to SNS" in {
      actorRef ! message

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be(message.nextPosition)
    }
  }

  "When SnsActor receives a message" should {
    "Should correctly publish the message when the topic contains interpolated database and/or tableName" in {
      snsWithInterpolation ! message

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be(message.nextPosition)
    }
  }
} 
Example 156
Source File: S3ActorSpec.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream.actors

import akka.actor.{ActorRefFactory, Props}
import akka.testkit.{TestActorRef, TestProbe}
import changestream.actors.PositionSaver.EmitterResult
import changestream.helpers.{Config, Emitter}

import scala.concurrent.duration._
import com.typesafe.config.ConfigFactory

import scala.language.postfixOps

class S3ActorSpec extends Emitter with Config {
  val probe = TestProbe()
  val maker = (_: ActorRefFactory) => probe.ref
  val s3Config = ConfigFactory.
    parseString("aws.s3.batch-size = 2, aws.s3.flush-timeout = 1000").
    withFallback(awsConfig)
  val actorRef = TestActorRef(Props(classOf[S3Actor], maker, s3Config))

  "When S3Actor receives a single valid message" should {
    "Add the message to S3 in a batch of one" in {
      actorRef ! message

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be(message.nextPosition)
      result.meta.get.asInstanceOf[String] should endWith ("-1.json")
    }
  }

  "When S3Actor receives multiple valid messages in quick succession" should {
    "Add the messages to S3 in a batch of many" in {
      actorRef ! message
      actorRef ! message.copy(nextPosition = "FOOBAZ")

      val result = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result.position should be("FOOBAZ")
      result.meta.get.asInstanceOf[String] should endWith ("-2.json")
    }
  }

  "When S3Actor receives multiple valid messages in slow succession" should {
    "Add the messages to the S3 queue in multiple batches of one message" in {
      actorRef ! message
      Thread.sleep(2000)
      actorRef ! message.copy(nextPosition = "FOOBAZ")

      val result1 = probe.expectMsgType[EmitterResult](5000 milliseconds)
      val result2 = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result1.position should be(message.nextPosition)
      result1.meta.get.asInstanceOf[String] should endWith ("-1.json")
      result2.position should be("FOOBAZ")
      result2.meta.get.asInstanceOf[String] should endWith ("-1.json")
    }
  }

  "When S3Actor receives multiple valid messages that exceed the flush size" should {
    "Add the messages to the S3 queue in multiple batches" in {
      actorRef ! message
      actorRef ! message.copy(nextPosition = "FOOBAZ")
      actorRef ! message.copy(nextPosition = "BIPBOP")

      val result1 = probe.expectMsgType[EmitterResult](5000 milliseconds)
      val result2 = probe.expectMsgType[EmitterResult](5000 milliseconds)
      result1.position should be("FOOBAZ")
      result1.meta.get.asInstanceOf[String] should endWith ("-2.json")
      result2.position should be("BIPBOP")
      result2.meta.get.asInstanceOf[String] should endWith ("-1.json")
    }
  }
} 
Example 157
Source File: RowsQueryDeserializerSpec.scala    From changestream   with MIT License 5 votes vote down vote up
package changestream

import changestream.helpers.{Base, Config}
import com.github.shyiko.mysql.binlog.io.ByteArrayInputStream
import com.typesafe.config.ConfigFactory

import scala.language.postfixOps

class RowsQueryDeserializerSpec extends Base with Config {
  val sqlString = "select 'foo';"
  val bytes = Array[Byte](1) ++ sqlString.getBytes
  var inputStream = new ByteArrayInputStream(bytes)

  before {
    inputStream = new ByteArrayInputStream(bytes)
    inputStream.enterBlock(bytes.length)
  }

  "When not configured to truncate the SQL" should {
    "Capture all of the SQL" in {
      RowsQueryDeserializer.deserialize(inputStream)

      ChangeStreamEventDeserializer.lastQuery should be(Some(sqlString))
      inputStream.available() should be (0)
    }
  }

  "When configured to truncate the SQL at a given length" should {
    "Capture all of the SQL when the SQL is shorter or equal to the limit" in {
      val bigLimitConfig = ConfigFactory.parseString("changestream.sql-character-limit = 1000").withFallback(testConfig).getConfig("changestream")
      ChangestreamEventDeserializerConfig.setConfig(bigLimitConfig)
      RowsQueryDeserializer.deserialize(inputStream)

      ChangeStreamEventDeserializer.lastQuery should be(Some(sqlString))
      inputStream.available() should be (0)
    }

    "When the SQL is longer than the limit" should {
      "Only capture <limit> characters of SQL" in {
        val smallLimitConfig = ConfigFactory.parseString("changestream.sql-character-limit = 5").withFallback(testConfig).getConfig("changestream")
        ChangestreamEventDeserializerConfig.setConfig(smallLimitConfig)
        RowsQueryDeserializer.deserialize(inputStream)

        ChangeStreamEventDeserializer.lastQuery should be(Some(sqlString.substring(0, 5)))
        inputStream.available() should be (0)
      }
    }
  }
} 
Example 158
Source File: EmTest.scala    From Scala-for-Machine-Learning-Second-Edition   with MIT License 5 votes vote down vote up
package org.scalaml.unsupervised.em

import org.scalaml.{Logging, Resource}
import org.scalaml.Predef.{DblMatrix, DblVec}
import org.scalaml.filtering.movaverage.SimpleMovingAverage
import org.scalaml.workflow.data.DataSource
import org.scalatest.{FlatSpec, Matchers}
import org.scalaml.unsupervised.env.TestEnv

import scala.util.Try


final class EMTest extends FlatSpec with Matchers with TestEnv with Logging with Resource {
  import scala.language.postfixOps

  protected[this]  val name: String = "Expectation-Maximization"
  final val rawPath = "unsupervised/em"

  it should s"$name evaluation with K=2, sampling rate=40" in {
    show(s"$name evaluation with K=2, sampling rate=40")
    execute(Array[String]("2", "40"))
  }

  it should s"$name evaluation with K=3, sampling rate=25" in {
    show(s"$name evaluation with K=3, sampling rate=25")
    execute(Array[String]("3", "25"))
  }

  it should s"$name evaluation with K=4, sampling rate=15" in {
    show(s"$name evaluation with K=4, sampling rate=15")
    execute(Array[String]("4", "15"))
  }

  it should s"$name evaluation with K=5, sampling rate=10" in {
    show(s"$name evaluation with K=5, sampling rate=10")
    execute(Array[String]("5", "10"))
  }

  private def execute(args: Array[String]): Unit = {
    require(args.length > 0, s"$name Cannot be evaluated with undefined arguments")

    val K = args(0).toInt
    val samplingRate = args(1).toInt
    val period = 8
    val smAve = SimpleMovingAverage[Double](period)
    val symbols = symbolFiles(getPath(rawPath).get)

    // extracts the observations from a set of csv files.
    assert(symbols.size > 0, s"$name The symbol files are undefined")

    // Retrieve the partial function for the simple moving average
    val pfnSmAve = smAve |>

    // Walk through the stock ticker symbols and load the historical data from each
    // ticker symbol using the data source extractor
    val obs = symbols.map(sym => {

      (for {
        path <- getPath(s"$rawPath/")
        src <- DataSource(sym, path, true, 1)

      // Extract data from the files containing historical financial data
        xs <- src |> (extractor)

        // Apply the simple moving average of the first variable
        if pfnSmAve.isDefinedAt(xs.head.toVector)
        values <- pfnSmAve(xs.head.toVector)

        // Generate the features by filtering using a sampling rate
        y <- filter(period, values, samplingRate)
      } yield y).getOrElse(Array.empty[Double])
    })
    em(K, obs)
  }

  private def filter(period: Int, values: DblVec, samplingRate: Int) = Try {
    values.view
        .indices
        .drop(period + 1).toVector
        .filter(_ % samplingRate == 0)
        .map(values(_)).toArray
  }

  private def profile(xv: Vector[Array[Double]]) {
    import org.scalaml.plots.Legend

    val legend = Legend("Density", "EM convergence K=6", "Iterations", "Density")
    val em = MultivariateEM[Double](3, xv)
    em.display("Density", legend)
  }

  private def em(K: Int, obs: DblMatrix): Int = {
    val em = MultivariateEM[Double](K, obs.toVector)
    show(s"${em.toString}")
  }
}

// -------------------------------------  EOF ------------------------------- 
Example 159
Source File: PCATest.scala    From Scala-for-Machine-Learning-Second-Edition   with MIT License 5 votes vote down vote up
package org.scalaml.unsupervised.pca

import org.scalaml.Logging
import org.scalaml.unsupervised.env.TestEnv
import org.scalaml.util.Assertable
import org.scalatest.{FlatSpec, Matchers}


final class PCATest  extends FlatSpec with Matchers with Logging with Assertable with TestEnv {
  protected[this] val name = "Principal Components Analysis"

  // Symbol, PE/PS/PB/ROE/OM
  final private val data = Vector[(String, Array[Double])](
    ("QCOM", Array[Double](20.8, 5.32, 3.65, 17.65, 29.2)),
    ("IBM", Array[Double](13, 1.22, 12.2, 88.1, 19.9)),
    ("BAC", Array[Double](21, 2.0, 0.78, 4.12, 24.2)),
    ("AA", Array[Double](21.7, 0.7, 1.4, -16.3, 5.1)),
    ("ADM", Array[Double](22.3, 0.33, 1.47, 6.9, 2.4)),
    ("AET", Array[Double](12.7, 0.54, 1.8, 15.6, 7.6)),
    ("AFAM", Array[Double](24.8, 0.57, 0.94, 4.0, 4.1)),
    ("AHS", Array[Double](18.6, 0.57, 2.6, 16.4, 6.5)),
    ("UNH", Array[Double](13.8, 0.63, 2.4, 17.1, 7.8)),
    ("THC", Array[Double](17.4, 0.38, 4.9, 7.9, 7.1)),
    ("BK", Array[Double](19.4, 2.5, 1.0, 5.8, 27.4)),
    ("JPM", Array[Double](13.7, 2.2, 1.0, 7.8, 38.1)),
    ("WFC", Array[Double](12.2, 3.1, 1.5, 13.5, 43.7)),
    ("HCA", Array[Double](14.6, 0.63, 2.5, 17.4, 9.7)),
    ("FBP", Array[Double](12.8, 2.2, 0.91, -12.1, 29.7)),
    ("USB", Array[Double](13.4, 4.2, 2.0, 13.7, 43.4)),
    ("FFBC", Array[Double](20.4, 3.3, 1.4, 7.1, 26.7)),
    ("CAH", Array[Double](16.4, 0.3, 3.5, 5.8, 2.1)),
    ("DVA", Array[Double](23.5, 1.25, 3.3, 15.1, 15.7)),
    ("FHN", Array[Double](13.9, 2.35, 1.2, 1.6, 9.3)),
    ("FB", Array[Double](96.7, 19.4, 9.9, 11.7, 37.1)),
    ("TWTR", Array[Double](208, 37.9, 8.9, -34, -96)),
    ("YELP", Array[Double](231, 21.1, 9.6, -3.1, -4.7)),
    ("ANGI", Array[Double](67.3, 3.4, 7.9, -16.7, -11.3)),
    ("LNKD", Array[Double](771, 13.6, 7.9, 1.5, 3.1)),
    ("TSLA", Array[Double](101.2, 12.9, 36.1, -18.7, -3.8)),
    ("CYH", Array[Double](21.6, 0.28, 1.1, 6.6, 7.9)),
    ("PCLN", Array[Double](37.6, 9.5, 9.2, 34.8, 35.9)),
    ("CVS", Array[Double](19.7, 0.68, 2.3, 12.2, 6.3)),
    ("FISV", Array[Double](23.7, 3.0, 4.1, 18.6, 22.7)),
    ("DOW", Array[Double](13.3, 1.0, 2.5, 19.3, 8.0)),
    ("K", Array[Double](13.4, 1.6, 6.7, 59.8, 21.3))
  )

  it should s"$name evaluation" in {
    import scala.language.postfixOps
    show(s"$name evaluation")

    val dim = data.head._2.size
    val pca = new PCA[Double](data.map(_._2.take(dim)))
    show(s"$name model: ${pca.toString}")
  }
}

// --------------------------   EOF ------------------------------------------------------ 
Example 160
Source File: BakerySpec.scala    From Learn-Scala-Programming   with MIT License 5 votes vote down vote up
package ch12

import akka.actor.testkit.typed.Effect.{NoEffects, Spawned}
import akka.actor.testkit.typed.scaladsl._
import akka.actor.typed.DispatcherSelector
import ch12.Baker.BakeCookies
import ch12.Bakery.{Groceries, RawCookies}
import ch12.Boy.GoShopping
import ch12.Chef.Mix
import ch12.Oven.Extract
import ch12.Shop.{SellByList, ShoppingList}
import com.typesafe.config.Config
import org.scalatest._

import scala.concurrent.duration._
import scala.language.postfixOps

class BakerySpec extends WordSpec with ActorTestKit with BeforeAndAfterAll {

  override def afterAll: Unit = shutdownTestKit()

  "The boy should" should {
    "forward given ShoppingList to the seller" in {
      val testKit = BehaviorTestKit(Boy.goShopping)
      val seller = TestInbox[Shop.SellByList]()
      val manager = TestInbox[Manager.Command]()
      val list = ShoppingList(1, 1, 1, 1)
      testKit.run(GoShopping(list, seller.ref, manager.ref))
      testKit.expectEffect(NoEffects)
      seller.expectMessage(SellByList(list, manager.ref))
      assert(!testKit.isAlive)
    }
  }
  "The chef should" should {
    "create and destroy mixers as required" in {
      // the mixerFactory is needed because behaviour equals method is not implemented correctly
      // currently behaviours compared by reference
      // therefore we need to have the same behaviour instance for the test to pass
      val mixerFactory = Mixer.mix(0 seconds)
      val chef = BehaviorTestKit(Chef.idle(mixerFactory))
      val manager = TestInbox[Manager.Command]()
      val message = Mix(Groceries(1, 1, 1, 1), manager.ref)
      chef.run(message)
      chef.expectEffect(
        Spawned(mixerFactory,
                "Mixer_1",
                DispatcherSelector.fromConfig("mixers-dispatcher")))
      val expectedByMixer = Mixer.Mix(Groceries(1, 1, 1, 1), chef.ref)
      chef.childInbox("Mixer_1").expectMessage(expectedByMixer)
    }
  }

  override def config: Config = ManualTime.config
  val manualTime: ManualTime = ManualTime()

  "The baker should" should {
    "bake cookies in batches" in {
      val oven = TestProbe[Oven.Command]()
      val manager = TestProbe[Manager.Command]()
      val baker = spawn(Baker.idle(oven.ref))
      baker ! BakeCookies(RawCookies(1), manager.ref)
      oven.expectMessage(Oven.Put(1, baker))
      manualTime.expectNoMessageFor(Baker.DefaultBakingTime - 1.millisecond,
                                    oven)
      manualTime.timePasses(Baker.DefaultBakingTime)
      oven.expectMessage(Extract(baker))
    }
  }
} 
Example 161
Source File: ShopSpec.scala    From Learn-Scala-Programming   with MIT License 5 votes vote down vote up
package ch12

import akka.actor.testkit.typed.Effect.NoEffects
import akka.actor.testkit.typed.scaladsl.{BehaviorTestKit, TestInbox}
import akka.actor.typed.receptionist.Receptionist
import akka.actor.typed.receptionist.Receptionist.Register
import ch12.Bakery.Groceries
import ch12.Manager.ReceiveGroceries
import ch12.Shop.{SellByList, ShoppingList}
import org.scalatest.WordSpec

import scala.language.postfixOps

class ShopSpec extends WordSpec {

  "A seller in the shop" should {
    "return groceries if given a shopping list" in {
      val receptionist = TestInbox[Receptionist.Command]()
      val mockReceptionist: Shop.ReceptionistFactory = _ => receptionist.ref
      val seller = BehaviorTestKit(Shop.seller(mockReceptionist))
      val inbox = TestInbox[Manager.Command]()
      val message = ShoppingList(1,1,1,1)
      seller.run(SellByList(message, inbox.ref))
      inbox.expectMessage(ReceiveGroceries(Groceries(1, 1, 1, 1)))
      receptionist.expectMessage(Register(Shop.SellerKey, seller.ref))
      seller.expectEffect(NoEffects)
    }
  }
} 
Example 162
Source File: BakerySpec.scala    From Learn-Scala-Programming   with MIT License 5 votes vote down vote up
package ch11

import akka.actor.{ActorSystem, Props}
import akka.testkit.{ImplicitSender, TestKit, TestProbe}
import ch11.Cook.RawCookies
import ch11.Manager.ShoppingList
import ch11.Oven.Cookies
import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike}

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Random

class BakerySpec(_system: ActorSystem)
    extends TestKit(_system)
    with Matchers
    with WordSpecLike
    with BeforeAndAfterAll
    with ImplicitSender {

  def this() = this(ActorSystem("BakerySpec"))

  override def afterAll: Unit = shutdown(system)

  "The boy should" should {
    val boyProps = Boy.props(system.actorSelection(testActor.path))
    val boy = system.actorOf(boyProps)

    "forward given ShoppingList to the seller" in {
      val list = ShoppingList(0, 0, 0, 0)
      boy ! list
      within(3 millis, 20 millis) {
        expectMsg(list)
        lastSender shouldBe testActor
      }
    }
    "ignore other message types" in {
      boy ! 'GoHome
      expectNoMessage(500 millis)
    }
  }
  "The baker should" should {
    val parent = TestProbe()
    val baker = parent.childActorOf(Props(classOf[Baker], 0 millis))
    "bake cookies in batches" in {
      val count = Random.nextInt(100)
      baker ! RawCookies(Oven.size * count)
      parent.expectMsgAllOf(List.fill(count)(Cookies(Oven.size)):_*)
    }
  }
} 
Example 163
Source File: StoreSpec.scala    From Learn-Scala-Programming   with MIT License 5 votes vote down vote up
package ch11

import akka.testkit.TestKit
import ch11.Manager.ShoppingList
import ch11.Mixer.Groceries
import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike}

import scala.language.postfixOps

class StoreSpec(store: Store) extends TestKit(store.store)
    with Matchers with WordSpecLike with BeforeAndAfterAll {

  def this() = this(new Store {})

  override def afterAll: Unit = shutdown(system)

  "A seller in store" should {
    "do nothing for all unexpected message types" in {
      store.seller ! 'UnexpectedMessage
      expectNoMessage()
    }
    "return groceries if given a shopping list" in {
      store.seller.tell(ShoppingList(1, 1, 1, 1), testActor)
      expectMsg(Groceries(1,1,1,1))
    }
  }
} 
Example 164
Source File: RowToVectorBuilder.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo

import java.nio.ByteBuffer
import scala.language.existentials
import scala.language.postfixOps
import scalaxy.loops._

import BuilderEncoder.{EncodingHint, AutoDetect}

case class VectorInfo(name: String, dataType: Class[_])

// To help matching against the ClassTag in the VectorBuilder
private object Classes {
  val Boolean = classOf[Boolean]
  val Byte = java.lang.Byte.TYPE
  val Short = java.lang.Short.TYPE
  val Int = java.lang.Integer.TYPE
  val Long = java.lang.Long.TYPE
  val Float = java.lang.Float.TYPE
  val Double = java.lang.Double.TYPE
  val String = classOf[String]
  val DateTime = classOf[org.joda.time.DateTime]
  val SqlTimestamp = classOf[java.sql.Timestamp]
  val UTF8 = classOf[ZeroCopyUTF8String]
}

object RowToVectorBuilder {
  
  def convertToBytes(hint: EncodingHint = AutoDetect): Map[String, ByteBuffer] = {
    val chunks = builders.map(_.toFiloBuffer(hint))
    schema.zip(chunks).map { case (VectorInfo(colName, _), bytes) => (colName, bytes) }.toMap
  }

  private def unsupportedInput(typ: Any) =
    throw new RuntimeException("Unsupported input type " + typ)
} 
Example 165
Source File: DictEncodingWrappers.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo.codecs

import scala.language.postfixOps
import scalaxy.loops._

import org.velvia.filo.{FiloVector, FastBufferReader}
import org.velvia.filo.vector._

object DictStringWrapper {
  // Used to represent no string value or NA.  Better than using null.
  val NoString = ""
}

abstract class DictStringWrapper(val dsv: DictStringVector) extends FiloVector[String] {
  import DictStringWrapper._

  private val _len = dsv.len
  val reader = FastBufferReader(dsv.codesAsByteBuffer())

  // To be mixed in depending on type of code vector
  def getCode(index: Int): Int

  // Cache the Strings so we only pay cost of deserializing each unique string once
  val strCache = Array.fill(dsv.dictionaryLength())(NoString)

  final private def dictString(code: Int): String = {
    val cacheValue = strCache(code)
    if (cacheValue == NoString) {
      val strFromDict = dsv.dictionary(code)
      strCache(code) = strFromDict
      strFromDict
    } else {
      cacheValue
    }
  }

  final def isAvailable(index: Int): Boolean = getCode(index) != 0

  final def apply(index: Int): String = dictString(getCode(index))

  final def length: Int = _len

  final def foreach[B](fn: String => B): Unit = {
    for { i <- 0 until length optimized } {
      val code = getCode(i)
      if (code != 0) fn(dictString(code))
    }
  }
} 
Example 166
Source File: SimpleWrappers.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo.codecs

import scala.language.postfixOps
import scalaxy.loops._

import org.velvia.filo.{FiloVector, NaMaskAvailable, FastBufferReader}
import org.velvia.filo.vector._


class EmptyFiloVector[A](len: Int) extends FiloVector[A] {
  final def isAvailable(index: Int): Boolean = false
  final def foreach[B](fn: A => B): Unit = {}
  final def apply(index: Int): A =
    if (index < len) { null.asInstanceOf[A] }
    else             { throw new ArrayIndexOutOfBoundsException }
  final def length: Int = len
}

abstract class SimplePrimitiveWrapper[@specialized A](spv: SimplePrimitiveVector)
extends NaMaskAvailable[A](spv.naMask) {
  val info = spv.info
  val _len = spv.len
  val reader = FastBufferReader(spv.dataAsByteBuffer())

  final def length: Int = _len

  final def foreach[B](fn: A => B): Unit = {
    if (isEmptyMask) {   // every value available!
      for { i <- 0 until length optimized } { fn(apply(i)) }
    } else {
      for { i <- 0 until length optimized } { if (isAvailable(i)) fn(apply(i)) }
    }
  }
}

// TODO: ditch naMask
class SimpleStringWrapper(ssv: SimpleStringVector)
extends NaMaskAvailable[String](ssv.naMask) {
  val _len = ssv.dataLength

  final def length: Int = _len

  final def apply(i: Int): String = ssv.data(i)

  final def foreach[B](fn: String => B): Unit = {
    for { i <- 0 until length optimized } { if (isAvailable(i)) fn(apply(i)) }
  }
} 
Example 167
Source File: DiffWrappers.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo.codecs

import org.joda.time.{DateTime, DateTimeZone}
import scala.language.postfixOps
import scalaxy.loops._

import org.velvia.filo._
import org.velvia.filo.vector._

abstract class DiffPrimitiveWrapper[A: TypedReaderProvider, P](dpv: DiffPrimitiveVector)
extends NaMaskAvailable[P](dpv.naMask) {
  val info = dpv.info
  val _len = dpv.len
  val dataReader = TypedBufferReader[A](FastBufferReader(dpv.dataAsByteBuffer()),
                                        info.nbits, info.signed)
  val baseReader = FastBufferReader(dpv.base)

  final def length: Int = _len

  final def foreach[B](fn: P => B): Unit = {
    if (isEmptyMask) {   // every value available!
      for { i <- 0 until length optimized } { fn(apply(i)) }
    } else {
      for { i <- 0 until length optimized } { if (isAvailable(i)) fn(apply(i)) }
    }
  }
}


class DiffDateTimeWithTZWrapper(ddtv: DiffDateTimeVector) extends DiffDateTimeWrapperBase(ddtv) {
  import TypedBufferReader._

  val tzBase: Byte = ddtv.vars.baseTz
  val tzReader = TypedBufferReader[Int](FastBufferReader(ddtv.tzAsByteBuffer),
                                        ddtv.tzInfo.nbits, ddtv.tzInfo.signed)

  final def apply(i: Int): DateTime = {
    val zone = DateTimeZone.forOffsetMillis((tzBase + tzReader.read(i)) * VectorBuilder.FifteenMinMillis)
    new DateTime(millisBase + millisReader.read(i), zone)
  }
} 
Example 168
Source File: DictEncodingEncoders.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo.codecs

import com.google.flatbuffers.FlatBufferBuilder
import java.nio.ByteBuffer
import java.util.HashMap
import scala.collection.mutable.{ArrayBuffer, BitSet}
import scala.language.postfixOps
import scalaxy.loops._

import org.velvia.filo._
import org.velvia.filo.vector._


object DictEncodingEncoders extends ThreadLocalBuffers {
  import Utils._

  var count = 0

  // Note: This is a way to avoid storing null and dealing with NPEs for NA values
  val NaString = ""

  def toStringVector(data: Seq[String], naMask: BitSet, stringSet: collection.Set[String]): ByteBuffer = {
    import DictStringVector._

    count += 1
    val builder = AutoIntegralDVBuilders.IntDataVectBuilder

    // Convert the set of strings to an encoding
    val uniques = stringSet.toSeq
    // NOTE: sorry but java's HashMap is just much faster (for the next step)
    // This used to be `uniques.zipWithIndex.toMap`
    val strToCode = new HashMap[String, Int]()
    for { i <- 0 until uniques.length optimized } {
      strToCode.put(uniques(i), i)
    }

    // Encode each string to the code per the map above
    // Again we could have used data.zipWithIndex.map(....) but this is much faster.
    val codes = ArrayBuffer.fill(data.length)(0)
    for { i <- 0 until data.length optimized } {
      if (!naMask(i)) codes(i) = strToCode.get(data(i)) + 1
    }

    val fbb = new FlatBufferBuilder(getBuffer)
    val ((dataOffset, nbits), signed) = builder.build(fbb, codes, 0, stringSet.size + 1)
    val dictVect = stringVect(fbb, Seq(NaString) ++ uniques)
    startDictStringVector(fbb)
    addDictionary(fbb, dictVect)
    addLen(fbb, data.length)
    addCodes(fbb, dataOffset)
    addInfo(fbb, DataInfo.createDataInfo(fbb, nbits, signed))
    finishDictStringVectorBuffer(fbb, endDictStringVector(fbb))
    putHeaderAndGet(fbb, WireFormat.VECTORTYPE_DICT, WireFormat.SUBTYPE_STRING)
  }
} 
Example 169
Source File: ScalaReadBenchmark.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo

import org.openjdk.jmh.annotations.Benchmark
import org.openjdk.jmh.annotations.BenchmarkMode
import org.openjdk.jmh.annotations.{Mode, State, Scope}
import org.openjdk.jmh.annotations.OutputTimeUnit
import scalaxy.loops._
import scala.language.postfixOps

import java.util.concurrent.TimeUnit


@State(Scope.Thread)
class ScalaReadBenchmark {
  // Ok, create an IntColumn and benchmark it.
  val numValues = 10000

  val randomInts = (0 until numValues).map(i => util.Random.nextInt)
  val randomIntsAray = randomInts.toArray

  // Scala Seq sum
  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsScalaSeqFoldLeft(): Int = {
    randomInts.foldLeft(0)(_ + _)
  }

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsScalaArrayFoldLeft(): Int = {
    randomIntsAray.foldLeft(0)(_ + _)
  }

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsScalaArrayWhileLoop(): Int = {
    var total = 0
    for { i <- 0 until numValues optimized } {
      total += randomIntsAray(i)
    }
    total
  }
} 
Example 170
Source File: DictStringBenchmark.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo

import org.openjdk.jmh.annotations.Benchmark
import org.openjdk.jmh.annotations.BenchmarkMode
import org.openjdk.jmh.annotations.{Mode, State, Scope}
import org.openjdk.jmh.annotations.OutputTimeUnit
import scalaxy.loops._
import scala.language.postfixOps

import java.util.concurrent.TimeUnit


@State(Scope.Thread)
class DictStringBenchmark {
  import scala.util.Random.{alphanumeric, nextInt, nextFloat}
  import VectorReader._

  val numValues = 10000
  // NOTE: results show that time spent is heavily influenced by ratio of unique strings...
  val numUniqueStrings = 500
  val maxStringLength = 15
  val minStringLength = 5
  val naChance = 0.05    //5% of values will be NA

  def randString(len: Int): String = alphanumeric.take(len).mkString

  val uniqueStrings = (0 until numUniqueStrings).map { i =>
    randString(minStringLength + nextInt(maxStringLength - minStringLength))
  }
  val randomStrings = (0 until numValues).map(i => uniqueStrings(nextInt(numUniqueStrings)))
  val filoBufferNoNA = VectorBuilder(randomStrings).toFiloBuffer
  val scNoNA = FiloVector[String](filoBufferNoNA)

  def shouldNA: Boolean = nextFloat < naChance

  val filoBufferNA = VectorBuilder.fromOptions(
                       randomStrings.map(str => if (shouldNA) None else Some(str))
                     ).toFiloBuffer
  val scNA = FiloVector[String](filoBufferNA)

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def rawStringLengthTotal(): Int = {
    var totalLen = 0
    for { i <- 0 until numValues optimized } {
      totalLen += scNoNA(i).length
    }
    totalLen
  }

  // TODO: also a benchmark for the foreach/fold of a column with no NA's?

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  // Measures foreach and NA read speed
  def withNAlengthTotal(): Unit = {
    var totalLen = 0
    scNA.foreach { str => totalLen += str.length }
    totalLen
  }
} 
Example 171
Source File: BasicFiloBenchmark.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo

import org.openjdk.jmh.annotations.Benchmark
import org.openjdk.jmh.annotations.BenchmarkMode
import org.openjdk.jmh.annotations.{Mode, State, Scope}
import org.openjdk.jmh.annotations.OutputTimeUnit
import scalaxy.loops._
import scala.language.postfixOps

import java.util.concurrent.TimeUnit


@State(Scope.Thread)
class BasicFiloBenchmark {
  import VectorReader._
  import vectors.IntBinaryVector

  // Ok, create an IntColumn and benchmark it.
  val numValues = 10000

  val randomInts = (0 until numValues).map(i => util.Random.nextInt)
  val randomIntsAray = randomInts.toArray
  val filoBuffer = VectorBuilder(randomInts).toFiloBuffer
  val sc = FiloVector[Int](filoBuffer)

  val ivbuilder = IntBinaryVector.appendingVectorNoNA(numValues)
  randomInts.foreach(ivbuilder.addData)
  val iv = IntBinaryVector(ivbuilder.base, ivbuilder.offset, ivbuilder.numBytes)

  val byteFiloBuf = VectorBuilder(randomInts.map(_ % 128)).toFiloBuffer
  val byteVect = FiloVector[Int](byteFiloBuf)

  val diffFiloBuf = VectorBuilder(randomInts.map(10000 + _ % 128)).toFiloBuffer
  val diffVect = FiloVector[Int](diffFiloBuf)

  // According to @ktosopl, be sure to return some value if possible so that JVM won't
  // optimize out the method body.  However JMH is apparently very good at avoiding this.
  // fastest loop possible using FiloVectorApply method
  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsFiloApply(): Int = {
    var total = 0
    for { i <- 0 until numValues optimized } {
      total += sc(i)
    }
    total
  }

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsBinaryVectApply(): Int = {
    var total = 0
    for { i <- 0 until numValues optimized } {
      total += iv(i)
    }
    total
  }

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsFiloByteApply(): Int = {
    var total = 0
    for { i <- 0 until numValues optimized } {
      total += byteVect(i)
    }
    total
  }

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsFiloDiffApply(): Int = {
    var total = 0
    for { i <- 0 until numValues optimized } {
      total += diffVect(i)
    }
    total
  }

  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllNotNullIntsFiloApply(): Int = {
    var total = 0
    for { i <- 0 until numValues optimized } {
      if (sc.isAvailable(i)) total += sc(i)
    }
    total
  }

  // sum which uses foreach from FiloVector
  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def sumAllIntsFiloForeachFoldLeft(): Int = {
    sc.foldLeft(0)(_ + _)
  }
} 
Example 172
Source File: FastFiloRowReaderBenchmark.scala    From filo   with Apache License 2.0 5 votes vote down vote up
package org.velvia.filo

import java.sql.Timestamp
import org.openjdk.jmh.annotations.Benchmark
import org.openjdk.jmh.annotations.BenchmarkMode
import org.openjdk.jmh.annotations.{Mode, State, Scope}
import org.openjdk.jmh.annotations.OutputTimeUnit
import scalaxy.loops._
import scala.language.postfixOps

import java.util.concurrent.TimeUnit


@State(Scope.Thread)
class FastFiloRowReaderBenchmark {
  import VectorReader._

  // Ok, create an IntColumn and benchmark it.
  val numValues = 10000

  val randomInts = (0 until numValues).map(i => util.Random.nextInt)
  val randomLongs = randomInts.map(_.toLong)
  val randomTs = randomLongs.map(l => new Timestamp(l))

  val chunks = Array(VectorBuilder(randomInts).toFiloBuffer,
                     VectorBuilder(randomLongs).toFiloBuffer,
                     VectorBuilder(randomTs).toFiloBuffer)
  val clazzes = Array[Class[_]](classOf[Int], classOf[Long], classOf[Timestamp])

  // According to @ktosopl, be sure to return some value if possible so that JVM won't
  // optimize out the method body.  However JMH is apparently very good at avoiding this.
  // fastest loop possible using FiloVectorApply method
  @Benchmark
  @BenchmarkMode(Array(Mode.AverageTime))
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  def createFastFiloRowReader(): RowReader = {
    new FastFiloRowReader(chunks, clazzes)
  }

  val fastReader = new FastFiloRowReader(chunks, clazzes)

  @Benchmark
  @BenchmarkMode(Array(Mode.Throughput))
  @OutputTimeUnit(TimeUnit.SECONDS)
  def fastFiloRowReaderReadOne(): Int = {
    fastReader.setRowNo(0)
    if (fastReader.notNull(0)) fastReader.getInt(0) + 1 else 0
  }
} 
Example 173
Source File: EmbeddedKafkaCustomConfigSpec.scala    From embedded-kafka   with MIT License 5 votes vote down vote up
package net.manub.embeddedkafka

import kafka.server.KafkaConfig
import net.manub.embeddedkafka.EmbeddedKafka._
import org.apache.kafka.clients.consumer.ConsumerConfig
import org.apache.kafka.clients.producer.ProducerConfig

import scala.language.postfixOps
import scala.util.Random

class EmbeddedKafkaCustomConfigSpec extends EmbeddedKafkaSpecSupport {
  final val TwoMegabytes   = 2097152
  final val ThreeMegabytes = 3145728

  "the custom config" should {
    "allow pass additional producer parameters" in {
      val customBrokerConfig =
        Map(
          KafkaConfig.ReplicaFetchMaxBytesProp -> s"$ThreeMegabytes",
          KafkaConfig.MessageMaxBytesProp      -> s"$ThreeMegabytes"
        )

      val customProducerConfig =
        Map(ProducerConfig.MAX_REQUEST_SIZE_CONFIG -> s"$ThreeMegabytes")
      val customConsumerConfig =
        Map(
          ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG -> s"$ThreeMegabytes"
        )

      implicit val customKafkaConfig: EmbeddedKafkaConfig =
        EmbeddedKafkaConfig(
          customBrokerProperties = customBrokerConfig,
          customProducerProperties = customProducerConfig,
          customConsumerProperties = customConsumerConfig
        )

      val bigMessage = generateMessageOfLength(TwoMegabytes)
      val topic      = "big-message-topic"

      withRunningKafka {
        publishStringMessageToKafka(topic, bigMessage)
        consumeFirstStringMessageFrom(topic) shouldBe bigMessage
      }
    }
  }

  def generateMessageOfLength(length: Int): String =
    Iterator.continually(Random.nextPrintableChar) take length mkString
} 
Example 174
Source File: Plugin.scala    From sbt-javacpp   with MIT License 5 votes vote down vote up
package org.bytedeco.sbt.javacpp

import scala.language.postfixOps
import sbt._
import sbt.Keys._

import scala.util.Try
import scala.util.matching.Regex

object Plugin extends AutoPlugin {

  override def projectSettings: Seq[Setting[_]] = {
    import autoImport._
    Seq(
      autoCompilerPlugins := true,
      javaCppPlatform := Platform.current,
      javaCppVersion := Versions.javaCppVersion,
      javaCppPresetLibs := Seq.empty,
      libraryDependencies += {
        "org.bytedeco" % "javacpp" % javaCppVersion.value jar
      },
      javaCppPresetDependencies)
  }

  object Versions {
    val javaCppVersion = "1.5.3"
  }

  object autoImport {
    val javaCppPlatform = SettingKey[Seq[String]]("javaCppPlatform", """The platform that you want to compile for (defaults to the platform of the current computer). You can also set this via the "sbt.javacpp.platform" System Property """)
    val javaCppVersion = SettingKey[String]("javaCppVersion", s"Version of Java CPP that you want to use, defaults to ${Versions.javaCppVersion}")
    val javaCppPresetLibs = SettingKey[Seq[(String, String)]]("javaCppPresetLibs", "List of additional JavaCPP presets that you would wish to bind lazily, defaults to an empty list")
  }

  override def requires: Plugins = plugins.JvmPlugin

  override def trigger: PluginTrigger = allRequirements

  private def javaCppPresetDependencies: Def.Setting[Seq[ModuleID]] = {
    import autoImport._
    libraryDependencies ++= {
      val (cppPresetVersion, groupId) = buildPresetVersion(javaCppVersion.value)
      javaCppPresetLibs.value.flatMap {
        case (libName, libVersion) =>
          implicit class RegexOps(sc: StringContext) {
            def r = new Regex(sc.parts.mkString, sc.parts.tail.map(_ => "x"): _*)
          }
          val (libNamePrefix, libNamePostfix) = libName match {
            case r"([^-]+)$prefix(-.+)$postfix" => (prefix, postfix)
            case _ => (libName, "")
          }

          val generic = groupId % libNamePrefix % s"$libVersion-$cppPresetVersion" classifier ""
          val platformSpecific = javaCppPlatform.value.map { platform =>
            groupId % libNamePrefix % s"$libVersion-$cppPresetVersion" classifier s"$platform$libNamePostfix"
          }
          generic +: platformSpecific
      }
    }
  }

  
  private def buildPresetVersion(version: String): (String, String) =
    version match {
      case VersionSplit(a :: b :: _) if a == 0 || (a == 1 && b <= 3) => (s"$a.$b", "org.bytedeco.javacpp-presets")
      case VersionSplit(1 :: 4 :: _) => (version, "org.bytedeco.javacpp-presets")
      case _ => (version, "org.bytedeco")
    }

  private object VersionSplit {
    def unapply(arg: String): Option[List[Int]] =
      Try(arg.split('.').map(_.toInt).toList).toOption
  }

} 
Example 175
Source File: ExampleSpark.scala    From hyperion   with Apache License 2.0 5 votes vote down vote up
package com.krux.hyperion.examples

import scala.language.postfixOps

import com.typesafe.config.ConfigFactory

import com.krux.hyperion.action.SnsAlarm
import com.krux.hyperion.activity.{EmrActivity, SparkStep, SparkTaskActivity}
import com.krux.hyperion.common.S3Uri
import com.krux.hyperion.datanode.S3DataNode
import com.krux.hyperion.expression.{Parameter, RuntimeNode}
import com.krux.hyperion.Implicits._
import com.krux.hyperion.resource.{EmrCluster, EmrApplication}
import com.krux.hyperion.{DataPipelineDef, HyperionCli, HyperionContext, Schedule}


object ExampleSpark extends DataPipelineDef with HyperionCli {

  val target = "the-target"
  val jar = s3 / "sample-jars" / "sample-jar-assembly-current.jar"

  override implicit val hc: HyperionContext = new HyperionContext(ConfigFactory.load("example"))

  override lazy val tags = Map("example" -> None, "ownerGroup" -> Some("spark"))

  override lazy val schedule = Schedule.cron
    .startAtActivation
    .every(1.day)
    .stopAfter(3)

  val location = Parameter[S3Uri]("S3Location").withValue(s3"your-location")
  val instanceType = Parameter[String]("InstanceType").withValue("c3.8xlarge")
  val instanceCount = Parameter("InstanceCount", 8)
  val instanceBid = Parameter("InstanceBid", 3.40)

  override def parameters: Iterable[Parameter[_]] = Seq(location, instanceType, instanceCount, instanceBid)

  val dataNode = S3DataNode(s3 / "some-bucket" / "some-path" /)

  // Actions
  val mailAction = SnsAlarm("arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic")
    .withSubject(s"Something happened at ${RuntimeNode.ScheduledStartTime}")
    .withMessage(s"Some message $instanceCount x $instanceType @ $instanceBid for $location")
    .withRole("DataPipelineDefaultResourceRole")

  // Resources
  val sparkCluster = EmrCluster()
    .withApplications(EmrApplication.Spark)
    .withTaskInstanceCount(instanceCount)
    .withTaskInstanceType(instanceType)
    .withInitTimeout(5.hours)

  // First activity
  val filterActivity = SparkTaskActivity(jar)(sparkCluster)
    .withMainClass("com.krux.hyperion.FilterJob")
    .named("filterActivity")
    .onFail(mailAction)
    .withInput(dataNode)
    .withArguments(
      target,
      (EmrActivity.ScheduledStartTime - 3.days).format("yyyy-MM-dd")
    )

  // Second activity
  val scoreStep1 = SparkStep(jar)
    .withMainClass("com.krux.hyperion.ScoreJob1")
    .withArguments(
      target,
      (EmrActivity.ScheduledStartTime - 3.days).format("yyyy-MM-dd"),
      "denormalized"
    )

  val scoreStep2 = SparkStep(jar)
    .withMainClass("com.krux.hyperion.ScoreJob2")
    .withArguments(target, (EmrActivity.ScheduledStartTime - 3.days).format("yyyy-MM-dd"))

  val scoreStep3 = SparkStep(jar)
    .withMainClass("com.krux.hyperion.ScoreJob3")
    .withArguments(
      target,
      (EmrActivity.ScheduledStartTime - 3.days).format("yyyy-MM-dd"),
      "value1,value2"
    )

  val scoreStep4 = SparkStep(jar)
    .withMainClass("com.krux.hyperion.ScoreJob4")
    .withArguments(
      target,
      (EmrActivity.ScheduledStartTime - 3.days).format("yyyy-MM-dd"),
      "value1,value2," + (EmrActivity.ScheduledStartTime - 3.days).format("yyyy-MM-dd")
    )

  val scoreActivity = EmrActivity(sparkCluster)
    .named("scoreActivity")
    .withSteps(scoreStep1, scoreStep2, scoreStep3, scoreStep4)
    .onSuccess(mailAction)

  override def workflow = filterActivity ~> scoreActivity

} 
Example 176
Source File: DriverActorTest.scala    From sparta   with Apache License 2.0 5 votes vote down vote up
package com.stratio.sparta.serving.api.actor

import java.nio.file.{Files, Path}

import akka.actor.{ActorSystem, Props}
import akka.testkit.{DefaultTimeout, ImplicitSender, TestKit}
import akka.util.Timeout
import com.stratio.sparta.serving.api.actor.DriverActor.UploadDrivers
import com.stratio.sparta.serving.core.config.{SpartaConfig, SpartaConfigFactory}
import com.stratio.sparta.serving.core.models.SpartaSerializer
import com.stratio.sparta.serving.core.models.files.{SpartaFile, SpartaFilesResponse}
import com.typesafe.config.{Config, ConfigFactory}
import org.junit.runner.RunWith
import org.scalatest._
import org.scalatest.junit.JUnitRunner
import org.scalatest.mock.MockitoSugar
import spray.http.BodyPart

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.{Failure, Success}

@RunWith(classOf[JUnitRunner])
class DriverActorTest extends TestKit(ActorSystem("PluginActorSpec"))
  with DefaultTimeout
  with ImplicitSender
  with WordSpecLike
  with Matchers
  with BeforeAndAfterAll
  with BeforeAndAfterEach
  with MockitoSugar with SpartaSerializer {

  val tempDir: Path = Files.createTempDirectory("test")
  tempDir.toFile.deleteOnExit()

  val localConfig: Config = ConfigFactory.parseString(
    s"""
       |sparta{
       |   api {
       |     host = local
       |     port= 7777
       |   }
       |}
       |
       |sparta.config.driverPackageLocation = "$tempDir"
    """.stripMargin)

  val fileList = Seq(BodyPart("reference.conf", "file"))

  override def beforeEach(): Unit = {
    SpartaConfig.initMainConfig(Option(localConfig), SpartaConfigFactory(localConfig))
    SpartaConfig.initApiConfig()
  }

  override def afterAll: Unit = {
    shutdown()
  }

  override implicit val timeout: Timeout = Timeout(15 seconds)

  "DriverActor " must {

    "Not save files with wrong extension" in {
      val driverActor = system.actorOf(Props(new DriverActor()))
      driverActor ! UploadDrivers(fileList)
      expectMsgPF() {
        case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.isEmpty shouldBe true
      }
    }
    "Not upload empty files" in {
      val driverActor = system.actorOf(Props(new DriverActor()))
      driverActor ! UploadDrivers(Seq.empty)
      expectMsgPF() {
        case SpartaFilesResponse(Failure(f)) => f.getMessage shouldBe "At least one file is expected"
      }
    }
    "Save a file" in {
      val driverActor = system.actorOf(Props(new DriverActor()))
      driverActor ! UploadDrivers(Seq(BodyPart("reference.conf", "file.jar")))
      expectMsgPF() {
        case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.head.fileName.endsWith("file.jar") shouldBe true
      }
    }
  }
} 
Example 177
Source File: PluginActorTest.scala    From sparta   with Apache License 2.0 5 votes vote down vote up
package com.stratio.sparta.serving.api.actor

import java.nio.file.{Files, Path}

import akka.actor.{ActorSystem, Props}
import akka.testkit.{DefaultTimeout, ImplicitSender, TestKit}
import akka.util.Timeout
import com.stratio.sparta.serving.api.actor.PluginActor.{PluginResponse, UploadPlugins}
import com.stratio.sparta.serving.api.constants.HttpConstant
import com.stratio.sparta.serving.core.config.{SpartaConfig, SpartaConfigFactory}
import com.stratio.sparta.serving.core.models.SpartaSerializer
import com.stratio.sparta.serving.core.models.files.{SpartaFile, SpartaFilesResponse}
import com.typesafe.config.{Config, ConfigFactory}
import org.junit.runner.RunWith
import org.scalatest._
import org.scalatest.junit.JUnitRunner
import org.scalatest.mock.MockitoSugar
import spray.http.BodyPart

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.{Failure, Success}

@RunWith(classOf[JUnitRunner])
class PluginActorTest extends TestKit(ActorSystem("PluginActorSpec"))
  with DefaultTimeout
  with ImplicitSender
  with WordSpecLike
  with Matchers
  with BeforeAndAfterAll
  with BeforeAndAfterEach
  with MockitoSugar with SpartaSerializer {

  val tempDir: Path = Files.createTempDirectory("test")
  tempDir.toFile.deleteOnExit()

  val localConfig: Config = ConfigFactory.parseString(
    s"""
       |sparta{
       |   api {
       |     host = local
       |     port= 7777
       |   }
       |}
       |
       |sparta.config.pluginPackageLocation = "$tempDir"
    """.stripMargin)


  val fileList = Seq(BodyPart("reference.conf", "file"))

  override def beforeEach(): Unit = {
    SpartaConfig.initMainConfig(Option(localConfig), SpartaConfigFactory(localConfig))
    SpartaConfig.initApiConfig()
  }

  override def afterAll: Unit = {
    shutdown()
  }

  override implicit val timeout: Timeout = Timeout(15 seconds)

  "PluginActor " must {

    "Not save files with wrong extension" in {
      val pluginActor = system.actorOf(Props(new PluginActor()))
      pluginActor ! UploadPlugins(fileList)
      expectMsgPF() {
        case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.isEmpty shouldBe true
      }
    }
    "Not upload empty files" in {
      val pluginActor = system.actorOf(Props(new PluginActor()))
      pluginActor ! UploadPlugins(Seq.empty)
      expectMsgPF() {
        case SpartaFilesResponse(Failure(f)) => f.getMessage shouldBe "At least one file is expected"
      }
    }
    "Save a file" in {
      val pluginActor = system.actorOf(Props(new PluginActor()))
      pluginActor ! UploadPlugins(Seq(BodyPart("reference.conf", "file.jar")))
      expectMsgPF() {
        case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.head.fileName.endsWith("file.jar") shouldBe true
      }
    }
  }

} 
Example 178
Source File: RabbitIntegrationSpec.scala    From sparta   with Apache License 2.0 5 votes vote down vote up
package com.stratio.sparta.plugin.input.rabbitmq

import akka.actor.ActorSystem
import akka.event.slf4j.SLF4JLogging
import akka.util.Timeout
import com.typesafe.config.ConfigFactory
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}
import org.scalatest.concurrent.TimeLimitedTests
import org.scalatest.time.{Minute, Span}
import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, Matchers, WordSpec}

import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Try


abstract class RabbitIntegrationSpec extends WordSpec with Matchers with SLF4JLogging with TimeLimitedTests
  with BeforeAndAfter with BeforeAndAfterAll {
  private lazy val config = ConfigFactory.load()


  implicit val system = ActorSystem("ActorRabbitMQSystem")
  implicit val timeout = Timeout(10 seconds)
  val timeLimit = Span(1, Minute)
  
  val RabbitTimeOut = 3 second
  val configQueueName = Try(config.getString("rabbitmq.queueName")).getOrElse("rabbitmq-queue")
  val configExchangeName = Try(config.getString("rabbitmq.exchangeName")).getOrElse("rabbitmq-exchange")
  val exchangeType = Try(config.getString("rabbitmq.exchangeType")).getOrElse("topic")
  val routingKey = Try(config.getString("rabbitmq.routingKey")).getOrElse("")
  val vHost = Try(config.getString("rabbitmq.vHost")).getOrElse("/")
  val hosts = Try(config.getString("rabbitmq.hosts")).getOrElse("127.0.0.1")
  val userName = Try(config.getString("rabbitmq.userName")).getOrElse("guest")
  val password = Try(config.getString("rabbitmq.password")).getOrElse("guest")
  val RabbitConnectionURI = s"amqp://$userName:$password@$hosts/%2F"
  var sc: Option[SparkContext] = None
  var ssc: Option[StreamingContext] = None

  def initSpark(): Unit = {
    sc = Some(new SparkContext(conf))
    ssc = Some(new StreamingContext(sc.get, Seconds(1)))
  }

  def stopSpark(): Unit = {
    ssc.foreach(_.stop())
    sc.foreach(_.stop())

    System.gc()
  }

  def initRabbitMQ(): Unit

  def closeRabbitMQ(): Unit

  before {
    log.info("Init spark")
    initSpark()
    log.info("Sending messages to queue..")
    initRabbitMQ()
    log.info("Messages in queue.")
  }

  after {
    log.info("Stop spark")
    stopSpark()
    log.info("Clean rabbitmq")
    closeRabbitMQ()
  }
} 
Example 179
Source File: DoobieTests.scala    From freestyle   with Apache License 2.0 5 votes vote down vote up
package freestyle.free

import cats.effect.IO
import cats.syntax.either._
import org.scalatest._
import _root_.doobie._
import _root_.doobie.implicits._
import _root_.doobie.h2.H2Transactor

import freestyle.free.implicits._
import freestyle.free.doobie._
import freestyle.free.doobie.implicits._

import scala.language.postfixOps

class DoobieTests extends AsyncWordSpec with Matchers {

  import algebras._

  implicit val xa: Transactor[IO] =
    H2Transactor.newH2Transactor[IO]("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "").unsafeRunSync

  val query: ConnectionIO[Int] = sql"SELECT 1 + 1".query[Int].unique

  "Doobie Freestyle integration" should {

    "allow a doobie ConnectionIO program to be interleaved inside a program monadic flow" in {
      val program = for {
        a <- app.nonDoobie.x
        b <- app.doobieM.transact(query).freeS
        c <- FreeS.pure(1)
      } yield a + b + c
      program.interpret[IO] map { _ shouldBe 4 } unsafeToFuture
    }

    "allow doobie syntax to lift to FreeS" in {
      val program: FreeS[App.Op, Int] = for {
        a <- app.nonDoobie.x
        b <- query.liftFS[App.Op]
        c <- app.nonDoobie.x
      } yield a + b + c
      program.interpret[IO] map { _ shouldBe 4 } unsafeToFuture
    }

    "allow doobie syntax to lift to FreeS.Par" in {
      val program: FreeS[App.Op, Int] = for {
        a <- app.nonDoobie.x
        b <- query.liftFSPar[App.Op].freeS
        c <- app.nonDoobie.x
      } yield a + b + c
      program.interpret[IO] map { _ shouldBe 4 } unsafeToFuture
    }
  }

}

object algebras {
  @free
  trait NonDoobie {
    def x: FS[Int]
  }

  implicit def nonDoobieHandler: NonDoobie.Handler[IO] =
    new NonDoobie.Handler[IO] {
      def x: IO[Int] = IO.pure(1)
    }

  @module
  trait App {
    val nonDoobie: NonDoobie
    val doobieM: DoobieM
  }

  val app = App[App.Op]
} 
Example 180
Source File: JarUtils.scala    From incubator-toree   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.toree.test.utils

import sys.process._
import java.net.URL
import java.io.File
import java.util.UUID

import scala.language.postfixOps

import org.apache.spark.TestUtils.{JavaSourceFromString, _}

object JarUtils {

  def createTemporaryDir() = {
    val tempDir = System.getProperty("java.io.tmpdir")
    val dir = new File(tempDir, UUID.randomUUID.toString)
    dir.mkdirs()
    dir.deleteOnExit()
    dir.getCanonicalFile
  }

  def createDummyJar(destDir: String, packageName: String, className: String) : URL = {
    val srcDir = new File(destDir, packageName)
    srcDir.mkdirs()
    val source =
        s"""package $packageName;
            |
            |public class $className implements java.io.Serializable {
            |  public static String sayHello(String arg) { return "Hello, " + arg; }
            |  public static int addStuff(int arg1, int arg2) { return arg1 + arg2; }
            |}
         """.stripMargin

    val sourceFile =
      new JavaSourceFromString(new File(srcDir, className).toURI.getPath, source)
    val compiledFile = createCompiledClass(className, srcDir, sourceFile, Seq.empty)
    val jarFile = new File(destDir,
        s"$packageName-$className-%s.jar".format(System.currentTimeMillis()))
    val jarURL = createJar(Seq(compiledFile), jarFile, directoryPrefix = Some(packageName))
    jarFile.deleteOnExit()
    jarURL
  }

  def downloadJar(destDir: String, artifactURL: String) : URL = {
    val fileName = getFileName(artifactURL).
      replace(".jar", s"%s.jar".format(System.currentTimeMillis()))
    val jarFile = new File(destDir, fileName)
    jarFile.deleteOnExit()
    (new URL(artifactURL) #> jarFile !!)
    jarFile.toURI.toURL
  }

  private def getFileName(artifactURL: String) = {
    artifactURL.split("/").last
  }
} 
Example 181
Source File: EchoActorTest.scala    From 006877   with MIT License 5 votes vote down vote up
package aia.testdriven

import akka.testkit.{ TestKit, ImplicitSender }
import akka.actor.{ Props, Actor, ActorSystem }
import org.scalatest.WordSpecLike

import akka.util.Timeout
import scala.concurrent.Await
import scala.util.{ Success, Failure }

import scala.language.postfixOps


class EchoActorTest extends TestKit(ActorSystem("testsystem"))
  with WordSpecLike
  with ImplicitSender
  with StopSystemAfterAll {


  "An EchoActor" must {
    "Reply with the same message it receives" in {

      import akka.pattern.ask
      import scala.concurrent.duration._
      implicit val timeout = Timeout(3 seconds)
      implicit val ec = system.dispatcher
      val echo = system.actorOf(Props[EchoActor], "echo1")
      val future = echo.ask("some message")
      future.onComplete {
        case Failure(_)   => //실패 처리
        case Success(msg) => //성공 처리
      }

      Await.ready(future, timeout.duration)
    }

    "Reply with the same message it receives without ask" in {
      val echo = system.actorOf(Props[EchoActor], "echo2")
      echo ! "some message"
      expectMsg("some message")

    }

  }
}


class EchoActor extends Actor {
  def receive = {
    case msg =>
      sender() ! msg
  }
} 
Example 182
Source File: AggregatorTest.scala    From 006877   with MIT License 5 votes vote down vote up
package aia.structure

import java.util.Date
import scala.concurrent.duration._

import akka.testkit._
import akka.actor._

import org.scalatest._
import scala.language.postfixOps

class AggregatorTest
  extends TestKit(ActorSystem("AggregatorTest"))
  with WordSpecLike with BeforeAndAfterAll {
  val timeout = 2 seconds

  protected override def afterAll(): Unit = {
    system.terminate()
  }

  "The Agregator" must {
    "aggregate two messages" in {

      val endProbe = TestProbe()
      val actorRef = system.actorOf(
        Props(new Aggregator(timeout, endProbe.ref)))
      val photoStr = ImageProcessing.createPhotoString(new Date(), 60)
      val msg1 = PhotoMessage("id1",
        photoStr,
        Some(new Date()),
        None)
      actorRef ! msg1

      val msg2 = PhotoMessage("id1",
        photoStr,
        None,
        Some(60))
      actorRef ! msg2

      val combinedMsg = PhotoMessage("id1",
        photoStr,
        msg1.creationTime,
        msg2.speed)

      endProbe.expectMsg(combinedMsg)

    }
    "send message after timeout" in {

      val endProbe = TestProbe()
      val actorRef = system.actorOf(
        Props(new Aggregator(timeout, endProbe.ref)))
      val photoStr = ImageProcessing.createPhotoString(
        new Date(), 60)
      val msg1 = PhotoMessage("id1",
        photoStr,
        Some(new Date()),
        None)
      actorRef ! msg1

      endProbe.expectMsg(msg1)

    }
    "aggregate two messages when restarting" in {

      val endProbe = TestProbe()
      val actorRef = system.actorOf(
        Props(new Aggregator(timeout, endProbe.ref)))
      val photoStr = ImageProcessing.createPhotoString(new Date(), 60)

      val msg1 = PhotoMessage("id1",
        photoStr,
        Some(new Date()),
        None)
      actorRef ! msg1

      actorRef ! new IllegalStateException("restart")

      val msg2 = PhotoMessage("id1",
        photoStr,
        None,
        Some(60))
      actorRef ! msg2

      val combinedMsg = PhotoMessage("id1",
        photoStr,
        msg1.creationTime,
        msg2.speed)

      endProbe.expectMsg(combinedMsg)

    }
  }
} 
Example 183
Source File: ScatterGatherTest.scala    From 006877   with MIT License 5 votes vote down vote up
package aia.structure

import java.util.Date
import scala.concurrent.duration._

import akka.actor._

import org.scalatest._
import akka.testkit._
import scala.language.postfixOps

class ScatterGatherTest
  extends TestKit(ActorSystem("ScatterGatherTest"))
  with WordSpecLike
  with BeforeAndAfterAll {

  val timeout = 2 seconds

  override def afterAll(): Unit = {
    system.terminate()
  }

  "The ScatterGather" must {
    "scatter the message and gather them again" in {

      val endProbe = TestProbe()
      val aggregateRef = system.actorOf(
        Props(new Aggregator(timeout, endProbe.ref)))
      val speedRef = system.actorOf(
        Props(new GetSpeed(aggregateRef)))
      val timeRef = system.actorOf(
        Props(new GetTime(aggregateRef)))
      val actorRef = system.actorOf(
        Props(new RecipientList(Seq(speedRef, timeRef))))

      val photoDate = new Date()
      val photoSpeed = 60
      val msg = PhotoMessage("id1",
        ImageProcessing.createPhotoString(photoDate, photoSpeed))

      actorRef ! msg

      val combinedMsg = PhotoMessage(msg.id,
        msg.photo,
        Some(photoDate),
        Some(photoSpeed))

      endProbe.expectMsg(combinedMsg)


    }
  }
} 
Example 184
Source File: PipeAndFilterTest.scala    From 006877   with MIT License 5 votes vote down vote up
package aia.structure

import scala.concurrent.duration._

import akka.actor._

import org.scalatest._
import akka.testkit._
import scala.language.postfixOps

class PipeAndFilterTest
  extends TestKit(ActorSystem("PipeAndFilterTest"))
  with WordSpecLike
  with BeforeAndAfterAll {

  val timeout = 2 seconds

  override def afterAll(): Unit = {
    system.terminate()
  }

  "The pipe and filter" must {
    "filter messages in configuration 1" in {

      val endProbe = TestProbe()
      val speedFilterRef = system.actorOf(
        Props(new SpeedFilter(50, endProbe.ref)))
      val licenseFilterRef = system.actorOf(
        Props(new LicenseFilter(speedFilterRef)))
      val msg = new Photo("123xyz", 60)
      licenseFilterRef ! msg
      endProbe.expectMsg(msg)

      licenseFilterRef ! new Photo("", 60)
      endProbe.expectNoMsg(timeout)

      licenseFilterRef ! new Photo("123xyz", 49)
      endProbe.expectNoMsg(timeout)
    }
    "filter messages in configuration 2" in {

      val endProbe = TestProbe()
      val licenseFilterRef = system.actorOf(
        Props(new LicenseFilter(endProbe.ref)))
      val speedFilterRef = system.actorOf(
        Props(new SpeedFilter(50, licenseFilterRef)))
      val msg = new Photo("123xyz", 60)
      speedFilterRef ! msg
      endProbe.expectMsg(msg)

      speedFilterRef ! new Photo("", 60)
      endProbe.expectNoMsg(timeout)

      speedFilterRef ! new Photo("123xyz", 49)
      endProbe.expectNoMsg(timeout)
    }
  }
} 
Example 185
Source File: SessionHeartbeatSpec.scala    From incubator-livy   with Apache License 2.0 5 votes vote down vote up
package org.apache.livy.server.interactive

import scala.concurrent.duration._
import scala.concurrent.Future
import scala.language.postfixOps

import org.mockito.Mockito.{never, verify, when}
import org.scalatest.{FunSpec, Matchers}
import org.scalatest.concurrent.Eventually._
import org.scalatest.mock.MockitoSugar.mock

import org.apache.livy.LivyConf
import org.apache.livy.server.recovery.SessionStore
import org.apache.livy.sessions.{Session, SessionManager}
import org.apache.livy.sessions.Session.RecoveryMetadata

class SessionHeartbeatSpec extends FunSpec with Matchers {
  describe("SessionHeartbeat") {
    class TestHeartbeat(override val heartbeatTimeout: FiniteDuration) extends SessionHeartbeat {}

    it("should not expire if heartbeat was never called.") {
      val t = new TestHeartbeat(Duration.Zero)
      t.heartbeatExpired shouldBe false
    }

    it("should expire if time has elapsed.") {
      val t = new TestHeartbeat(Duration.fromNanos(1))
      t.heartbeat()
      eventually(timeout(2 nano), interval(1 nano)) {
        t.heartbeatExpired shouldBe true
      }
    }

    it("should not expire if time hasn't elapsed.") {
      val t = new TestHeartbeat(Duration.create(1, DAYS))
      t.heartbeat()
      t.heartbeatExpired shouldBe false
    }
  }

  describe("SessionHeartbeatWatchdog") {
    abstract class TestSession
      extends Session(0, None, null, null) with SessionHeartbeat {}
    class TestWatchdog(conf: LivyConf)
      extends SessionManager[TestSession, RecoveryMetadata](
        conf,
        { _ => assert(false).asInstanceOf[TestSession] },
        mock[SessionStore],
        "test",
        Some(Seq.empty))
        with SessionHeartbeatWatchdog[TestSession, RecoveryMetadata] {}

    it("should delete only expired sessions") {
      val expiredSession: TestSession = mock[TestSession]
      when(expiredSession.id).thenReturn(0)
      when(expiredSession.name).thenReturn(None)
      when(expiredSession.heartbeatExpired).thenReturn(true)
      when(expiredSession.stop()).thenReturn(Future.successful(()))
      when(expiredSession.lastActivity).thenReturn(System.nanoTime())

      val nonExpiredSession: TestSession = mock[TestSession]
      when(nonExpiredSession.id).thenReturn(1)
      when(nonExpiredSession.name).thenReturn(None)
      when(nonExpiredSession.heartbeatExpired).thenReturn(false)
      when(nonExpiredSession.stop()).thenReturn(Future.successful(()))
      when(nonExpiredSession.lastActivity).thenReturn(System.nanoTime())

      val n = new TestWatchdog(new LivyConf())

      n.register(expiredSession)
      n.register(nonExpiredSession)
      n.deleteExpiredSessions()

      verify(expiredSession).stop()
      verify(nonExpiredSession, never).stop()
    }
  }
} 
Example 186
Source File: ReplDriverSuite.scala    From incubator-livy   with Apache License 2.0 5 votes vote down vote up
package org.apache.livy.repl

import java.net.URI
import java.util.concurrent.TimeUnit

import scala.concurrent.duration._
import scala.language.postfixOps

import org.apache.spark.launcher.SparkLauncher
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.scalatest.FunSuite
import org.scalatest.concurrent.Eventually._

import org.apache.livy._
import org.apache.livy.rsc.{PingJob, RSCClient, RSCConf}
import org.apache.livy.sessions.Spark

class ReplDriverSuite extends FunSuite with LivyBaseUnitTestSuite {

  private implicit val formats = DefaultFormats

  test("start a repl session using the rsc") {
    val client = new LivyClientBuilder()
      .setConf(SparkLauncher.DRIVER_MEMORY, "512m")
      .setConf(SparkLauncher.DRIVER_EXTRA_CLASSPATH, sys.props("java.class.path"))
      .setConf(SparkLauncher.EXECUTOR_EXTRA_CLASSPATH, sys.props("java.class.path"))
      .setConf(RSCConf.Entry.LIVY_JARS.key(), "")
      .setURI(new URI("rsc:/"))
      .setConf(RSCConf.Entry.DRIVER_CLASS.key(), classOf[ReplDriver].getName())
      .setConf(RSCConf.Entry.SESSION_KIND.key(), Spark.toString)
      .build()
      .asInstanceOf[RSCClient]

    try {
      // This is sort of what InteractiveSession.scala does to detect an idle session.
      client.submit(new PingJob()).get(60, TimeUnit.SECONDS)

      val statementId = client.submitReplCode("1 + 1", "spark").get
      eventually(timeout(30 seconds), interval(100 millis)) {
        val rawResult =
          client.getReplJobResults(statementId, 1).get(10, TimeUnit.SECONDS).statements(0)
        val result = rawResult.output
        assert((parse(result) \ Session.STATUS).extract[String] === Session.OK)
      }
    } finally {
      client.stop(true)
    }
  }

} 
Example 187
Source File: BaseSessionSpec.scala    From incubator-livy   with Apache License 2.0 5 votes vote down vote up
package org.apache.livy.repl

import java.util.Properties
import java.util.concurrent.atomic.AtomicInteger

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

import org.apache.spark.SparkConf
import org.json4s._
import org.scalatest.{FlatSpec, Matchers}
import org.scalatest.concurrent.Eventually._

import org.apache.livy.LivyBaseUnitTestSuite
import org.apache.livy.rsc.RSCConf
import org.apache.livy.rsc.driver.{Statement, StatementState}
import org.apache.livy.sessions._

abstract class BaseSessionSpec(kind: Kind)
    extends FlatSpec with Matchers with LivyBaseUnitTestSuite {

  implicit val formats = DefaultFormats

  private val rscConf = new RSCConf(new Properties()).set(RSCConf.Entry.SESSION_KIND, kind.toString)

  private val sparkConf = new SparkConf()

  protected def execute(session: Session)(code: String): Statement = {
    val id = session.execute(code)
    eventually(timeout(30 seconds), interval(100 millis)) {
      val s = session.statements(id)
      s.state.get() shouldBe StatementState.Available
      s
    }
  }

  protected def withSession(testCode: Session => Any): Unit = {
    val stateChangedCalled = new AtomicInteger()
    val session =
      new Session(rscConf, sparkConf, None, { _ => stateChangedCalled.incrementAndGet() })
    try {
      // Session's constructor should fire an initial state change event.
      stateChangedCalled.intValue() shouldBe 1
      Await.ready(session.start(), 30 seconds)
      assert(session.state === SessionState.Idle)
      // There should be at least 1 state change event fired when session transits to idle.
      stateChangedCalled.intValue() should (be > 1)
      testCode(session)
    } finally {
      session.close()
    }
  }

  it should "start in the starting or idle state" in {
    val session = new Session(rscConf, sparkConf)
    val future = session.start()
    try {
      Await.ready(future, 60 seconds)
      session.state should (equal (SessionState.Starting) or equal (SessionState.Idle))
    } finally {
      session.close()
    }
  }

  it should "eventually become the idle state" in withSession { session =>
    session.state should equal (SessionState.Idle)
  }

} 
Example 188
Source File: SignInController.scala    From play-silhouette-reactivemongo-seed   with Apache License 2.0 5 votes vote down vote up
package controllers

import javax.inject.Inject

import com.mohiva.play.silhouette.api.Authenticator.Implicits._
import com.mohiva.play.silhouette.api._
import com.mohiva.play.silhouette.api.exceptions.ProviderException
import com.mohiva.play.silhouette.api.repositories.AuthInfoRepository
import com.mohiva.play.silhouette.api.util.{ Clock, Credentials }
import com.mohiva.play.silhouette.impl.exceptions.IdentityNotFoundException
import com.mohiva.play.silhouette.impl.providers._
import forms.SignInForm
import models.services.UserService
import net.ceedubs.ficus.Ficus._
import play.api.Configuration
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
import play.api.libs.concurrent.Execution.Implicits._
import play.api.mvc.Controller
import utils.auth.DefaultEnv

import scala.concurrent.Future
import scala.concurrent.duration._
import scala.language.postfixOps


  def submit = silhouette.UnsecuredAction.async { implicit request =>
    SignInForm.form.bindFromRequest.fold(
      form => Future.successful(BadRequest(views.html.signIn(form, socialProviderRegistry))),
      data => {
        val credentials = Credentials(data.email, data.password)
        credentialsProvider.authenticate(credentials).flatMap { loginInfo =>
          val result = Redirect(routes.ApplicationController.index())
          userService.retrieve(loginInfo).flatMap {
            case Some(user) if !user.activated =>
              Future.successful(Ok(views.html.activateAccount(data.email)))
            case Some(user) =>
              val c = configuration.underlying
              silhouette.env.authenticatorService.create(loginInfo).map {
                case authenticator if data.rememberMe =>
                  authenticator.copy(
                    expirationDateTime = clock.now + c.as[FiniteDuration]("silhouette.authenticator.rememberMe.authenticatorExpiry"),
                    idleTimeout = c.getAs[FiniteDuration]("silhouette.authenticator.rememberMe.authenticatorIdleTimeout"),
                    cookieMaxAge = c.getAs[FiniteDuration]("silhouette.authenticator.rememberMe.cookieMaxAge")
                  )
                case authenticator => authenticator
              }.flatMap { authenticator =>
                silhouette.env.eventBus.publish(LoginEvent(user, request))
                silhouette.env.authenticatorService.init(authenticator).flatMap { v =>
                  silhouette.env.authenticatorService.embed(v, result)
                }
              }
            case None => Future.failed(new IdentityNotFoundException("Couldn't find user"))
          }
        }.recover {
          case e: ProviderException =>
            Redirect(routes.SignInController.view()).flashing("error" -> Messages("invalid.credentials"))
        }
      }
    )
  }
} 
Example 189
Source File: ActivateAccountController.scala    From play-silhouette-reactivemongo-seed   with Apache License 2.0 5 votes vote down vote up
package controllers

import java.net.URLDecoder
import java.util.UUID
import javax.inject.Inject

import com.mohiva.play.silhouette.api._
import com.mohiva.play.silhouette.impl.providers.CredentialsProvider
import models.services.{ AuthTokenService, UserService }
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.mailer.{ Email, MailerClient }
import play.api.mvc.Controller
import utils.auth.DefaultEnv

import scala.concurrent.Future
import scala.language.postfixOps


  def activate(token: UUID) = silhouette.UnsecuredAction.async { implicit request =>
    authTokenService.validate(token).flatMap {
      case Some(authToken) => userService.retrieve(authToken.userID).flatMap {
        case Some(user) if user.loginInfo.providerID == CredentialsProvider.ID =>
          userService.save(user.copy(activated = true)).map { _ =>
            Redirect(routes.SignInController.view()).flashing("success" -> Messages("account.activated"))
          }
        case _ => Future.successful(Redirect(routes.SignInController.view()).flashing("error" -> Messages("invalid.activation.link")))
      }
      case None => Future.successful(Redirect(routes.SignInController.view()).flashing("error" -> Messages("invalid.activation.link")))
    }
  }
} 
Example 190
Source File: KafkaStreamSuite.scala    From sparkoscope   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.streaming.kafka

import scala.collection.mutable
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.util.Random

import kafka.serializer.StringDecoder
import org.scalatest.BeforeAndAfterAll
import org.scalatest.concurrent.Eventually

import org.apache.spark.{SparkConf, SparkFunSuite}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Milliseconds, StreamingContext}

class KafkaStreamSuite extends SparkFunSuite with Eventually with BeforeAndAfterAll {
  private var ssc: StreamingContext = _
  private var kafkaTestUtils: KafkaTestUtils = _

  override def beforeAll(): Unit = {
    kafkaTestUtils = new KafkaTestUtils
    kafkaTestUtils.setup()
  }

  override def afterAll(): Unit = {
    if (ssc != null) {
      ssc.stop()
      ssc = null
    }

    if (kafkaTestUtils != null) {
      kafkaTestUtils.teardown()
      kafkaTestUtils = null
    }
  }

  test("Kafka input stream") {
    val sparkConf = new SparkConf().setMaster("local[4]").setAppName(this.getClass.getSimpleName)
    ssc = new StreamingContext(sparkConf, Milliseconds(500))
    val topic = "topic1"
    val sent = Map("a" -> 5, "b" -> 3, "c" -> 10)
    kafkaTestUtils.createTopic(topic)
    kafkaTestUtils.sendMessages(topic, sent)

    val kafkaParams = Map("zookeeper.connect" -> kafkaTestUtils.zkAddress,
      "group.id" -> s"test-consumer-${Random.nextInt(10000)}",
      "auto.offset.reset" -> "smallest")

    val stream = KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](
      ssc, kafkaParams, Map(topic -> 1), StorageLevel.MEMORY_ONLY)
    val result = new mutable.HashMap[String, Long]()
    stream.map(_._2).countByValue().foreachRDD { r =>
      r.collect().foreach { kv =>
        result.synchronized {
          val count = result.getOrElseUpdate(kv._1, 0) + kv._2
          result.put(kv._1, count)
        }
      }
    }

    ssc.start()

    eventually(timeout(10000 milliseconds), interval(100 milliseconds)) {
      assert(result.synchronized { sent === result })
    }
  }
} 
Example 191
Source File: FlumeStreamSuite.scala    From sparkoscope   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.streaming.flume

import java.util.concurrent.ConcurrentLinkedQueue

import scala.collection.JavaConverters._
import scala.concurrent.duration._
import scala.language.postfixOps

import org.jboss.netty.channel.ChannelPipeline
import org.jboss.netty.channel.socket.SocketChannel
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory
import org.jboss.netty.handler.codec.compression._
import org.scalatest.{BeforeAndAfter, Matchers}
import org.scalatest.concurrent.Eventually._

import org.apache.spark.{SparkConf, SparkFunSuite}
import org.apache.spark.internal.Logging
import org.apache.spark.network.util.JavaUtils
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Milliseconds, StreamingContext, TestOutputStream}

class FlumeStreamSuite extends SparkFunSuite with BeforeAndAfter with Matchers with Logging {
  val conf = new SparkConf().setMaster("local[4]").setAppName("FlumeStreamSuite")
  var ssc: StreamingContext = null

  test("flume input stream") {
    testFlumeStream(testCompression = false)
  }

  test("flume input compressed stream") {
    testFlumeStream(testCompression = true)
  }

  
  private class CompressionChannelFactory(compressionLevel: Int)
    extends NioClientSocketChannelFactory {

    override def newChannel(pipeline: ChannelPipeline): SocketChannel = {
      val encoder = new ZlibEncoder(compressionLevel)
      pipeline.addFirst("deflater", encoder)
      pipeline.addFirst("inflater", new ZlibDecoder())
      super.newChannel(pipeline)
    }
  }
} 
Example 192
Source File: StatusTrackerSuite.scala    From sparkoscope   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark

import scala.concurrent.duration._
import scala.language.implicitConversions
import scala.language.postfixOps

import org.scalatest.Matchers
import org.scalatest.concurrent.Eventually._

import org.apache.spark.JobExecutionStatus._

class StatusTrackerSuite extends SparkFunSuite with Matchers with LocalSparkContext {

  test("basic status API usage") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    val jobFuture = sc.parallelize(1 to 10000, 2).map(identity).groupBy(identity).collectAsync()
    val jobId: Int = eventually(timeout(10 seconds)) {
      val jobIds = jobFuture.jobIds
      jobIds.size should be(1)
      jobIds.head
    }
    val jobInfo = eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobInfo(jobId).get
    }
    jobInfo.status() should not be FAILED
    val stageIds = jobInfo.stageIds()
    stageIds.size should be(2)

    val firstStageInfo = eventually(timeout(10 seconds)) {
      sc.statusTracker.getStageInfo(stageIds(0)).get
    }
    firstStageInfo.stageId() should be(stageIds(0))
    firstStageInfo.currentAttemptId() should be(0)
    firstStageInfo.numTasks() should be(2)
    eventually(timeout(10 seconds)) {
      val updatedFirstStageInfo = sc.statusTracker.getStageInfo(stageIds(0)).get
      updatedFirstStageInfo.numCompletedTasks() should be(2)
      updatedFirstStageInfo.numActiveTasks() should be(0)
      updatedFirstStageInfo.numFailedTasks() should be(0)
    }
  }

  test("getJobIdsForGroup()") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    // Passing `null` should return jobs that were not run in a job group:
    val defaultJobGroupFuture = sc.parallelize(1 to 1000).countAsync()
    val defaultJobGroupJobId = eventually(timeout(10 seconds)) {
      defaultJobGroupFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup(null).toSet should be (Set(defaultJobGroupJobId))
    }
    // Test jobs submitted in job groups:
    sc.setJobGroup("my-job-group", "description")
    sc.statusTracker.getJobIdsForGroup("my-job-group") should be (Seq.empty)
    val firstJobFuture = sc.parallelize(1 to 1000).countAsync()
    val firstJobId = eventually(timeout(10 seconds)) {
      firstJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group") should be (Seq(firstJobId))
    }
    val secondJobFuture = sc.parallelize(1 to 1000).countAsync()
    val secondJobId = eventually(timeout(10 seconds)) {
      secondJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group").toSet should be (
        Set(firstJobId, secondJobId))
    }
  }

  test("getJobIdsForGroup() with takeAsync()") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    sc.setJobGroup("my-job-group2", "description")
    sc.statusTracker.getJobIdsForGroup("my-job-group2") shouldBe empty
    val firstJobFuture = sc.parallelize(1 to 1000, 1).takeAsync(1)
    val firstJobId = eventually(timeout(10 seconds)) {
      firstJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group2") should be (Seq(firstJobId))
    }
  }

  test("getJobIdsForGroup() with takeAsync() across multiple partitions") {
    sc = new SparkContext("local", "test", new SparkConf(false))
    sc.setJobGroup("my-job-group2", "description")
    sc.statusTracker.getJobIdsForGroup("my-job-group2") shouldBe empty
    val firstJobFuture = sc.parallelize(1 to 1000, 2).takeAsync(999)
    val firstJobId = eventually(timeout(10 seconds)) {
      firstJobFuture.jobIds.head
    }
    eventually(timeout(10 seconds)) {
      sc.statusTracker.getJobIdsForGroup("my-job-group2") should have size 2
    }
  }
} 
Example 193
Source File: LauncherBackendSuite.scala    From sparkoscope   with Apache License 2.0 5 votes vote down vote up
package org.apache.spark.launcher

import java.util.concurrent.TimeUnit

import scala.concurrent.duration._
import scala.language.postfixOps

import org.scalatest.Matchers
import org.scalatest.concurrent.Eventually._

import org.apache.spark._

class LauncherBackendSuite extends SparkFunSuite with Matchers {

  private val tests = Seq(
    "local" -> "local",
    "standalone/client" -> "local-cluster[1,1,1024]")

  tests.foreach { case (name, master) =>
    test(s"$name: launcher handle") {
      testWithMaster(master)
    }
  }

  private def testWithMaster(master: String): Unit = {
    val env = new java.util.HashMap[String, String]()
    env.put("SPARK_PRINT_LAUNCH_COMMAND", "1")
    val handle = new SparkLauncher(env)
      .setSparkHome(sys.props("spark.test.home"))
      .setConf(SparkLauncher.DRIVER_EXTRA_CLASSPATH, System.getProperty("java.class.path"))
      .setConf("spark.ui.enabled", "false")
      .setConf(SparkLauncher.DRIVER_EXTRA_JAVA_OPTIONS, s"-Dtest.appender=console")
      .setMaster(master)
      .setAppResource(SparkLauncher.NO_RESOURCE)
      .setMainClass(TestApp.getClass.getName().stripSuffix("$"))
      .startApplication()

    try {
      eventually(timeout(30 seconds), interval(100 millis)) {
        handle.getAppId() should not be (null)
      }

      handle.stop()

      eventually(timeout(30 seconds), interval(100 millis)) {
        handle.getState() should be (SparkAppHandle.State.KILLED)
      }
    } finally {
      handle.kill()
    }
  }

}

object TestApp {

  def main(args: Array[String]): Unit = {
    new SparkContext(new SparkConf()).parallelize(Seq(1)).foreach { i =>
      Thread.sleep(TimeUnit.SECONDS.toMillis(20))
    }
  }

} 
Example 194
Source File: StreamingContextUtils.scala    From sscheck   with Apache License 2.0 5 votes vote down vote up
package es.ucm.fdi.sscheck.spark.streaming

import scala.concurrent._
import scala.concurrent.duration._
import scala.language.postfixOps
import ExecutionContext.Implicits.global
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.scheduler.{StreamingListener, StreamingListenerReceiverStarted, StreamingListenerBatchCompleted}

// Inline alternative implementation based on SyncVar
object StreamingContextUtils {
  
  def awaitForNBatchesCompleted(numBatches : Int, atMost : scala.concurrent.duration.Duration = 30 seconds)
                               (ssc : StreamingContext) : Unit = {
    val onBatchCompletedSyncVar = new SyncVar[Unit]
    ssc.addStreamingListener(new StreamingListener {
      override def onBatchCompleted(batchCompleted: StreamingListenerBatchCompleted) : Unit =  {  
        if (! onBatchCompletedSyncVar.isSet) {
          // note only this threads makes puts, so no problem with concurrency
          onBatchCompletedSyncVar.put(())
        }
      }
    })
    val waitingForBatches = Future {
      for (_ <- 1 to numBatches) {
        onBatchCompletedSyncVar.take()
      }  
    }
    Await.result(waitingForBatches, atMost)
  }
} 
Example 195
Source File: ReGen.scala    From sscheck   with Apache License 2.0 5 votes vote down vote up
package es.ucm.fdi.sscheck.gen

import org.scalacheck.Gen

import es.ucm.fdi.sscheck.gen.UtilsGen.containerOfNtoM;
import Buildables.buildableSeq
import UtilsGen.{containerOfNtoM}

import scala.language.postfixOps


object ReGen {
  
  val epsilon = Gen.const(List()) 
  
  def symbol[A](s : A) : Gen[Seq[A]] = Gen.const(List(s))
  
  // def alt[A](g1 : Gen[Seq[A]], g2 : Gen[Seq[A]]) : Gen[Seq[A]] = Gen.oneOf(g1, g2)
  def alt[A](gs : Gen[Seq[A]]*) : Gen[Seq[A]] = {
    val l = gs.length
    // require (l > 0, "alt needs at least one alternative")
    if (l == 0)
       epsilon
  	else if (l == 1)
  		gs(0)
  	else
      Gen.oneOf(gs(0), gs(1), gs.slice(2, l):_*)
  }   
  
  def conc[A](g1 : Gen[Seq[A]], g2 : Gen[Seq[A]]) : Gen[Seq[A]] = {
     for {
       xs <- g1
       ys <- g2
     } yield xs ++ ys
  }
  
  def star[A](g : Gen[Seq[A]]) : Gen[Seq[A]] = {
    for {
	  xs <- Gen.containerOf(g)
	} yield xs flatten
  }    
} 
Example 196
Source File: ReportAndLogSupport.scala    From RTran   with Apache License 2.0 5 votes vote down vote up
package com.ebay.rtran.report

import java.io.{File, FileOutputStream}

import ch.qos.logback.classic
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.filter.ThresholdFilter
import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.FileAppender
import org.reflections.Reflections
import com.ebay.rtran.report.api.IReportEventSubscriber
import org.slf4j.{Logger, LoggerFactory}

import scala.collection.JavaConversions._
import scala.language.postfixOps
import scala.util.{Success, Try}


trait ReportAndLogSupport {

  val reportFilePrefix: String
  val warnLogPrefix: String
  val debugLogPrefix: String

  def createReportAndLogs[T](projectRoot: File,
                             taskId: Option[String], packages: String*)(fn: => T): T = {
    val appenders = prepareAppenders(projectRoot, taskId)
    val rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME).asInstanceOf[classic.Logger]
    appenders foreach rootLogger.addAppender
    appenders foreach (_.start)
    val reportFile = new File(projectRoot, s"$reportFilePrefix${taskId.map("-" + _) getOrElse ""}.md")
    val result = Report.createReport(
      new FileOutputStream(reportFile),
      subscribers = allSubscribers(projectRoot, packages: _*)
    )(fn)
    appenders foreach (_.stop)
    appenders foreach rootLogger.detachAppender
    result
  }

  def allSubscribers(projectRoot: File, packages: String*) = {
    val subscribers = packages flatMap {prefix =>
      new Reflections(prefix).getSubTypesOf(classOf[IReportEventSubscriber[_]])
    } map {clazz =>
      Try(clazz.getDeclaredConstructor(classOf[File]).newInstance(projectRoot)) orElse Try(clazz.newInstance)
    } collect {
      case Success(subscriber) => subscriber
    } toList

    subscribers.sortBy(_.sequence)
  }

  private def prepareAppenders(projectRoot: File, taskId: Option[String]) = {
    val lc = LoggerFactory.getILoggerFactory.asInstanceOf[classic.LoggerContext]
    val encoders = Array(new PatternLayoutEncoder, new PatternLayoutEncoder)
    encoders foreach (_ setContext lc)
    encoders foreach (_ setPattern "%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}.%M:%L - %m%n")
    encoders foreach (_.start)

    val warnFileAppender = new FileAppender[ILoggingEvent]
    warnFileAppender.setName("warnFileAppender")
    warnFileAppender.setFile(s"${projectRoot.getAbsolutePath}/$warnLogPrefix${taskId.map("-" + _) getOrElse ""}.log")
    warnFileAppender.addFilter(new SameThreadFilter)
    val warnFilter = new ThresholdFilter
    warnFilter.setLevel("WARN")
    warnFilter.start()
    warnFileAppender.addFilter(warnFilter)

    val debugFileAppender = new FileAppender[ILoggingEvent]
    debugFileAppender.setName("debugFileAppender")
    debugFileAppender.setFile(s"${projectRoot.getAbsolutePath}/$debugLogPrefix${taskId.map("-" + _) getOrElse ""}.log")
    debugFileAppender.addFilter(new SameThreadFilter)
    val debugFilter = new ThresholdFilter
    debugFilter.setLevel("DEBUG")
    debugFilter.start()
    debugFileAppender.addFilter(debugFilter)

    val result = List(warnFileAppender, debugFileAppender)
    result.foreach(_ setContext lc)
    result zip encoders foreach (entry => entry._1 setEncoder entry._2)
    result
  }
} 
Example 197
Source File: ExampleBank.scala    From affinity   with Apache License 2.0 5 votes vote down vote up
package io.amient.affinity.example

import akka.http.scaladsl.model.HttpMethods
import akka.util.Timeout
import io.amient.affinity.avro.record.{AvroRecord, Fixed}
import io.amient.affinity.core.ack
import io.amient.affinity.core.actor.{GatewayHttp, GatewayStream, Partition, Routed}
import io.amient.affinity.core.http.RequestMatchers.{HTTP, INT, PATH, QUERY}
import io.amient.affinity.core.storage.Record
import io.amient.affinity.core.util._

import scala.concurrent.duration._
import scala.language.postfixOps

case class Account(sortcode: String, number: Int) extends AvroRecord
case class Transaction(id: Long, amount: Double, timestamp: Long) extends AvroRecord with EventTime {
  override def eventTimeUnix() = timestamp
}


class ExampleBank extends GatewayStream with GatewayHttp {

  implicit val executor = context.dispatcher
  implicit val scheduler = context.system.scheduler
  implicit val timeout = Timeout(5 seconds)

  val defaultKeyspace = keyspace("default")

  input[Account, Transaction]("input-stream") { record: Record[Account, Transaction] =>
    defaultKeyspace ?! StoreTransaction(record.key, record.value)
  }

  override def handle: Receive = {
    case HTTP(HttpMethods.GET, PATH("transactions", sortcode, INT(number)), _, response) =>
      defaultKeyspace ?! GetAccountTransactions(Account(sortcode, number)) map (handleAsJson(response, _))

    case HTTP(HttpMethods.GET, PATH("transactions", sortcode), QUERY(("before", before)), response) =>
      defaultKeyspace ?? GetBranchTransactions(sortcode, EventTime.unix(before+"T00:00:00+00:00")) map (handleAsJson(response, _))

    case HTTP(HttpMethods.GET, PATH("transactions", sortcode), _, response) =>
      defaultKeyspace ?? GetBranchTransactions(sortcode) map (handleAsJson(response, _))
  }

}


case class StoreTransaction(key: Account, t: Transaction) extends AvroRecord with Routed with Reply[Option[Transaction]]
case class StorageKey(@Fixed(8) sortcode: String, @Fixed account: Int, txn: Long) extends AvroRecord
case class GetAccountTransactions(key: Account) extends AvroRecord with Routed with Reply[Seq[Transaction]]
case class GetBranchTransactions(sortcode: String, beforeUnixTs: Long = Long.MaxValue) extends AvroRecord with ScatterIterable[Transaction]

class DefaultPartition extends Partition {

  val transactions = state[StorageKey, Transaction]("transactions")

  implicit val executor = context.dispatcher

  override def handle: Receive = {

    case request@StoreTransaction(Account(sortcode, number), transaction) => request(sender) ! {
      transactions.replace(StorageKey(sortcode, number, transaction.id), transaction)
    } map {
      _ => context.system.eventStream.publish(request) //this is only to have determinist way of testing all data was processed
    }

    case request@GetBranchTransactions(sortcode, before) =>
      request(sender) ! transactions.range(TimeRange.until(before), sortcode).values.toList

    case request@GetAccountTransactions(account) => request(sender) ! {
      transactions.range(TimeRange.UNBOUNDED, account.sortcode, account.number).values.toList
    }
  }
} 
Example 198
Source File: ExampleHttpsGatewaySpec.scala    From affinity   with Apache License 2.0 5 votes vote down vote up
import akka.util.Timeout
import com.typesafe.config.ConfigFactory
import io.amient.affinity.core.ack
import io.amient.affinity.core.cluster.Node
import io.amient.affinity.core.util.AffinityTestBase
import org.scalatest.{FlatSpec, Matchers}

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.language.postfixOps

class ExampleHttpsGatewaySpec extends FlatSpec with AffinityTestBase with Matchers {

  behavior of "Simple Api Gateway"

  it should "work with multiple listeners" in {
    val config = ConfigFactory.load("https-example")
    val node = new Node(config)
    node.start()
    try {
      node.awaitClusterReady
      node.get_json(node.https_get("/secure/ping", 0)).asText() should be ("pong")
      node.get_json(node.http_get("/unsafe/ping", 1)).asText() should be ("pong")
    } finally {
      node.shutdown()
    }
  }

  it should "work without the http layer" in {

    val config = ConfigFactory.load("https-example-test")
    val node = new Node(config)
    node.start()
    try {
      node.awaitClusterReady
      implicit val scheduler = node.system.scheduler
      implicit val context = node.system.dispatcher
      implicit val timeout = Timeout(3 seconds)
      Await.result(node.gateway ?! GetData("key1"), 3 seconds) should be(None)
      Await.result(node.gateway ?! PutData("key1", "value1"), 3 seconds) should be(None)
      Await.result(node.gateway ?! GetData("key1"), 3 seconds) should be(Some("value1"))
      Await.result(node.gateway ?! PutData("key1", "value2"), 3 seconds) should be(Some("value1"))
      Await.result(node.gateway ?! GetData("key1"), 3 seconds) should be(Some("value2"))
    } finally {
      node.shutdown()
    }

  }

} 
Example 199
Source File: GraphApi.scala    From affinity   with Apache License 2.0 5 votes vote down vote up
import akka.util.Timeout
import io.amient.affinity.core.ack
import io.amient.affinity.core.actor.Gateway
import message._

import scala.concurrent.duration._
import scala.concurrent.{Future, Promise}
import scala.language.postfixOps
import scala.util.control.NonFatal

trait GraphApi extends Gateway {

  import context.dispatcher

  implicit val scheduler = context.system.scheduler

  val graphService = keyspace("graph")

  protected def getVertexProps(vid: Int): Future[Option[VertexProps]] = {
    implicit val timeout = Timeout(1 seconds)
    graphService ?! GetVertexProps(vid)
  }

  protected def getGraphComponent(cid: Int): Future[Option[Component]] = {
    implicit val timeout = Timeout(1 seconds)
    graphService ?! GetComponent(cid)
  }

  protected def connect(v1: Int, v2: Int): Future[Set[Int]] = {
    implicit val timeout = Timeout(5 seconds)
    val ts = System.currentTimeMillis
    graphService ?! ModifyGraph(v1, Edge(v2, ts, Map(
      "hello" -> "world", "time" -> System.currentTimeMillis().toString)), GOP.ADD) flatMap {
      case props1 => graphService ?! ModifyGraph(v2, Edge(v1, ts), GOP.ADD) flatMap {
        case props2 => collectComponent(v2) flatMap {
          case mergedComponent =>
            val newComponentID = mergedComponent.connected.min
            graphService ?! UpdateComponent(newComponentID, mergedComponent)
            if (props1.component != newComponentID) graphService ?! DeleteComponent(props1.component)
            if (props2.component != newComponentID) graphService ?! DeleteComponent(props2.component)
            Future.sequence(mergedComponent.connected.map { v =>
              graphService ?! UpdateVertexComponent(v, newComponentID)
            })
        }
      }
    }

  }

  protected def disconnect(v1: Int, v2: Int): Future[Set[Int]] = {
    implicit val timeout = Timeout(5 seconds)

    val ts = System.currentTimeMillis
    graphService ?! ModifyGraph(v1, Edge(v2, ts), GOP.REMOVE) flatMap {
      case props1 => graphService ?! ModifyGraph(v2, Edge(v1, ts), GOP.REMOVE) flatMap {
        case props2 => collectComponent(v1) flatMap {
          case component1 => collectComponent(v2) flatMap {
            case component2 =>
              val newComponentIDS = List(component1.connected.min, component2.connected.min)
              graphService ?! UpdateComponent(newComponentIDS(0), component1)
              graphService ?! UpdateComponent(newComponentIDS(1), component2)
              if (!newComponentIDS.contains(props1.component)) graphService ?! DeleteComponent(props1.component)
              if (!newComponentIDS.contains(props2.component)) graphService ?! DeleteComponent(props2.component)
              Future.sequence {
                component1.connected.map { v =>
                  graphService ?! UpdateVertexComponent(v, newComponentIDS(0))
                } ++ component2.connected.map { v =>
                  graphService ?! UpdateVertexComponent(v, newComponentIDS(1))
                }
              }
          }
        }
      }
    }
  }

  private def collectComponent(vertex: Int): Future[Component] = {
    val promise = Promise[Component]()
    val ts = System.currentTimeMillis
    implicit val timeout = Timeout(1 seconds)

    def collect(queue: Set[Int], agg: Set[Int]): Unit = {
      if (queue.isEmpty) {
        promise.success(Component(ts, agg))
      }
      else graphService ?! GetVertexProps(queue.head) map {
        _ match {
          case None => throw new NoSuchElementException
          case Some(VertexProps(_, _, Edges(connected))) => collect(queue.tail ++ (connected -- agg), agg ++ connected)
        }
      } recover {
        case NonFatal(e) => promise.failure(e)
      }
    }

    collect(Set(vertex), Set(vertex))
    promise.future
  }

} 
Example 200
Source File: Node.scala    From affinity   with Apache License 2.0 5 votes vote down vote up
package io.amient.affinity.core.cluster


import java.util.concurrent.{CountDownLatch, TimeUnit, TimeoutException}

import akka.actor.{Actor, Props}
import akka.event.Logging
import akka.util.Timeout
import com.typesafe.config.{Config, ConfigFactory}
import io.amient.affinity.core.ack
import io.amient.affinity.core.actor.Controller._
import io.amient.affinity.core.actor.Gateway.{GatewayClusterStatus, GatewayConf}
import io.amient.affinity.core.actor._
import io.amient.affinity.core.config._
import io.amient.affinity.{AffinityActorSystem, Conf}

import scala.concurrent.duration._
import scala.concurrent.{Await, Future, Promise}
import scala.language.{implicitConversions, postfixOps}
import scala.reflect.ClassTag

object Node {

  class NodeConf extends CfgStruct[NodeConf] {
    val Containers: CfgGroup[CfgIntList] = group("container", classOf[CfgIntList], false)
      .doc("Array of partitions assigned to this node, <ID> represents the Keyspace, e.g. assigning first four partitions of MyKeySpace: affinity.node.container.MyKeySpace = [0,1,2,3] ")
    val Gateway: GatewayConf = struct("gateway", new GatewayConf, false)
    val SuspendQueueMaxSize = integer("suspend.queue.max.size", 1000).doc("Size of the queue when the cluster enters suspended mode")
    val StartupTimeoutMs = longint("startup.timeout.ms", Integer.MAX_VALUE).doc("Maximum time a node can take to startup - this number must account for any potential state bootstrap")
    val ShutdownTimeoutMs = longint("shutdown.timeout.ms", 30000).doc("Maximum time a node can take to shutdown gracefully")
    val DataDir = filepath("data.dir", false).doc("Location under which any local state or registers will be kept - this is required if running in a distributed mode or when using persisted kv stores")
    val DataAutoAssign = bool("data.auto.assign", true, false).doc("Determines whether this node auto-balances data its containers; if set tot false the fixed list of container partitions will be used")
    val DataAutoDelete = bool("data.auto.delete", true, false).doc("If set to true, any unassigned partitions will be deleted from the local storage")
  }

}

class Node(config: Config) {

  def this(configResource: String) = this(ConfigFactory.parseResources(configResource).resolve)

  val conf = Conf(config)

  val startupTimeout = conf.Affi.Node.StartupTimeoutMs().toLong milliseconds
  val shutdownTimeout = conf.Affi.Node.ShutdownTimeoutMs().toLong milliseconds

  implicit val system = AffinityActorSystem.create(config)

  private val log = Logging.getLogger(system, this)

  private val controller = system.actorOf(Props(new Controller), name = "controller")

  private val httpGatewayPort = Promise[List[Int]]()

  private val clusterReady = new CountDownLatch(1)

  @volatile private var shuttingDown = false

  @volatile private var fatalError: Option[Throwable] = None

  import scala.concurrent.ExecutionContext.Implicits.global

  val systemEventsWatcher = system.actorOf(Props(new Actor {
    override def receive: Receive = {
      case GatewayClusterStatus(false) => clusterReady.countDown()
      case FatalErrorShutdown(e) =>
        fatalError = Some(e)
        shutdown()
    }
  }))

  system.eventStream.subscribe(systemEventsWatcher, classOf[GatewayClusterStatus])

  system.eventStream.subscribe(systemEventsWatcher, classOf[FatalErrorShutdown])

  sys.addShutdownHook {
    if (!shuttingDown) {
      log.info("process killed - attempting graceful shutdown")
      fatalError = None
      shutdown()
    }
    Await.ready(system.terminate, shutdownTimeout)
  }

  
  def start[T <: Gateway](creator: => T)(implicit tag: ClassTag[T]): Future[List[Int]] = {
    controller ! StartRebalance()
    implicit val timeout = Timeout(startupTimeout)
    val result = controller ?? CreateGateway(Props(creator))
    httpGatewayPort.completeWith(result)
    result
  }

}