Added support for parsing JSON the old way
authorProdromos Gerakios <pgerakios@grnet.gr>
Thu, 13 Sep 2012 08:46:53 +0000 (11:46 +0300)
committerProdromos Gerakios <pgerakios@grnet.gr>
Thu, 13 Sep 2012 08:46:53 +0000 (11:46 +0300)
src/main/scala/gr/grnet/aquarium/charging/bill/BillEntry.scala
src/main/scala/gr/grnet/aquarium/connector/handler/IMEventPayloadHandler.scala
src/main/scala/gr/grnet/aquarium/connector/handler/ResourceEventPayloadHandler.scala
src/main/scala/gr/grnet/aquarium/event/DetailsModel.scala
src/main/scala/gr/grnet/aquarium/message/EventModels.scala [new file with mode: 0644]

index 40a7b14..b4f68db 100644 (file)
@@ -136,7 +136,7 @@ object AbstractBillEntry {
         rcType match {
           case "diskspace" =>
             val action = MessageHelpers.currentResourceEventOf(w).getDetails.get("action")
-            val path = MessageHelpers.currentResourceEventOf(w).getDetails.get("path")
+            //val path = MessageHelpers.currentResourceEventOf(w).getDetails.get("path")
             //"%s@%s".format(action,path)
             action
           case "vmtime" =>
@@ -259,7 +259,7 @@ object AbstractBillEntry {
     val propsfile = new FileStreamResource(new File("aquarium.properties"))
     var _props: Props = Props(propsfile)(StdConverters.AllConverters).getOr(Props()(StdConverters.AllConverters))
     val aquarium = new AquariumBuilder(_props, ResourceLocator.DefaultPolicyMsg).
-      update(Aquarium.EnvKeys.storeProvider, new MemStoreProvider).
+      //update(Aquarium.EnvKeys.storeProvider, new MemStoreProvider).
       update(Aquarium.EnvKeys.eventsStoreFolder,Some(new File(".."))).
       build()
     aquarium.start()
index cfb96e3..785fee4 100644 (file)
@@ -41,7 +41,9 @@ import gr.grnet.aquarium.message.avro.gen.IMEventMsg
 import gr.grnet.aquarium.store.LocalFSEventStore
 import gr.grnet.aquarium.util.{LogHelpers, Tags}
 import org.slf4j.Logger
-import gr.grnet.aquarium.message.avro.{MessageHelpers, AvroHelpers}
+import gr.grnet.aquarium.message.avro.{MessageFactory, MessageHelpers, AvroHelpers}
+import gr.grnet.aquarium.message.{IMEventModel, ResourceEventModel}
+import gr.grnet.aquarium.event.DetailsModel
 
 /**
  * A [[gr.grnet.aquarium.connector.handler.PayloadHandler]] for
@@ -71,7 +73,26 @@ class IMEventPayloadHandler(aquarium: Aquarium, logger: Logger)
 
       // eventParser: JsonTextFormat ⇒ E
       jsonTextFormat ⇒ {
-        AvroHelpers.specificRecordOfJsonString(jsonTextFormat.value, new IMEventMsg)
+
+        try {
+          AvroHelpers.specificRecordOfJsonString(jsonTextFormat.value, new IMEventMsg)
+        }
+        catch {
+          case e:Throwable =>
+              val model = aquarium.converters.convertEx[IMEventModel](jsonTextFormat)
+              val msg = new IMEventMsg()
+              msg.setOriginalID(model.id)
+              msg.setClientID(model.clientID)
+              msg.setDetails(DetailsModel.fromScalaModelMap(model.details))
+              msg.setEventType(model.eventType)
+              msg.setEventVersion(model.eventVersion)
+              msg.setIsActive(java.lang.Boolean.valueOf(model.isActive))
+              msg.setOccurredMillis(model.occurredMillis)
+              msg.setReceivedMillis(model.receivedMillis)
+              msg.setRole(model.role)
+              msg.setUserID(model.userID)
+              msg
+        }
       },
 
       // onEventParserSuccess: (Array[Byte], E) ⇒ Unit
index a3c3c8b..592bc95 100644 (file)
@@ -38,10 +38,12 @@ package gr.grnet.aquarium.connector.handler
 import gr.grnet.aquarium.Aquarium
 import gr.grnet.aquarium.converter.JsonTextFormat
 import gr.grnet.aquarium.message.avro.AvroHelpers
-import gr.grnet.aquarium.message.avro.gen.ResourceEventMsg
+import gr.grnet.aquarium.message.avro.gen.{IMEventMsg, ResourceEventMsg}
 import gr.grnet.aquarium.store.LocalFSEventStore
 import gr.grnet.aquarium.util._
 import org.slf4j.Logger
+import gr.grnet.aquarium.message.ResourceEventModel
+import gr.grnet.aquarium.event.DetailsModel
 
 /**
  * A [[gr.grnet.aquarium.connector.handler.PayloadHandler]] for
@@ -72,7 +74,25 @@ class ResourceEventPayloadHandler(aquarium: Aquarium, logger: Logger)
 
       // eventParser: JsonTextFormat ⇒ E
       jsonTextFormat ⇒ {
-        AvroHelpers.specificRecordOfJsonString(jsonTextFormat.value, new ResourceEventMsg)
+        try {
+          AvroHelpers.specificRecordOfJsonString(jsonTextFormat.value, new ResourceEventMsg)
+        } catch {
+          case e:Throwable =>
+            val model = aquarium.converters.convertEx[ResourceEventModel](jsonTextFormat)
+            val msg = new ResourceEventMsg()
+            msg.setOriginalID(model.id)
+            msg.setClientID(model.clientID)
+            msg.setDetails(DetailsModel.fromScalaModelMap(model.details))
+            msg.setEventVersion(model.eventVersion)
+            msg.setOccurredMillis(model.occurredMillis)
+            msg.setReceivedMillis(model.receivedMillis)
+            msg.setUserID(model.userID)
+            msg.setResource(model.resource)
+            msg.setInstanceID(model.instanceID)
+            msg.setValue(model.value.toString)
+            msg
+
+        }
       },
 
       // onEventParserSuccess: (Array[Byte], E) ⇒ Unit
index fe39c55..e8609ea 100644 (file)
@@ -63,6 +63,12 @@ object DetailsModel {
     map.asJava
   }
 
+  def fromScalaModelMap(map: scala.collection.Map[String, String]): Type = {
+    map.map {case (s1,s2) =>
+      (s1,MessageFactory.anyValueMsgOfString(s2))
+    }.asJava
+  }
+
   def fromScalaTuples(tuples: (String, AnyValueMsg)*): Type = {
     fromScalaMap(Map(tuples:_*))
   }
diff --git a/src/main/scala/gr/grnet/aquarium/message/EventModels.scala b/src/main/scala/gr/grnet/aquarium/message/EventModels.scala
new file mode 100644 (file)
index 0000000..b66d4e1
--- /dev/null
@@ -0,0 +1,39 @@
+package gr.grnet.aquarium.message
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: pgerakios
+ * Date: 9/13/12
+ * Time: 11:07 AM
+ * To change this template use File | Settings | File Templates.
+ */
+
+
+case class IMEventModel(
+                         id : String,
+                         clientID: String,
+                         details : Map[String,String],
+                         eventType : String,
+                         eventVersion : String,
+                         isActive : Boolean,
+                         occurredMillis: Long,
+                         receivedMillis: Long,
+                         role: String,
+                         userID:String
+
+                         )
+{}
+
+case class ResourceEventModel(
+                               id : String,
+                               clientID: String,
+                               details : Map[String,String],
+                               resource:String,
+                               eventVersion : String,
+                               instanceID : String,
+                               occurredMillis: Long,
+                               receivedMillis: Long,
+                               value : Double,
+                               userID:String
+)
+{}