Skip to content

Commit

Permalink
Merge branch 'change-vm-create-event-fields' into 'master'
Browse files Browse the repository at this point in the history
Remove unnecessary fields from VirtualMachineCreateEvent

See merge request !10
  • Loading branch information
placccebo committed Sep 17, 2018
2 parents c665a5f + 5c0cd4f commit 5483ef7
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,12 @@ class VmEventsRetrievingTest
it should "retrieve VirtualMachineCreateEvent with status 'Completed' from Kafka records" in {
val afterCreation = OffsetDateTime.now()
val actualVmCreateEvents = events.filter {
case VirtualMachineCreateEvent(Some(Constants.Statuses.COMPLETED), Some(`vmId`), Some(dateTime), _, _, _) =>
case VirtualMachineCreateEvent(Some(Constants.Statuses.COMPLETED), Some(dateTime), _) =>
dateTime.isAfter(beforeCreation) && dateTime.isBefore(afterCreation)
case _ => false
}

actualVmCreateEvents.length shouldBe 1
actualVmCreateEvents.length should be >= 1
}

it should "retrieve VirtualMachineDestroyEvent with status 'Completed' from Kafka records" in {
Expand Down
21 changes: 17 additions & 4 deletions src/main/scala/com/bwsw/cloudstack/entities/events/JobResult.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import spray.json._
* @author Pavel Tomskikh
*/
final case class JobResult[T](path: String,
result: T)
result: Either[String, T])


object JobResult {
Expand All @@ -35,12 +35,25 @@ object JobResult {
case JsString(string) =>
val (path, result) = string.span(_ != '{')

JobResult(path, result.parseJson.convertTo[T])
val maybeResult = try {
Right(result.parseJson.convertTo[T])
} catch {
case _: Exception => Left(result)
}

JobResult(path, maybeResult)

case _ => deserializationError(s"Expected JobResult as JsString, but got $json")
}

override def write(jobResult: JobResult[T]): JsValue =
JsString(s"${jobResult.path}${jobResult.result.toJson}")
override def write(jobResult: JobResult[T]): JsValue = {
val result = jobResult.result match {
case Right(validResult) => validResult.toJson
case Left(str) => JsString(str)
}

JsString(s"${jobResult.path}$result")
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,20 @@ import com.bwsw.cloudstack.entities.common.CommonJsonFormats.uuidJsonFormat
import spray.json.DefaultJsonProtocol._
import spray.json.RootJsonFormat

final case class VirtualMachineCreateJobResult(account: String,
domainId: UUID)
final case class VirtualMachineCreateJobResult(id: UUID,
account: String,
domainId: UUID,
serviceOfferingId: UUID)


object VirtualMachineCreateJobResult {

implicit val virtualMachineCreateJobResultJsonFormat: RootJsonFormat[VirtualMachineCreateJobResult] =
jsonFormat(
VirtualMachineCreateJobResult.apply,
"id",
"account",
"domainid"
"domainid",
"serviceofferingid"
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
package com.bwsw.cloudstack.entities.events.vm

import java.time.OffsetDateTime
import java.util.UUID

import com.bwsw.cloudstack.entities.common.CommonJsonFormats._
import com.bwsw.cloudstack.entities.events.jobresults.VirtualMachineCreateJobResult
Expand All @@ -28,10 +27,7 @@ import spray.json.DefaultJsonProtocol._
import spray.json.RootJsonFormat

final case class VirtualMachineCreateEvent(status: Option[String],
entityuuid: Option[UUID],
eventDateTime: Option[OffsetDateTime],
description: Option[String],
serviceOffering: Option[UUID],
jobResult: Option[JobResult[VirtualMachineCreateJobResult]])
extends CloudStackEvent with EventDateTime

Expand All @@ -42,10 +38,7 @@ object VirtualMachineCreateEvent {
jsonFormat(
VirtualMachineCreateEvent.apply,
"status",
"entityuuid",
"eventDateTime",
"description",
"ServiceOffering",
"jobResult"
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,16 +98,16 @@ class JsonFormatsTests
| "entity": "com.cloud.vm.VirtualMachine",
| "status": "Scheduled",
| "VirtualMachine": "63f55cf9-2d1b-42f0-9202-a784af1d39ed",
| "jobResult": "org.apache.cloudstack.api.response.UserVmResponse/virtualmachine/{\"account\":\"Account Name\",\"domainid\":\"16d7977e-43fd-47ad-9fff-6ef8d463516f\"}"
| "jobResult": "org.apache.cloudstack.api.response.UserVmResponse/virtualmachine/{\"id\":\"63f55cf9-2d1b-42f0-9202-a784af1d39ed\",\"account\":\"Account Name\",\"domainid\":\"16d7977e-43fd-47ad-9fff-6ef8d463516f\",\"serviceofferingid\":\"b1196c0e-0c1a-4416-bea8-f6a62309fac5\"}"
|}""".stripMargin,
VirtualMachineCreateEvent(
status = Some(Statuses.SCHEDULED),
entityuuid = Some(UUID.fromString("63f55cf9-2d1b-42f0-9202-a784af1d39ed")),
eventDateTime = Some(OffsetDateTime.of(2017, 11, 12, 13, 36, 23, 0, ZoneOffset.ofHours(7))), //scalastyle:ignore
description = Some("starting Vm. Vm Id: 12"),
serviceOffering = Some(UUID.fromString("b1196c0e-0c1a-4416-bea8-f6a62309fac5")),
jobResult = Some(JobResult("org.apache.cloudstack.api.response.UserVmResponse/virtualmachine/",
VirtualMachineCreateJobResult("Account Name", UUID.fromString("16d7977e-43fd-47ad-9fff-6ef8d463516f"))))
Right(VirtualMachineCreateJobResult(UUID.fromString("63f55cf9-2d1b-42f0-9202-a784af1d39ed"),
"Account Name",
UUID.fromString("16d7977e-43fd-47ad-9fff-6ef8d463516f"),
UUID.fromString("b1196c0e-0c1a-4416-bea8-f6a62309fac5")))))
)
),
("""{"event": "custom"}""", CustomEvent),
Expand Down

0 comments on commit 5483ef7

Please sign in to comment.