This commit is contained in:
adilhafeez 2026-04-22 18:19:41 +00:00
parent 3203240f7f
commit 75db157d92
33 changed files with 137 additions and 33 deletions

View file

@ -267,7 +267,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -333,7 +333,7 @@ powerful abstraction for evolving your agent workflows over time.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -270,7 +270,7 @@ application to LLMs (API-based or hosted) via prompt targets.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -660,7 +660,7 @@ Implement fallback logic for better reliability:</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -304,7 +304,7 @@ Use your preferred client library without changing existing code (see <a class="
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -434,7 +434,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -1190,7 +1190,7 @@ Any provider that implements the OpenAI API interface can be configured using cu
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -473,7 +473,7 @@ that you can test and modify locally for multi-turn RAG scenarios.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -540,7 +540,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -226,7 +226,7 @@ This gives Plano several advantages:</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -337,7 +337,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -568,7 +568,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -372,7 +372,7 @@ on the stuff that matters most.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -714,7 +714,7 @@ instead of a file.</p></li>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -248,7 +248,7 @@ Access logs can be exported to centralized logging systems (e.g., ELK stack or F
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -229,6 +229,54 @@ are some sample configuration files for both, respectively.</p>
</div> </div>
</div> </div>
</section> </section>
<section id="brightstaff-metrics">
<h2>Brightstaff metrics<a @click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() =&gt; $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)" aria-label="Copy link to this element" class="headerlink" data-tooltip="Copy link to this element" href="#brightstaff-metrics" x-intersect.margin.0%.0%.-70%.0%="activeSection = '#brightstaff-metrics'"><svg height="1em" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<p>In addition to Envoys stats on <code class="docutils literal notranslate"><span class="pre">:9901</span></code>, the brightstaff dataplane
process exposes its own Prometheus endpoint on <code class="docutils literal notranslate"><span class="pre">0.0.0.0:9092</span></code> (override
with <code class="docutils literal notranslate"><span class="pre">METRICS_BIND_ADDRESS</span></code>). It publishes:</p>
<ul class="simple">
<li><p>HTTP RED — <code class="docutils literal notranslate"><span class="pre">brightstaff_http_requests_total</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_http_request_duration_seconds</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_http_in_flight_requests</span></code> (labels: <code class="docutils literal notranslate"><span class="pre">handler</span></code>, <code class="docutils literal notranslate"><span class="pre">method</span></code>,
<code class="docutils literal notranslate"><span class="pre">status_class</span></code>).</p></li>
<li><p>LLM upstream — <code class="docutils literal notranslate"><span class="pre">brightstaff_llm_upstream_requests_total</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_llm_upstream_duration_seconds</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_llm_time_to_first_token_seconds</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_llm_tokens_total</span></code> (labels: <code class="docutils literal notranslate"><span class="pre">provider</span></code>, <code class="docutils literal notranslate"><span class="pre">model</span></code>,
<code class="docutils literal notranslate"><span class="pre">error_class</span></code>, <code class="docutils literal notranslate"><span class="pre">kind</span></code>).</p></li>
<li><p>Routing — <code class="docutils literal notranslate"><span class="pre">brightstaff_router_decisions_total</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_router_decision_duration_seconds</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_routing_service_requests_total</span></code>,
<code class="docutils literal notranslate"><span class="pre">brightstaff_session_cache_events_total</span></code>.</p></li>
<li><p>Process &amp; build — <code class="docutils literal notranslate"><span class="pre">process_resident_memory_bytes</span></code>,
<code class="docutils literal notranslate"><span class="pre">process_cpu_seconds_total</span></code>, <code class="docutils literal notranslate"><span class="pre">brightstaff_build_info</span></code>.</p></li>
</ul>
<p>A self-contained Prometheus + Grafana stack is shipped under
<code class="docutils literal notranslate"><span class="pre">config/grafana/</span></code>. With Plano already running on the host, bring it up
with one command:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><code><span id="line-1"><span class="nb">cd</span><span class="w"> </span>config/grafana
</span><span id="line-2">docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d
</span><span id="line-3">open<span class="w"> </span>http://localhost:3000<span class="w"> </span><span class="c1"># admin / admin (anonymous viewer also enabled)</span>
</span></code></pre></div>
</div>
<p>Grafana auto-loads the Prometheus datasource and the brightstaff
dashboard (look under the <em>Plano</em> folder). Prometheus scrapes the hosts
<code class="docutils literal notranslate"><span class="pre">:9092</span></code> and <code class="docutils literal notranslate"><span class="pre">:9901</span></code> via <code class="docutils literal notranslate"><span class="pre">host.docker.internal</span></code>.</p>
<p>Files:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">config/grafana/docker-compose.yaml</span></code> — one-command Prom + Grafana
stack with provisioning.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">config/grafana/prometheus_scrape.yaml</span></code> — complete Prometheus config
with <code class="docutils literal notranslate"><span class="pre">envoy</span></code> and <code class="docutils literal notranslate"><span class="pre">brightstaff</span></code> scrape jobs (mounted by the
compose).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">config/grafana/brightstaff_dashboard.json</span></code> — 19-panel dashboard
across HTTP RED, LLM upstream, Routing service, and Process &amp; Envoy
link rows. Auto-provisioned by the compose; can also be imported by
hand via <em>Dashboards → New → Import</em>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">config/grafana/provisioning/</span></code> — Grafana provisioning files for the
datasource and dashboard provider.</p></li>
</ul>
</section>
</section> </section>
</div><div class="flex justify-between items-center pt-6 mt-12 border-t border-border gap-4"> </div><div class="flex justify-between items-center pt-6 mt-12 border-t border-border gap-4">
<div class="mr-auto"> <div class="mr-auto">
@ -252,6 +300,7 @@ are some sample configuration files for both, respectively.</p>
<ul> <ul>
<li><a :data-current="activeSection === '#metrics-dashboard-via-grafana'" class="reference internal" href="#metrics-dashboard-via-grafana">Metrics Dashboard (via Grafana)</a></li> <li><a :data-current="activeSection === '#metrics-dashboard-via-grafana'" class="reference internal" href="#metrics-dashboard-via-grafana">Metrics Dashboard (via Grafana)</a></li>
<li><a :data-current="activeSection === '#configure-monitoring'" class="reference internal" href="#configure-monitoring">Configure Monitoring</a></li> <li><a :data-current="activeSection === '#configure-monitoring'" class="reference internal" href="#configure-monitoring">Configure Monitoring</a></li>
<li><a :data-current="activeSection === '#brightstaff-metrics'" class="reference internal" href="#brightstaff-metrics">Brightstaff metrics</a></li>
</ul> </ul>
</div> </div>
</aside> </aside>
@ -260,7 +309,7 @@ are some sample configuration files for both, respectively.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -182,6 +182,7 @@
<li class="toctree-l1"><a class="reference internal" href="monitoring.html">Monitoring</a><ul> <li class="toctree-l1"><a class="reference internal" href="monitoring.html">Monitoring</a><ul>
<li class="toctree-l2"><a class="reference internal" href="monitoring.html#metrics-dashboard-via-grafana">Metrics Dashboard (via Grafana)</a></li> <li class="toctree-l2"><a class="reference internal" href="monitoring.html#metrics-dashboard-via-grafana">Metrics Dashboard (via Grafana)</a></li>
<li class="toctree-l2"><a class="reference internal" href="monitoring.html#configure-monitoring">Configure Monitoring</a></li> <li class="toctree-l2"><a class="reference internal" href="monitoring.html#configure-monitoring">Configure Monitoring</a></li>
<li class="toctree-l2"><a class="reference internal" href="monitoring.html#brightstaff-metrics">Brightstaff metrics</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="access_logging.html">Access Logging</a><ul> <li class="toctree-l1"><a class="reference internal" href="access_logging.html">Access Logging</a><ul>
@ -216,7 +217,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -792,7 +792,7 @@ tools like AWS X-Ray and Datadog, enhancing observability and facilitating faste
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -1003,7 +1003,7 @@ Plano makes it easy to build and scale these systems by managing the orchestrati
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -298,7 +298,7 @@ the agent. If validation fails (<code class="docutils literal notranslate"><span
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -453,7 +453,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -1,6 +1,6 @@
Plano Docs v0.4.20 Plano Docs v0.4.20
llms.txt (auto-generated) llms.txt (auto-generated)
Generated (UTC): 2026-04-19T04:21:44.790991+00:00 Generated (UTC): 2026-04-22T18:19:37.841645+00:00
Table of contents Table of contents
- Agents (concepts/agents) - Agents (concepts/agents)
@ -4318,6 +4318,60 @@ datasources:
access: proxy access: proxy
editable: true editable: true
Brightstaff metrics
In addition to Envoys stats on :9901, the brightstaff dataplane
process exposes its own Prometheus endpoint on 0.0.0.0:9092 (override
with METRICS_BIND_ADDRESS). It publishes:
HTTP RED — brightstaff_http_requests_total,
brightstaff_http_request_duration_seconds,
brightstaff_http_in_flight_requests (labels: handler, method,
status_class).
LLM upstream — brightstaff_llm_upstream_requests_total,
brightstaff_llm_upstream_duration_seconds,
brightstaff_llm_time_to_first_token_seconds,
brightstaff_llm_tokens_total (labels: provider, model,
error_class, kind).
Routing — brightstaff_router_decisions_total,
brightstaff_router_decision_duration_seconds,
brightstaff_routing_service_requests_total,
brightstaff_session_cache_events_total.
Process & build — process_resident_memory_bytes,
process_cpu_seconds_total, brightstaff_build_info.
A self-contained Prometheus + Grafana stack is shipped under
config/grafana/. With Plano already running on the host, bring it up
with one command:
cd config/grafana
docker compose up -d
open http://localhost:3000 # admin / admin (anonymous viewer also enabled)
Grafana auto-loads the Prometheus datasource and the brightstaff
dashboard (look under the Plano folder). Prometheus scrapes the hosts
:9092 and :9901 via host.docker.internal.
Files:
config/grafana/docker-compose.yaml — one-command Prom + Grafana
stack with provisioning.
config/grafana/prometheus_scrape.yaml — complete Prometheus config
with envoy and brightstaff scrape jobs (mounted by the
compose).
config/grafana/brightstaff_dashboard.json — 19-panel dashboard
across HTTP RED, LLM upstream, Routing service, and Process & Envoy
link rows. Auto-provisioned by the compose; can also be imported by
hand via Dashboards → New → Import.
config/grafana/provisioning/ — Grafana provisioning files for the
datasource and dashboard provider.
--- ---
Observability Observability

View file

@ -247,7 +247,7 @@ Resources</label><div class="sd-tab-content docutils">
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -437,7 +437,7 @@ Use this page as the canonical source for command syntax, options, and recommend
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -414,7 +414,7 @@ where prompts get routed to, apply guardrails, and enable critical agent observa
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -542,7 +542,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -179,7 +179,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -199,7 +199,7 @@ own deployments), and Plano reaches them via HTTP.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -485,7 +485,7 @@ processing request headers and then finalized by the HCM during post-request pro
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -200,7 +200,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -200,7 +200,7 @@ hardware threads on the machine.</p>
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 19, 2026. </p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company Last updated: Apr 22, 2026. </p>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -221,7 +221,7 @@
</div><footer class="py-6 border-t border-border md:py-0"> </div><footer class="py-6 border-t border-border md:py-0">
<div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row"> <div class="container flex flex-col items-center justify-between gap-4 md:h-24 md:flex-row">
<div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0"> <div class="flex flex-col items-center gap-4 px-8 md:flex-row md:gap-2 md:px-0">
<p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company&nbsp;Last updated: Apr 19, 2026.&nbsp;</p> <p class="text-sm leading-loose text-center text-muted-foreground md:text-left">© 2026, Katanemo Labs, a DigitalOcean Company&nbsp;Last updated: Apr 22, 2026.&nbsp;</p>
</div> </div>
</div> </div>
</footer> </footer>

File diff suppressed because one or more lines are too long