mirror of https://github.com/reiseburo/offtopic
Start fetching information from zookeeper on load of the main page
This commit is contained in:
parent
9f06b78fa8
commit
3665149fb3
|
@ -38,5 +38,11 @@ dependencies {
|
||||||
|
|
||||||
testCompile 'org.spockframework:spock-core:0.7-groovy-2.0'
|
testCompile 'org.spockframework:spock-core:0.7-groovy-2.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
test {
|
||||||
|
testLogging {
|
||||||
|
events "passed", "skipped", "failed", "standardOut", "standardError"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
package offtopic
|
package offtopic.curator
|
||||||
|
|
||||||
import org.apache.curator.retry.ExponentialBackoffRetry
|
import org.apache.curator.retry.ExponentialBackoffRetry
|
||||||
import org.apache.curator.framework.CuratorFrameworkFactory
|
import org.apache.curator.framework.CuratorFrameworkFactory
|
||||||
|
|
||||||
class CuratorClient {
|
class CuratorClient {
|
||||||
private def client = null
|
def client = null
|
||||||
|
|
||||||
public CuratorClient(String zookeepers) {
|
public CuratorClient(String zookeepers) {
|
||||||
if (zookeepers?.length() <= 0) {
|
if (zookeepers?.length() <= 0) {
|
||||||
throw new offtopic.errors.ConfigurationError("Cannot pass an empty string to CuratorClient()")
|
throw new offtopic.errors.ConfigurationError("Cannot pass an empty string to CuratorClient()")
|
||||||
}
|
}
|
||||||
|
def retry = new ExponentialBackoffRetry(1000, 3)
|
||||||
|
this.client = CuratorFrameworkFactory.newClient(zookeepers, retry)
|
||||||
|
this.client.start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package offtopic.curator
|
||||||
|
|
||||||
|
import org.apache.commons.pool2.*
|
||||||
|
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object factory class for keeping an object pool of CuratorClient objects
|
||||||
|
*
|
||||||
|
* @author R. Tyler Croy
|
||||||
|
*/
|
||||||
|
class CuratorClientObjectFactory extends BasePooledObjectFactory<CuratorClient> {
|
||||||
|
|
||||||
|
private String zookeepers = null
|
||||||
|
|
||||||
|
public CuratorClientObjectFactory(String zks) {
|
||||||
|
this.zookeepers = zks
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
CuratorClient create() {
|
||||||
|
return new CuratorClient(this.zookeepers)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
PooledObject<CuratorClient> wrap(CuratorClient client) {
|
||||||
|
return new DefaultPooledObject<CuratorClient>(client)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
package offtopic
|
package offtopic.curator
|
||||||
|
|
||||||
import org.apache.commons.pool2.impl.GenericObjectPool
|
import org.apache.commons.pool2.impl.GenericObjectPool
|
||||||
|
|
||||||
@Singleton(strict=false)
|
@Singleton(strict=false)
|
||||||
class CuratorPool {
|
class CuratorPool extends GenericObjectPool<CuratorClient>{
|
||||||
GenericObjectPool<CuratorClient> pool
|
|
||||||
|
|
||||||
private CuratorPool() {
|
private CuratorPool() {
|
||||||
|
/** XXX: Figure out how to get ZK from settings */
|
||||||
|
super(new CuratorClientObjectFactory('localhost:2181'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import static ratpack.jackson.Jackson.json
|
||||||
import static ratpack.groovy.Groovy.*
|
import static ratpack.groovy.Groovy.*
|
||||||
import static ratpack.websocket.WebSockets.websocket
|
import static ratpack.websocket.WebSockets.websocket
|
||||||
|
|
||||||
import offtopic
|
import offtopic.curator.CuratorPool
|
||||||
|
|
||||||
ratpack {
|
ratpack {
|
||||||
bindings {
|
bindings {
|
||||||
|
@ -15,6 +15,16 @@ ratpack {
|
||||||
}
|
}
|
||||||
handlers {
|
handlers {
|
||||||
get {
|
get {
|
||||||
|
curator = null
|
||||||
|
try {
|
||||||
|
curator = CuratorPool.instance.borrowObject()
|
||||||
|
println curator.client.getChildren().forPath('/')
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (curator != null) {
|
||||||
|
CuratorPool.instance.returnObject(curator)
|
||||||
|
}
|
||||||
|
}
|
||||||
render 'offtopic!'
|
render 'offtopic!'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package offtopic.curator
|
||||||
|
|
||||||
|
import spock.lang.Specification
|
||||||
|
|
||||||
|
class CuratorClientObjectFactorySpec extends Specification {
|
||||||
|
|
||||||
|
def "instantiation with zookeepers"() {
|
||||||
|
when:
|
||||||
|
def ccof = new CuratorClientObjectFactory('hello')
|
||||||
|
|
||||||
|
then:
|
||||||
|
ccof.zookeepers == 'hello'
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package offtopic
|
package offtopic.curator
|
||||||
|
|
||||||
import spock.lang.Specification
|
import spock.lang.Specification
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package offtopic
|
package offtopic.curator
|
||||||
|
|
||||||
import spock.lang.Specification
|
import spock.lang.Specification
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue