paypal / squbs Goto Github PK
View Code? Open in Web Editor NEWAkka Streams & Akka HTTP for Large-Scale Production Deployments
Home Page: http://paypal.github.io/squbs
License: Apache License 2.0
Akka Streams & Akka HTTP for Large-Scale Production Deployments
Home Page: http://paypal.github.io/squbs
License: Apache License 2.0
The Java API may be wrappers for the current Scala API.
May be optionally, at least.
Our branch structure should be clean as part of 0.7.0.
Add Validation support for spray layer.
In case of extension init failures, the system state event message sent to interested parties (admin console) is not sent. Consoles cannot update their state correctly.
Configure CI to publish code coverage numbers on README page, and accessible publicly.
This is more efficient than the current String manipulations. We should also pass Uri and not String as parameter.
Need a thorough review of the APIs and make sure all is documented. Actor-based interaction would need different kind of documentation, which should be pursued differently.
Akka-http 1.1 promises performance on par with Spray and will replace Spray going forward. squbs needs to adopt akka-http as the replacement for spray.
This issue is created to deal with akka-http from the server dispatch side.
The orchestration DSL is currently achieved by using the sbt boilerplate plugin. It could be made far more powerful and flexible by implementing the same using compiler macros. We should investigate and implement if feasible.
It is a bit too small to be its own module. We better keep it together with Patterns.
As part of akka-http support, we need to move the squbs-httpclient from sitting on top of Spray to use akka-http instead.
Simplify httpclient with less actor creation.
So we can implement features like consuming an SSE stream.
This is to ensure akka-http is absolutely ready for prime time. This issue is a release blocker for 0.8.
All documentation should be in good quality.
Also add logger artifact dependencies to tests as log messages will get lost without those.
If there are other places, those should be masked as well.
All squbs samples should be functional. We need to make sure all samples builds and runs. Few obvious issues with resolves:
The '?' becomes encoded as part of path, not really a query string.
squbs has been supporting registration of actors and services so far. With the arrival of akka-streams in squbs, we need to support registration of stream artifacts. We need to prototype/discuss the proper manifestation of these artifacts before going about implementing it.
The response to ReportStatus (a tuple) exposes member types that are private to unicomplex.
Refactor some classes from unicomplex to pipeline, most of them are from org.squbs.proxy, now moved to org.squbs.pipeline in squbs-pipeline project.
Simplify pipeline management, remove some classes like PipelineRegistry.
We should publish code quality metrics from ScalaStyle and/or ScapeGoat.
As today, if we want to test RouteDefinition using spray-testkit, we need to add some workaround to create the route instance.
e.g.
val actor = TestActorRef[DummyActor]
val route = RouteDefinition
.startRoutes(new SellercommunitysvcSvc)(actor.underlyingActor.context).route
class DummyActor extends Actor {
override def receive: Receive = {
case whatever =>
}
}
Then apply the route assertion like:
REQUEST ~> route ~> check {
ASSERTIONS
}
This will make getting started much easier.
Waiting the following issues to be resolved:
This should expose system stats as well as JMX MBeans. Console could consist of well documented REST APIs so users can build and/or integrate with their own UI.
Two issues with this package:
Also standardize on spray-routing-shapeless2.
Note: All projects based on squbs 0.7 MUST replace spray-routing
with spray-routing-shapeless2
We should publish to Sonatype and maven central from Travis CI.
Instead, we should calculate the ask timeout to be marginally larger than the request timeout.
Especially in pipeline, unicomplex/proxy, httpclient.
Many files don't have the headers. Also, code coverage is low. Can you please beef this up?
Currently the actor name would be assigned to the ProxyActor if a processor exists, considering if we can give an name to the service actor in case of actor selection
proxyName.fold(pipelineManager.default) {
case "" => None
case other => pipelineManager.getProcessor(other)
} match {
case None =>
val hostActor = context.actorOf(props, name) // disable proxy
(hostActor, SimpleActor(hostActor))
case Some(proc) =>
val hostActor = context.actorOf(props)
(hostActor, ProxiedActor(context.actorOf(Props(classOf[CubeProxyActor], proc, hostActor), name)))
}
A problem we need to consider is, what the actor names should be for the ServiceActor and ProxiedActor
Need to investigate hanging build.
This is in particular to the StashCubeSvc calls in the test. Sometimes there is nothing stashed. Looks like a timeout issue.
The orchestration DSL currently requires users to write the initial expectOnce block, which is boilerplate. We should be able to use a typed actor for the same purpose and eliminate this boilerplate, thus passing the received initial message and the original requester to the orchestrate function directly.
This does not work as sbt-revolver does not pass the class path in the system properties. Need to scan the real class path instead of the properties.
Wrappers should be at virtually no cost. We just need to review all of them.
How to mock actorSelection logic in the actor if we want to test the actor?
An activator template for this sample code would be great!
Build fails with the following:
message=Expected token RBRACKET but got Token(XML_START_OPEN,<,10847,<)
java.lang.RuntimeException: exists error
08:07:05 at scala.sys.package$.error(package.scala:27)
08:07:05 at scala.Predef$.error(Predef.scala:142)
08:07:05 at org.scalastyle.sbt.Tasks$.onHasErrors$1(Plugin.scala:99)
Please see:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.