(refs #74)Web hook request is sent asynchronously.

This commit is contained in:
takezoe
2013-09-14 17:43:06 +09:00
parent 36115734bb
commit cec1dc98a9

View File

@@ -4,10 +4,13 @@ import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession import Database.threadLocalSession
import model._ import model._
import org.slf4j.LoggerFactory
trait WebHookService { trait WebHookService {
import WebHookService._ import WebHookService._
private val logger = LoggerFactory.getLogger(classOf[WebHookService])
def getWebHookURLs(owner: String, repository: String): List[WebHook] = def getWebHookURLs(owner: String, repository: String): List[WebHook] =
Query(WebHooks).filter(_.byRepository(owner, repository)).sortBy(_.url).list Query(WebHooks).filter(_.byRepository(owner, repository)).sortBy(_.url).list
@@ -23,6 +26,7 @@ trait WebHookService {
import org.json4s.jackson.Serialization.{read, write} import org.json4s.jackson.Serialization.{read, write}
import org.apache.http.client.methods.HttpPost import org.apache.http.client.methods.HttpPost
import org.apache.http.impl.client.DefaultHttpClient import org.apache.http.impl.client.DefaultHttpClient
import scala.concurrent._
implicit val formats = Serialization.formats(NoTypeHints) implicit val formats = Serialization.formats(NoTypeHints)
@@ -33,10 +37,18 @@ trait WebHookService {
val httpClient = new DefaultHttpClient() val httpClient = new DefaultHttpClient()
webHookURLs.foreach { webHookUrl => webHookURLs.foreach { webHookUrl =>
val httpPost = new HttpPost(webHookUrl.url) val f = future {
httpPost.getParams.setParameter("payload", json) val httpPost = new HttpPost(webHookUrl.url)
httpClient.execute(httpPost) httpPost.getParams.setParameter("payload", json)
httpPost.releaseConnection() httpClient.execute(httpPost)
httpPost.releaseConnection()
}
f.onSuccess {
case s => logger.debug(s"Success: web hook request to ${webHookUrl.url}")
}
f.onFailure {
case t => logger.error(s"Failed: web hook request to ${webHookUrl.url}", t)
}
} }
} }
} }