in atlas-eval/src/main/scala/com/netflix/atlas/eval/model/LwcMessages.scala [329:404]
private def parseBatch(parser: JsonParser): List[AnyRef] = {
val builder = List.newBuilder[AnyRef]
try {
foreachItem(parser) {
parser.getIntValue match {
case Expression =>
val expression = parser.nextTextValue()
if (parser.nextToken() == JsonToken.VALUE_STRING) {
val exprType = ExprType.valueOf(parser.getText)
val step = parser.nextLongValue(-1L)
builder += LwcExpression(expression, exprType, step)
} else {
val step = parser.getLongValue
builder += LwcExpression(expression, ExprType.TIME_SERIES, step)
}
case Subscription =>
val expression = parser.nextTextValue()
val dataExprs = List.newBuilder[LwcDataExpr]
foreachItem(parser) {
dataExprs += LwcDataExpr(
parser.getText,
parser.nextTextValue(),
parser.nextLongValue(-1L)
)
}
builder += LwcSubscription(expression, dataExprs.result())
case SubscriptionV2 =>
val expression = parser.nextTextValue()
val exprType = ExprType.valueOf(parser.nextTextValue())
val subExprs = List.newBuilder[LwcDataExpr]
foreachItem(parser) {
subExprs += LwcDataExpr(
parser.getText,
parser.nextTextValue(),
parser.nextLongValue(-1L)
)
}
builder += LwcSubscriptionV2(expression, exprType, subExprs.result())
case Datapoint =>
val timestamp = parser.nextLongValue(-1L)
val id = parser.nextTextValue()
val tags = parseTags(parser, parser.nextIntValue(0))
val value = nextDouble(parser)
builder += LwcDatapoint(timestamp, id, tags, value)
case DatapointV2 =>
val timestamp = parser.nextLongValue(-1L)
val id = parser.nextTextValue()
val tags = parseTags(parser, parser.nextIntValue(0))
val value = nextDouble(parser)
val samples = parseSamples(parser)
builder += LwcDatapoint(timestamp, id, tags, value, samples)
case LwcDiagnostic =>
val id = parser.nextTextValue()
val typeName = parser.nextTextValue()
val message = parser.nextTextValue()
builder += LwcDiagnosticMessage(id, DiagnosticMessage(typeName, message, None))
case Diagnostic =>
val typeName = parser.nextTextValue()
val message = parser.nextTextValue()
builder += DiagnosticMessage(typeName, message, None)
case Heartbeat =>
val timestamp = parser.nextLongValue(-1L)
val step = parser.nextLongValue(-1L)
builder += LwcHeartbeat(timestamp, step)
case Event =>
val id = parser.nextTextValue()
builder += LwcEvent(id, nextTree(parser))
case v =>
throw new MatchError(s"invalid type id: $v")
}
}
} finally {
parser.close()
}
builder.result()
}