Files
shiny/reference/withOtelCollect.html
2025-12-09 21:34:58 +00:00

191 lines
13 KiB
HTML

<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Temporarily set OpenTelemetry (OTel) collection level — withOtelCollect • shiny</title><!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script><!-- Bootstrap --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous"><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css"><script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet"><script src="../pkgdown.js"></script><meta property="og:title" content="Temporarily set OpenTelemetry (OTel) collection level — withOtelCollect"><meta property="og:description" content="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."><meta property="og:image" content="/logo.png"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]--></head><body data-spy="scroll" data-target="#toc">
<div class="container template-reference-topic">
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">shiny</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">1.12.1.9000</span>
</span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav"><li>
<a href="../reference/index.html">Reference</a>
</li>
<li>
<a href="../news/index.html">Changelog</a>
</li>
</ul><ul class="nav navbar-nav navbar-right"><li>
<a href="https://github.com/rstudio/shiny/" class="external-link">
<span class="fab fa-github fa-lg"></span>
</a>
</li>
</ul></div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
</header><div class="row">
<div class="col-md-9 contents">
<div class="page-header">
<h1>Temporarily set OpenTelemetry (OTel) collection level</h1>
<small class="dont-index">Source: <a href="https://github.com/rstudio/shiny/blob/main/R/otel-with.R" class="external-link"><code>R/otel-with.R</code></a></small>
<div class="hidden name"><code>withOtelCollect.Rd</code></div>
</div>
<div class="ref-description">
<p>Control Shiny's OTel collection level for particular reactive expression(s).</p>
<p><code>withOtelCollect()</code> sets the OpenTelemetry collection level for
the duration of evaluating <code>expr</code>. <code>localOtelCollect()</code> sets the collection
level for the remainder of the current function scope.</p>
</div>
<div id="ref-usage">
<div class="sourceCode"><pre class="sourceCode r"><code><span><span class="fu">withOtelCollect</span><span class="op">(</span><span class="va">collect</span>, <span class="va">expr</span><span class="op">)</span></span>
<span></span>
<span><span class="fu">localOtelCollect</span><span class="op">(</span><span class="va">collect</span>, envir <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/sys.parent.html" class="external-link">parent.frame</a></span><span class="op">(</span><span class="op">)</span><span class="op">)</span></span></code></pre></div>
</div>
<div id="arguments">
<h2>Arguments</h2>
<dl><dt id="arg-collect">collect<a class="anchor" aria-label="anchor" href="#arg-collect"></a></dt>
<dd><p>Character string specifying the OpenTelemetry collection level.
Must be one of the following:</p>
<p></p><div class="sourceCode"><pre><code><span id="cb1-1"><a href="#cb1-1" tabindex="-1"></a><span class="sc">*</span> <span class="st">`</span><span class="at">"none"</span><span class="st">`</span> <span class="sc">-</span> No telemetry data collected</span>
<span id="cb1-2"><a href="#cb1-2" tabindex="-1"></a><span class="sc">*</span> <span class="st">`</span><span class="at">"reactivity"</span><span class="st">`</span> <span class="sc">-</span> Collect reactive execution <span class="fu">spans</span> (includes session and</span>
<span id="cb1-3"><a href="#cb1-3" tabindex="-1"></a> reactive update events)</span>
<span id="cb1-4"><a href="#cb1-4" tabindex="-1"></a><span class="sc">*</span> <span class="st">`</span><span class="at">"all"</span><span class="st">`</span> <span class="sc">-</span> All available <span class="fu">telemetry</span> (currently equivalent to <span class="st">`</span><span class="at">"reactivity"</span><span class="st">`</span>)</span></code></pre><p></p></div></dd>
<dt id="arg-expr">expr<a class="anchor" aria-label="anchor" href="#arg-expr"></a></dt>
<dd><p>Expression to evaluate with the specified collection level
(for <code>withOtelCollect()</code>).</p></dd>
<dt id="arg-envir">envir<a class="anchor" aria-label="anchor" href="#arg-envir"></a></dt>
<dd><p>Environment where the collection level should be set
(for <code>localOtelCollect()</code>). Defaults to the parent frame.</p></dd>
</dl></div>
<div id="value">
<h2>Value</h2>
<ul><li><p><code>withOtelCollect()</code> returns the value of <code>expr</code>.</p></li>
<li><p><code>localOtelCollect()</code> is called for its side effect and returns the previous
<code>collect</code> value invisibly.</p></li>
</ul></div>
<div id="details">
<h2>Details</h2>
<p>Note that <code>"session"</code> and <code>"reactive_update"</code> levels are not permitted as
these are runtime-specific levels that should only be set permanently via
<code>options(shiny.otel.collect = ...)</code> or the <code>SHINY_OTEL_COLLECT</code> environment
variable, not temporarily during reactive expression creation.</p>
</div>
<div id="best-practice">
<h2>Best practice</h2>
<p>Best practice is to set the collection level for code that <em>creates</em> reactive
expressions, not code that <em>runs</em> them. For instance:</p>
<p></p><div class="sourceCode r"><pre><code># Disable telemetry for a reactive expression
withOtelCollect("none", {
my_reactive &lt;- reactive({ ... })
})
# Disable telemetry for a render function
withOtelCollect("none", {
output$my_plot &lt;- renderPlot({ ... })
})
#' # Disable telemetry for an observer
withOtelCollect("none", {
observe({ ... }))
})
# Disable telemetry for an entire module
withOtelCollect("none", {
my_result &lt;- my_module("my_id")
})
# Use `my_result` as normal here
</code></pre><p></p></div>
<p>NOTE: It's not recommended to pipe existing reactive objects into
<code>withOtelCollect()</code> since they won't inherit their intended OTel settings,
leading to confusion.</p>
</div>
<div id="see-also">
<h2>See also</h2>
<div class="dont-index"><p>See the <code>shiny.otel.collect</code> option within <code><a href="shinyOptions.html">shinyOptions</a></code>. Setting
this value will globally control OpenTelemetry collection levels.</p></div>
</div>
<div id="ref-examples">
<h2>Examples</h2>
<div class="sourceCode"><pre class="sourceCode r"><code><span class="r-in"><span><span class="kw">if</span> <span class="op">(</span><span class="cn">FALSE</span><span class="op">)</span> <span class="op">{</span> <span class="co"># \dontrun{</span></span></span>
<span class="r-in"><span><span class="co"># Temporarily disable telemetry collection</span></span></span>
<span class="r-in"><span><span class="fu">withOtelCollect</span><span class="op">(</span><span class="st">"none"</span>, <span class="op">{</span></span></span>
<span class="r-in"><span> <span class="co"># Code here won't generate telemetry</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="reactive.html">reactive</a></span><span class="op">(</span><span class="op">{</span> <span class="va">input</span><span class="op">$</span><span class="va">x</span> <span class="op">+</span> <span class="fl">1</span> <span class="op">}</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">}</span><span class="op">)</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span><span class="co"># Collect reactivity telemetry but not other events</span></span></span>
<span class="r-in"><span><span class="fu">withOtelCollect</span><span class="op">(</span><span class="st">"reactivity"</span>, <span class="op">{</span></span></span>
<span class="r-in"><span> <span class="co"># Reactive execution will be traced</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="observe.html">observe</a></span><span class="op">(</span><span class="op">{</span> <span class="fu"><a href="https://rdrr.io/r/base/print.html" class="external-link">print</a></span><span class="op">(</span><span class="va">input</span><span class="op">$</span><span class="va">x</span><span class="op">)</span> <span class="op">}</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">}</span><span class="op">)</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span><span class="co"># Use local variant in a function</span></span></span>
<span class="r-in"><span><span class="va">my_function</span> <span class="op">&lt;-</span> <span class="kw">function</span><span class="op">(</span><span class="op">)</span> <span class="op">{</span></span></span>
<span class="r-in"><span> <span class="fu">localOtelCollect</span><span class="op">(</span><span class="st">"none"</span><span class="op">)</span></span></span>
<span class="r-in"><span> <span class="co"># Rest of function executes without telemetry</span></span></span>
<span class="r-in"><span> <span class="fu"><a href="reactive.html">reactive</a></span><span class="op">(</span><span class="op">{</span> <span class="va">input</span><span class="op">$</span><span class="va">y</span> <span class="op">*</span> <span class="fl">2</span> <span class="op">}</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">}</span></span></span>
<span class="r-in"><span><span class="op">}</span> <span class="co"># }</span></span></span>
<span class="r-in"><span></span></span>
</code></pre></div>
</div>
</div>
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
<nav id="toc" data-toggle="toc" class="sticky-top"><h2 data-toc-skip>Contents</h2>
</nav></div>
</div>
<footer><div class="copyright">
<p></p><p>Developed by Winston Chang, Joe Cheng, JJ Allaire, Carson Sievert, Barret Schloerke, Garrick Aden-Buie, Yihui Xie, Jeff Allen, Jonathan McPherson, Alan Dipert, Barbara Borges, Posit Software, PBC.</p>
</div>
<div class="pkgdown">
<p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.2.0.</p>
</div>
</footer></div>
</body></html>