瀏覽代碼

Add some rudimentary current statistics

Thomas Dy 10 年之前
父節點
當前提交
260848e502
共有 4 個文件被更改,包括 16 次插入0 次删除
  1. 8 0
      app/controllers/Application.scala
  2. 4 0
      app/models/Card.scala
  3. 3 0
      app/models/ChatRoom.scala
  4. 1 0
      conf/routes

+ 8 - 0
app/controllers/Application.scala

@@ -17,6 +17,14 @@ object Application extends Controller {
     Ok(views.html.index())
   }
 
+  def stats = Action {
+    Ok(Json.obj(
+      "rooms" -> ChatRoom.chatRooms.keySet,
+      "activeConnections" -> ChatRoom.connectionCount,
+      "totalCards" -> Card.size
+    ))
+  }
+
   /**
    * Handles the chat websocket.
    */

+ 4 - 0
app/models/Card.scala

@@ -14,6 +14,10 @@ object Card {
     )
   }
 
+  def size = DB.withConnection { implicit c =>
+    SQL("select count(*) from words").single(long("count"))
+  }
+
   def add(card: Card) = DB.withTransaction { implicit c =>
     val id = SQL("insert into words values (default, {word})")
       .on('word -> card.word)

+ 3 - 0
app/models/ChatRoom.scala

@@ -20,6 +20,7 @@ object ChatRoom {
   implicit val timeout = Timeout(1 second)
 
   var chatRooms = Map.empty[String, ActorRef]
+  var connectionCount = 0
 
   def closeRoom(room: String) = {
     chatRooms -= room
@@ -35,11 +36,13 @@ object ChatRoom {
     (actor ? Join(username)).map {
 
       case Connected(enumerator) =>
+        connectionCount += 1
 
         // Create an Iteratee to consume the feed
         val iteratee = Iteratee.foreach[JsValue] { event =>
           actor ! Talk(username, (event \ "text").as[String])
         }.map { _ =>
+          connectionCount -= 1
           actor ! Quit(username)
         }
 

+ 1 - 0
conf/routes

@@ -6,6 +6,7 @@
 GET     /                                controllers.Application.index
 GET     /room/chat                       controllers.Application.chat(username, room)
 GET     /jsRoutes                        controllers.Application.javascriptRoutes
+GET     /stats                           controllers.Application.stats
 
 GET     /cards                           controllers.Cards.dump
 POST    /cards                           controllers.Cards.add