• EnglishEspañol日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Instrumentación Scala ZIO

ZIO es una biblioteca Scala utilizada para ejecutar operaciones asincrónicas. Para aprovechar al máximo la estructura evaluada de forma diferida de ZIO, ofrecemos una API de ZIO para crear transacciones y segmentos.

Instalar la API de ZIO

Para acceder a la clase API, agregue la siguiente información a su archivo de configuración de Scala según la versión de ZIO que esté utilizando.

Las versiones compatibles de Scala son 2.11, 2.12 y 2.13. El usuario de Scala 3.0 puede utilizar el jar 2.13. La versión mínima de Scala para ZIO v2 es 2.12.

Importante

Para obtener mejores resultados al utilizar la API, asegúrese de tener la última versión del agente de Java.

  • La New Relic ZIO v1 API requiere agente de Java 7.2.0 o superior.
  • La New Relic ZIO v2 API requiere agente de Java 8.10.0 o superior.

Utilice la API de ZIO

Primero debe realizar su declaración de importación y luego podrá crear transacciones y segmentos.

Hacer declaración de importación

Para aprovechar la API de ZIO, realice la siguiente declaración de importación para su versión:

API ZIO v1

import com.newrelic.zio.api.TraceOps

API ZIO v2

import com.newrelic.zio2.api.TraceOps

Las API para ambos son las mismas excepto por los nombres de los paquetes.

Crear transacción

Puede crear transacciones de forma perezosa utilizando el método TraceOps.txn . Si ya existe una transacción antes de llamar al método, este método será parte de la transacción existente.

Importante

A diferencia del método de transacción de Scala API, este método no crea una transacción con entusiasmo. En su lugar, pasa un bloque ZIO en el que se crea un efecto en una instancia devuelta que crea perezosamente un rastreador de transacciones. Finaliza cuando finalizan todas las operaciones de ZIO. Como resultado, cualquier código que se ejecute fuera de cualquier instancia u operación de ZIO no se capturará en la nueva transacción.

Por ejemplo:

import com.newrelic.zio.api.TraceOps.{txn, traceFun, trace}
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.{txn, traceFun, trace}
val x = txn {
// The segment named "not-captured" will not be
// captured in the transaction because it is not ran within Zio.
trace("not-captured") {
println("hello")
}
// The segment named "trace map UIO" will be
// captured as part of the transaction because it is ran within Zio.
ZIO.succeed(1).map(traceFun("trace map UIO")(i => i + 1))
}

Crear segmentos

Para crear un segmento para un bloque de código síncrono, utilice TraceOps.trace. Por ejemplo:

import com.newrelic.zio.api.TraceOps.trace
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.trace
trace("statement segment") {
val i = 1
val j = 2
println(i + j)
}
// trace can also be used as an expression
val x: Int = trace("expression segment") {
val i = 1
val j = 2
i + j
}
println(x) // 2

Importante

TraceOps.trace sólo funciona con código síncrono. Cualquier operación realizada a través de un efecto, operación o ambos de ZIO debe utilizar TraceOps.asyncTrace (ver más abajo).

Si desea crear un segmento para un bloque de código asincrónico usando ZIO, use TraceOps.asyncTrace. Esto garantizará que el tiempo del segmento incluya el tiempo necesario para que se complete el efecto u operación ZIO.

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTrace
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTrace
val x: ZIO[_, _, Int] = asyncTrace("segment name") {
ZIO.succeed(1) <*
ZIO.sleep(zio.duration.Duration.fromMillis(1.second.toMillis))
}.debug // prints 1 after the completion of the segment.

También puedes usar asyncTrace en Scala para comprensión:

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTrace
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTrace
val x: ZIO[_, _, Int] = for {
one <- asyncTrace("segment one")(ZIO.succeed(1))
two <- asyncTrace("segment two")(ZIO.succeed(one + 1))
three <- asyncTrace("segment three")(ZIO.succeed(two + 1))
} yield three
val x2 = x.debug // prints 3 on completion of the segments in x

Si desea crear un segmento para una función anónima sincrónica, utilice TraceOps.traceFun. Por ejemplo:

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTraceFun
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTraceFun
val x: ZIO[_, _, Int] = ZIO.succeed(1)
.map(traceFun("statement segment")(i => i + 1))
.debug // prints 2

Si desea crear un segmento para una función asincrónica que devuelva una instancia ZIO,
utilizar TraceOps.asyncTraceFun. Esto garantizará que el cronograma del segmento incluya el tiempo necesario para completar las operaciones de ZIO. Por ejemplo:

import zio.ZIO
import com.newrelic.zio.api.TraceOps.asyncTraceFun
// or if using ZIO 2, comment out the line above and uncomment the line below
// import com.newrelic.zio2.api.TraceOps.asyncTraceFun
val x: ZIO[_, _, Int] = ZIO.succeed(1)
.flatMap(asyncTraceFun("statement segment")(i => ZIO.succeed(i + 1)))
.debug // prints 2 on completion of the zio operations

Más funciones API

Para obtener más información sobre la API del agente de Java y su funcionalidad, consulte la introducción a la API del agente de Java.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.