Files
document-haness/docs/clean-architecture-backend-template/final/evidence/rendered/analysis-finding-a06-f022.svg
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.

Follows the import procedure in README.md.

  source/     the originating repository verbatim — 78 documents, 28 SVGs,
              8 manifests, plus .source-revision recording the commit
  final/      the SSOT
    document.md   729 lines written from the 29 experiment documents, not
                  concatenated: what was predicted, what was measured, and
                  where the measurement itself was wrong
    evidence/raw    125 outputs, flattened to <experiment>__<file> because
                    the originals collided (01-baseline.txt appeared three
                    times) and the audit only globs the top level
    evidence/meta   one per raw file; command and exitCode are null and the
                    README says why rather than inventing them
    evidence/browser  22 captures
    assets/       three diagrams through techviz
    .techviz/     their VizSpecs

A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.

Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.

verify-pipeline.py passes. audit-records.py reports no issues.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:51:59 +09:00

278 lines
59 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="5650" viewBox="0 0 1200 5650" role="img">
<title>terminal evidence</title>
<desc>Terminal-style rendering generated from retained command output. Sensitive-looking values are redacted in the visual asset.</desc>
<rect x="1" y="1" width="1198" height="5648" rx="14" fill="#0d1117" stroke="#30363d"/>
<rect x="1" y="1" width="1198" height="44" rx="14" fill="#161b22"/>
<rect x="1" y="30" width="1198" height="14" fill="#161b22"/>
<circle cx="24" cy="22" r="6" fill="#ff5f57"/>
<circle cx="44" cy="22" r="6" fill="#febc2e"/>
<circle cx="64" cy="22" r="6" fill="#28c840"/>
<text x="92" y="27" fill="#8b949e" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace">terminal evidence</text>
<text x="24" y="68" fill="#c9d1d9" font-size="15" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">$ #!/bin/bash
set -euo pipefail
cd /shared/codebase/clean-architecture-backend-template
. /tmp/lib.sh
O=src/adapter/outb</tspan><tspan x="24" dy="22">ound/persistence-mongo/src/main/java/dev/caskeleton/adapter/outbound/mongo/observation
C=$O/MongoObservationConvention.j</tspan><tspan x="24" dy="22">ava
R=$O/MongoObservationRedactor.java
L=$O/MongoCommandObservationListener.java
for f in &quot;$C&quot; &quot;$R&quot; &quot;$L&quot;; do test -f &quot;$f</tspan><tspan x="24" dy="22">&quot;; done
echo &quot;# 규약이 강제라고 적는 문장&quot;
at &quot;$C&quot; 1 57 MongoObservationConvention.java
echo
echo &quot;# 그 강제를 수행하</tspan><tspan x="24" dy="22">는 메서드&quot;
at &quot;$C&quot; 58 78 MongoObservationConvention.java
echo
echo &quot;# 그것을 부르는 자리&quot;
printf &#x27; MongoObservationCon</tspan><tspan x="24" dy="22">vention 을 언급하는 main 파일 : %s 개\n&#x27; \
&quot;$({ git grep -l &#x27;MongoObservationConvention&#x27; -- &#x27;src/**/src/main/**/*.java</tspan><tspan x="24" dy="22">&#x27; || true; } | grep -c . || true)&quot;
{ git grep -l &#x27;MongoObservationConvention&#x27; -- &#x27;src/**/src/main/**/*.java&#x27; || true; } </tspan><tspan x="24" dy="22">| sed &#x27;s#.*/# #&#x27;
printf &#x27; 이 리프 main 에서 requireAllowed 를 부르는 줄 : %s 개\n&#x27; \
&quot;$(lines &#x27;\.requireAllowed\(&#x27;</tspan><tspan x="24" dy="22"> &#x27;src/adapter/outbound/persistence-mongo/src/main/**/observation/*.java&#x27;)&quot;
echo &quot; requireAllowed 가 이 리프에 나오는 자</tspan><tspan x="24" dy="22">리 전부 :&quot;
hits &#x27;requireAllowed&#x27; &#x27;src/adapter/outbound/persistence-mongo/**/*.java&#x27; \
| sed -E &#x27;s#^src/(.*)/src/([a-zA</tspan><tspan x="24" dy="22">-Z]+)/java/.*/([A-Za-z0-9_$]+\.java):([0-9]+): *# \2 · \3:\4 #&#x27;
printf &#x27; [대조] 저장소 전체 main 에서 그 이름을 부</tspan><tspan x="24" dy="22">르는 줄 : %s 개\n&#x27; \
&quot;$(lines &#x27;\.requireAllowed\(&#x27; &#x27;src/**/src/main/**/*.java&#x27;)&quot;
hits &#x27;\.requireAllowed\(&#x27; &#x27;src/**/src</tspan><tspan x="24" dy="22">/main/**/*.java&#x27; \
| sed -E &#x27;s#^.*/([A-Za-z0-9_]+\.java):([0-9]+): *# \1:\2 #&#x27;
printf &#x27; [대조] 같은 pathspec 으로</tspan><tspan x="24" dy="22"> Tags.of 를 세면 : %s 개\n&#x27; \
&quot;$(lines &#x27;Tags\.of\(&#x27; &#x27;src/adapter/outbound/persistence-mongo/src/main/**/observation/*.</tspan><tspan x="24" dy="22">java&#x27;)&quot;
echo
echo &quot;# 그 규약을 언급하는 다른 한 파일이 하는 일&quot;
D=$O/MongoDriverObservabilityConfiguration.java
test -f</tspan><tspan x="24" dy="22"> &quot;$D&quot;
at &quot;$D&quot; 20 43 MongoDriverObservabilityConfiguration.java
printf &#x27; standard() 를 부르는 main 줄 : %s 개\n&#x27; &quot;$(line</tspan><tspan x="24" dy="22">s &#x27;MongoObservationConvention\.standard\(&#x27; &#x27;src/**/src/main/**/*.java&#x27;)&quot;
printf &#x27; convention() 을 부르는 main 줄 : %s </tspan><tspan x="24" dy="22">개\n&#x27; &quot;$(lines &#x27;\.convention\(\)&#x27; &#x27;src/**/src/main/**/*.java&#x27;)&quot;
echo
echo &quot;# 관측 클래스들이 실제로 태그를 붙이는 방법&quot;</tspan><tspan x="24" dy="22">
printf &#x27; 이 패키지에서 Tags.of 를 부르는 줄 : %s 개\n&#x27; &quot;$(lines &#x27;Tags\.of\(&#x27; &quot;$O/*.java&quot;)&quot;
hits &#x27;Tags\.of\(&#x27; &quot;$O/*.jav</tspan><tspan x="24" dy="22">a&quot; \
| sed -E &#x27;s#^.*/([A-Za-z0-9_]+\.java):([0-9]+): *# \1:\2 #&#x27;
printf &#x27; [대조] 저장소 전체에서 Tags.of 를 부르</tspan><tspan x="24" dy="22">는 줄 : %s 개\n&#x27; &quot;$(lines &#x27;Tags\.of\(&#x27; &#x27;src/**/src/main/**/*.java&#x27;)&quot;
echo
echo &quot;# 편집기의 세 갈래 가운데 쓰이는 것&quot;
at</tspan><tspan x="24" dy="22"> &quot;$R&quot; 18 48 MongoObservationRedactor.java
printf &#x27; redactor.describe 를 부르는 main 줄 : %s 개\n&#x27; &quot;$(lines &#x27;redactor\.d</tspan><tspan x="24" dy="22">escribe\(&#x27; &#x27;src/**/src/main/**/*.java&#x27;)&quot;
printf &#x27; redactor.isAlwaysRedacted 를 부르는 main 줄 : %s 개\n&#x27; &quot;$(lines &#x27;reda</tspan><tspan x="24" dy="22">ctor\.isAlwaysRedacted\(&#x27; &#x27;src/**/src/main/**/*.java&#x27;)&quot;
printf &#x27; [대조] 시험에서 redactor.describe 는 : %s 개\n&#x27; &quot;$(lin</tspan><tspan x="24" dy="22">es &#x27;redactor\.describe\(&#x27; &#x27;src/**/src/*[Tt]est*/**/*.java&#x27;)&quot;
echo &quot; 리스너가 그 둘 중 무엇을 쓰는가 :&quot;
at &quot;$L&quot; 59 72 Mo</tspan><tspan x="24" dy="22">ngoCommandObservationListener.java
</tspan></text>
<text x="24" y="640" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">cwd: /shared/codebase/clean-architecture-backend-template</tspan></text>
<text x="24" y="662" fill="#8b949e" font-size="13" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0">time: 2026-09-04T08:36:08+00:00 · exit 0</tspan></text>
<line x1="24" y1="676" x2="1176" y2="676" stroke="#30363d"/>
<text x="24" y="716" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 규약이 강제라고 적는 문장</tspan></text>
<text x="24" y="738" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:1 package dev.caskeleton.adapter.outbound.mongo.observation;</tspan></text>
<text x="24" y="760" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:2 </tspan></text>
<text x="24" y="782" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:3 import java.util.Objects;</tspan></text>
<text x="24" y="804" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:4 import java.util.Set;</tspan></text>
<text x="24" y="826" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:5 </tspan></text>
<text x="24" y="848" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:6 /**</tspan></text>
<text x="24" y="870" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:7 * The only tags MongoDB telemetry may carry (design §27).</tspan></text>
<text x="24" y="892" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:8 *</tspan></text>
<text x="24" y="914" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:9 * &lt;p&gt;Two problems, one allowlist. High-cardinality tags — a document id, a tenant id, a qu</tspan><tspan x="24" dy="22">ery</tspan></text>
<text x="24" y="958" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:10 * parameter — multiply time series until the metrics backend either drops data or bills f</tspan><tspan x="24" dy="22">or it. And</tspan></text>
<text x="24" y="1002" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:11 * the same values are the ones that turn a metrics store into an unmanaged copy of product</tspan><tspan x="24" dy="22">ion data,</tspan></text>
<text x="24" y="1046" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:12 * outside whatever retention and access rules the database is under.</tspan></text>
<text x="24" y="1068" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:13 *</tspan></text>
<text x="24" y="1090" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:14 * &lt;p&gt;Both are prevented the same way: a tag not on this list cannot be attached, so the mi</tspan><tspan x="24" dy="22">stake has</tspan></text>
<text x="24" y="1134" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:15 * to be made in this file rather than at a call site.</tspan></text>
<text x="24" y="1156" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:16 */</tspan></text>
<text x="24" y="1178" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:17 public final class MongoObservationConvention {</tspan></text>
<text x="24" y="1200" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:18 </tspan></text>
<text x="24" y="1222" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:19 private static final Set&lt;String&gt; ALLOWED_TAGS =</tspan></text>
<text x="24" y="1244" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:20 Set.of(</tspan></text>
<text x="24" y="1266" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:21 &quot;mongoProfile&quot;,</tspan></text>
<text x="24" y="1288" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:22 &quot;databaseProfile&quot;,</tspan></text>
<text x="24" y="1310" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:23 &quot;collectionProfile&quot;,</tspan></text>
<text x="24" y="1332" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:24 &quot;operationName&quot;,</tspan></text>
<text x="24" y="1354" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:25 &quot;operationType&quot;,</tspan></text>
<text x="24" y="1376" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:26 &quot;result&quot;,</tspan></text>
<text x="24" y="1398" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:27 &quot;failureCategory&quot;,</tspan></text>
<text x="24" y="1420" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:28 &quot;consistencyProfile&quot;);</tspan></text>
<text x="24" y="1442" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:29 </tspan></text>
<text x="24" y="1464" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:30 private static final Set&lt;String&gt; FORBIDDEN_TAGS =</tspan></text>
<text x="24" y="1486" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:31 Set.of(</tspan></text>
<text x="24" y="1508" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:32 &quot;documentId&quot;,</tspan></text>
<text x="24" y="1530" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:33 &quot;rawTenantId&quot;,</tspan></text>
<text x="24" y="1552" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:34 &quot;tenantId&quot;,</tspan></text>
<text x="24" y="1574" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:35 &quot;dynamicCollectionName&quot;,</tspan></text>
<text x="24" y="1596" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:36 &quot;queryParameter&quot;,</tspan></text>
<text x="24" y="1618" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:37 &quot;query&quot;,</tspan></text>
<text x="24" y="1640" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:38 &quot;fullBson&quot;,</tspan></text>
<text x="24" y="1662" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:39 &quot;resumeToken&quot;,</tspan></text>
<text x="24" y="1684" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:40 &quot;shardKeyValue&quot;,</tspan></text>
<text x="24" y="1706" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:41 &quot;plaintextPII&quot;,</tspan></text>
<text x="24" y="1728" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:42 &quot;credential&quot;);</tspan></text>
<text x="24" y="1750" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:43 </tspan></text>
<text x="24" y="1772" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:44 private MongoObservationConvention() {}</tspan></text>
<text x="24" y="1794" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:45 </tspan></text>
<text x="24" y="1816" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:46 /** The platform&#x27;s standard convention. */</tspan></text>
<text x="24" y="1838" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:47 public static MongoObservationConvention standard() {</tspan></text>
<text x="24" y="1860" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:48 return new MongoObservationConvention();</tspan></text>
<text x="24" y="1882" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:49 }</tspan></text>
<text x="24" y="1904" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:50 </tspan></text>
<text x="24" y="1926" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:51 /** The tag names telemetry may use. */</tspan></text>
<text x="24" y="1948" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:52 public Set&lt;String&gt; allowedTagNames() {</tspan></text>
<text x="24" y="1970" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:53 return ALLOWED_TAGS;</tspan></text>
<text x="24" y="1992" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:54 }</tspan></text>
<text x="24" y="2014" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:55 </tspan></text>
<text x="24" y="2036" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:56 /** The tag names the design explicitly forbids, kept for assertions and review. */</tspan></text>
<text x="24" y="2058" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:57 public Set&lt;String&gt; forbiddenTagNames() {</tspan></text>
<text x="24" y="2080" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="2102" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 강제를 수행하는 메서드</tspan></text>
<text x="24" y="2124" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:58 return FORBIDDEN_TAGS;</tspan></text>
<text x="24" y="2146" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:59 }</tspan></text>
<text x="24" y="2168" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:60 </tspan></text>
<text x="24" y="2190" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:61 /**</tspan></text>
<text x="24" y="2212" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:62 * Rejects a tag that is not on the allowlist.</tspan></text>
<text x="24" y="2234" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:63 *</tspan></text>
<text x="24" y="2256" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:64 * @throws IllegalArgumentException naming the rejected tag</tspan></text>
<text x="24" y="2278" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:65 */</tspan></text>
<text x="24" y="2300" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:66 public void requireAllowed(String tagName) {</tspan></text>
<text x="24" y="2322" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:67 Objects.requireNonNull(tagName, &quot;tagName&quot;);</tspan></text>
<text x="24" y="2344" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:68 if (!ALLOWED_TAGS.contains(tagName)) {</tspan></text>
<text x="24" y="2366" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:69 throw new IllegalArgumentException(</tspan></text>
<text x="24" y="2388" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:70 &quot;tag &#x27;&quot;</tspan></text>
<text x="24" y="2410" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:71 + tagName</tspan></text>
<text x="24" y="2432" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:72 + &quot;&#x27; is not on the MongoDB observation allowlist; the allowed tags are &quot;</tspan></text>
<text x="24" y="2454" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:73 + ALLOWED_TAGS);</tspan></text>
<text x="24" y="2476" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:74 }</tspan></text>
<text x="24" y="2498" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:75 }</tspan></text>
<text x="24" y="2520" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java:76 }</tspan></text>
<text x="24" y="2542" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="2564" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그것을 부르는 자리</tspan></text>
<text x="24" y="2586" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention 을 언급하는 main 파일 : 2 개</tspan></text>
<text x="24" y="2608" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java</tspan></text>
<text x="24" y="2630" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationConvention.java</tspan></text>
<text x="24" y="2652" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 이 리프 main 에서 requireAllowed 를 부르는 줄 : 0 개</tspan></text>
<text x="24" y="2674" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> requireAllowed 가 이 리프에 나오는 자리 전부 :</tspan></text>
<text x="24" y="2696" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · MongoSearchQuery.java:48 public void requireAllowedPaths(Set&lt;String&gt; allowedPaths) {</tspan></text>
<text x="24" y="2718" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · ShardAwareQueryValidator.java:59 public MongoRoutingClassification requireAllowedRead(</tspan></text>
<text x="24" y="2740" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · MongoAggregationProfile.java:86 public void requireAllowed(MongoAggregationStageDescriptor descriptor) {</tspan></text>
<text x="24" y="2762" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · PolicyAwareMongoAggregationExecutor.java:49 plan.stages().forEach(profile::requireAllowed);</tspan></text>
<text x="24" y="2784" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> main · MongoObservationConvention.java:66 public void requireAllowed(String tagName) {</tspan></text>
<text x="24" y="2806" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoSearchReadinessGateTest.java:52 assertThatCode(() -&gt; query.requireAllowedPaths(Set.of(&quot;customerName&quot;)))</tspan></text>
<text x="24" y="2828" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoSearchReadinessGateTest.java:54 assertThatThrownBy(() -&gt; query.requireAllowedPaths(Set.of(&quot;orderNumber&quot;)))</tspan></text>
<text x="24" y="2850" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · ShardAwareQueryValidatorTest.java:57 assertThatThrownBy(() -&gt; validator.requireAllowedRead(key, Set.of(&quot;status&quot;), f</tspan><tspan x="24" dy="22">alse))</tspan></text>
<text x="24" y="2894" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · ShardAwareQueryValidatorTest.java:60 assertThatCode(() -&gt; validator.requireAllowedRead(key, Set.of(&quot;status&quot;), true)</tspan><tspan x="24" dy="22">)</tspan></text>
<text x="24" y="2938" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:20 assertThatThrownBy(() -&gt; profile.requireAllowed(MongoAggregationSta</tspan><tspan x="24" dy="22">geDescriptor.of(&quot;$merge&quot;)))</tspan></text>
<text x="24" y="2982" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:29 .requireAllowed(MongoAggregationStageDescriptor.of(&quot;$out&quot;)))</tspan></text>
<text x="24" y="3004" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:37 assertThatCode(() -&gt; profile.requireAllowed(MongoAggregationStageDe</tspan><tspan x="24" dy="22">scriptor.of(&quot;$match&quot;)))</tspan></text>
<text x="24" y="3048" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:39 assertThatCode(() -&gt; profile.requireAllowed(MongoAggregationStageDe</tspan><tspan x="24" dy="22">scriptor.of(&quot;$project&quot;)))</tspan></text>
<text x="24" y="3092" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:48 .requireAllowed(MongoAggregationStageDescriptor.of(&quot;$group&quot;)))</tspan></text>
<text x="24" y="3114" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:55 .requireAllowed(MongoAggregationStageDescriptor.of(&quot;$group&quot;)))</tspan></text>
<text x="24" y="3136" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:64 assertThatCode(() -&gt; reviewed.requireAllowed(MongoAggregationStageD</tspan><tspan x="24" dy="22">escriptor.of(&quot;$facet&quot;)))</tspan></text>
<text x="24" y="3180" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · PolicyAwareMongoAggregationExecutorTest.java:67 () -&gt; reviewed.requireAllowed(MongoAggregationStageDescriptor.of(&quot;$</tspan><tspan x="24" dy="22">graphLookup&quot;)))</tspan></text>
<text x="24" y="3224" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoObservationConventionTest.java:38 assertThatCode(() -&gt; convention.requireAllowed(&quot;operationName&quot;)).doesNotThro</tspan><tspan x="24" dy="22">wAnyException();</tspan></text>
<text x="24" y="3268" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoObservationConventionTest.java:39 assertThatThrownBy(() -&gt; convention.requireAllowed(&quot;shardKeyValue&quot;))</tspan></text>
<text x="24" y="3290" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoSecurityIntegrationLaneTest.java:163 assertThatThrownBy(() -&gt; convention.requireAllowed(&quot;documentId&quot;))</tspan></text>
<text x="24" y="3312" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoSecurityIntegrationLaneTest.java:165 assertThatThrownBy(() -&gt; convention.requireAllowed(&quot;tenantId&quot;))</tspan></text>
<text x="24" y="3334" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> test · MongoSecurityIntegrationLaneTest.java:167 assertThatCode(() -&gt; convention.requireAllowed(&quot;operationName&quot;)).doesNotT</tspan><tspan x="24" dy="22">hrowAnyException();</tspan></text>
<text x="24" y="3378" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> [대조] 저장소 전체 main 에서 그 이름을 부르는 줄 : 3 개</tspan></text>
<text x="24" y="3400" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> GraphQlRSocketAdmission.java:47 routePolicy.requireAllowed(route);</tspan></text>
<text x="24" y="3422" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> BlockingRedirectCoordinator.java:93 targetGuard.requireAllowed(follow.target(), metadata);</tspan></text>
<text x="24" y="3444" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> PublishPosterImageUseCase.java:106 policy.requireAllowed(command.contentIdentity(), command.mediaType());</tspan></text>
<text x="24" y="3466" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> [대조] 같은 pathspec 으로 Tags.of 를 세면 : 9 개</tspan></text>
<text x="24" y="3488" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="3510" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 그 규약을 언급하는 다른 한 파일이 하는 일</tspan></text>
<text x="24" y="3532" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:20 public MongoDriverObservabilityConfiguration(MeterRegistry registry, String mo</tspan><tspan x="24" dy="22">ngoProfile) {</tspan></text>
<text x="24" y="3576" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:21 this.registry = Objects.requireNonNull(registry, &quot;registry&quot;);</tspan></text>
<text x="24" y="3598" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:22 this.mongoProfile = Objects.requireNonNull(mongoProfile, &quot;mongoProfile&quot;);</tspan></text>
<text x="24" y="3620" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:23 }</tspan></text>
<text x="24" y="3642" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:24 </tspan></text>
<text x="24" y="3664" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:25 /** Adds the command, SDAM and pool listeners to a client settings builder. */</tspan></text>
<text x="24" y="3686" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:26 public MongoClientSettings.Builder apply(MongoClientSettings.Builder builder) </tspan><tspan x="24" dy="22">{</tspan></text>
<text x="24" y="3730" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:27 Objects.requireNonNull(builder, &quot;builder&quot;);</tspan></text>
<text x="24" y="3752" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:28 builder.addCommandListener(new MongoCommandObservationListener(registry, mon</tspan><tspan x="24" dy="22">goProfile));</tspan></text>
<text x="24" y="3796" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:29 builder.applyToClusterSettings(</tspan></text>
<text x="24" y="3818" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:30 cluster -&gt;</tspan></text>
<text x="24" y="3840" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:31 cluster.addClusterListener(new MongoSdamObservationListener(registry</tspan><tspan x="24" dy="22">, mongoProfile)));</tspan></text>
<text x="24" y="3884" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:32 builder.applyToConnectionPoolSettings(</tspan></text>
<text x="24" y="3906" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:33 pool -&gt;</tspan></text>
<text x="24" y="3928" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:34 pool.addConnectionPoolListener(</tspan></text>
<text x="24" y="3950" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:35 new MongoPoolObservationListener(registry, mongoProfile)));</tspan></text>
<text x="24" y="3972" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:36 return builder;</tspan></text>
<text x="24" y="3994" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:37 }</tspan></text>
<text x="24" y="4016" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:38 </tspan></text>
<text x="24" y="4038" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:39 /** The tag convention these listeners obey. */</tspan></text>
<text x="24" y="4060" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:40 public MongoObservationConvention convention() {</tspan></text>
<text x="24" y="4082" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:41 return MongoObservationConvention.standard();</tspan></text>
<text x="24" y="4104" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:42 }</tspan></text>
<text x="24" y="4126" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoDriverObservabilityConfiguration.java:43 }</tspan></text>
<text x="24" y="4148" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> standard() 를 부르는 main 줄 : 1 개</tspan></text>
<text x="24" y="4170" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> convention() 을 부르는 main 줄 : 0 개</tspan></text>
<text x="24" y="4192" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="4214" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 관측 클래스들이 실제로 태그를 붙이는 방법</tspan></text>
<text x="24" y="4236" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 이 패키지에서 Tags.of 를 부르는 줄 : 9 개</tspan></text>
<text x="24" y="4258" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MicrometerMongoOperationObserver.java:46 Tags.of(</tspan></text>
<text x="24" y="4280" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MicrometerMongoOperationObserver.java:72 this.outcomeTags = Tags.of(&quot;result&quot;, &quot;unknown&quot;, &quot;failureCategory&quot;, &quot;none&quot;);</tspan></text>
<text x="24" y="4302" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MicrometerMongoOperationObserver.java:77 outcomeTags = Tags.of(&quot;result&quot;, outcome.name(), &quot;failureCategory&quot;, &quot;none&quot;);</tspan></text>
<text x="24" y="4324" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MicrometerMongoOperationObserver.java:83 Tags.of(</tspan></text>
<text x="24" y="4346" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:63 Tags.of(</tspan></text>
<text x="24" y="4368" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoPoolObservationListener.java:40 Tags tags = Tags.of(&quot;mongoProfile&quot;, mongoProfile);</tspan></text>
<text x="24" y="4390" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoPoolObservationListener.java:60 .tags(Tags.of(&quot;mongoProfile&quot;, mongoProfile, &quot;failureCategory&quot;, event.getReason().name(</tspan><tspan x="24" dy="22">)))</tspan></text>
<text x="24" y="4434" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoSdamObservationListener.java:46 .tags(Tags.of(&quot;mongoProfile&quot;, mongoProfile))</tspan></text>
<text x="24" y="4456" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoSdamObservationListener.java:61 .tags(Tags.of(&quot;mongoProfile&quot;, mongoProfile))</tspan></text>
<text x="24" y="4478" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> [대조] 저장소 전체에서 Tags.of 를 부르는 줄 : 30 개</tspan></text>
<text x="24" y="4500" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"></tspan></text>
<text x="24" y="4522" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"># 편집기의 세 갈래 가운데 쓰이는 것</tspan></text>
<text x="24" y="4544" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:18 /** Commands whose arguments are structural rather than data-bearing. */</tspan></text>
<text x="24" y="4566" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:19 private static final Set&lt;String&gt; DESCRIBABLE_COMMANDS =</tspan></text>
<text x="24" y="4588" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:20 Set.of(&quot;ping&quot;, &quot;hello&quot;, &quot;buildInfo&quot;, &quot;listCollections&quot;, &quot;listIndexes&quot;, &quot;collStats&quot;);</tspan></text>
<text x="24" y="4610" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:21 </tspan></text>
<text x="24" y="4632" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:22 /** Commands whose arguments always carry credentials or key material. */</tspan></text>
<text x="24" y="4654" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:23 private static final Set&lt;String&gt; ALWAYS_REDACTED =</tspan></text>
<text x="24" y="4676" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:24 Set.of(</tspan></text>
<text x="24" y="4698" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:25 &quot;authenticate&quot;,</tspan></text>
<text x="24" y="4720" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:26 &quot;saslStart&quot;,</tspan></text>
<text x="24" y="4742" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:27 &quot;saslContinue&quot;,</tspan></text>
<text x="24" y="4764" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:28 &quot;getnonce&quot;,</tspan></text>
<text x="24" y="4786" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:29 &quot;createUser&quot;,</tspan></text>
<text x="24" y="4808" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:30 &quot;updateUser&quot;,</tspan></text>
<text x="24" y="4830" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:31 &quot;copydbgetnonce&quot;,</tspan></text>
<text x="24" y="4852" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:32 &quot;copydbsaslstart&quot;,</tspan></text>
<text x="24" y="4874" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:33 &quot;copydb&quot;);</tspan></text>
<text x="24" y="4896" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:34 </tspan></text>
<text x="24" y="4918" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:35 /** The redacted rendering of a command. */</tspan></text>
<text x="24" y="4940" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:36 public String describe(String commandName) {</tspan></text>
<text x="24" y="4962" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:37 Objects.requireNonNull(commandName, &quot;commandName&quot;);</tspan></text>
<text x="24" y="4984" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:38 if (ALWAYS_REDACTED.contains(commandName)) {</tspan></text>
<text x="24" y="5006" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:39 return &quot;&lt;redacted&gt;&quot;;</tspan></text>
<text x="24" y="5028" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:40 }</tspan></text>
<text x="24" y="5050" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:41 return DESCRIBABLE_COMMANDS.contains(commandName) ? commandName : commandName + &quot;(...)&quot;;</tspan></text>
<text x="24" y="5072" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:42 }</tspan></text>
<text x="24" y="5094" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:43 </tspan></text>
<text x="24" y="5116" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:44 /** True when a command&#x27;s arguments must never be described. */</tspan></text>
<text x="24" y="5138" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:45 public boolean isAlwaysRedacted(String commandName) {</tspan></text>
<text x="24" y="5160" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:46 return ALWAYS_REDACTED.contains(Objects.requireNonNull(commandName, &quot;commandName&quot;));</tspan></text>
<text x="24" y="5182" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:47 }</tspan></text>
<text x="24" y="5204" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoObservationRedactor.java:48 }</tspan></text>
<text x="24" y="5226" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> redactor.describe 를 부르는 main 줄 : 0 개</tspan></text>
<text x="24" y="5248" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> redactor.isAlwaysRedacted 를 부르는 main 줄 : 1 개</tspan></text>
<text x="24" y="5270" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> [대조] 시험에서 redactor.describe 는 : 6 개</tspan></text>
<text x="24" y="5292" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> 리스너가 그 둘 중 무엇을 쓰는가 :</tspan></text>
<text x="24" y="5314" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:59 private void record(String commandName, String result, long elapsedNanos) {</tspan></text>
<text x="24" y="5336" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:60 registry</tspan></text>
<text x="24" y="5358" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:61 .timer(</tspan></text>
<text x="24" y="5380" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:62 METRIC_NAME,</tspan></text>
<text x="24" y="5402" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:63 Tags.of(</tspan></text>
<text x="24" y="5424" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:64 &quot;mongoProfile&quot;,</tspan></text>
<text x="24" y="5446" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:65 mongoProfile,</tspan></text>
<text x="24" y="5468" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:66 &quot;operationType&quot;,</tspan></text>
<text x="24" y="5490" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:67 redactor.isAlwaysRedacted(commandName) ? &quot;&lt;redacted&gt;&quot; : commandName,</tspan></text>
<text x="24" y="5512" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:68 &quot;result&quot;,</tspan></text>
<text x="24" y="5534" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:69 result))</tspan></text>
<text x="24" y="5556" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:70 .record(elapsedNanos, TimeUnit.NANOSECONDS);</tspan></text>
<text x="24" y="5578" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:71 }</tspan></text>
<text x="24" y="5600" fill="#e6edf3" font-size="14" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" xml:space="preserve"><tspan x="24" dy="0"> MongoCommandObservationListener.java:72 }</tspan></text>
</svg>