private def parseBatch()

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()
  }