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.
withOtelCollect(collect, expr)
localOtelCollect(collect, envir = parent.frame())Character string specifying the OpenTelemetry collection level. Must be one of the following:
Expression to evaluate with the specified collection level
(for withOtelCollect()).
Environment where the collection level should be set
(for localOtelCollect()). Defaults to the parent frame.
withOtelCollect() returns the value of expr.
localOtelCollect() is called for its side effect and returns the previous
collect value invisibly.
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.
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.
See the shiny.otel.collect option within shinyOptions. Setting
this value will globally control OpenTelemetry collection levels.
if (FALSE) { # \dontrun{
# 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 })
}
} # }