• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

Criar um problema

Instrumentação Scala ZIO

ZIO é uma biblioteca Scala usada para executar operações assíncronas. Para aproveitar ao máximo a estrutura de avaliação lenta do ZIO, oferecemos uma API ZIO para criar transações e segmentos.

Instale a API ZIO

Para acessar a classe API, adicione as seguintes informações ao seu arquivo de configuração Scala, dependendo da versão do ZIO que você está usando.

As versões suportadas do Scala são 2.11, 2.12 e 2.13. O usuário Scala 3.0 pode usar o jar 2.13. A versão mínima do Scala para ZIO v2 é 2.12.

Importante

Para obter melhores resultados ao usar a API, certifique-se de ter a versão mais recente do agente Java.

  • A API New Relic ZIO v1 requer o agente Java 7.2.0 ou superior.
  • A API New Relic ZIO v2 requer o agente Java 8.10.0 ou superior.

Use a API ZIO

Primeiro você precisa fazer sua declaração de importação, para depois criar transações e segmentos.

Faça declaração de importação

Para aproveitar a API ZIO, faça a seguinte instrução de importação para sua versão:

API ZIO v1

import com.newrelic.zio.api.TraceOps

API ZIO v2

import com.newrelic.zio2.api.TraceOps

A API para ambos é a mesma, exceto pelos nomes dos pacotes.

Criar transação

Você pode criar transações preguiçosamente usando o método TraceOps.txn . Se uma transação já existir antes do método ser chamado, esse método fará parte da transação existente.

Importante

Ao contrário do método de transação da API Scala, esse método não cria uma transação avidamente. Em vez disso, você passa um bloco ZIO no qual um efeito é criado em uma instância retornada que cria preguiçosamente um tracer transação . Termina quando todas as operações do ZIO terminam. Como resultado, qualquer código executado fora de qualquer instância ou operação ZIO não será capturado na nova transação.

Por exemplo:

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

Criar segmentos

Para criar um segmento para um bloco de código síncrono, use TraceOps.trace. Por exemplo:

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ó funciona com código síncrono. Quaisquer operações realizadas por meio de um efeito ZIO, operação ou ambos devem usar TraceOps.asyncTrace (veja abaixo).

Se você quiser criar um segmento para um bloco de código assíncrono usando ZIO, use TraceOps.asyncTrace. Isso garantirá que o tempo do segmento inclua o tempo necessário para a conclusão do efeito ou operação 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.

Você também pode usar asyncTrace no Scala para compreensão:

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

Se você quiser criar um segmento para uma função anônima síncrona, use TraceOps.traceFun. Por exemplo:

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

Se você deseja criar um segmento para uma função assíncrono que retorne uma instância ZIO,
use TraceOps.asyncTraceFun. Isso garantirá que o tempo do segmento inclua o tempo necessário para a conclusão das operações ZIO. Por exemplo:

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

Mais funções de API

Para obter mais informações sobre a API do agente Java e sua funcionalidade, consulte Introdução à API do agente Java.

Copyright © 2024 New Relic Inc.

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