Deprecate Array attribute in favor of *Slice types#2162
Merged
MrAlias merged 11 commits intoopen-telemetry:mainfrom Aug 12, 2021
Merged
Deprecate Array attribute in favor of *Slice types#2162MrAlias merged 11 commits intoopen-telemetry:mainfrom
MrAlias merged 11 commits intoopen-telemetry:mainfrom
Conversation
Codecov Report
@@ Coverage Diff @@
## main #2162 +/- ##
=======================================
+ Coverage 72.6% 72.8% +0.1%
=======================================
Files 177 177
Lines 12000 12140 +140
=======================================
+ Hits 8719 8840 +121
- Misses 3043 3063 +20
+ Partials 238 237 -1
|
3126a20 to
552c59c
Compare
Contributor
Author
|
I'm going to split off some of the cleanup tasks into other PRs to reduce the size here. |
This was referenced Aug 6, 2021
Aneurysm9
approved these changes
Aug 11, 2021
jmacd
approved these changes
Aug 11, 2021
pellared
approved these changes
Aug 12, 2021
pull Bot
pushed a commit
to Hawthorne001/opentelemetry-go
that referenced
this pull request
Jul 16, 2025
Resolve open-telemetry#7030 This generation fixes the following: - The `semconv/weaver.yaml` file is moved to the `semconv/templates/registry/go` to [fix the generation](open-telemetry#7030 (comment)). - Deprecated enum `var`s are no longer generate. - The deprecation of the previous `OSTypeZOS` (`z_os`) conflicts with the replacement (`zos`). - This matches all other generations where deprecated types are not generated and the migration docs identify users need to upgrade when upgrading packages. - Fix metric description rendering to handle multi-line metric descriptions. - Fix filter of deprecated metrics in weaver configuration (see open-telemetry/weaver#847). The release notes for v1.35.0 are included as we do not plan to add a package for that release and it includes breaking changes being released here (i.e. `az.namespace` and `az.service_request_id`) ## [`v1.36.0` semantic convention release notes](https://github.com/open-telemetry/semantic-conventions/releases/tag/v1.36.0) <div data-pjax="true" data-test-selector="body-content" data-view-component="true" class="markdown-body my-3"><h3>🚩 Deprecations 🚩</h3> <ul> <li><code>os</code>: Adds the 'deprecated:' tag/attribute to the <code>z_os</code> enum value of <code>os.type</code>. This value was recently deprecated in v1.35.0. (<a href="open-telemetry/semantic-conventions#2479" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2479/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2479</a>)</li> </ul> <h3>💡 Enhancements 💡</h3> <ul> <li><code>otel</code>: Replaces <code>otel.sdk.span.ended</code> with <code>otel.sdk.span.started</code> and allow differentiation based on the parent span origin (<a href="open-telemetry/semantic-conventions#2431" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2431/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2431</a>)</li> <li><code>db</code>: Add database context propagation via <code>SET CONTEXT_INFO</code> for SQL Server (<a href="open-telemetry/semantic-conventions#2162" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2162/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2162</a>)</li> <li><code>entities</code>: Adds support for Entity registry and Entity stabilization policies. (<a href="open-telemetry/semantic-conventions#2246" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2246/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2246</a>)</li> </ul> <h3>🧰 Bug fixes 🧰</h3> <ul> <li><code>cloud</code>: Exclude deprecated Azure members from code generation on the <code>cloud.platform</code> attribute (<a href="open-telemetry/semantic-conventions#2477" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2477/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2477</a>, <a href="open-telemetry/semantic-conventions#2455" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2455/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2455</a>)</li> </ul> ## [`v1.35.0` semantic convention release notes](https://github.com/open-telemetry/semantic-conventions/releases/tag/v1.35.0) <div data-pjax="true" data-test-selector="body-content" data-view-component="true" class="markdown-body my-3"><h3>🛑 Breaking changes 🛑</h3> <ul> <li> <p><code>azure</code>: Align azure events, attributes, and enum members with general naming guidelines. (<a href="open-telemetry/semantic-conventions#608" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/608/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#608</a>, <a href="open-telemetry/semantic-conventions#1708" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1708/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1708</a>, <a href="open-telemetry/semantic-conventions#1698" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1698/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1698</a>)</p> <ul> <li>Renamed attributes: <ul> <li><code>az.service_request_id</code> to <code>azure.service.request.id</code></li> <li><code>az.namespace</code> to <code>azure.resource_provider.namespace</code></li> </ul> </li> <li>Renamed events: <ul> <li><code>az.resource.log</code> to <code>azure.resource.log</code></li> </ul> </li> <li>Renamed enum members: <ul> <li><code>az.ai.inference</code> to <code>azure.ai.inference</code> (on <code>gen_ai.system</code>)</li> <li><code>az.ai.openai</code> to <code>azure.ai.openai</code> (on <code>gen_ai.system</code>)</li> <li><code>azure_aks</code> to <code>azure.aks</code> (on <code>cloud.platform</code>)</li> <li><code>azure_app_service</code> to <code>azure.app_service</code> (on <code>cloud.platform</code>)</li> <li><code>azure_container_apps</code> to <code>azure.container_apps</code> (on <code>cloud.platform</code>)</li> <li><code>azure_container_instances</code> to <code>azure.container_instances</code> (on <code>cloud.platform</code>)</li> <li><code>azure_functions</code> to <code>azure.functions</code> (on <code>cloud.platform</code>)</li> <li><code>azure_openshift</code> to <code>azure.open_shift</code> (on <code>cloud.platform</code>)</li> <li><code>azure_vm</code> to <code>azure.vm</code> (on <code>cloud.platform</code>)</li> </ul> </li> </ul> </li> <li> <p><code>system</code>: Revert the change that moved <code>system.cpu.*</code> to <code>cpu.*</code>. The 3 affected metrics are back in <code>system.cpu.*</code>. (<a href="open-telemetry/semantic-conventions#1873" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1873/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1873</a>)</p> </li> <li> <p><code>system</code>: Changes system.network.connections to system.network.connection.count (<a href="open-telemetry/semantic-conventions#1800" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1800/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1800</a>)</p> </li> <li> <p><code>k8s</code>: Change instrument type for .limit/.request container metrics from gauge to updowncounter (<a href="open-telemetry/semantic-conventions#2354" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2354/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2354</a>)</p> </li> </ul> <h3>🚩 Deprecations 🚩</h3> <ul> <li><code>os</code>: Deprecate os.type='z_os' and replace with os.type='zos' (<a href="open-telemetry/semantic-conventions#1687" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1687/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1687</a>)</li> </ul> <h3>🚀 New components 🚀</h3> <ul> <li><code>mainframe, zos</code>: Add initial semantic conventions for mainframes (<a href="open-telemetry/semantic-conventions#1687" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1687/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1687</a>)</li> </ul> <h3>💡 Enhancements 💡</h3> <ul> <li> <p><code>dotnet</code>: Define .NET-specific network spans for DNS resolution, TLS handshake, and socket connections, along with HTTP-level spans to (optionally) record relationships between HTTP requests and connections.<br> (<a href="open-telemetry/semantic-conventions#1192" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/1192/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1192</a>)</p> </li> <li> <p><code>k8s</code>: Add <code>k8s.node.allocatable.cpu</code>, <code>k8s.node.allocatable.ephemeral_storage</code>, <code>k8s.node.allocatable.memory</code>, <code>k8s.node.allocatable.pods</code> metrics (<a href="open-telemetry/semantic-conventions#2243" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2243/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2243</a>)</p> </li> <li> <p><code>k8s</code>: Add k8s.container.restart.count metric (<a href="open-telemetry/semantic-conventions#2191" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2191/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2191</a>)</p> </li> <li> <p><code>k8s</code>: Add K8s container resource related metrics (<a href="open-telemetry/semantic-conventions#2074" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2074/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2074</a>)</p> </li> <li> <p><code>k8s</code>: Add k8s.container.ready metric (<a href="open-telemetry/semantic-conventions#2074" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2074/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2074</a>)</p> </li> <li> <p><code>k8s</code>: Add k8s.node.condition metric (<a href="open-telemetry/semantic-conventions#2077" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2077/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2077</a>)</p> </li> <li> <p><code>k8s</code>: Add k8s resource quota metrics (<a href="open-telemetry/semantic-conventions#2076" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2076/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2076</a>)</p> </li> <li> <p><code>events</code>: Update general event guidance to allow complex attributes on events and use them instead of the body fields.<br> (<a href="open-telemetry/semantic-conventions#1651" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1651/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1651</a>, <a href="open-telemetry/semantic-conventions#1669" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1669/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1669</a>)</p> </li> <li> <p><code>k8s</code>: Add k8s.container.status.state and k8s.container.status.reason metrics (<a href="open-telemetry/semantic-conventions#1672" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/1672/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#1672</a>)</p> </li> <li> <p><code>feature_flags</code>: Mark feature flag semantic convention as release candidate. (<a href="open-telemetry/semantic-conventions#2277" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2277/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2277</a>)</p> </li> <li> <p><code>k8s</code>: Add new resource attributes for <code>k8s.hpa</code> to capture the <code>scaleTargetRef</code> fields (<a href="open-telemetry/semantic-conventions#2008" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2008/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2008</a>)<br> Adds below attributes to the <code>k8s.hpa</code> resource:</p> <ul> <li><code>k8s.hpa.scaletargetref.kind</code></li> <li><code>k8s.hpa.scaletargetref.name</code></li> <li><code>k8s.hpa.scaletargetref.api_version</code></li> </ul> </li> <li> <p><code>k8s</code>: Adds metrics and attributes to track k8s HPA's metric target values for CPU resources. (<a href="open-telemetry/semantic-conventions#2182" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2182/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2182</a>)<br> Below metrics are introduced to provide insight into HPA scaling configuration for CPU.</p> <ul> <li><code>k8s.hpa.metric.target.cpu.value</code></li> <li><code>k8s.hpa.metric.target.cpu.average_value</code></li> <li><code>k8s.hpa.metric.target.cpu.average_utilization</code></li> </ul> </li> <li> <p><code>k8s</code>: Explains the rationale behind the Kubernetes resource naming convention. (<a href="open-telemetry/semantic-conventions#2245" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2245/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2245</a>)</p> </li> <li> <p><code>all</code>: Adds modelling guide for resource and entity. (<a href="open-telemetry/semantic-conventions#2246" data-hovercard-type="issue" data-hovercard-url="/open-telemetry/semantic-conventions/issues/2246/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2246</a>)</p> </li> <li> <p><code>service</code>: Adds stability policies for Entity groups. (<a href="open-telemetry/semantic-conventions#2378" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2378/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2378</a>)<br> Entity groups now require <code>role</code> to be filled for attributes.</p> </li> <li> <p><code>otel</code>: Specifies component.type values for Zipkin and Prometheus exporters (<a href="open-telemetry/semantic-conventions#2229" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2229/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2229</a>)</p> </li> </ul> <h3>🧰 Bug fixes 🧰</h3> <ul> <li><code>otel</code>: Removes <code>otel.scope</code> entity. (<a href="open-telemetry/semantic-conventions#2310" data-hovercard-type="pull_request" data-hovercard-url="/open-telemetry/semantic-conventions/pull/2310/hovercard" aria-keyshortcuts="Alt+ArrowUp">open-telemetry#2310</a>)</li> </ul>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves #2158
Add
*Sliceattribute types as a replacement for the deprecatedArraytype.Benchmark Results
To compare the existing Array type with the new *Slice types the
*/Array/KeyValuebenchmark shows the "before" and the equivalent*Slice/Valueshows the "after" for the encoding. Similarly for the*/Array/Emitand*Slice/Emit.$ go test -bench=. goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/attribute cpu: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz BenchmarkBool/Value-8 832225669 1.363 ns/op 0 B/op 0 allocs/op BenchmarkBool/KeyValue-8 141931221 8.458 ns/op 0 B/op 0 allocs/op BenchmarkBool/AsBool-8 833652847 1.439 ns/op 0 B/op 0 allocs/op BenchmarkBool/Any-8 58587181 20.87 ns/op 0 B/op 0 allocs/op BenchmarkBool/Emit-8 149373596 7.977 ns/op 0 B/op 0 allocs/op BenchmarkBool/Array/KeyValue-8 6737637 175.4 ns/op 6 B/op 2 allocs/op BenchmarkBool/Array/Emit-8 4434680 271.0 ns/op 24 B/op 1 allocs/op BenchmarkBoolSlice/Value-8 26688757 46.21 ns/op 27 B/op 2 allocs/op BenchmarkBoolSlice/KeyValue-8 22950921 49.40 ns/op 27 B/op 2 allocs/op BenchmarkBoolSlice/AsBoolSlice-8 525599371 2.272 ns/op 0 B/op 0 allocs/op BenchmarkBoolSlice/Any-8 16773865 71.35 ns/op 27 B/op 2 allocs/op BenchmarkBoolSlice/Emit-8 3257484 348.7 ns/op 27 B/op 4 allocs/op BenchmarkInt/Value-8 877902837 1.364 ns/op 0 B/op 0 allocs/op BenchmarkInt/KeyValue-8 142272414 8.431 ns/op 0 B/op 0 allocs/op BenchmarkInt/Any-8 60339177 19.81 ns/op 0 B/op 0 allocs/op BenchmarkInt/Emit-8 100000000 10.14 ns/op 0 B/op 0 allocs/op BenchmarkInt/Array/KeyValue-8 6178926 201.1 ns/op 48 B/op 2 allocs/op BenchmarkInt/Array/Emit-8 3916032 301.4 ns/op 16 B/op 1 allocs/op BenchmarkIntSlice/Value-8 21200500 55.04 ns/op 48 B/op 2 allocs/op BenchmarkIntSlice/KeyValue-8 17387926 65.81 ns/op 48 B/op 2 allocs/op BenchmarkIntSlice/Any-8 13910582 86.29 ns/op 48 B/op 2 allocs/op BenchmarkIntSlice/Emit-8 2681140 439.6 ns/op 40 B/op 4 allocs/op BenchmarkInt8/Any-8 61987556 20.22 ns/op 0 B/op 0 allocs/op BenchmarkInt16/Any-8 59654839 20.37 ns/op 0 B/op 0 allocs/op BenchmarkInt32/Any-8 57865954 20.38 ns/op 0 B/op 0 allocs/op BenchmarkInt64/Value-8 806119342 1.358 ns/op 0 B/op 0 allocs/op BenchmarkInt64/KeyValue-8 141895544 8.436 ns/op 0 B/op 0 allocs/op BenchmarkInt64/AsInt64-8 830603088 1.483 ns/op 0 B/op 0 allocs/op BenchmarkInt64/Any-8 57967998 21.18 ns/op 0 B/op 0 allocs/op BenchmarkInt64/Emit-8 100000000 10.36 ns/op 0 B/op 0 allocs/op BenchmarkInt64/Array/KeyValue-8 6219757 196.6 ns/op 48 B/op 2 allocs/op BenchmarkInt64/Array/Emit-8 3721778 323.0 ns/op 16 B/op 1 allocs/op BenchmarkInt64Slice/Value-8 23372196 51.28 ns/op 48 B/op 2 allocs/op BenchmarkInt64Slice/KeyValue-8 18154530 58.24 ns/op 48 B/op 2 allocs/op BenchmarkInt64Slice/AsInt64Slice-8 494594601 2.464 ns/op 0 B/op 0 allocs/op BenchmarkInt64Slice/Any-8 15182502 78.44 ns/op 48 B/op 2 allocs/op BenchmarkInt64Slice/Emit-8 2585980 461.1 ns/op 40 B/op 4 allocs/op BenchmarkFloat64/Value-8 875715577 1.437 ns/op 0 B/op 0 allocs/op BenchmarkFloat64/KeyValue-8 142405081 8.438 ns/op 0 B/op 0 allocs/op BenchmarkFloat64/AsFloat64-8 821869407 1.407 ns/op 0 B/op 0 allocs/op BenchmarkFloat64/Any-8 60712789 20.73 ns/op 0 B/op 0 allocs/op BenchmarkFloat64/Emit-8 8718868 137.9 ns/op 16 B/op 2 allocs/op BenchmarkFloat64/Array/KeyValue-8 5793618 200.9 ns/op 48 B/op 2 allocs/op BenchmarkFloat64/Array/Emit-8 2527147 472.9 ns/op 16 B/op 1 allocs/op BenchmarkFloat64Slice/Value-8 22137026 53.27 ns/op 48 B/op 2 allocs/op BenchmarkFloat64Slice/KeyValue-8 18504712 66.35 ns/op 48 B/op 2 allocs/op BenchmarkFloat64Slice/AsFloat64Slice-8 510276062 2.478 ns/op 0 B/op 0 allocs/op BenchmarkFloat64Slice/Any-8 15239098 89.51 ns/op 48 B/op 2 allocs/op BenchmarkFloat64Slice/Emit-8 1998475 596.2 ns/op 40 B/op 4 allocs/op BenchmarkString/Value-8 183353606 6.529 ns/op 0 B/op 0 allocs/op BenchmarkString/KeyValue-8 134076531 8.963 ns/op 0 B/op 0 allocs/op BenchmarkString/AsString-8 630018024 2.001 ns/op 0 B/op 0 allocs/op BenchmarkString/Any-8 53771318 23.64 ns/op 0 B/op 0 allocs/op BenchmarkString/Emit-8 168047347 7.531 ns/op 0 B/op 0 allocs/op BenchmarkString/Array/KeyValue-8 4995198 244.7 ns/op 96 B/op 2 allocs/op BenchmarkString/Array/Emit-8 3748335 319.4 ns/op 48 B/op 1 allocs/op BenchmarkStringSlice/Value-8 12286879 97.78 ns/op 72 B/op 2 allocs/op BenchmarkStringSlice/KeyValue-8 12281880 97.38 ns/op 72 B/op 2 allocs/op BenchmarkStringSlice/AsStringSlice-8 486037562 2.488 ns/op 0 B/op 0 allocs/op BenchmarkStringSlice/Any-8 9544404 126.2 ns/op 72 B/op 2 allocs/op BenchmarkStringSlice/Emit-8 2722761 447.6 ns/op 96 B/op 4 allocs/op BenchmarkBytes/Any-8 36801850 32.62 ns/op 0 B/op 0 allocs/opThe take-away:
[]booltypes takes a bit more memory,[]stringtake a bit less, and number types are equivalent.Emitusers more memory and allocations. These extra allocations seem to be coming from thefmt.Sprintfunction and the resizing of the underlying buffer it uses to build the string representation. I built a PoC for aBoolSlicethat optimized the buffer size prior to build a string directly and saw the allocations drop back to down. This seems like a place for future optimization if it is determined worth it.