Learn R Programming

shiny (version 1.12.1)

withOtelCollect: Temporarily set OpenTelemetry (OTel) collection level

Description

Control Shiny's OTel collection level for particular reactive expression(s).

withOtelCollect() sets the OpenTelemetry collection level for the duration of evaluating expr. localOtelCollect() sets the collection level for the remainder of the current function scope.

Usage

withOtelCollect(collect, expr)

localOtelCollect(collect, envir = parent.frame())

Value

  • withOtelCollect() returns the value of expr.

  • localOtelCollect() is called for its side effect and returns the previous collect value invisibly.

Arguments

collect

Character string specifying the OpenTelemetry collection level. Must be one of the following:

* `"none"` - No telemetry data collected
* `"reactivity"` - Collect reactive execution spans (includes session and
  reactive update events)
* `"all"` - All available telemetry (currently equivalent to `"reactivity"`)

expr

Expression to evaluate with the specified collection level (for withOtelCollect()).

envir

Environment where the collection level should be set (for localOtelCollect()). Defaults to the parent frame.

Best practice

Best practice is to set the collection level for code that creates reactive expressions, not code that runs them. For instance:

# Disable telemetry for a reactive expression
withOtelCollect("none", {
  my_reactive <- reactive({ ... })
})

# Disable telemetry for a render function withOtelCollect("none", { output$my_plot <- renderPlot({ ... }) })

#' # Disable telemetry for an observer withOtelCollect("none", { observe({ ... })) })

# Disable telemetry for an entire module withOtelCollect("none", { my_result <- my_module("my_id") }) # Use `my_result` as normal here

NOTE: It's not recommended to pipe existing reactive objects into withOtelCollect() since they won't inherit their intended OTel settings, leading to confusion.

Details

Note that "session" and "reactive_update" levels are not permitted as these are runtime-specific levels that should only be set permanently via options(shiny.otel.collect = ...) or the SHINY_OTEL_COLLECT environment variable, not temporarily during reactive expression creation.

See Also

See the shiny.otel.collect option within shinyOptions. Setting this value will globally control OpenTelemetry collection levels.

Examples

Run this code
if (FALSE) {
# Temporarily disable telemetry collection
withOtelCollect("none", {
  # Code here won't generate telemetry
  reactive({ input$x + 1 })
})

# Collect reactivity telemetry but not other events
withOtelCollect("reactivity", {
  # Reactive execution will be traced
  observe({ print(input$x) })
})

# Use local variant in a function
my_function <- function() {
  localOtelCollect("none")
  # Rest of function executes without telemetry
  reactive({ input$y * 2 })
}
}

Run the code above in your browser using DataLab