Browse Source

server: Add GET /stats endpoint

scalafmt-draft
Alexis Hernandez 7 years ago
parent
commit
41f29ad19c
  1. 13
      server/app/com/xsn/explorer/services/StatisticsService.scala
  2. 16
      server/app/controllers/StatisticsController.scala
  3. 2
      server/conf/routes
  4. 41
      server/test/controllers/StatisticsControllerSpec.scala

13
server/app/com/xsn/explorer/services/StatisticsService.scala

@ -0,0 +1,13 @@
package com.xsn.explorer.services
import javax.inject.Inject
import com.alexitc.playsonify.core.FutureApplicationResult
import com.xsn.explorer.models.rpc.ServerStatistics
class StatisticsService @Inject() (xsnService: XSNService) {
def getServerStatistics(): FutureApplicationResult[ServerStatistics] = {
xsnService.getServerStatistics()
}
}

16
server/app/controllers/StatisticsController.scala

@ -0,0 +1,16 @@
package controllers
import javax.inject.Inject
import com.xsn.explorer.services.StatisticsService
import controllers.common.{MyJsonController, MyJsonControllerComponents}
class StatisticsController @Inject() (
statisticsService: StatisticsService,
cc: MyJsonControllerComponents)
extends MyJsonController(cc) {
def getStatus() = publicNoInput { _ =>
statisticsService.getServerStatistics()
}
}

2
server/conf/routes

@ -9,3 +9,5 @@ GET /addresses/:address controllers.AddressesController.getDetails(address:
GET /blocks controllers.BlocksController.getLatestBlocks()
GET /blocks/:blockhash controllers.BlocksController.getDetails(blockhash: String)
GET /stats controllers.StatisticsController.getStatus()

41
server/test/controllers/StatisticsControllerSpec.scala

@ -0,0 +1,41 @@
package controllers
import com.alexitc.playsonify.core.FutureApplicationResult
import com.xsn.explorer.helpers.DummyXSNService
import com.xsn.explorer.models.Height
import com.xsn.explorer.models.rpc.ServerStatistics
import com.xsn.explorer.services.XSNService
import controllers.common.MyAPISpec
import org.scalactic.Good
import play.api.inject.bind
import play.api.test.Helpers._
import scala.concurrent.Future
class StatisticsControllerSpec extends MyAPISpec {
val stats = ServerStatistics(Height(45454), 93548, BigDecimal("77645419.93177629"))
val customXSNService = new DummyXSNService {
override def getServerStatistics(): FutureApplicationResult[ServerStatistics] = {
val result = Good(stats)
Future.successful(result)
}
}
override val application = guiceApplicationBuilder
.overrides(bind[XSNService].to(customXSNService))
.build()
"GET /stats" should {
"return the server statistics" in {
val response = GET("/stats")
status(response) mustEqual OK
val json = contentAsJson(response)
(json \ "height").as[Int] mustEqual stats.height.int
(json \ "transactions").as[Int] mustEqual stats.transactions
(json \ "totalSupply").as[BigDecimal] mustEqual stats.totalSupply
}
}
}
Loading…
Cancel
Save