mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 04:22:25 -05:00 
			
		
		
		
	[chore] bump dependencies (#4339)
- github.com/KimMachineGun/automemlimit v0.7.4 - github.com/miekg/dns v1.1.67 - github.com/minio/minio-go/v7 v7.0.95 - github.com/spf13/pflag v1.0.7 - github.com/tdewolff/minify/v2 v2.23.9 - github.com/uptrace/bun v1.2.15 - github.com/uptrace/bun/dialect/pgdialect v1.2.15 - github.com/uptrace/bun/dialect/sqlitedialect v1.2.15 - github.com/uptrace/bun/extra/bunotel v1.2.15 - golang.org/x/image v0.29.0 - golang.org/x/net v0.42.0 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4339 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								eb60081985
							
						
					
				
			
			
				commit
				
					
						c00cad2ceb
					
				
			
		
					 76 changed files with 5544 additions and 886 deletions
				
			
		
							
								
								
									
										25
									
								
								vendor/github.com/prometheus/otlptranslator/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/prometheus/otlptranslator/.gitignore
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| # If you prefer the allow list template instead of the deny list, see community template: | ||||
| # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore | ||||
| # | ||||
| # Binaries for programs and plugins | ||||
| *.exe | ||||
| *.exe~ | ||||
| *.dll | ||||
| *.so | ||||
| *.dylib | ||||
| 
 | ||||
| # Test binary, built with `go test -c` | ||||
| *.test | ||||
| 
 | ||||
| # Output of the go coverage tool, specifically when used with LiteIDE | ||||
| *.out | ||||
| 
 | ||||
| # Dependency directories (remove the comment below to include it) | ||||
| # vendor/ | ||||
| 
 | ||||
| # Go workspace file | ||||
| go.work | ||||
| go.work.sum | ||||
| 
 | ||||
| # env file | ||||
| .env | ||||
							
								
								
									
										106
									
								
								vendor/github.com/prometheus/otlptranslator/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/prometheus/otlptranslator/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,106 @@ | |||
| formatters: | ||||
|   enable: | ||||
|     - gci | ||||
|     - gofumpt | ||||
|   settings: | ||||
|     gci: | ||||
|       sections: | ||||
|         - standard | ||||
|         - default | ||||
|         - prefix(github.com/prometheus/otlptranslator) | ||||
|     gofumpt: | ||||
|       extra-rules: true | ||||
| issues: | ||||
|   max-issues-per-linter: 0 | ||||
|   max-same-issues: 0 | ||||
| linters: | ||||
|   # Keep this list sorted alphabetically | ||||
|   enable: | ||||
|     - depguard | ||||
|     - errorlint | ||||
|     - exptostd | ||||
|     - gocritic | ||||
|     - godot | ||||
|     - loggercheck | ||||
|     - misspell | ||||
|     - nilnesserr | ||||
|     # TODO: Enable once https://github.com/golangci/golangci-lint/issues/3228 is fixed. | ||||
|     # - nolintlint | ||||
|     - perfsprint | ||||
|     - predeclared | ||||
|     - revive | ||||
|     - sloglint | ||||
|     - testifylint | ||||
|     - unconvert | ||||
|     - unused | ||||
|     - usestdlibvars | ||||
|     - whitespace | ||||
|   settings: | ||||
|     depguard: | ||||
|       rules: | ||||
|         main: | ||||
|           deny: | ||||
|             - pkg: sync/atomic | ||||
|               desc: Use go.uber.org/atomic instead of sync/atomic | ||||
|             - pkg: github.com/stretchr/testify/assert | ||||
|               desc: Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert | ||||
|             - pkg: io/ioutil | ||||
|               desc: Use corresponding 'os' or 'io' functions instead. | ||||
|             - pkg: regexp | ||||
|               desc: Use github.com/grafana/regexp instead of regexp | ||||
|             - pkg: github.com/pkg/errors | ||||
|               desc: Use 'errors' or 'fmt' instead of github.com/pkg/errors | ||||
|             - pkg: golang.org/x/exp/slices | ||||
|               desc: Use 'slices' instead. | ||||
|     perfsprint: | ||||
|       # Optimizes `fmt.Errorf`. | ||||
|       errorf: true | ||||
|     revive: | ||||
|       # By default, revive will enable only the linting rules that are named in the configuration file. | ||||
|       # So, it's needed to explicitly enable all required rules here. | ||||
|       rules: | ||||
|         # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md | ||||
|         - name: blank-imports | ||||
|         - name: comment-spacings | ||||
|         - name: context-as-argument | ||||
|           arguments: | ||||
|             # Allow functions with test or bench signatures. | ||||
|             - allowTypesBefore: '*testing.T,testing.TB' | ||||
|         - name: context-keys-type | ||||
|         - name: dot-imports | ||||
|         - name: early-return | ||||
|           arguments: | ||||
|             - preserveScope | ||||
|         # A lot of false positives: incorrectly identifies channel draining as "empty code block". | ||||
|         # See https://github.com/mgechev/revive/issues/386 | ||||
|         - name: empty-block | ||||
|           disabled: true | ||||
|         - name: error-naming | ||||
|         - name: error-return | ||||
|         - name: error-strings | ||||
|         - name: errorf | ||||
|         - name: exported | ||||
|         - name: increment-decrement | ||||
|         - name: indent-error-flow | ||||
|           arguments: | ||||
|             - preserveScope | ||||
|         - name: range | ||||
|         - name: receiver-naming | ||||
|         - name: redefines-builtin-id | ||||
|         - name: superfluous-else | ||||
|           arguments: | ||||
|             - preserveScope | ||||
|         - name: time-naming | ||||
|         - name: unexported-return | ||||
|         - name: unreachable-code | ||||
|         - name: unused-parameter | ||||
|         - name: var-declaration | ||||
|         - name: var-naming | ||||
|     testifylint: | ||||
|       disable: | ||||
|         - float-compare | ||||
|         - go-require | ||||
|       enable-all: true | ||||
| run: | ||||
|   timeout: 15m | ||||
| version: "2" | ||||
							
								
								
									
										3
									
								
								vendor/github.com/prometheus/otlptranslator/CODE_OF_CONDUCT.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/prometheus/otlptranslator/CODE_OF_CONDUCT.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| # Prometheus Community Code of Conduct | ||||
| 
 | ||||
| Prometheus follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). | ||||
							
								
								
									
										201
									
								
								vendor/github.com/prometheus/otlptranslator/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								vendor/github.com/prometheus/otlptranslator/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,201 @@ | |||
|                                  Apache License | ||||
|                            Version 2.0, January 2004 | ||||
|                         http://www.apache.org/licenses/ | ||||
| 
 | ||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||
| 
 | ||||
|    1. Definitions. | ||||
| 
 | ||||
|       "License" shall mean the terms and conditions for use, reproduction, | ||||
|       and distribution as defined by Sections 1 through 9 of this document. | ||||
| 
 | ||||
|       "Licensor" shall mean the copyright owner or entity authorized by | ||||
|       the copyright owner that is granting the License. | ||||
| 
 | ||||
|       "Legal Entity" shall mean the union of the acting entity and all | ||||
|       other entities that control, are controlled by, or are under common | ||||
|       control with that entity. For the purposes of this definition, | ||||
|       "control" means (i) the power, direct or indirect, to cause the | ||||
|       direction or management of such entity, whether by contract or | ||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||
|       outstanding shares, or (iii) beneficial ownership of such entity. | ||||
| 
 | ||||
|       "You" (or "Your") shall mean an individual or Legal Entity | ||||
|       exercising permissions granted by this License. | ||||
| 
 | ||||
|       "Source" form shall mean the preferred form for making modifications, | ||||
|       including but not limited to software source code, documentation | ||||
|       source, and configuration files. | ||||
| 
 | ||||
|       "Object" form shall mean any form resulting from mechanical | ||||
|       transformation or translation of a Source form, including but | ||||
|       not limited to compiled object code, generated documentation, | ||||
|       and conversions to other media types. | ||||
| 
 | ||||
|       "Work" shall mean the work of authorship, whether in Source or | ||||
|       Object form, made available under the License, as indicated by a | ||||
|       copyright notice that is included in or attached to the work | ||||
|       (an example is provided in the Appendix below). | ||||
| 
 | ||||
|       "Derivative Works" shall mean any work, whether in Source or Object | ||||
|       form, that is based on (or derived from) the Work and for which the | ||||
|       editorial revisions, annotations, elaborations, or other modifications | ||||
|       represent, as a whole, an original work of authorship. For the purposes | ||||
|       of this License, Derivative Works shall not include works that remain | ||||
|       separable from, or merely link (or bind by name) to the interfaces of, | ||||
|       the Work and Derivative Works thereof. | ||||
| 
 | ||||
|       "Contribution" shall mean any work of authorship, including | ||||
|       the original version of the Work and any modifications or additions | ||||
|       to that Work or Derivative Works thereof, that is intentionally | ||||
|       submitted to Licensor for inclusion in the Work by the copyright owner | ||||
|       or by an individual or Legal Entity authorized to submit on behalf of | ||||
|       the copyright owner. For the purposes of this definition, "submitted" | ||||
|       means any form of electronic, verbal, or written communication sent | ||||
|       to the Licensor or its representatives, including but not limited to | ||||
|       communication on electronic mailing lists, source code control systems, | ||||
|       and issue tracking systems that are managed by, or on behalf of, the | ||||
|       Licensor for the purpose of discussing and improving the Work, but | ||||
|       excluding communication that is conspicuously marked or otherwise | ||||
|       designated in writing by the copyright owner as "Not a Contribution." | ||||
| 
 | ||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||
|       on behalf of whom a Contribution has been received by Licensor and | ||||
|       subsequently incorporated within the Work. | ||||
| 
 | ||||
|    2. Grant of Copyright License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       copyright license to reproduce, prepare Derivative Works of, | ||||
|       publicly display, publicly perform, sublicense, and distribute the | ||||
|       Work and such Derivative Works in Source or Object form. | ||||
| 
 | ||||
|    3. Grant of Patent License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       (except as stated in this section) patent license to make, have made, | ||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||
|       where such license applies only to those patent claims licensable | ||||
|       by such Contributor that are necessarily infringed by their | ||||
|       Contribution(s) alone or by combination of their Contribution(s) | ||||
|       with the Work to which such Contribution(s) was submitted. If You | ||||
|       institute patent litigation against any entity (including a | ||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||
|       or a Contribution incorporated within the Work constitutes direct | ||||
|       or contributory patent infringement, then any patent licenses | ||||
|       granted to You under this License for that Work shall terminate | ||||
|       as of the date such litigation is filed. | ||||
| 
 | ||||
|    4. Redistribution. You may reproduce and distribute copies of the | ||||
|       Work or Derivative Works thereof in any medium, with or without | ||||
|       modifications, and in Source or Object form, provided that You | ||||
|       meet the following conditions: | ||||
| 
 | ||||
|       (a) You must give any other recipients of the Work or | ||||
|           Derivative Works a copy of this License; and | ||||
| 
 | ||||
|       (b) You must cause any modified files to carry prominent notices | ||||
|           stating that You changed the files; and | ||||
| 
 | ||||
|       (c) You must retain, in the Source form of any Derivative Works | ||||
|           that You distribute, all copyright, patent, trademark, and | ||||
|           attribution notices from the Source form of the Work, | ||||
|           excluding those notices that do not pertain to any part of | ||||
|           the Derivative Works; and | ||||
| 
 | ||||
|       (d) If the Work includes a "NOTICE" text file as part of its | ||||
|           distribution, then any Derivative Works that You distribute must | ||||
|           include a readable copy of the attribution notices contained | ||||
|           within such NOTICE file, excluding those notices that do not | ||||
|           pertain to any part of the Derivative Works, in at least one | ||||
|           of the following places: within a NOTICE text file distributed | ||||
|           as part of the Derivative Works; within the Source form or | ||||
|           documentation, if provided along with the Derivative Works; or, | ||||
|           within a display generated by the Derivative Works, if and | ||||
|           wherever such third-party notices normally appear. The contents | ||||
|           of the NOTICE file are for informational purposes only and | ||||
|           do not modify the License. You may add Your own attribution | ||||
|           notices within Derivative Works that You distribute, alongside | ||||
|           or as an addendum to the NOTICE text from the Work, provided | ||||
|           that such additional attribution notices cannot be construed | ||||
|           as modifying the License. | ||||
| 
 | ||||
|       You may add Your own copyright statement to Your modifications and | ||||
|       may provide additional or different license terms and conditions | ||||
|       for use, reproduction, or distribution of Your modifications, or | ||||
|       for any such Derivative Works as a whole, provided Your use, | ||||
|       reproduction, and distribution of the Work otherwise complies with | ||||
|       the conditions stated in this License. | ||||
| 
 | ||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||
|       any Contribution intentionally submitted for inclusion in the Work | ||||
|       by You to the Licensor shall be under the terms and conditions of | ||||
|       this License, without any additional terms or conditions. | ||||
|       Notwithstanding the above, nothing herein shall supersede or modify | ||||
|       the terms of any separate license agreement you may have executed | ||||
|       with Licensor regarding such Contributions. | ||||
| 
 | ||||
|    6. Trademarks. This License does not grant permission to use the trade | ||||
|       names, trademarks, service marks, or product names of the Licensor, | ||||
|       except as required for reasonable and customary use in describing the | ||||
|       origin of the Work and reproducing the content of the NOTICE file. | ||||
| 
 | ||||
|    7. Disclaimer of Warranty. Unless required by applicable law or | ||||
|       agreed to in writing, Licensor provides the Work (and each | ||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||
|       implied, including, without limitation, any warranties or conditions | ||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||
|       appropriateness of using or redistributing the Work and assume any | ||||
|       risks associated with Your exercise of permissions under this License. | ||||
| 
 | ||||
|    8. Limitation of Liability. In no event and under no legal theory, | ||||
|       whether in tort (including negligence), contract, or otherwise, | ||||
|       unless required by applicable law (such as deliberate and grossly | ||||
|       negligent acts) or agreed to in writing, shall any Contributor be | ||||
|       liable to You for damages, including any direct, indirect, special, | ||||
|       incidental, or consequential damages of any character arising as a | ||||
|       result of this License or out of the use or inability to use the | ||||
|       Work (including but not limited to damages for loss of goodwill, | ||||
|       work stoppage, computer failure or malfunction, or any and all | ||||
|       other commercial damages or losses), even if such Contributor | ||||
|       has been advised of the possibility of such damages. | ||||
| 
 | ||||
|    9. Accepting Warranty or Additional Liability. While redistributing | ||||
|       the Work or Derivative Works thereof, You may choose to offer, | ||||
|       and charge a fee for, acceptance of support, warranty, indemnity, | ||||
|       or other liability obligations and/or rights consistent with this | ||||
|       License. However, in accepting such obligations, You may act only | ||||
|       on Your own behalf and on Your sole responsibility, not on behalf | ||||
|       of any other Contributor, and only if You agree to indemnify, | ||||
|       defend, and hold each Contributor harmless for any liability | ||||
|       incurred by, or claims asserted against, such Contributor by reason | ||||
|       of your accepting any such warranty or additional liability. | ||||
| 
 | ||||
|    END OF TERMS AND CONDITIONS | ||||
| 
 | ||||
|    APPENDIX: How to apply the Apache License to your work. | ||||
| 
 | ||||
|       To apply the Apache License to your work, attach the following | ||||
|       boilerplate notice, with the fields enclosed by brackets "[]" | ||||
|       replaced with your own identifying information. (Don't include | ||||
|       the brackets!)  The text should be enclosed in the appropriate | ||||
|       comment syntax for the file format. We also recommend that a | ||||
|       file or class name and description of purpose be included on the | ||||
|       same "printed page" as the copyright notice for easier | ||||
|       identification within third-party archives. | ||||
| 
 | ||||
|    Copyright [yyyy] [name of copyright owner] | ||||
| 
 | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
| 
 | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
							
								
								
									
										4
									
								
								vendor/github.com/prometheus/otlptranslator/MAINTAINERS.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/prometheus/otlptranslator/MAINTAINERS.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| * Arthur Silva Sens (arthursens2005@gmail.com / @ArthurSens) | ||||
| * Arve Knudsen (arve.knudsen@gmail.com / @aknuds1) | ||||
| * Jesús Vázquez (jesus.vazquez@grafana.com / @jesusvazquez) | ||||
| * Owen Williams (owen.williams@grafana.com / @ywwg) | ||||
							
								
								
									
										2
									
								
								vendor/github.com/prometheus/otlptranslator/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/prometheus/otlptranslator/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| # otlp-prometheus-translator | ||||
| Library providing API to convert OTLP metric and attribute names to respectively Prometheus metric and label names. | ||||
							
								
								
									
										6
									
								
								vendor/github.com/prometheus/otlptranslator/SECURITY.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/prometheus/otlptranslator/SECURITY.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| # Reporting a security issue | ||||
| 
 | ||||
| The Prometheus security policy, including how to report vulnerabilities, can be | ||||
| found here: | ||||
| 
 | ||||
| <https://prometheus.io/docs/operating/security/> | ||||
							
								
								
									
										38
									
								
								vendor/github.com/prometheus/otlptranslator/constants.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/prometheus/otlptranslator/constants.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| package otlptranslator | ||||
| 
 | ||||
| const ( | ||||
| 	// ExemplarTraceIDKey is the key used to store the trace ID in Prometheus | ||||
| 	// exemplars: | ||||
| 	// https://github.com/open-telemetry/opentelemetry-specification/blob/e6eccba97ebaffbbfad6d4358408a2cead0ec2df/specification/compatibility/prometheus_and_openmetrics.md#exemplars | ||||
| 	ExemplarTraceIDKey = "trace_id" | ||||
| 	// ExemplarSpanIDKey is the key used to store the Span ID in Prometheus | ||||
| 	// exemplars: | ||||
| 	// https://github.com/open-telemetry/opentelemetry-specification/blob/e6eccba97ebaffbbfad6d4358408a2cead0ec2df/specification/compatibility/prometheus_and_openmetrics.md#exemplars | ||||
| 	ExemplarSpanIDKey = "span_id" | ||||
| 	// ScopeNameLabelKey is the name of the label key used to identify the name | ||||
| 	// of the OpenTelemetry scope which produced the metric: | ||||
| 	// https://github.com/open-telemetry/opentelemetry-specification/blob/e6eccba97ebaffbbfad6d4358408a2cead0ec2df/specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope | ||||
| 	ScopeNameLabelKey = "otel_scope_name" | ||||
| 	// ScopeVersionLabelKey is the name of the label key used to identify the | ||||
| 	// version of the OpenTelemetry scope which produced the metric: | ||||
| 	// https://github.com/open-telemetry/opentelemetry-specification/blob/e6eccba97ebaffbbfad6d4358408a2cead0ec2df/specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope | ||||
| 	ScopeVersionLabelKey = "otel_scope_version" | ||||
| 	// TargetInfoMetricName is the name of the metric used to preserve resource | ||||
| 	// attributes in Prometheus format: | ||||
| 	// https://github.com/open-telemetry/opentelemetry-specification/blob/e6eccba97ebaffbbfad6d4358408a2cead0ec2df/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1 | ||||
| 	// It originates from OpenMetrics: | ||||
| 	// https://github.com/OpenObservability/OpenMetrics/blob/1386544931307dff279688f332890c31b6c5de36/specification/OpenMetrics.md#supporting-target-metadata-in-both-push-based-and-pull-based-systems | ||||
| 	TargetInfoMetricName = "target_info" | ||||
| ) | ||||
							
								
								
									
										275
									
								
								vendor/github.com/prometheus/otlptranslator/metric_namer.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										275
									
								
								vendor/github.com/prometheus/otlptranslator/metric_namer.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,275 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| // Provenance-includes-location: https://github.com/prometheus/prometheus/blob/93e991ef7ed19cc997a9360c8016cac3767b8057/storage/remote/otlptranslator/prometheus/metric_name_builder.go | ||||
| // Provenance-includes-license: Apache-2.0 | ||||
| // Provenance-includes-copyright: Copyright The Prometheus Authors | ||||
| // Provenance-includes-location: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/95e8f8fdc2a9dc87230406c9a3cf02be4fd68bea/pkg/translator/prometheus/normalize_name.go | ||||
| // Provenance-includes-license: Apache-2.0 | ||||
| // Provenance-includes-copyright: Copyright The OpenTelemetry Authors. | ||||
| 
 | ||||
| package otlptranslator | ||||
| 
 | ||||
| import ( | ||||
| 	"slices" | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
| 
 | ||||
| 	"github.com/grafana/regexp" | ||||
| ) | ||||
| 
 | ||||
| // The map to translate OTLP units to Prometheus units | ||||
| // OTLP metrics use the c/s notation as specified at https://ucum.org/ucum.html | ||||
| // (See also https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/README.md#instrument-units) | ||||
| // Prometheus best practices for units: https://prometheus.io/docs/practices/naming/#base-units | ||||
| // OpenMetrics specification for units: https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#units-and-base-units | ||||
| var unitMap = map[string]string{ | ||||
| 	// Time | ||||
| 	"d":   "days", | ||||
| 	"h":   "hours", | ||||
| 	"min": "minutes", | ||||
| 	"s":   "seconds", | ||||
| 	"ms":  "milliseconds", | ||||
| 	"us":  "microseconds", | ||||
| 	"ns":  "nanoseconds", | ||||
| 
 | ||||
| 	// Bytes | ||||
| 	"By":   "bytes", | ||||
| 	"KiBy": "kibibytes", | ||||
| 	"MiBy": "mebibytes", | ||||
| 	"GiBy": "gibibytes", | ||||
| 	"TiBy": "tibibytes", | ||||
| 	"KBy":  "kilobytes", | ||||
| 	"MBy":  "megabytes", | ||||
| 	"GBy":  "gigabytes", | ||||
| 	"TBy":  "terabytes", | ||||
| 
 | ||||
| 	// SI | ||||
| 	"m": "meters", | ||||
| 	"V": "volts", | ||||
| 	"A": "amperes", | ||||
| 	"J": "joules", | ||||
| 	"W": "watts", | ||||
| 	"g": "grams", | ||||
| 
 | ||||
| 	// Misc | ||||
| 	"Cel": "celsius", | ||||
| 	"Hz":  "hertz", | ||||
| 	"1":   "", | ||||
| 	"%":   "percent", | ||||
| } | ||||
| 
 | ||||
| // The map that translates the "per" unit. | ||||
| // Example: s => per second (singular). | ||||
| var perUnitMap = map[string]string{ | ||||
| 	"s":  "second", | ||||
| 	"m":  "minute", | ||||
| 	"h":  "hour", | ||||
| 	"d":  "day", | ||||
| 	"w":  "week", | ||||
| 	"mo": "month", | ||||
| 	"y":  "year", | ||||
| } | ||||
| 
 | ||||
| // MetricNamer is a helper struct to build metric names. | ||||
| type MetricNamer struct { | ||||
| 	Namespace          string | ||||
| 	WithMetricSuffixes bool | ||||
| 	UTF8Allowed        bool | ||||
| } | ||||
| 
 | ||||
| // Metric is a helper struct that holds information about a metric. | ||||
| type Metric struct { | ||||
| 	Name string | ||||
| 	Unit string | ||||
| 	Type MetricType | ||||
| } | ||||
| 
 | ||||
| // Build builds a metric name for the specified metric. | ||||
| // | ||||
| // If UTF8Allowed is true, the metric name is returned as is, only with the addition of type/unit suffixes and namespace preffix if required. | ||||
| // Otherwise the metric name is normalized to be Prometheus-compliant. | ||||
| // See rules at https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels, | ||||
| // https://prometheus.io/docs/practices/naming/#metric-and-label-naming | ||||
| func (mn *MetricNamer) Build(metric Metric) string { | ||||
| 	if mn.UTF8Allowed { | ||||
| 		return mn.buildMetricName(metric.Name, metric.Unit, metric.Type) | ||||
| 	} | ||||
| 	return mn.buildCompliantMetricName(metric.Name, metric.Unit, metric.Type) | ||||
| } | ||||
| 
 | ||||
| func (mn *MetricNamer) buildCompliantMetricName(name, unit string, metricType MetricType) string { | ||||
| 	// Full normalization following standard Prometheus naming conventions | ||||
| 	if mn.WithMetricSuffixes { | ||||
| 		return normalizeName(name, unit, metricType, mn.Namespace) | ||||
| 	} | ||||
| 
 | ||||
| 	// Simple case (no full normalization, no units, etc.). | ||||
| 	metricName := strings.Join(strings.FieldsFunc(name, func(r rune) bool { | ||||
| 		return invalidMetricCharRE.MatchString(string(r)) | ||||
| 	}), "_") | ||||
| 
 | ||||
| 	// Namespace? | ||||
| 	if mn.Namespace != "" { | ||||
| 		namespace := strings.Join(strings.FieldsFunc(mn.Namespace, func(r rune) bool { | ||||
| 			return invalidMetricCharRE.MatchString(string(r)) | ||||
| 		}), "_") | ||||
| 		return namespace + "_" + metricName | ||||
| 	} | ||||
| 
 | ||||
| 	// Metric name starts with a digit? Prefix it with an underscore. | ||||
| 	if metricName != "" && unicode.IsDigit(rune(metricName[0])) { | ||||
| 		metricName = "_" + metricName | ||||
| 	} | ||||
| 
 | ||||
| 	return metricName | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	// Regexp for metric name characters that should be replaced with _. | ||||
| 	invalidMetricCharRE   = regexp.MustCompile(`[^a-zA-Z0-9:_]`) | ||||
| 	multipleUnderscoresRE = regexp.MustCompile(`__+`) | ||||
| ) | ||||
| 
 | ||||
| // isValidCompliantMetricChar checks if a rune is a valid metric name character (a-z, A-Z, 0-9, :). | ||||
| func isValidCompliantMetricChar(r rune) bool { | ||||
| 	return (r >= 'a' && r <= 'z') || | ||||
| 		(r >= 'A' && r <= 'Z') || | ||||
| 		(r >= '0' && r <= '9') || | ||||
| 		r == ':' | ||||
| } | ||||
| 
 | ||||
| // replaceInvalidMetricChar replaces invalid metric name characters with underscore. | ||||
| func replaceInvalidMetricChar(r rune) rune { | ||||
| 	if isValidCompliantMetricChar(r) { | ||||
| 		return r | ||||
| 	} | ||||
| 	return '_' | ||||
| } | ||||
| 
 | ||||
| // Build a normalized name for the specified metric. | ||||
| func normalizeName(name, unit string, metricType MetricType, namespace string) string { | ||||
| 	// Split metric name into "tokens" (of supported metric name runes). | ||||
| 	// Note that this has the side effect of replacing multiple consecutive underscores with a single underscore. | ||||
| 	// This is part of the OTel to Prometheus specification: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.38.0/specification/compatibility/prometheus_and_openmetrics.md#otlp-metric-points-to-prometheus. | ||||
| 	nameTokens := strings.FieldsFunc( | ||||
| 		name, | ||||
| 		func(r rune) bool { return !isValidCompliantMetricChar(r) }, | ||||
| 	) | ||||
| 
 | ||||
| 	mainUnitSuffix, perUnitSuffix := buildUnitSuffixes(unit) | ||||
| 	nameTokens = addUnitTokens(nameTokens, cleanUpUnit(mainUnitSuffix), cleanUpUnit(perUnitSuffix)) | ||||
| 
 | ||||
| 	// Append _total for Counters | ||||
| 	if metricType == MetricTypeMonotonicCounter { | ||||
| 		nameTokens = append(removeItem(nameTokens, "total"), "total") | ||||
| 	} | ||||
| 
 | ||||
| 	// Append _ratio for metrics with unit "1" | ||||
| 	// Some OTel receivers improperly use unit "1" for counters of objects | ||||
| 	// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aissue+some+metric+units+don%27t+follow+otel+semantic+conventions | ||||
| 	// Until these issues have been fixed, we're appending `_ratio` for gauges ONLY | ||||
| 	// Theoretically, counters could be ratios as well, but it's absurd (for mathematical reasons) | ||||
| 	if unit == "1" && metricType == MetricTypeGauge { | ||||
| 		nameTokens = append(removeItem(nameTokens, "ratio"), "ratio") | ||||
| 	} | ||||
| 
 | ||||
| 	// Namespace? | ||||
| 	if namespace != "" { | ||||
| 		nameTokens = append([]string{namespace}, nameTokens...) | ||||
| 	} | ||||
| 
 | ||||
| 	// Build the string from the tokens, separated with underscores | ||||
| 	normalizedName := strings.Join(nameTokens, "_") | ||||
| 
 | ||||
| 	// Metric name cannot start with a digit, so prefix it with "_" in this case | ||||
| 	if normalizedName != "" && unicode.IsDigit(rune(normalizedName[0])) { | ||||
| 		normalizedName = "_" + normalizedName | ||||
| 	} | ||||
| 
 | ||||
| 	return normalizedName | ||||
| } | ||||
| 
 | ||||
| // addUnitTokens will add the suffixes to the nameTokens if they are not already present. | ||||
| // It will also remove trailing underscores from the main suffix to avoid double underscores | ||||
| // when joining the tokens. | ||||
| // | ||||
| // If the 'per' unit ends with underscore, the underscore will be removed. If the per unit is just | ||||
| // 'per_', it will be entirely removed. | ||||
| func addUnitTokens(nameTokens []string, mainUnitSuffix, perUnitSuffix string) []string { | ||||
| 	if slices.Contains(nameTokens, mainUnitSuffix) { | ||||
| 		mainUnitSuffix = "" | ||||
| 	} | ||||
| 
 | ||||
| 	if perUnitSuffix == "per_" { | ||||
| 		perUnitSuffix = "" | ||||
| 	} else { | ||||
| 		perUnitSuffix = strings.TrimSuffix(perUnitSuffix, "_") | ||||
| 		if slices.Contains(nameTokens, perUnitSuffix) { | ||||
| 			perUnitSuffix = "" | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if perUnitSuffix != "" { | ||||
| 		mainUnitSuffix = strings.TrimSuffix(mainUnitSuffix, "_") | ||||
| 	} | ||||
| 
 | ||||
| 	if mainUnitSuffix != "" { | ||||
| 		nameTokens = append(nameTokens, mainUnitSuffix) | ||||
| 	} | ||||
| 	if perUnitSuffix != "" { | ||||
| 		nameTokens = append(nameTokens, perUnitSuffix) | ||||
| 	} | ||||
| 	return nameTokens | ||||
| } | ||||
| 
 | ||||
| // Remove the specified value from the slice. | ||||
| func removeItem(slice []string, value string) []string { | ||||
| 	newSlice := make([]string, 0, len(slice)) | ||||
| 	for _, sliceEntry := range slice { | ||||
| 		if sliceEntry != value { | ||||
| 			newSlice = append(newSlice, sliceEntry) | ||||
| 		} | ||||
| 	} | ||||
| 	return newSlice | ||||
| } | ||||
| 
 | ||||
| func (mn *MetricNamer) buildMetricName(name, unit string, metricType MetricType) string { | ||||
| 	if mn.Namespace != "" { | ||||
| 		name = mn.Namespace + "_" + name | ||||
| 	} | ||||
| 
 | ||||
| 	if mn.WithMetricSuffixes { | ||||
| 		mainUnitSuffix, perUnitSuffix := buildUnitSuffixes(unit) | ||||
| 		if mainUnitSuffix != "" { | ||||
| 			name = name + "_" + mainUnitSuffix | ||||
| 		} | ||||
| 		if perUnitSuffix != "" { | ||||
| 			name = name + "_" + perUnitSuffix | ||||
| 		} | ||||
| 
 | ||||
| 		// Append _total for Counters | ||||
| 		if metricType == MetricTypeMonotonicCounter { | ||||
| 			name += "_total" | ||||
| 		} | ||||
| 
 | ||||
| 		// Append _ratio for metrics with unit "1" | ||||
| 		// Some OTel receivers improperly use unit "1" for counters of objects | ||||
| 		// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aissue+some+metric+units+don%27t+follow+otel+semantic+conventions | ||||
| 		// Until these issues have been fixed, we're appending `_ratio` for gauges ONLY | ||||
| 		// Theoretically, counters could be ratios as well, but it's absurd (for mathematical reasons) | ||||
| 		if unit == "1" && metricType == MetricTypeGauge { | ||||
| 			name += "_ratio" | ||||
| 		} | ||||
| 	} | ||||
| 	return name | ||||
| } | ||||
							
								
								
									
										36
									
								
								vendor/github.com/prometheus/otlptranslator/metric_type.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/github.com/prometheus/otlptranslator/metric_type.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| 
 | ||||
| package otlptranslator | ||||
| 
 | ||||
| // MetricType is a representation of metric types from OpenTelemetry. | ||||
| // Different types of Sums were introduced based on their metric temporalities. | ||||
| // For more details, see: | ||||
| // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/data-model.md#sums | ||||
| type MetricType int | ||||
| 
 | ||||
| const ( | ||||
| 	// MetricTypeUnknown represents an unknown metric type. | ||||
| 	MetricTypeUnknown = iota | ||||
| 	// MetricTypeNonMonotonicCounter represents a counter that is not monotonically increasing, also known as delta counter. | ||||
| 	MetricTypeNonMonotonicCounter | ||||
| 	// MetricTypeMonotonicCounter represents a counter that is monotonically increasing, also known as cumulative counter. | ||||
| 	MetricTypeMonotonicCounter | ||||
| 	// MetricTypeGauge represents a gauge metric. | ||||
| 	MetricTypeGauge | ||||
| 	// MetricTypeHistogram represents a histogram metric. | ||||
| 	MetricTypeHistogram | ||||
| 	// MetricTypeExponentialHistogram represents an exponential histogram metric. | ||||
| 	MetricTypeExponentialHistogram | ||||
| 	// MetricTypeSummary represents a summary metric. | ||||
| 	MetricTypeSummary | ||||
| ) | ||||
							
								
								
									
										57
									
								
								vendor/github.com/prometheus/otlptranslator/normalize_label.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/github.com/prometheus/otlptranslator/normalize_label.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| // Provenance-includes-location: https://github.com/prometheus/prometheus/blob/93e991ef7ed19cc997a9360c8016cac3767b8057/storage/remote/otlptranslator/prometheus/normalize_label.go | ||||
| // Provenance-includes-license: Apache-2.0 | ||||
| // Provenance-includes-copyright: Copyright The Prometheus Authors | ||||
| // Provenance-includes-location: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/95e8f8fdc2a9dc87230406c9a3cf02be4fd68bea/pkg/translator/prometheus/normalize_label.go | ||||
| // Provenance-includes-license: Apache-2.0 | ||||
| // Provenance-includes-copyright: Copyright The OpenTelemetry Authors. | ||||
| 
 | ||||
| package otlptranslator | ||||
| 
 | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
| ) | ||||
| 
 | ||||
| // LabelNamer is a helper struct to build label names. | ||||
| type LabelNamer struct { | ||||
| 	UTF8Allowed bool | ||||
| } | ||||
| 
 | ||||
| // Build normalizes the specified label to follow Prometheus label names standard. | ||||
| // | ||||
| // See rules at https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels. | ||||
| // | ||||
| // Labels that start with non-letter rune will be prefixed with "key_". | ||||
| // An exception is made for double-underscores which are allowed. | ||||
| // | ||||
| // If UTF8Allowed is true, the label is returned as is. This option is provided just to | ||||
| // keep a consistent interface with the MetricNamer. | ||||
| func (ln *LabelNamer) Build(label string) string { | ||||
| 	// Trivial case. | ||||
| 	if len(label) == 0 || ln.UTF8Allowed { | ||||
| 		return label | ||||
| 	} | ||||
| 
 | ||||
| 	label = sanitizeLabelName(label) | ||||
| 
 | ||||
| 	// If label starts with a number, prepend with "key_". | ||||
| 	if unicode.IsDigit(rune(label[0])) { | ||||
| 		label = "key_" + label | ||||
| 	} else if strings.HasPrefix(label, "_") && !strings.HasPrefix(label, "__") { | ||||
| 		label = "key" + label | ||||
| 	} | ||||
| 
 | ||||
| 	return label | ||||
| } | ||||
							
								
								
									
										42
									
								
								vendor/github.com/prometheus/otlptranslator/strconv.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/prometheus/otlptranslator/strconv.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| // Provenance-includes-location: https://github.com/prometheus/prometheus/blob/93e991ef7ed19cc997a9360c8016cac3767b8057/storage/remote/otlptranslator/prometheus/strconv.go.go | ||||
| // Provenance-includes-license: Apache-2.0 | ||||
| // Provenance-includes-copyright: Copyright The Prometheus Authors | ||||
| // Provenance-includes-location: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/95e8f8fdc2a9dc87230406c9a3cf02be4fd68bea/pkg/translator/prometheus/normalize_name_test.go | ||||
| // Provenance-includes-license: Apache-2.0 | ||||
| // Provenance-includes-copyright: Copyright The OpenTelemetry Authors. | ||||
| 
 | ||||
| package otlptranslator | ||||
| 
 | ||||
| import ( | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // sanitizeLabelName replaces any characters not valid according to the | ||||
| // classical Prometheus label naming scheme with an underscore. | ||||
| // Note: this does not handle all Prometheus label name restrictions (such as | ||||
| // not starting with a digit 0-9), and hence should only be used if the label | ||||
| // name is prefixed with a known valid string. | ||||
| func sanitizeLabelName(name string) string { | ||||
| 	var b strings.Builder | ||||
| 	b.Grow(len(name)) | ||||
| 	for _, r := range name { | ||||
| 		if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') { | ||||
| 			b.WriteRune(r) | ||||
| 		} else { | ||||
| 			b.WriteRune('_') | ||||
| 		} | ||||
| 	} | ||||
| 	return b.String() | ||||
| } | ||||
							
								
								
									
										110
									
								
								vendor/github.com/prometheus/otlptranslator/unit_namer.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								vendor/github.com/prometheus/otlptranslator/unit_namer.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,110 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| 
 | ||||
| package otlptranslator | ||||
| 
 | ||||
| import "strings" | ||||
| 
 | ||||
| // UnitNamer is a helper for building compliant unit names. | ||||
| type UnitNamer struct { | ||||
| 	UTF8Allowed bool | ||||
| } | ||||
| 
 | ||||
| // Build builds a unit name for the specified unit string. | ||||
| // It processes the unit by splitting it into main and per components, | ||||
| // applying appropriate unit mappings, and cleaning up invalid characters | ||||
| // when the whole UTF-8 character set is not allowed. | ||||
| func (un *UnitNamer) Build(unit string) string { | ||||
| 	mainUnit, perUnit := buildUnitSuffixes(unit) | ||||
| 	if !un.UTF8Allowed { | ||||
| 		mainUnit, perUnit = cleanUpUnit(mainUnit), cleanUpUnit(perUnit) | ||||
| 	} | ||||
| 
 | ||||
| 	var u string | ||||
| 	switch { | ||||
| 	case mainUnit != "" && perUnit != "": | ||||
| 		u = mainUnit + "_" + perUnit | ||||
| 	case mainUnit != "": | ||||
| 		u = mainUnit | ||||
| 	default: | ||||
| 		u = perUnit | ||||
| 	} | ||||
| 
 | ||||
| 	// Clean up leading and trailing underscores | ||||
| 	if len(u) > 0 && u[0:1] == "_" { | ||||
| 		u = u[1:] | ||||
| 	} | ||||
| 	if len(u) > 0 && u[len(u)-1:] == "_" { | ||||
| 		u = u[:len(u)-1] | ||||
| 	} | ||||
| 
 | ||||
| 	return u | ||||
| } | ||||
| 
 | ||||
| // Retrieve the Prometheus "basic" unit corresponding to the specified "basic" unit. | ||||
| // Returns the specified unit if not found in unitMap. | ||||
| func unitMapGetOrDefault(unit string) string { | ||||
| 	if promUnit, ok := unitMap[unit]; ok { | ||||
| 		return promUnit | ||||
| 	} | ||||
| 	return unit | ||||
| } | ||||
| 
 | ||||
| // Retrieve the Prometheus "per" unit corresponding to the specified "per" unit. | ||||
| // Returns the specified unit if not found in perUnitMap. | ||||
| func perUnitMapGetOrDefault(perUnit string) string { | ||||
| 	if promPerUnit, ok := perUnitMap[perUnit]; ok { | ||||
| 		return promPerUnit | ||||
| 	} | ||||
| 	return perUnit | ||||
| } | ||||
| 
 | ||||
| // buildUnitSuffixes builds the main and per unit suffixes for the specified unit | ||||
| // but doesn't do any special character transformation to accommodate Prometheus naming conventions. | ||||
| // Removing trailing underscores or appending suffixes is done in the caller. | ||||
| func buildUnitSuffixes(unit string) (mainUnitSuffix, perUnitSuffix string) { | ||||
| 	// Split unit at the '/' if any | ||||
| 	unitTokens := strings.SplitN(unit, "/", 2) | ||||
| 
 | ||||
| 	if len(unitTokens) > 0 { | ||||
| 		// Main unit | ||||
| 		// Update if not blank and doesn't contain '{}' | ||||
| 		mainUnitOTel := strings.TrimSpace(unitTokens[0]) | ||||
| 		if mainUnitOTel != "" && !strings.ContainsAny(mainUnitOTel, "{}") { | ||||
| 			mainUnitSuffix = unitMapGetOrDefault(mainUnitOTel) | ||||
| 		} | ||||
| 
 | ||||
| 		// Per unit | ||||
| 		// Update if not blank and doesn't contain '{}' | ||||
| 		if len(unitTokens) > 1 && unitTokens[1] != "" { | ||||
| 			perUnitOTel := strings.TrimSpace(unitTokens[1]) | ||||
| 			if perUnitOTel != "" && !strings.ContainsAny(perUnitOTel, "{}") { | ||||
| 				perUnitSuffix = perUnitMapGetOrDefault(perUnitOTel) | ||||
| 			} | ||||
| 			if perUnitSuffix != "" { | ||||
| 				perUnitSuffix = "per_" + perUnitSuffix | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return mainUnitSuffix, perUnitSuffix | ||||
| } | ||||
| 
 | ||||
| // cleanUpUnit cleans up unit so it matches model.LabelNameRE. | ||||
| func cleanUpUnit(unit string) string { | ||||
| 	// Multiple consecutive underscores are replaced with a single underscore. | ||||
| 	// This is part of the OTel to Prometheus specification: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.38.0/specification/compatibility/prometheus_and_openmetrics.md#otlp-metric-points-to-prometheus. | ||||
| 	return strings.TrimPrefix(multipleUnderscoresRE.ReplaceAllString( | ||||
| 		strings.Map(replaceInvalidMetricChar, unit), | ||||
| 		"_", | ||||
| 	), "_") | ||||
| } | ||||
							
								
								
									
										15
									
								
								vendor/github.com/prometheus/procfs/Makefile.common
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/prometheus/procfs/Makefile.common
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -33,7 +33,7 @@ GOHOSTOS     ?= $(shell $(GO) env GOHOSTOS) | |||
| GOHOSTARCH   ?= $(shell $(GO) env GOHOSTARCH) | ||||
| 
 | ||||
| GO_VERSION        ?= $(shell $(GO) version) | ||||
| GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION))Error Parsing File | ||||
| GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) | ||||
| PRE_GO_111        ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') | ||||
| 
 | ||||
| PROMU        := $(FIRST_GOPATH)/bin/promu | ||||
|  | @ -61,7 +61,8 @@ PROMU_URL     := https://github.com/prometheus/promu/releases/download/v$(PROMU_ | |||
| SKIP_GOLANGCI_LINT := | ||||
| GOLANGCI_LINT := | ||||
| GOLANGCI_LINT_OPTS ?= | ||||
| GOLANGCI_LINT_VERSION ?= v2.0.2 | ||||
| GOLANGCI_LINT_VERSION ?= v2.1.5 | ||||
| GOLANGCI_FMT_OPTS ?= | ||||
| # golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64. | ||||
| # windows isn't included here because of the path separator being different. | ||||
| ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) | ||||
|  | @ -156,9 +157,13 @@ $(GOTEST_DIR): | |||
| 	@mkdir -p $@ | ||||
| 
 | ||||
| .PHONY: common-format | ||||
| common-format: | ||||
| common-format: $(GOLANGCI_LINT) | ||||
| 	@echo ">> formatting code" | ||||
| 	$(GO) fmt $(pkgs) | ||||
| ifdef GOLANGCI_LINT | ||||
| 	@echo ">> formatting code with golangci-lint" | ||||
| 	$(GOLANGCI_LINT) fmt $(GOLANGCI_FMT_OPTS) | ||||
| endif | ||||
| 
 | ||||
| .PHONY: common-vet | ||||
| common-vet: | ||||
|  | @ -248,8 +253,8 @@ $(PROMU): | |||
| 	cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu | ||||
| 	rm -r $(PROMU_TMP) | ||||
| 
 | ||||
| .PHONY: proto | ||||
| proto: | ||||
| .PHONY: common-proto | ||||
| common-proto: | ||||
| 	@echo ">> generating code from proto files" | ||||
| 	@./scripts/genproto.sh | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/github.com/prometheus/procfs/mdstat.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/prometheus/procfs/mdstat.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -123,13 +123,16 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { | |||
| 		finish := float64(0) | ||||
| 		pct := float64(0) | ||||
| 		recovering := strings.Contains(lines[syncLineIdx], "recovery") | ||||
| 		reshaping := strings.Contains(lines[syncLineIdx], "reshape") | ||||
| 		resyncing := strings.Contains(lines[syncLineIdx], "resync") | ||||
| 		checking := strings.Contains(lines[syncLineIdx], "check") | ||||
| 
 | ||||
| 		// Append recovery and resyncing state info. | ||||
| 		if recovering || resyncing || checking { | ||||
| 		if recovering || resyncing || checking || reshaping { | ||||
| 			if recovering { | ||||
| 				state = "recovering" | ||||
| 			} else if reshaping { | ||||
| 				state = "reshaping" | ||||
| 			} else if checking { | ||||
| 				state = "checking" | ||||
| 			} else { | ||||
|  |  | |||
							
								
								
									
										33
									
								
								vendor/github.com/prometheus/procfs/meminfo.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/prometheus/procfs/meminfo.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -66,6 +66,10 @@ type Meminfo struct { | |||
| 	// Memory which has been evicted from RAM, and is temporarily | ||||
| 	// on the disk | ||||
| 	SwapFree *uint64 | ||||
| 	// Memory consumed by the zswap backend (compressed size) | ||||
| 	Zswap *uint64 | ||||
| 	// Amount of anonymous memory stored in zswap (original size) | ||||
| 	Zswapped *uint64 | ||||
| 	// Memory which is waiting to get written back to the disk | ||||
| 	Dirty *uint64 | ||||
| 	// Memory which is actively being written back to the disk | ||||
|  | @ -85,6 +89,8 @@ type Meminfo struct { | |||
| 	// amount of memory dedicated to the lowest level of page | ||||
| 	// tables. | ||||
| 	PageTables *uint64 | ||||
| 	// secondary page tables. | ||||
| 	SecPageTables *uint64 | ||||
| 	// NFS pages sent to the server, but not yet committed to | ||||
| 	// stable storage | ||||
| 	NFSUnstable *uint64 | ||||
|  | @ -129,15 +135,18 @@ type Meminfo struct { | |||
| 	Percpu            *uint64 | ||||
| 	HardwareCorrupted *uint64 | ||||
| 	AnonHugePages     *uint64 | ||||
| 	FileHugePages     *uint64 | ||||
| 	ShmemHugePages    *uint64 | ||||
| 	ShmemPmdMapped    *uint64 | ||||
| 	CmaTotal          *uint64 | ||||
| 	CmaFree           *uint64 | ||||
| 	Unaccepted        *uint64 | ||||
| 	HugePagesTotal    *uint64 | ||||
| 	HugePagesFree     *uint64 | ||||
| 	HugePagesRsvd     *uint64 | ||||
| 	HugePagesSurp     *uint64 | ||||
| 	Hugepagesize      *uint64 | ||||
| 	Hugetlb           *uint64 | ||||
| 	DirectMap4k       *uint64 | ||||
| 	DirectMap2M       *uint64 | ||||
| 	DirectMap1G       *uint64 | ||||
|  | @ -161,6 +170,8 @@ type Meminfo struct { | |||
| 	MlockedBytes           *uint64 | ||||
| 	SwapTotalBytes         *uint64 | ||||
| 	SwapFreeBytes          *uint64 | ||||
| 	ZswapBytes             *uint64 | ||||
| 	ZswappedBytes          *uint64 | ||||
| 	DirtyBytes             *uint64 | ||||
| 	WritebackBytes         *uint64 | ||||
| 	AnonPagesBytes         *uint64 | ||||
|  | @ -171,6 +182,7 @@ type Meminfo struct { | |||
| 	SUnreclaimBytes        *uint64 | ||||
| 	KernelStackBytes       *uint64 | ||||
| 	PageTablesBytes        *uint64 | ||||
| 	SecPageTablesBytes     *uint64 | ||||
| 	NFSUnstableBytes       *uint64 | ||||
| 	BounceBytes            *uint64 | ||||
| 	WritebackTmpBytes      *uint64 | ||||
|  | @ -182,11 +194,14 @@ type Meminfo struct { | |||
| 	PercpuBytes            *uint64 | ||||
| 	HardwareCorruptedBytes *uint64 | ||||
| 	AnonHugePagesBytes     *uint64 | ||||
| 	FileHugePagesBytes     *uint64 | ||||
| 	ShmemHugePagesBytes    *uint64 | ||||
| 	ShmemPmdMappedBytes    *uint64 | ||||
| 	CmaTotalBytes          *uint64 | ||||
| 	CmaFreeBytes           *uint64 | ||||
| 	UnacceptedBytes        *uint64 | ||||
| 	HugepagesizeBytes      *uint64 | ||||
| 	HugetlbBytes           *uint64 | ||||
| 	DirectMap4kBytes       *uint64 | ||||
| 	DirectMap2MBytes       *uint64 | ||||
| 	DirectMap1GBytes       *uint64 | ||||
|  | @ -287,6 +302,12 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) { | |||
| 		case "SwapFree:": | ||||
| 			m.SwapFree = &val | ||||
| 			m.SwapFreeBytes = &valBytes | ||||
| 		case "Zswap:": | ||||
| 			m.Zswap = &val | ||||
| 			m.ZswapBytes = &valBytes | ||||
| 		case "Zswapped:": | ||||
| 			m.Zswapped = &val | ||||
| 			m.ZswapBytes = &valBytes | ||||
| 		case "Dirty:": | ||||
| 			m.Dirty = &val | ||||
| 			m.DirtyBytes = &valBytes | ||||
|  | @ -317,6 +338,9 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) { | |||
| 		case "PageTables:": | ||||
| 			m.PageTables = &val | ||||
| 			m.PageTablesBytes = &valBytes | ||||
| 		case "SecPageTables:": | ||||
| 			m.SecPageTables = &val | ||||
| 			m.SecPageTablesBytes = &valBytes | ||||
| 		case "NFS_Unstable:": | ||||
| 			m.NFSUnstable = &val | ||||
| 			m.NFSUnstableBytes = &valBytes | ||||
|  | @ -350,6 +374,9 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) { | |||
| 		case "AnonHugePages:": | ||||
| 			m.AnonHugePages = &val | ||||
| 			m.AnonHugePagesBytes = &valBytes | ||||
| 		case "FileHugePages:": | ||||
| 			m.FileHugePages = &val | ||||
| 			m.FileHugePagesBytes = &valBytes | ||||
| 		case "ShmemHugePages:": | ||||
| 			m.ShmemHugePages = &val | ||||
| 			m.ShmemHugePagesBytes = &valBytes | ||||
|  | @ -362,6 +389,9 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) { | |||
| 		case "CmaFree:": | ||||
| 			m.CmaFree = &val | ||||
| 			m.CmaFreeBytes = &valBytes | ||||
| 		case "Unaccepted:": | ||||
| 			m.Unaccepted = &val | ||||
| 			m.UnacceptedBytes = &valBytes | ||||
| 		case "HugePages_Total:": | ||||
| 			m.HugePagesTotal = &val | ||||
| 		case "HugePages_Free:": | ||||
|  | @ -373,6 +403,9 @@ func parseMemInfo(r io.Reader) (*Meminfo, error) { | |||
| 		case "Hugepagesize:": | ||||
| 			m.Hugepagesize = &val | ||||
| 			m.HugepagesizeBytes = &valBytes | ||||
| 		case "Hugetlb:": | ||||
| 			m.Hugetlb = &val | ||||
| 			m.HugetlbBytes = &valBytes | ||||
| 		case "DirectMap4k:": | ||||
| 			m.DirectMap4k = &val | ||||
| 			m.DirectMap4kBytes = &valBytes | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/github.com/prometheus/procfs/proc_stat.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/prometheus/procfs/proc_stat.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -101,6 +101,12 @@ type ProcStat struct { | |||
| 	RSS int | ||||
| 	// Soft limit in bytes on the rss of the process. | ||||
| 	RSSLimit uint64 | ||||
| 	// The address above which program text can run. | ||||
| 	StartCode uint64 | ||||
| 	// The address below which program text can run. | ||||
| 	EndCode uint64 | ||||
| 	// The address of the start (i.e., bottom) of the stack. | ||||
| 	StartStack uint64 | ||||
| 	// CPU number last executed on. | ||||
| 	Processor uint | ||||
| 	// Real-time scheduling priority, a number in the range 1 to 99 for processes | ||||
|  | @ -177,9 +183,9 @@ func (p Proc) Stat() (ProcStat, error) { | |||
| 		&s.VSize, | ||||
| 		&s.RSS, | ||||
| 		&s.RSSLimit, | ||||
| 		&ignoreUint64, | ||||
| 		&ignoreUint64, | ||||
| 		&ignoreUint64, | ||||
| 		&s.StartCode, | ||||
| 		&s.EndCode, | ||||
| 		&s.StartStack, | ||||
| 		&ignoreUint64, | ||||
| 		&ignoreUint64, | ||||
| 		&ignoreUint64, | ||||
|  |  | |||
							
								
								
									
										116
									
								
								vendor/github.com/prometheus/procfs/proc_statm.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								vendor/github.com/prometheus/procfs/proc_statm.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,116 @@ | |||
| // Copyright 2025 The Prometheus Authors | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package procfs | ||||
| 
 | ||||
| import ( | ||||
| 	"os" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/prometheus/procfs/internal/util" | ||||
| ) | ||||
| 
 | ||||
| // - https://man7.org/linux/man-pages/man5/proc_pid_statm.5.html | ||||
| 
 | ||||
| // ProcStatm Provides memory usage information for a process, measured in memory pages. | ||||
| // Read from /proc/[pid]/statm. | ||||
| type ProcStatm struct { | ||||
| 	// The process ID. | ||||
| 	PID int | ||||
| 	// total program size (same as VmSize in status) | ||||
| 	Size uint64 | ||||
| 	// resident set size (same as VmRSS in status) | ||||
| 	Resident uint64 | ||||
| 	// number of resident shared pages (i.e., backed by a file) | ||||
| 	Shared uint64 | ||||
| 	// text (code) | ||||
| 	Text uint64 | ||||
| 	// library (unused since Linux 2.6; always 0) | ||||
| 	Lib uint64 | ||||
| 	// data + stack | ||||
| 	Data uint64 | ||||
| 	// dirty pages (unused since Linux 2.6; always 0) | ||||
| 	Dt uint64 | ||||
| } | ||||
| 
 | ||||
| // NewStatm returns the current status information of the process. | ||||
| // Deprecated: Use p.Statm() instead. | ||||
| func (p Proc) NewStatm() (ProcStatm, error) { | ||||
| 	return p.Statm() | ||||
| } | ||||
| 
 | ||||
| // Statm returns the current memory usage information of the process. | ||||
| func (p Proc) Statm() (ProcStatm, error) { | ||||
| 	data, err := util.ReadFileNoStat(p.path("statm")) | ||||
| 	if err != nil { | ||||
| 		return ProcStatm{}, err | ||||
| 	} | ||||
| 
 | ||||
| 	statmSlice, err := parseStatm(data) | ||||
| 	if err != nil { | ||||
| 		return ProcStatm{}, err | ||||
| 	} | ||||
| 
 | ||||
| 	procStatm := ProcStatm{ | ||||
| 		PID:      p.PID, | ||||
| 		Size:     statmSlice[0], | ||||
| 		Resident: statmSlice[1], | ||||
| 		Shared:   statmSlice[2], | ||||
| 		Text:     statmSlice[3], | ||||
| 		Lib:      statmSlice[4], | ||||
| 		Data:     statmSlice[5], | ||||
| 		Dt:       statmSlice[6], | ||||
| 	} | ||||
| 
 | ||||
| 	return procStatm, nil | ||||
| } | ||||
| 
 | ||||
| // parseStatm return /proc/[pid]/statm data to uint64 slice. | ||||
| func parseStatm(data []byte) ([]uint64, error) { | ||||
| 	var statmSlice []uint64 | ||||
| 	statmItems := strings.Fields(string(data)) | ||||
| 	for i := 0; i < len(statmItems); i++ { | ||||
| 		statmItem, err := strconv.ParseUint(statmItems[i], 10, 64) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		statmSlice = append(statmSlice, statmItem) | ||||
| 	} | ||||
| 	return statmSlice, nil | ||||
| } | ||||
| 
 | ||||
| // SizeBytes returns the process of total program size in bytes. | ||||
| func (s ProcStatm) SizeBytes() uint64 { | ||||
| 	return s.Size * uint64(os.Getpagesize()) | ||||
| } | ||||
| 
 | ||||
| // ResidentBytes returns the process of resident set size in bytes. | ||||
| func (s ProcStatm) ResidentBytes() uint64 { | ||||
| 	return s.Resident * uint64(os.Getpagesize()) | ||||
| } | ||||
| 
 | ||||
| // SHRBytes returns the process of share memory size in bytes. | ||||
| func (s ProcStatm) SHRBytes() uint64 { | ||||
| 	return s.Shared * uint64(os.Getpagesize()) | ||||
| } | ||||
| 
 | ||||
| // TextBytes returns the process of text (code) size in bytes. | ||||
| func (s ProcStatm) TextBytes() uint64 { | ||||
| 	return s.Text * uint64(os.Getpagesize()) | ||||
| } | ||||
| 
 | ||||
| // DataBytes returns the process of data + stack size in bytes. | ||||
| func (s ProcStatm) DataBytes() uint64 { | ||||
| 	return s.Data * uint64(os.Getpagesize()) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue