def concatenateEnvToCustomFields()

in src/main/scala/com/gu/mobile/logback/MobileLogstashEncoder.scala [20:54]


  def concatenateEnvToCustomFields(customFields: String, extraFields: Map[String, String]): String = {
    def parsedTreeNode: Try[TreeNode] = {
      if (customFields != null && customFields.trim != "") {
        Try(jsonFactory.createParser(customFields).readValueAsTree[TreeNode]())
      } else {
        Success(mapper.createObjectNode())
      }
    }

    def appendToObjectNode(treeNode: TreeNode): Try[ObjectNode] = treeNode match {
      case objectNode: ObjectNode => {
        extraFields.foreach { case (key, value) => objectNode.put(key, value) }
        Success(objectNode)
      }
      case _ => Failure(new RuntimeException(s"Parsed Json was not an object: ${customFields}"))
    }

    def serialiseToString(objectNode: ObjectNode): Try[String] = Try {
      val sw = new StringWriter()
      val generator = jsonFactory.createGenerator(sw)
      generator.writeTree(objectNode)
      sw.toString
    }

    val concatenatedFields = for {
      treeNode <- parsedTreeNode
      objectNode <- appendToObjectNode(treeNode)
      output <- serialiseToString(objectNode)
    } yield output

    concatenatedFields match {
      case Success(result) => result
      case Failure(exception) => throw exception
    }
  }