Merge pull request #9915 from containerd/dependabot/go_modules/github.com/prometheus/client_golang-1.19.0
build(deps): bump github.com/prometheus/client_golang from 1.18.0 to 1.19.0
This commit is contained in:
commit
3de575f17c
5
go.mod
5
go.mod
@ -50,7 +50,7 @@ require (
|
|||||||
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626
|
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626
|
||||||
github.com/opencontainers/selinux v1.11.0
|
github.com/opencontainers/selinux v1.11.0
|
||||||
github.com/pelletier/go-toml/v2 v2.1.1
|
github.com/pelletier/go-toml/v2 v2.1.1
|
||||||
github.com/prometheus/client_golang v1.18.0
|
github.com/prometheus/client_golang v1.19.0
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1
|
github.com/tchap/go-patricia/v2 v2.3.1
|
||||||
@ -103,7 +103,6 @@ require (
|
|||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
|
|
||||||
github.com/mdlayher/socket v0.4.1 // indirect
|
github.com/mdlayher/socket v0.4.1 // indirect
|
||||||
github.com/moby/spdystream v0.2.0 // indirect
|
github.com/moby/spdystream v0.2.0 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
@ -112,7 +111,7 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/prometheus/client_model v0.5.0 // indirect
|
github.com/prometheus/client_model v0.5.0 // indirect
|
||||||
github.com/prometheus/common v0.45.0 // indirect
|
github.com/prometheus/common v0.48.0 // indirect
|
||||||
github.com/prometheus/procfs v0.12.0 // indirect
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
|
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
|
||||||
|
10
go.sum
10
go.sum
@ -281,8 +281,6 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
|||||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
|
|
||||||
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
|
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
|
||||||
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
|
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
|
||||||
github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ=
|
github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ=
|
||||||
@ -353,8 +351,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||||
github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk=
|
github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
|
||||||
github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA=
|
github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
@ -362,8 +360,8 @@ github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cY
|
|||||||
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
|
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
|
||||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||||
github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
|
github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
|
||||||
github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
|
github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
|
201
vendor/github.com/matttproud/golang_protobuf_extensions/v2/LICENSE
generated
vendored
201
vendor/github.com/matttproud/golang_protobuf_extensions/v2/LICENSE
generated
vendored
@ -1,201 +0,0 @@
|
|||||||
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.
|
|
1
vendor/github.com/matttproud/golang_protobuf_extensions/v2/NOTICE
generated
vendored
1
vendor/github.com/matttproud/golang_protobuf_extensions/v2/NOTICE
generated
vendored
@ -1 +0,0 @@
|
|||||||
Copyright 2012 Matt T. Proud (matt.proud@gmail.com)
|
|
1
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/.gitignore
generated
vendored
1
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/.gitignore
generated
vendored
@ -1 +0,0 @@
|
|||||||
cover.dat
|
|
7
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/Makefile
generated
vendored
7
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/Makefile
generated
vendored
@ -1,7 +0,0 @@
|
|||||||
all:
|
|
||||||
|
|
||||||
cover:
|
|
||||||
go test -cover -v -coverprofile=cover.dat ./...
|
|
||||||
go tool cover -func cover.dat
|
|
||||||
|
|
||||||
.PHONY: cover
|
|
81
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/decode.go
generated
vendored
81
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/decode.go
generated
vendored
@ -1,81 +0,0 @@
|
|||||||
// Copyright 2013 Matt T. Proud
|
|
||||||
//
|
|
||||||
// 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 pbutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/binary"
|
|
||||||
"errors"
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO: Give error package name prefix in next minor release.
|
|
||||||
var errInvalidVarint = errors.New("invalid varint32 encountered")
|
|
||||||
|
|
||||||
// ReadDelimited decodes a message from the provided length-delimited stream,
|
|
||||||
// where the length is encoded as 32-bit varint prefix to the message body.
|
|
||||||
// It returns the total number of bytes read and any applicable error. This is
|
|
||||||
// roughly equivalent to the companion Java API's
|
|
||||||
// MessageLite#parseDelimitedFrom. As per the reader contract, this function
|
|
||||||
// calls r.Read repeatedly as required until exactly one message including its
|
|
||||||
// prefix is read and decoded (or an error has occurred). The function never
|
|
||||||
// reads more bytes from the stream than required. The function never returns
|
|
||||||
// an error if a message has been read and decoded correctly, even if the end
|
|
||||||
// of the stream has been reached in doing so. In that case, any subsequent
|
|
||||||
// calls return (0, io.EOF).
|
|
||||||
func ReadDelimited(r io.Reader, m proto.Message) (n int, err error) {
|
|
||||||
// TODO: Consider allowing the caller to specify a decode buffer in the
|
|
||||||
// next major version.
|
|
||||||
|
|
||||||
// TODO: Consider using error wrapping to annotate error state in pass-
|
|
||||||
// through cases in the next minor version.
|
|
||||||
|
|
||||||
// Per AbstractParser#parsePartialDelimitedFrom with
|
|
||||||
// CodedInputStream#readRawVarint32.
|
|
||||||
var headerBuf [binary.MaxVarintLen32]byte
|
|
||||||
var bytesRead, varIntBytes int
|
|
||||||
var messageLength uint64
|
|
||||||
for varIntBytes == 0 { // i.e. no varint has been decoded yet.
|
|
||||||
if bytesRead >= len(headerBuf) {
|
|
||||||
return bytesRead, errInvalidVarint
|
|
||||||
}
|
|
||||||
// We have to read byte by byte here to avoid reading more bytes
|
|
||||||
// than required. Each read byte is appended to what we have
|
|
||||||
// read before.
|
|
||||||
newBytesRead, err := r.Read(headerBuf[bytesRead : bytesRead+1])
|
|
||||||
if newBytesRead == 0 {
|
|
||||||
if err != nil {
|
|
||||||
return bytesRead, err
|
|
||||||
}
|
|
||||||
// A Reader should not return (0, nil); but if it does, it should
|
|
||||||
// be treated as no-op according to the Reader contract.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
bytesRead += newBytesRead
|
|
||||||
// Now present everything read so far to the varint decoder and
|
|
||||||
// see if a varint can be decoded already.
|
|
||||||
messageLength, varIntBytes = binary.Uvarint(headerBuf[:bytesRead])
|
|
||||||
}
|
|
||||||
|
|
||||||
messageBuf := make([]byte, messageLength)
|
|
||||||
newBytesRead, err := io.ReadFull(r, messageBuf)
|
|
||||||
bytesRead += newBytesRead
|
|
||||||
if err != nil {
|
|
||||||
return bytesRead, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return bytesRead, proto.Unmarshal(messageBuf, m)
|
|
||||||
}
|
|
16
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/doc.go
generated
vendored
16
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/doc.go
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
// Copyright 2013 Matt T. Proud
|
|
||||||
//
|
|
||||||
// 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 pbutil provides record length-delimited Protocol Buffer streaming.
|
|
||||||
package pbutil
|
|
49
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/encode.go
generated
vendored
49
vendor/github.com/matttproud/golang_protobuf_extensions/v2/pbutil/encode.go
generated
vendored
@ -1,49 +0,0 @@
|
|||||||
// Copyright 2013 Matt T. Proud
|
|
||||||
//
|
|
||||||
// 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 pbutil
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/binary"
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
// WriteDelimited encodes and dumps a message to the provided writer prefixed
|
|
||||||
// with a 32-bit varint indicating the length of the encoded message, producing
|
|
||||||
// a length-delimited record stream, which can be used to chain together
|
|
||||||
// encoded messages of the same type together in a file. It returns the total
|
|
||||||
// number of bytes written and any applicable error. This is roughly
|
|
||||||
// equivalent to the companion Java API's MessageLite#writeDelimitedTo.
|
|
||||||
func WriteDelimited(w io.Writer, m proto.Message) (n int, err error) {
|
|
||||||
// TODO: Consider allowing the caller to specify an encode buffer in the
|
|
||||||
// next major version.
|
|
||||||
|
|
||||||
buffer, err := proto.Marshal(m)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf [binary.MaxVarintLen32]byte
|
|
||||||
encodedLength := binary.PutUvarint(buf[:], uint64(len(buffer)))
|
|
||||||
|
|
||||||
sync, err := w.Write(buf[:encodedLength])
|
|
||||||
if err != nil {
|
|
||||||
return sync, err
|
|
||||||
}
|
|
||||||
|
|
||||||
n, err = w.Write(buffer)
|
|
||||||
return n + sync, err
|
|
||||||
}
|
|
27
vendor/github.com/prometheus/common/expfmt/decode.go
generated
vendored
27
vendor/github.com/prometheus/common/expfmt/decode.go
generated
vendored
@ -14,6 +14,7 @@
|
|||||||
package expfmt
|
package expfmt
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
@ -21,8 +22,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
"google.golang.org/protobuf/encoding/protodelim"
|
||||||
|
|
||||||
"github.com/matttproud/golang_protobuf_extensions/v2/pbutil"
|
|
||||||
"github.com/prometheus/common/model"
|
"github.com/prometheus/common/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ func ResponseFormat(h http.Header) Format {
|
|||||||
|
|
||||||
mediatype, params, err := mime.ParseMediaType(ct)
|
mediatype, params, err := mime.ParseMediaType(ct)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return FmtUnknown
|
return fmtUnknown
|
||||||
}
|
}
|
||||||
|
|
||||||
const textType = "text/plain"
|
const textType = "text/plain"
|
||||||
@ -52,28 +53,28 @@ func ResponseFormat(h http.Header) Format {
|
|||||||
switch mediatype {
|
switch mediatype {
|
||||||
case ProtoType:
|
case ProtoType:
|
||||||
if p, ok := params["proto"]; ok && p != ProtoProtocol {
|
if p, ok := params["proto"]; ok && p != ProtoProtocol {
|
||||||
return FmtUnknown
|
return fmtUnknown
|
||||||
}
|
}
|
||||||
if e, ok := params["encoding"]; ok && e != "delimited" {
|
if e, ok := params["encoding"]; ok && e != "delimited" {
|
||||||
return FmtUnknown
|
return fmtUnknown
|
||||||
}
|
}
|
||||||
return FmtProtoDelim
|
return fmtProtoDelim
|
||||||
|
|
||||||
case textType:
|
case textType:
|
||||||
if v, ok := params["version"]; ok && v != TextVersion {
|
if v, ok := params["version"]; ok && v != TextVersion {
|
||||||
return FmtUnknown
|
return fmtUnknown
|
||||||
}
|
}
|
||||||
return FmtText
|
return fmtText
|
||||||
}
|
}
|
||||||
|
|
||||||
return FmtUnknown
|
return fmtUnknown
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDecoder returns a new decoder based on the given input format.
|
// NewDecoder returns a new decoder based on the given input format.
|
||||||
// If the input format does not imply otherwise, a text format decoder is returned.
|
// If the input format does not imply otherwise, a text format decoder is returned.
|
||||||
func NewDecoder(r io.Reader, format Format) Decoder {
|
func NewDecoder(r io.Reader, format Format) Decoder {
|
||||||
switch format {
|
switch format.FormatType() {
|
||||||
case FmtProtoDelim:
|
case TypeProtoDelim:
|
||||||
return &protoDecoder{r: r}
|
return &protoDecoder{r: r}
|
||||||
}
|
}
|
||||||
return &textDecoder{r: r}
|
return &textDecoder{r: r}
|
||||||
@ -86,8 +87,10 @@ type protoDecoder struct {
|
|||||||
|
|
||||||
// Decode implements the Decoder interface.
|
// Decode implements the Decoder interface.
|
||||||
func (d *protoDecoder) Decode(v *dto.MetricFamily) error {
|
func (d *protoDecoder) Decode(v *dto.MetricFamily) error {
|
||||||
_, err := pbutil.ReadDelimited(d.r, v)
|
opts := protodelim.UnmarshalOptions{
|
||||||
if err != nil {
|
MaxSize: -1,
|
||||||
|
}
|
||||||
|
if err := opts.UnmarshalFrom(bufio.NewReader(d.r), v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !model.IsValidMetricName(model.LabelValue(v.GetName())) {
|
if !model.IsValidMetricName(model.LabelValue(v.GetName())) {
|
||||||
|
80
vendor/github.com/prometheus/common/expfmt/encode.go
generated
vendored
80
vendor/github.com/prometheus/common/expfmt/encode.go
generated
vendored
@ -18,10 +18,12 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/matttproud/golang_protobuf_extensions/v2/pbutil"
|
"google.golang.org/protobuf/encoding/protodelim"
|
||||||
"github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg"
|
|
||||||
"google.golang.org/protobuf/encoding/prototext"
|
"google.golang.org/protobuf/encoding/prototext"
|
||||||
|
|
||||||
|
"github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg"
|
||||||
|
"github.com/prometheus/common/model"
|
||||||
|
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -60,23 +62,32 @@ func (ec encoderCloser) Close() error {
|
|||||||
// as the support is still experimental. To include the option to negotiate
|
// as the support is still experimental. To include the option to negotiate
|
||||||
// FmtOpenMetrics, use NegotiateOpenMetrics.
|
// FmtOpenMetrics, use NegotiateOpenMetrics.
|
||||||
func Negotiate(h http.Header) Format {
|
func Negotiate(h http.Header) Format {
|
||||||
|
escapingScheme := Format(fmt.Sprintf("; escaping=%s", Format(model.NameEscapingScheme.String())))
|
||||||
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
||||||
|
if escapeParam := ac.Params[model.EscapingKey]; escapeParam != "" {
|
||||||
|
switch Format(escapeParam) {
|
||||||
|
case model.AllowUTF8, model.EscapeUnderscores, model.EscapeDots, model.EscapeValues:
|
||||||
|
escapingScheme = Format(fmt.Sprintf("; escaping=%s", escapeParam))
|
||||||
|
default:
|
||||||
|
// If the escaping parameter is unknown, ignore it.
|
||||||
|
}
|
||||||
|
}
|
||||||
ver := ac.Params["version"]
|
ver := ac.Params["version"]
|
||||||
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
||||||
switch ac.Params["encoding"] {
|
switch ac.Params["encoding"] {
|
||||||
case "delimited":
|
case "delimited":
|
||||||
return FmtProtoDelim
|
return fmtProtoDelim + escapingScheme
|
||||||
case "text":
|
case "text":
|
||||||
return FmtProtoText
|
return fmtProtoText + escapingScheme
|
||||||
case "compact-text":
|
case "compact-text":
|
||||||
return FmtProtoCompact
|
return fmtProtoCompact + escapingScheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
||||||
return FmtText
|
return fmtText + escapingScheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FmtText
|
return fmtText + escapingScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
// NegotiateIncludingOpenMetrics works like Negotiate but includes
|
// NegotiateIncludingOpenMetrics works like Negotiate but includes
|
||||||
@ -84,29 +95,40 @@ func Negotiate(h http.Header) Format {
|
|||||||
// temporary and will disappear once FmtOpenMetrics is fully supported and as
|
// temporary and will disappear once FmtOpenMetrics is fully supported and as
|
||||||
// such may be negotiated by the normal Negotiate function.
|
// such may be negotiated by the normal Negotiate function.
|
||||||
func NegotiateIncludingOpenMetrics(h http.Header) Format {
|
func NegotiateIncludingOpenMetrics(h http.Header) Format {
|
||||||
|
escapingScheme := Format(fmt.Sprintf("; escaping=%s", Format(model.NameEscapingScheme.String())))
|
||||||
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) {
|
||||||
|
if escapeParam := ac.Params[model.EscapingKey]; escapeParam != "" {
|
||||||
|
switch Format(escapeParam) {
|
||||||
|
case model.AllowUTF8, model.EscapeUnderscores, model.EscapeDots, model.EscapeValues:
|
||||||
|
escapingScheme = Format(fmt.Sprintf("; escaping=%s", escapeParam))
|
||||||
|
default:
|
||||||
|
// If the escaping parameter is unknown, ignore it.
|
||||||
|
}
|
||||||
|
}
|
||||||
ver := ac.Params["version"]
|
ver := ac.Params["version"]
|
||||||
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol {
|
||||||
switch ac.Params["encoding"] {
|
switch ac.Params["encoding"] {
|
||||||
case "delimited":
|
case "delimited":
|
||||||
return FmtProtoDelim
|
return fmtProtoDelim + escapingScheme
|
||||||
case "text":
|
case "text":
|
||||||
return FmtProtoText
|
return fmtProtoText + escapingScheme
|
||||||
case "compact-text":
|
case "compact-text":
|
||||||
return FmtProtoCompact
|
return fmtProtoCompact + escapingScheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") {
|
||||||
return FmtText
|
return fmtText + escapingScheme
|
||||||
}
|
}
|
||||||
if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion_0_0_1 || ver == OpenMetricsVersion_1_0_0 || ver == "") {
|
if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion_0_0_1 || ver == OpenMetricsVersion_1_0_0 || ver == "") {
|
||||||
if ver == OpenMetricsVersion_1_0_0 {
|
switch ver {
|
||||||
return FmtOpenMetrics_1_0_0
|
case OpenMetricsVersion_1_0_0:
|
||||||
}
|
return fmtOpenMetrics_1_0_0 + escapingScheme
|
||||||
return FmtOpenMetrics_0_0_1
|
default:
|
||||||
|
return fmtOpenMetrics_0_0_1 + escapingScheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FmtText
|
}
|
||||||
|
return fmtText + escapingScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEncoder returns a new encoder based on content type negotiation. All
|
// NewEncoder returns a new encoder based on content type negotiation. All
|
||||||
@ -115,44 +137,48 @@ func NegotiateIncludingOpenMetrics(h http.Header) Format {
|
|||||||
// for FmtOpenMetrics, but a future (breaking) release will add the Close method
|
// for FmtOpenMetrics, but a future (breaking) release will add the Close method
|
||||||
// to the Encoder interface directly. The current version of the Encoder
|
// to the Encoder interface directly. The current version of the Encoder
|
||||||
// interface is kept for backwards compatibility.
|
// interface is kept for backwards compatibility.
|
||||||
|
// In cases where the Format does not allow for UTF-8 names, the global
|
||||||
|
// NameEscapingScheme will be applied.
|
||||||
func NewEncoder(w io.Writer, format Format) Encoder {
|
func NewEncoder(w io.Writer, format Format) Encoder {
|
||||||
switch format {
|
escapingScheme := format.ToEscapingScheme()
|
||||||
case FmtProtoDelim:
|
|
||||||
|
switch format.FormatType() {
|
||||||
|
case TypeProtoDelim:
|
||||||
return encoderCloser{
|
return encoderCloser{
|
||||||
encode: func(v *dto.MetricFamily) error {
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := pbutil.WriteDelimited(w, v)
|
_, err := protodelim.MarshalTo(w, v)
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
close: func() error { return nil },
|
close: func() error { return nil },
|
||||||
}
|
}
|
||||||
case FmtProtoCompact:
|
case TypeProtoCompact:
|
||||||
return encoderCloser{
|
return encoderCloser{
|
||||||
encode: func(v *dto.MetricFamily) error {
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := fmt.Fprintln(w, v.String())
|
_, err := fmt.Fprintln(w, model.EscapeMetricFamily(v, escapingScheme).String())
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
close: func() error { return nil },
|
close: func() error { return nil },
|
||||||
}
|
}
|
||||||
case FmtProtoText:
|
case TypeProtoText:
|
||||||
return encoderCloser{
|
return encoderCloser{
|
||||||
encode: func(v *dto.MetricFamily) error {
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := fmt.Fprintln(w, prototext.Format(v))
|
_, err := fmt.Fprintln(w, prototext.Format(model.EscapeMetricFamily(v, escapingScheme)))
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
close: func() error { return nil },
|
close: func() error { return nil },
|
||||||
}
|
}
|
||||||
case FmtText:
|
case TypeTextPlain:
|
||||||
return encoderCloser{
|
return encoderCloser{
|
||||||
encode: func(v *dto.MetricFamily) error {
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := MetricFamilyToText(w, v)
|
_, err := MetricFamilyToText(w, model.EscapeMetricFamily(v, escapingScheme))
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
close: func() error { return nil },
|
close: func() error { return nil },
|
||||||
}
|
}
|
||||||
case FmtOpenMetrics_0_0_1, FmtOpenMetrics_1_0_0:
|
case TypeOpenMetrics:
|
||||||
return encoderCloser{
|
return encoderCloser{
|
||||||
encode: func(v *dto.MetricFamily) error {
|
encode: func(v *dto.MetricFamily) error {
|
||||||
_, err := MetricFamilyToOpenMetrics(w, v)
|
_, err := MetricFamilyToOpenMetrics(w, model.EscapeMetricFamily(v, escapingScheme))
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
close: func() error {
|
close: func() error {
|
||||||
|
144
vendor/github.com/prometheus/common/expfmt/expfmt.go
generated
vendored
144
vendor/github.com/prometheus/common/expfmt/expfmt.go
generated
vendored
@ -14,30 +14,154 @@
|
|||||||
// Package expfmt contains tools for reading and writing Prometheus metrics.
|
// Package expfmt contains tools for reading and writing Prometheus metrics.
|
||||||
package expfmt
|
package expfmt
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/common/model"
|
||||||
|
)
|
||||||
|
|
||||||
// Format specifies the HTTP content type of the different wire protocols.
|
// Format specifies the HTTP content type of the different wire protocols.
|
||||||
type Format string
|
type Format string
|
||||||
|
|
||||||
// Constants to assemble the Content-Type values for the different wire protocols.
|
// Constants to assemble the Content-Type values for the different wire
|
||||||
|
// protocols. The Content-Type strings here are all for the legacy exposition
|
||||||
|
// formats, where valid characters for metric names and label names are limited.
|
||||||
|
// Support for arbitrary UTF-8 characters in those names is already partially
|
||||||
|
// implemented in this module (see model.ValidationScheme), but to actually use
|
||||||
|
// it on the wire, new content-type strings will have to be agreed upon and
|
||||||
|
// added here.
|
||||||
const (
|
const (
|
||||||
TextVersion = "0.0.4"
|
TextVersion = "0.0.4"
|
||||||
ProtoType = `application/vnd.google.protobuf`
|
ProtoType = `application/vnd.google.protobuf`
|
||||||
ProtoProtocol = `io.prometheus.client.MetricFamily`
|
ProtoProtocol = `io.prometheus.client.MetricFamily`
|
||||||
ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";"
|
protoFmt = ProtoType + "; proto=" + ProtoProtocol + ";"
|
||||||
OpenMetricsType = `application/openmetrics-text`
|
OpenMetricsType = `application/openmetrics-text`
|
||||||
OpenMetricsVersion_0_0_1 = "0.0.1"
|
OpenMetricsVersion_0_0_1 = "0.0.1"
|
||||||
OpenMetricsVersion_1_0_0 = "1.0.0"
|
OpenMetricsVersion_1_0_0 = "1.0.0"
|
||||||
|
|
||||||
// The Content-Type values for the different wire protocols.
|
// The Content-Type values for the different wire protocols. Note that these
|
||||||
FmtUnknown Format = `<unknown>`
|
// values are now unexported. If code was relying on comparisons to these
|
||||||
FmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8`
|
// constants, instead use FormatType().
|
||||||
FmtProtoDelim Format = ProtoFmt + ` encoding=delimited`
|
fmtUnknown Format = `<unknown>`
|
||||||
FmtProtoText Format = ProtoFmt + ` encoding=text`
|
fmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8`
|
||||||
FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text`
|
fmtProtoDelim Format = protoFmt + ` encoding=delimited`
|
||||||
FmtOpenMetrics_1_0_0 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_1_0_0 + `; charset=utf-8`
|
fmtProtoText Format = protoFmt + ` encoding=text`
|
||||||
FmtOpenMetrics_0_0_1 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_0_0_1 + `; charset=utf-8`
|
fmtProtoCompact Format = protoFmt + ` encoding=compact-text`
|
||||||
|
fmtOpenMetrics_1_0_0 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_1_0_0 + `; charset=utf-8`
|
||||||
|
fmtOpenMetrics_0_0_1 Format = OpenMetricsType + `; version=` + OpenMetricsVersion_0_0_1 + `; charset=utf-8`
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
hdrContentType = "Content-Type"
|
hdrContentType = "Content-Type"
|
||||||
hdrAccept = "Accept"
|
hdrAccept = "Accept"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// FormatType is a Go enum representing the overall category for the given
|
||||||
|
// Format. As the number of Format permutations increases, doing basic string
|
||||||
|
// comparisons are not feasible, so this enum captures the most useful
|
||||||
|
// high-level attribute of the Format string.
|
||||||
|
type FormatType int
|
||||||
|
|
||||||
|
const (
|
||||||
|
TypeUnknown = iota
|
||||||
|
TypeProtoCompact
|
||||||
|
TypeProtoDelim
|
||||||
|
TypeProtoText
|
||||||
|
TypeTextPlain
|
||||||
|
TypeOpenMetrics
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewFormat generates a new Format from the type provided. Mostly used for
|
||||||
|
// tests, most Formats should be generated as part of content negotiation in
|
||||||
|
// encode.go.
|
||||||
|
func NewFormat(t FormatType) Format {
|
||||||
|
switch t {
|
||||||
|
case TypeProtoCompact:
|
||||||
|
return fmtProtoCompact
|
||||||
|
case TypeProtoDelim:
|
||||||
|
return fmtProtoDelim
|
||||||
|
case TypeProtoText:
|
||||||
|
return fmtProtoText
|
||||||
|
case TypeTextPlain:
|
||||||
|
return fmtText
|
||||||
|
case TypeOpenMetrics:
|
||||||
|
return fmtOpenMetrics_1_0_0
|
||||||
|
default:
|
||||||
|
return fmtUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FormatType deduces an overall FormatType for the given format.
|
||||||
|
func (f Format) FormatType() FormatType {
|
||||||
|
toks := strings.Split(string(f), ";")
|
||||||
|
if len(toks) < 2 {
|
||||||
|
return TypeUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
params := make(map[string]string)
|
||||||
|
for i, t := range toks {
|
||||||
|
if i == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
args := strings.Split(t, "=")
|
||||||
|
if len(args) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
params[strings.TrimSpace(args[0])] = strings.TrimSpace(args[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
switch strings.TrimSpace(toks[0]) {
|
||||||
|
case ProtoType:
|
||||||
|
if params["proto"] != ProtoProtocol {
|
||||||
|
return TypeUnknown
|
||||||
|
}
|
||||||
|
switch params["encoding"] {
|
||||||
|
case "delimited":
|
||||||
|
return TypeProtoDelim
|
||||||
|
case "text":
|
||||||
|
return TypeProtoText
|
||||||
|
case "compact-text":
|
||||||
|
return TypeProtoCompact
|
||||||
|
default:
|
||||||
|
return TypeUnknown
|
||||||
|
}
|
||||||
|
case OpenMetricsType:
|
||||||
|
if params["charset"] != "utf-8" {
|
||||||
|
return TypeUnknown
|
||||||
|
}
|
||||||
|
return TypeOpenMetrics
|
||||||
|
case "text/plain":
|
||||||
|
v, ok := params["version"]
|
||||||
|
if !ok {
|
||||||
|
return TypeTextPlain
|
||||||
|
}
|
||||||
|
if v == TextVersion {
|
||||||
|
return TypeTextPlain
|
||||||
|
}
|
||||||
|
return TypeUnknown
|
||||||
|
default:
|
||||||
|
return TypeUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToEscapingScheme returns an EscapingScheme depending on the Format. Iff the
|
||||||
|
// Format contains a escaping=allow-utf-8 term, it will select NoEscaping. If a valid
|
||||||
|
// "escaping" term exists, that will be used. Otherwise, the global default will
|
||||||
|
// be returned.
|
||||||
|
func (format Format) ToEscapingScheme() model.EscapingScheme {
|
||||||
|
for _, p := range strings.Split(string(format), ";") {
|
||||||
|
toks := strings.Split(p, "=")
|
||||||
|
if len(toks) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
key, value := strings.TrimSpace(toks[0]), strings.TrimSpace(toks[1])
|
||||||
|
if key == model.EscapingKey {
|
||||||
|
scheme, err := model.ToEscapingScheme(value)
|
||||||
|
if err != nil {
|
||||||
|
return model.NameEscapingScheme
|
||||||
|
}
|
||||||
|
return scheme
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return model.NameEscapingScheme
|
||||||
|
}
|
||||||
|
81
vendor/github.com/prometheus/common/expfmt/openmetrics_create.go
generated
vendored
81
vendor/github.com/prometheus/common/expfmt/openmetrics_create.go
generated
vendored
@ -35,6 +35,18 @@ import (
|
|||||||
// sanity checks. If the input contains duplicate metrics or invalid metric or
|
// sanity checks. If the input contains duplicate metrics or invalid metric or
|
||||||
// label names, the conversion will result in invalid text format output.
|
// label names, the conversion will result in invalid text format output.
|
||||||
//
|
//
|
||||||
|
// If metric names conform to the legacy validation pattern, they will be placed
|
||||||
|
// outside the brackets in the traditional way, like `foo{}`. If the metric name
|
||||||
|
// fails the legacy validation check, it will be placed quoted inside the
|
||||||
|
// brackets: `{"foo"}`. As stated above, the input is assumed to be santized and
|
||||||
|
// no error will be thrown in this case.
|
||||||
|
//
|
||||||
|
// Similar to metric names, if label names conform to the legacy validation
|
||||||
|
// pattern, they will be unquoted as normal, like `foo{bar="baz"}`. If the label
|
||||||
|
// name fails the legacy validation check, it will be quoted:
|
||||||
|
// `foo{"bar"="baz"}`. As stated above, the input is assumed to be santized and
|
||||||
|
// no error will be thrown in this case.
|
||||||
|
//
|
||||||
// This function fulfills the type 'expfmt.encoder'.
|
// This function fulfills the type 'expfmt.encoder'.
|
||||||
//
|
//
|
||||||
// Note that OpenMetrics requires a final `# EOF` line. Since this function acts
|
// Note that OpenMetrics requires a final `# EOF` line. Since this function acts
|
||||||
@ -98,7 +110,7 @@ func MetricFamilyToOpenMetrics(out io.Writer, in *dto.MetricFamily) (written int
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n, err = w.WriteString(shortName)
|
n, err = writeName(w, shortName)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -124,7 +136,7 @@ func MetricFamilyToOpenMetrics(out io.Writer, in *dto.MetricFamily) (written int
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n, err = w.WriteString(shortName)
|
n, err = writeName(w, shortName)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -303,21 +315,9 @@ func writeOpenMetricsSample(
|
|||||||
floatValue float64, intValue uint64, useIntValue bool,
|
floatValue float64, intValue uint64, useIntValue bool,
|
||||||
exemplar *dto.Exemplar,
|
exemplar *dto.Exemplar,
|
||||||
) (int, error) {
|
) (int, error) {
|
||||||
var written int
|
written := 0
|
||||||
n, err := w.WriteString(name)
|
n, err := writeOpenMetricsNameAndLabelPairs(
|
||||||
written += n
|
w, name+suffix, metric.Label, additionalLabelName, additionalLabelValue,
|
||||||
if err != nil {
|
|
||||||
return written, err
|
|
||||||
}
|
|
||||||
if suffix != "" {
|
|
||||||
n, err = w.WriteString(suffix)
|
|
||||||
written += n
|
|
||||||
if err != nil {
|
|
||||||
return written, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
n, err = writeOpenMetricsLabelPairs(
|
|
||||||
w, metric.Label, additionalLabelName, additionalLabelValue,
|
|
||||||
)
|
)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -365,27 +365,58 @@ func writeOpenMetricsSample(
|
|||||||
return written, nil
|
return written, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// writeOpenMetricsLabelPairs works like writeOpenMetrics but formats the float
|
// writeOpenMetricsNameAndLabelPairs works like writeOpenMetricsSample but
|
||||||
// in OpenMetrics style.
|
// formats the float in OpenMetrics style.
|
||||||
func writeOpenMetricsLabelPairs(
|
func writeOpenMetricsNameAndLabelPairs(
|
||||||
w enhancedWriter,
|
w enhancedWriter,
|
||||||
|
name string,
|
||||||
in []*dto.LabelPair,
|
in []*dto.LabelPair,
|
||||||
additionalLabelName string, additionalLabelValue float64,
|
additionalLabelName string, additionalLabelValue float64,
|
||||||
) (int, error) {
|
) (int, error) {
|
||||||
if len(in) == 0 && additionalLabelName == "" {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
var (
|
var (
|
||||||
written int
|
written int
|
||||||
separator byte = '{'
|
separator byte = '{'
|
||||||
|
metricInsideBraces = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if name != "" {
|
||||||
|
// If the name does not pass the legacy validity check, we must put the
|
||||||
|
// metric name inside the braces, quoted.
|
||||||
|
if !model.IsValidLegacyMetricName(model.LabelValue(name)) {
|
||||||
|
metricInsideBraces = true
|
||||||
|
err := w.WriteByte(separator)
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
separator = ','
|
||||||
|
}
|
||||||
|
|
||||||
|
n, err := writeName(w, name)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(in) == 0 && additionalLabelName == "" {
|
||||||
|
if metricInsideBraces {
|
||||||
|
err := w.WriteByte('}')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return written, nil
|
||||||
|
}
|
||||||
|
|
||||||
for _, lp := range in {
|
for _, lp := range in {
|
||||||
err := w.WriteByte(separator)
|
err := w.WriteByte(separator)
|
||||||
written++
|
written++
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return written, err
|
return written, err
|
||||||
}
|
}
|
||||||
n, err := w.WriteString(lp.GetName())
|
n, err := writeName(w, lp.GetName())
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return written, err
|
return written, err
|
||||||
@ -451,7 +482,7 @@ func writeExemplar(w enhancedWriter, e *dto.Exemplar) (int, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return written, err
|
return written, err
|
||||||
}
|
}
|
||||||
n, err = writeOpenMetricsLabelPairs(w, e.Label, "", 0)
|
n, err = writeOpenMetricsNameAndLabelPairs(w, "", e.Label, "", 0)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return written, err
|
return written, err
|
||||||
|
114
vendor/github.com/prometheus/common/expfmt/text_create.go
generated
vendored
114
vendor/github.com/prometheus/common/expfmt/text_create.go
generated
vendored
@ -62,6 +62,18 @@ var (
|
|||||||
// contains duplicate metrics or invalid metric or label names, the conversion
|
// contains duplicate metrics or invalid metric or label names, the conversion
|
||||||
// will result in invalid text format output.
|
// will result in invalid text format output.
|
||||||
//
|
//
|
||||||
|
// If metric names conform to the legacy validation pattern, they will be placed
|
||||||
|
// outside the brackets in the traditional way, like `foo{}`. If the metric name
|
||||||
|
// fails the legacy validation check, it will be placed quoted inside the
|
||||||
|
// brackets: `{"foo"}`. As stated above, the input is assumed to be santized and
|
||||||
|
// no error will be thrown in this case.
|
||||||
|
//
|
||||||
|
// Similar to metric names, if label names conform to the legacy validation
|
||||||
|
// pattern, they will be unquoted as normal, like `foo{bar="baz"}`. If the label
|
||||||
|
// name fails the legacy validation check, it will be quoted:
|
||||||
|
// `foo{"bar"="baz"}`. As stated above, the input is assumed to be santized and
|
||||||
|
// no error will be thrown in this case.
|
||||||
|
//
|
||||||
// This method fulfills the type 'prometheus.encoder'.
|
// This method fulfills the type 'prometheus.encoder'.
|
||||||
func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (written int, err error) {
|
func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (written int, err error) {
|
||||||
// Fail-fast checks.
|
// Fail-fast checks.
|
||||||
@ -98,7 +110,7 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (written int, err e
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n, err = w.WriteString(name)
|
n, err = writeName(w, name)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -124,7 +136,7 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (written int, err e
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n, err = w.WriteString(name)
|
n, err = writeName(w, name)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -280,21 +292,9 @@ func writeSample(
|
|||||||
additionalLabelName string, additionalLabelValue float64,
|
additionalLabelName string, additionalLabelValue float64,
|
||||||
value float64,
|
value float64,
|
||||||
) (int, error) {
|
) (int, error) {
|
||||||
var written int
|
written := 0
|
||||||
n, err := w.WriteString(name)
|
n, err := writeNameAndLabelPairs(
|
||||||
written += n
|
w, name+suffix, metric.Label, additionalLabelName, additionalLabelValue,
|
||||||
if err != nil {
|
|
||||||
return written, err
|
|
||||||
}
|
|
||||||
if suffix != "" {
|
|
||||||
n, err = w.WriteString(suffix)
|
|
||||||
written += n
|
|
||||||
if err != nil {
|
|
||||||
return written, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
n, err = writeLabelPairs(
|
|
||||||
w, metric.Label, additionalLabelName, additionalLabelValue,
|
|
||||||
)
|
)
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -330,32 +330,64 @@ func writeSample(
|
|||||||
return written, nil
|
return written, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// writeLabelPairs converts a slice of LabelPair proto messages plus the
|
// writeNameAndLabelPairs converts a slice of LabelPair proto messages plus the
|
||||||
// explicitly given additional label pair into text formatted as required by the
|
// explicitly given metric name and additional label pair into text formatted as
|
||||||
// text format and writes it to 'w'. An empty slice in combination with an empty
|
// required by the text format and writes it to 'w'. An empty slice in
|
||||||
// string 'additionalLabelName' results in nothing being written. Otherwise, the
|
// combination with an empty string 'additionalLabelName' results in nothing
|
||||||
// label pairs are written, escaped as required by the text format, and enclosed
|
// being written. Otherwise, the label pairs are written, escaped as required by
|
||||||
// in '{...}'. The function returns the number of bytes written and any error
|
// the text format, and enclosed in '{...}'. The function returns the number of
|
||||||
// encountered.
|
// bytes written and any error encountered. If the metric name is not
|
||||||
func writeLabelPairs(
|
// legacy-valid, it will be put inside the brackets as well. Legacy-invalid
|
||||||
|
// label names will also be quoted.
|
||||||
|
func writeNameAndLabelPairs(
|
||||||
w enhancedWriter,
|
w enhancedWriter,
|
||||||
|
name string,
|
||||||
in []*dto.LabelPair,
|
in []*dto.LabelPair,
|
||||||
additionalLabelName string, additionalLabelValue float64,
|
additionalLabelName string, additionalLabelValue float64,
|
||||||
) (int, error) {
|
) (int, error) {
|
||||||
if len(in) == 0 && additionalLabelName == "" {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
var (
|
var (
|
||||||
written int
|
written int
|
||||||
separator byte = '{'
|
separator byte = '{'
|
||||||
|
metricInsideBraces = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if name != "" {
|
||||||
|
// If the name does not pass the legacy validity check, we must put the
|
||||||
|
// metric name inside the braces.
|
||||||
|
if !model.IsValidLegacyMetricName(model.LabelValue(name)) {
|
||||||
|
metricInsideBraces = true
|
||||||
|
err := w.WriteByte(separator)
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
separator = ','
|
||||||
|
}
|
||||||
|
n, err := writeName(w, name)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(in) == 0 && additionalLabelName == "" {
|
||||||
|
if metricInsideBraces {
|
||||||
|
err := w.WriteByte('}')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return written, nil
|
||||||
|
}
|
||||||
|
|
||||||
for _, lp := range in {
|
for _, lp := range in {
|
||||||
err := w.WriteByte(separator)
|
err := w.WriteByte(separator)
|
||||||
written++
|
written++
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return written, err
|
return written, err
|
||||||
}
|
}
|
||||||
n, err := w.WriteString(lp.GetName())
|
n, err := writeName(w, lp.GetName())
|
||||||
written += n
|
written += n
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return written, err
|
return written, err
|
||||||
@ -462,3 +494,27 @@ func writeInt(w enhancedWriter, i int64) (int, error) {
|
|||||||
numBufPool.Put(bp)
|
numBufPool.Put(bp)
|
||||||
return written, err
|
return written, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writeName writes a string as-is if it complies with the legacy naming
|
||||||
|
// scheme, or escapes it in double quotes if not.
|
||||||
|
func writeName(w enhancedWriter, name string) (int, error) {
|
||||||
|
if model.IsValidLegacyMetricName(model.LabelValue(name)) {
|
||||||
|
return w.WriteString(name)
|
||||||
|
}
|
||||||
|
var written int
|
||||||
|
var err error
|
||||||
|
err = w.WriteByte('"')
|
||||||
|
written++
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
var n int
|
||||||
|
n, err = writeEscapedString(w, name, true)
|
||||||
|
written += n
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
err = w.WriteByte('"')
|
||||||
|
written++
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
8
vendor/github.com/prometheus/common/expfmt/text_parse.go
generated
vendored
8
vendor/github.com/prometheus/common/expfmt/text_parse.go
generated
vendored
@ -16,6 +16,7 @@ package expfmt
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
@ -24,8 +25,9 @@ import (
|
|||||||
|
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
|
||||||
"github.com/prometheus/common/model"
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
|
"github.com/prometheus/common/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A stateFn is a function that represents a state in a state machine. By
|
// A stateFn is a function that represents a state in a state machine. By
|
||||||
@ -112,7 +114,7 @@ func (p *TextParser) TextToMetricFamilies(in io.Reader) (map[string]*dto.MetricF
|
|||||||
// stream. Turn this error into something nicer and more
|
// stream. Turn this error into something nicer and more
|
||||||
// meaningful. (io.EOF is often used as a signal for the legitimate end
|
// meaningful. (io.EOF is often used as a signal for the legitimate end
|
||||||
// of an input stream.)
|
// of an input stream.)
|
||||||
if p.err == io.EOF {
|
if p.err != nil && errors.Is(p.err, io.EOF) {
|
||||||
p.parseError("unexpected end of input stream")
|
p.parseError("unexpected end of input stream")
|
||||||
}
|
}
|
||||||
return p.metricFamiliesByName, p.err
|
return p.metricFamiliesByName, p.err
|
||||||
@ -146,7 +148,7 @@ func (p *TextParser) startOfLine() stateFn {
|
|||||||
// which is not an error but the signal that we are done.
|
// which is not an error but the signal that we are done.
|
||||||
// Any other error that happens to align with the start of
|
// Any other error that happens to align with the start of
|
||||||
// a line is still an error.
|
// a line is still an error.
|
||||||
if p.err == io.EOF {
|
if errors.Is(p.err, io.EOF) {
|
||||||
p.err = nil
|
p.err = nil
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
4
vendor/github.com/prometheus/common/model/alert.go
generated
vendored
4
vendor/github.com/prometheus/common/model/alert.go
generated
vendored
@ -90,13 +90,13 @@ func (a *Alert) Validate() error {
|
|||||||
return fmt.Errorf("start time must be before end time")
|
return fmt.Errorf("start time must be before end time")
|
||||||
}
|
}
|
||||||
if err := a.Labels.Validate(); err != nil {
|
if err := a.Labels.Validate(); err != nil {
|
||||||
return fmt.Errorf("invalid label set: %s", err)
|
return fmt.Errorf("invalid label set: %w", err)
|
||||||
}
|
}
|
||||||
if len(a.Labels) == 0 {
|
if len(a.Labels) == 0 {
|
||||||
return fmt.Errorf("at least one label pair required")
|
return fmt.Errorf("at least one label pair required")
|
||||||
}
|
}
|
||||||
if err := a.Annotations.Validate(); err != nil {
|
if err := a.Annotations.Validate(); err != nil {
|
||||||
return fmt.Errorf("invalid annotations: %s", err)
|
return fmt.Errorf("invalid annotations: %w", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
16
vendor/github.com/prometheus/common/model/labels.go
generated
vendored
16
vendor/github.com/prometheus/common/model/labels.go
generated
vendored
@ -97,18 +97,26 @@ var LabelNameRE = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$")
|
|||||||
// therewith.
|
// therewith.
|
||||||
type LabelName string
|
type LabelName string
|
||||||
|
|
||||||
// IsValid is true iff the label name matches the pattern of LabelNameRE. This
|
// IsValid returns true iff name matches the pattern of LabelNameRE for legacy
|
||||||
// method, however, does not use LabelNameRE for the check but a much faster
|
// names, and iff it's valid UTF-8 if NameValidationScheme is set to
|
||||||
// hardcoded implementation.
|
// UTF8Validation. For the legacy matching, it does not use LabelNameRE for the
|
||||||
|
// check but a much faster hardcoded implementation.
|
||||||
func (ln LabelName) IsValid() bool {
|
func (ln LabelName) IsValid() bool {
|
||||||
if len(ln) == 0 {
|
if len(ln) == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
switch NameValidationScheme {
|
||||||
|
case LegacyValidation:
|
||||||
for i, b := range ln {
|
for i, b := range ln {
|
||||||
if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0)) {
|
if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case UTF8Validation:
|
||||||
|
return utf8.ValidString(string(ln))
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("Invalid name validation scheme requested: %d", NameValidationScheme))
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +172,7 @@ func (l LabelNames) String() string {
|
|||||||
// A LabelValue is an associated value for a LabelName.
|
// A LabelValue is an associated value for a LabelName.
|
||||||
type LabelValue string
|
type LabelValue string
|
||||||
|
|
||||||
// IsValid returns true iff the string is a valid UTF8.
|
// IsValid returns true iff the string is a valid UTF-8.
|
||||||
func (lv LabelValue) IsValid() bool {
|
func (lv LabelValue) IsValid() bool {
|
||||||
return utf8.ValidString(string(lv))
|
return utf8.ValidString(string(lv))
|
||||||
}
|
}
|
||||||
|
28
vendor/github.com/prometheus/common/model/metadata.go
generated
vendored
Normal file
28
vendor/github.com/prometheus/common/model/metadata.go
generated
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2023 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 model
|
||||||
|
|
||||||
|
// MetricType represents metric type values.
|
||||||
|
type MetricType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
MetricTypeCounter = MetricType("counter")
|
||||||
|
MetricTypeGauge = MetricType("gauge")
|
||||||
|
MetricTypeHistogram = MetricType("histogram")
|
||||||
|
MetricTypeGaugeHistogram = MetricType("gaugehistogram")
|
||||||
|
MetricTypeSummary = MetricType("summary")
|
||||||
|
MetricTypeInfo = MetricType("info")
|
||||||
|
MetricTypeStateset = MetricType("stateset")
|
||||||
|
MetricTypeUnknown = MetricType("unknown")
|
||||||
|
)
|
364
vendor/github.com/prometheus/common/model/metric.go
generated
vendored
364
vendor/github.com/prometheus/common/model/metric.go
generated
vendored
@ -18,14 +18,83 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
// NameValidationScheme determines the method of name validation to be used by
|
||||||
|
// all calls to IsValidMetricName() and LabelName IsValid(). Setting UTF-8 mode
|
||||||
|
// in isolation from other components that don't support UTF-8 may result in
|
||||||
|
// bugs or other undefined behavior. This value is intended to be set by
|
||||||
|
// UTF-8-aware binaries as part of their startup. To avoid need for locking,
|
||||||
|
// this value should be set once, ideally in an init(), before multiple
|
||||||
|
// goroutines are started.
|
||||||
|
NameValidationScheme = LegacyValidation
|
||||||
|
|
||||||
|
// NameEscapingScheme defines the default way that names will be
|
||||||
|
// escaped when presented to systems that do not support UTF-8 names. If the
|
||||||
|
// Content-Type "escaping" term is specified, that will override this value.
|
||||||
|
NameEscapingScheme = ValueEncodingEscaping
|
||||||
|
)
|
||||||
|
|
||||||
|
// ValidationScheme is a Go enum for determining how metric and label names will
|
||||||
|
// be validated by this library.
|
||||||
|
type ValidationScheme int
|
||||||
|
|
||||||
|
const (
|
||||||
|
// LegacyValidation is a setting that requirets that metric and label names
|
||||||
|
// conform to the original Prometheus character requirements described by
|
||||||
|
// MetricNameRE and LabelNameRE.
|
||||||
|
LegacyValidation ValidationScheme = iota
|
||||||
|
|
||||||
|
// UTF8Validation only requires that metric and label names be valid UTF-8
|
||||||
|
// strings.
|
||||||
|
UTF8Validation
|
||||||
|
)
|
||||||
|
|
||||||
|
type EscapingScheme int
|
||||||
|
|
||||||
|
const (
|
||||||
|
// NoEscaping indicates that a name will not be escaped. Unescaped names that
|
||||||
|
// do not conform to the legacy validity check will use a new exposition
|
||||||
|
// format syntax that will be officially standardized in future versions.
|
||||||
|
NoEscaping EscapingScheme = iota
|
||||||
|
|
||||||
|
// UnderscoreEscaping replaces all legacy-invalid characters with underscores.
|
||||||
|
UnderscoreEscaping
|
||||||
|
|
||||||
|
// DotsEscaping is similar to UnderscoreEscaping, except that dots are
|
||||||
|
// converted to `_dot_` and pre-existing underscores are converted to `__`.
|
||||||
|
DotsEscaping
|
||||||
|
|
||||||
|
// ValueEncodingEscaping prepends the name with `U__` and replaces all invalid
|
||||||
|
// characters with the unicode value, surrounded by underscores. Single
|
||||||
|
// underscores are replaced with double underscores.
|
||||||
|
ValueEncodingEscaping
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// EscapingKey is the key in an Accept or Content-Type header that defines how
|
||||||
|
// metric and label names that do not conform to the legacy character
|
||||||
|
// requirements should be escaped when being scraped by a legacy prometheus
|
||||||
|
// system. If a system does not explicitly pass an escaping parameter in the
|
||||||
|
// Accept header, the default NameEscapingScheme will be used.
|
||||||
|
EscapingKey = "escaping"
|
||||||
|
|
||||||
|
// Possible values for Escaping Key:
|
||||||
|
AllowUTF8 = "allow-utf-8" // No escaping required.
|
||||||
|
EscapeUnderscores = "underscores"
|
||||||
|
EscapeDots = "dots"
|
||||||
|
EscapeValues = "values"
|
||||||
|
)
|
||||||
|
|
||||||
// MetricNameRE is a regular expression matching valid metric
|
// MetricNameRE is a regular expression matching valid metric
|
||||||
// names. Note that the IsValidMetricName function performs the same
|
// names. Note that the IsValidMetricName function performs the same
|
||||||
// check but faster than a match with this regular expression.
|
// check but faster than a match with this regular expression.
|
||||||
MetricNameRE = regexp.MustCompile(`^[a-zA-Z_:][a-zA-Z0-9_:]*$`)
|
var MetricNameRE = regexp.MustCompile(`^[a-zA-Z_:][a-zA-Z0-9_:]*$`)
|
||||||
)
|
|
||||||
|
|
||||||
// A Metric is similar to a LabelSet, but the key difference is that a Metric is
|
// A Metric is similar to a LabelSet, but the key difference is that a Metric is
|
||||||
// a singleton and refers to one and only one stream of samples.
|
// a singleton and refers to one and only one stream of samples.
|
||||||
@ -86,17 +155,302 @@ func (m Metric) FastFingerprint() Fingerprint {
|
|||||||
return LabelSet(m).FastFingerprint()
|
return LabelSet(m).FastFingerprint()
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsValidMetricName returns true iff name matches the pattern of MetricNameRE.
|
// IsValidMetricName returns true iff name matches the pattern of MetricNameRE
|
||||||
|
// for legacy names, and iff it's valid UTF-8 if the UTF8Validation scheme is
|
||||||
|
// selected.
|
||||||
|
func IsValidMetricName(n LabelValue) bool {
|
||||||
|
switch NameValidationScheme {
|
||||||
|
case LegacyValidation:
|
||||||
|
return IsValidLegacyMetricName(n)
|
||||||
|
case UTF8Validation:
|
||||||
|
if len(n) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return utf8.ValidString(string(n))
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("Invalid name validation scheme requested: %d", NameValidationScheme))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsValidLegacyMetricName is similar to IsValidMetricName but always uses the
|
||||||
|
// legacy validation scheme regardless of the value of NameValidationScheme.
|
||||||
// This function, however, does not use MetricNameRE for the check but a much
|
// This function, however, does not use MetricNameRE for the check but a much
|
||||||
// faster hardcoded implementation.
|
// faster hardcoded implementation.
|
||||||
func IsValidMetricName(n LabelValue) bool {
|
func IsValidLegacyMetricName(n LabelValue) bool {
|
||||||
if len(n) == 0 {
|
if len(n) == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
for i, b := range n {
|
for i, b := range n {
|
||||||
if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || b == ':' || (b >= '0' && b <= '9' && i > 0)) {
|
if !isValidLegacyRune(b, i) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EscapeMetricFamily escapes the given metric names and labels with the given
|
||||||
|
// escaping scheme. Returns a new object that uses the same pointers to fields
|
||||||
|
// when possible and creates new escaped versions so as not to mutate the
|
||||||
|
// input.
|
||||||
|
func EscapeMetricFamily(v *dto.MetricFamily, scheme EscapingScheme) *dto.MetricFamily {
|
||||||
|
if v == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if scheme == NoEscaping {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
out := &dto.MetricFamily{
|
||||||
|
Help: v.Help,
|
||||||
|
Type: v.Type,
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the name is nil, copy as-is, don't try to escape.
|
||||||
|
if v.Name == nil || IsValidLegacyMetricName(LabelValue(v.GetName())) {
|
||||||
|
out.Name = v.Name
|
||||||
|
} else {
|
||||||
|
out.Name = proto.String(EscapeName(v.GetName(), scheme))
|
||||||
|
}
|
||||||
|
for _, m := range v.Metric {
|
||||||
|
if !metricNeedsEscaping(m) {
|
||||||
|
out.Metric = append(out.Metric, m)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
escaped := &dto.Metric{
|
||||||
|
Gauge: m.Gauge,
|
||||||
|
Counter: m.Counter,
|
||||||
|
Summary: m.Summary,
|
||||||
|
Untyped: m.Untyped,
|
||||||
|
Histogram: m.Histogram,
|
||||||
|
TimestampMs: m.TimestampMs,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, l := range m.Label {
|
||||||
|
if l.GetName() == MetricNameLabel {
|
||||||
|
if l.Value == nil || IsValidLegacyMetricName(LabelValue(l.GetValue())) {
|
||||||
|
escaped.Label = append(escaped.Label, l)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
escaped.Label = append(escaped.Label, &dto.LabelPair{
|
||||||
|
Name: proto.String(MetricNameLabel),
|
||||||
|
Value: proto.String(EscapeName(l.GetValue(), scheme)),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if l.Name == nil || IsValidLegacyMetricName(LabelValue(l.GetName())) {
|
||||||
|
escaped.Label = append(escaped.Label, l)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
escaped.Label = append(escaped.Label, &dto.LabelPair{
|
||||||
|
Name: proto.String(EscapeName(l.GetName(), scheme)),
|
||||||
|
Value: l.Value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
out.Metric = append(out.Metric, escaped)
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func metricNeedsEscaping(m *dto.Metric) bool {
|
||||||
|
for _, l := range m.Label {
|
||||||
|
if l.GetName() == MetricNameLabel && !IsValidLegacyMetricName(LabelValue(l.GetValue())) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if !IsValidLegacyMetricName(LabelValue(l.GetName())) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
lowerhex = "0123456789abcdef"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EscapeName escapes the incoming name according to the provided escaping
|
||||||
|
// scheme. Depending on the rules of escaping, this may cause no change in the
|
||||||
|
// string that is returned. (Especially NoEscaping, which by definition is a
|
||||||
|
// noop). This function does not do any validation of the name.
|
||||||
|
func EscapeName(name string, scheme EscapingScheme) string {
|
||||||
|
if len(name) == 0 {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
var escaped strings.Builder
|
||||||
|
switch scheme {
|
||||||
|
case NoEscaping:
|
||||||
|
return name
|
||||||
|
case UnderscoreEscaping:
|
||||||
|
if IsValidLegacyMetricName(LabelValue(name)) {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
for i, b := range name {
|
||||||
|
if isValidLegacyRune(b, i) {
|
||||||
|
escaped.WriteRune(b)
|
||||||
|
} else {
|
||||||
|
escaped.WriteRune('_')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return escaped.String()
|
||||||
|
case DotsEscaping:
|
||||||
|
// Do not early return for legacy valid names, we still escape underscores.
|
||||||
|
for i, b := range name {
|
||||||
|
if b == '_' {
|
||||||
|
escaped.WriteString("__")
|
||||||
|
} else if b == '.' {
|
||||||
|
escaped.WriteString("_dot_")
|
||||||
|
} else if isValidLegacyRune(b, i) {
|
||||||
|
escaped.WriteRune(b)
|
||||||
|
} else {
|
||||||
|
escaped.WriteRune('_')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return escaped.String()
|
||||||
|
case ValueEncodingEscaping:
|
||||||
|
if IsValidLegacyMetricName(LabelValue(name)) {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
escaped.WriteString("U__")
|
||||||
|
for i, b := range name {
|
||||||
|
if isValidLegacyRune(b, i) {
|
||||||
|
escaped.WriteRune(b)
|
||||||
|
} else if !utf8.ValidRune(b) {
|
||||||
|
escaped.WriteString("_FFFD_")
|
||||||
|
} else if b < 0x100 {
|
||||||
|
escaped.WriteRune('_')
|
||||||
|
for s := 4; s >= 0; s -= 4 {
|
||||||
|
escaped.WriteByte(lowerhex[b>>uint(s)&0xF])
|
||||||
|
}
|
||||||
|
escaped.WriteRune('_')
|
||||||
|
} else if b < 0x10000 {
|
||||||
|
escaped.WriteRune('_')
|
||||||
|
for s := 12; s >= 0; s -= 4 {
|
||||||
|
escaped.WriteByte(lowerhex[b>>uint(s)&0xF])
|
||||||
|
}
|
||||||
|
escaped.WriteRune('_')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return escaped.String()
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("invalid escaping scheme %d", scheme))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// lower function taken from strconv.atoi
|
||||||
|
func lower(c byte) byte {
|
||||||
|
return c | ('x' - 'X')
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnescapeName unescapes the incoming name according to the provided escaping
|
||||||
|
// scheme if possible. Some schemes are partially or totally non-roundtripable.
|
||||||
|
// If any error is enountered, returns the original input.
|
||||||
|
func UnescapeName(name string, scheme EscapingScheme) string {
|
||||||
|
if len(name) == 0 {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
switch scheme {
|
||||||
|
case NoEscaping:
|
||||||
|
return name
|
||||||
|
case UnderscoreEscaping:
|
||||||
|
// It is not possible to unescape from underscore replacement.
|
||||||
|
return name
|
||||||
|
case DotsEscaping:
|
||||||
|
name = strings.ReplaceAll(name, "_dot_", ".")
|
||||||
|
name = strings.ReplaceAll(name, "__", "_")
|
||||||
|
return name
|
||||||
|
case ValueEncodingEscaping:
|
||||||
|
escapedName, found := strings.CutPrefix(name, "U__")
|
||||||
|
if !found {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
|
||||||
|
var unescaped strings.Builder
|
||||||
|
TOP:
|
||||||
|
for i := 0; i < len(escapedName); i++ {
|
||||||
|
// All non-underscores are treated normally.
|
||||||
|
if escapedName[i] != '_' {
|
||||||
|
unescaped.WriteByte(escapedName[i])
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
if i >= len(escapedName) {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
// A double underscore is a single underscore.
|
||||||
|
if escapedName[i] == '_' {
|
||||||
|
unescaped.WriteByte('_')
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// We think we are in a UTF-8 code, process it.
|
||||||
|
var utf8Val uint
|
||||||
|
for j := 0; i < len(escapedName); j++ {
|
||||||
|
// This is too many characters for a utf8 value.
|
||||||
|
if j > 4 {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
// Found a closing underscore, convert to a rune, check validity, and append.
|
||||||
|
if escapedName[i] == '_' {
|
||||||
|
utf8Rune := rune(utf8Val)
|
||||||
|
if !utf8.ValidRune(utf8Rune) {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
unescaped.WriteRune(utf8Rune)
|
||||||
|
continue TOP
|
||||||
|
}
|
||||||
|
r := lower(escapedName[i])
|
||||||
|
utf8Val *= 16
|
||||||
|
if r >= '0' && r <= '9' {
|
||||||
|
utf8Val += uint(r) - '0'
|
||||||
|
} else if r >= 'a' && r <= 'f' {
|
||||||
|
utf8Val += uint(r) - 'a' + 10
|
||||||
|
} else {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
// Didn't find closing underscore, invalid.
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
return unescaped.String()
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("invalid escaping scheme %d", scheme))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValidLegacyRune(b rune, i int) bool {
|
||||||
|
return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || b == ':' || (b >= '0' && b <= '9' && i > 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e EscapingScheme) String() string {
|
||||||
|
switch e {
|
||||||
|
case NoEscaping:
|
||||||
|
return AllowUTF8
|
||||||
|
case UnderscoreEscaping:
|
||||||
|
return EscapeUnderscores
|
||||||
|
case DotsEscaping:
|
||||||
|
return EscapeDots
|
||||||
|
case ValueEncodingEscaping:
|
||||||
|
return EscapeValues
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("unknown format scheme %d", e))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ToEscapingScheme(s string) (EscapingScheme, error) {
|
||||||
|
if s == "" {
|
||||||
|
return NoEscaping, fmt.Errorf("got empty string instead of escaping scheme")
|
||||||
|
}
|
||||||
|
switch s {
|
||||||
|
case AllowUTF8:
|
||||||
|
return NoEscaping, nil
|
||||||
|
case EscapeUnderscores:
|
||||||
|
return UnderscoreEscaping, nil
|
||||||
|
case EscapeDots:
|
||||||
|
return DotsEscaping, nil
|
||||||
|
case EscapeValues:
|
||||||
|
return ValueEncodingEscaping, nil
|
||||||
|
default:
|
||||||
|
return NoEscaping, fmt.Errorf("unknown format scheme " + s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
4
vendor/github.com/prometheus/common/model/signature.go
generated
vendored
4
vendor/github.com/prometheus/common/model/signature.go
generated
vendored
@ -22,10 +22,8 @@ import (
|
|||||||
// when calculating their combined hash value (aka signature aka fingerprint).
|
// when calculating their combined hash value (aka signature aka fingerprint).
|
||||||
const SeparatorByte byte = 255
|
const SeparatorByte byte = 255
|
||||||
|
|
||||||
var (
|
|
||||||
// cache the signature of an empty label set.
|
// cache the signature of an empty label set.
|
||||||
emptyLabelSignature = hashNew()
|
var emptyLabelSignature = hashNew()
|
||||||
)
|
|
||||||
|
|
||||||
// LabelsToSignature returns a quasi-unique signature (i.e., fingerprint) for a
|
// LabelsToSignature returns a quasi-unique signature (i.e., fingerprint) for a
|
||||||
// given label set. (Collisions are possible but unlikely if the number of label
|
// given label set. (Collisions are possible but unlikely if the number of label
|
||||||
|
2
vendor/github.com/prometheus/common/model/silence.go
generated
vendored
2
vendor/github.com/prometheus/common/model/silence.go
generated
vendored
@ -81,7 +81,7 @@ func (s *Silence) Validate() error {
|
|||||||
}
|
}
|
||||||
for _, m := range s.Matchers {
|
for _, m := range s.Matchers {
|
||||||
if err := m.Validate(); err != nil {
|
if err := m.Validate(); err != nil {
|
||||||
return fmt.Errorf("invalid matcher: %s", err)
|
return fmt.Errorf("invalid matcher: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if s.StartsAt.IsZero() {
|
if s.StartsAt.IsZero() {
|
||||||
|
6
vendor/github.com/prometheus/common/model/value.go
generated
vendored
6
vendor/github.com/prometheus/common/model/value.go
generated
vendored
@ -21,14 +21,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
// ZeroSample is the pseudo zero-value of Sample used to signal a
|
// ZeroSample is the pseudo zero-value of Sample used to signal a
|
||||||
// non-existing sample. It is a Sample with timestamp Earliest, value 0.0,
|
// non-existing sample. It is a Sample with timestamp Earliest, value 0.0,
|
||||||
// and metric nil. Note that the natural zero value of Sample has a timestamp
|
// and metric nil. Note that the natural zero value of Sample has a timestamp
|
||||||
// of 0, which is possible to appear in a real Sample and thus not suitable
|
// of 0, which is possible to appear in a real Sample and thus not suitable
|
||||||
// to signal a non-existing Sample.
|
// to signal a non-existing Sample.
|
||||||
ZeroSample = Sample{Timestamp: Earliest}
|
var ZeroSample = Sample{Timestamp: Earliest}
|
||||||
)
|
|
||||||
|
|
||||||
// Sample is a sample pair associated with a metric. A single sample must either
|
// Sample is a sample pair associated with a metric. A single sample must either
|
||||||
// define Value or Histogram but not both. Histogram == nil implies the Value
|
// define Value or Histogram but not both. Histogram == nil implies the Value
|
||||||
@ -274,7 +272,7 @@ func (s *Scalar) UnmarshalJSON(b []byte) error {
|
|||||||
|
|
||||||
value, err := strconv.ParseFloat(f, 64)
|
value, err := strconv.ParseFloat(f, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error parsing sample value: %s", err)
|
return fmt.Errorf("error parsing sample value: %w", err)
|
||||||
}
|
}
|
||||||
s.Value = SampleValue(value)
|
s.Value = SampleValue(value)
|
||||||
return nil
|
return nil
|
||||||
|
4
vendor/github.com/prometheus/common/model/value_float.go
generated
vendored
4
vendor/github.com/prometheus/common/model/value_float.go
generated
vendored
@ -20,14 +20,12 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
// ZeroSamplePair is the pseudo zero-value of SamplePair used to signal a
|
// ZeroSamplePair is the pseudo zero-value of SamplePair used to signal a
|
||||||
// non-existing sample pair. It is a SamplePair with timestamp Earliest and
|
// non-existing sample pair. It is a SamplePair with timestamp Earliest and
|
||||||
// value 0.0. Note that the natural zero value of SamplePair has a timestamp
|
// value 0.0. Note that the natural zero value of SamplePair has a timestamp
|
||||||
// of 0, which is possible to appear in a real SamplePair and thus not
|
// of 0, which is possible to appear in a real SamplePair and thus not
|
||||||
// suitable to signal a non-existing SamplePair.
|
// suitable to signal a non-existing SamplePair.
|
||||||
ZeroSamplePair = SamplePair{Timestamp: Earliest}
|
var ZeroSamplePair = SamplePair{Timestamp: Earliest}
|
||||||
)
|
|
||||||
|
|
||||||
// A SampleValue is a representation of a value for a given sample at a given
|
// A SampleValue is a representation of a value for a given sample at a given
|
||||||
// time.
|
// time.
|
||||||
|
160
vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go
generated
vendored
Normal file
160
vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go
generated
vendored
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
// Copyright 2022 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Package protodelim marshals and unmarshals varint size-delimited messages.
|
||||||
|
package protodelim
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"google.golang.org/protobuf/encoding/protowire"
|
||||||
|
"google.golang.org/protobuf/internal/errors"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MarshalOptions is a configurable varint size-delimited marshaler.
|
||||||
|
type MarshalOptions struct{ proto.MarshalOptions }
|
||||||
|
|
||||||
|
// MarshalTo writes a varint size-delimited wire-format message to w.
|
||||||
|
// If w returns an error, MarshalTo returns it unchanged.
|
||||||
|
func (o MarshalOptions) MarshalTo(w io.Writer, m proto.Message) (int, error) {
|
||||||
|
msgBytes, err := o.MarshalOptions.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sizeBytes := protowire.AppendVarint(nil, uint64(len(msgBytes)))
|
||||||
|
sizeWritten, err := w.Write(sizeBytes)
|
||||||
|
if err != nil {
|
||||||
|
return sizeWritten, err
|
||||||
|
}
|
||||||
|
msgWritten, err := w.Write(msgBytes)
|
||||||
|
if err != nil {
|
||||||
|
return sizeWritten + msgWritten, err
|
||||||
|
}
|
||||||
|
return sizeWritten + msgWritten, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalTo writes a varint size-delimited wire-format message to w
|
||||||
|
// with the default options.
|
||||||
|
//
|
||||||
|
// See the documentation for [MarshalOptions.MarshalTo].
|
||||||
|
func MarshalTo(w io.Writer, m proto.Message) (int, error) {
|
||||||
|
return MarshalOptions{}.MarshalTo(w, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalOptions is a configurable varint size-delimited unmarshaler.
|
||||||
|
type UnmarshalOptions struct {
|
||||||
|
proto.UnmarshalOptions
|
||||||
|
|
||||||
|
// MaxSize is the maximum size in wire-format bytes of a single message.
|
||||||
|
// Unmarshaling a message larger than MaxSize will return an error.
|
||||||
|
// A zero MaxSize will default to 4 MiB.
|
||||||
|
// Setting MaxSize to -1 disables the limit.
|
||||||
|
MaxSize int64
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultMaxSize = 4 << 20 // 4 MiB, corresponds to the default gRPC max request/response size
|
||||||
|
|
||||||
|
// SizeTooLargeError is an error that is returned when the unmarshaler encounters a message size
|
||||||
|
// that is larger than its configured [UnmarshalOptions.MaxSize].
|
||||||
|
type SizeTooLargeError struct {
|
||||||
|
// Size is the varint size of the message encountered
|
||||||
|
// that was larger than the provided MaxSize.
|
||||||
|
Size uint64
|
||||||
|
|
||||||
|
// MaxSize is the MaxSize limit configured in UnmarshalOptions, which Size exceeded.
|
||||||
|
MaxSize uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *SizeTooLargeError) Error() string {
|
||||||
|
return fmt.Sprintf("message size %d exceeded unmarshaler's maximum configured size %d", e.Size, e.MaxSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reader is the interface expected by [UnmarshalFrom].
|
||||||
|
// It is implemented by *[bufio.Reader].
|
||||||
|
type Reader interface {
|
||||||
|
io.Reader
|
||||||
|
io.ByteReader
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalFrom parses and consumes a varint size-delimited wire-format message
|
||||||
|
// from r.
|
||||||
|
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
||||||
|
//
|
||||||
|
// The error is [io.EOF] error only if no bytes are read.
|
||||||
|
// If an EOF happens after reading some but not all the bytes,
|
||||||
|
// UnmarshalFrom returns a non-io.EOF error.
|
||||||
|
// In particular if r returns a non-io.EOF error, UnmarshalFrom returns it unchanged,
|
||||||
|
// and if only a size is read with no subsequent message, [io.ErrUnexpectedEOF] is returned.
|
||||||
|
func (o UnmarshalOptions) UnmarshalFrom(r Reader, m proto.Message) error {
|
||||||
|
var sizeArr [binary.MaxVarintLen64]byte
|
||||||
|
sizeBuf := sizeArr[:0]
|
||||||
|
for i := range sizeArr {
|
||||||
|
b, err := r.ReadByte()
|
||||||
|
if err != nil {
|
||||||
|
// Immediate EOF is unexpected.
|
||||||
|
if err == io.EOF && i != 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
sizeBuf = append(sizeBuf, b)
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
size, n := protowire.ConsumeVarint(sizeBuf)
|
||||||
|
if n < 0 {
|
||||||
|
return protowire.ParseError(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
maxSize := o.MaxSize
|
||||||
|
if maxSize == 0 {
|
||||||
|
maxSize = defaultMaxSize
|
||||||
|
}
|
||||||
|
if maxSize != -1 && size > uint64(maxSize) {
|
||||||
|
return errors.Wrap(&SizeTooLargeError{Size: size, MaxSize: uint64(maxSize)}, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
var b []byte
|
||||||
|
var err error
|
||||||
|
if br, ok := r.(*bufio.Reader); ok {
|
||||||
|
// Use the []byte from the bufio.Reader instead of having to allocate one.
|
||||||
|
// This reduces CPU usage and allocated bytes.
|
||||||
|
b, err = br.Peek(int(size))
|
||||||
|
if err == nil {
|
||||||
|
defer br.Discard(int(size))
|
||||||
|
} else {
|
||||||
|
b = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if b == nil {
|
||||||
|
b = make([]byte, size)
|
||||||
|
_, err = io.ReadFull(r, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err == io.EOF {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := o.Unmarshal(b, m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalFrom parses and consumes a varint size-delimited wire-format message
|
||||||
|
// from r with the default options.
|
||||||
|
// The provided message must be mutable (e.g., a non-nil pointer to a message).
|
||||||
|
//
|
||||||
|
// See the documentation for [UnmarshalOptions.UnmarshalFrom].
|
||||||
|
func UnmarshalFrom(r Reader, m proto.Message) error {
|
||||||
|
return UnmarshalOptions{}.UnmarshalFrom(r, m)
|
||||||
|
}
|
10
vendor/modules.txt
vendored
10
vendor/modules.txt
vendored
@ -276,9 +276,6 @@ github.com/klauspost/compress/zstd/internal/xxhash
|
|||||||
# github.com/klauspost/cpuid/v2 v2.2.5
|
# github.com/klauspost/cpuid/v2 v2.2.5
|
||||||
## explicit; go 1.15
|
## explicit; go 1.15
|
||||||
github.com/klauspost/cpuid/v2
|
github.com/klauspost/cpuid/v2
|
||||||
# github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0
|
|
||||||
## explicit; go 1.19
|
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2/pbutil
|
|
||||||
# github.com/mdlayher/socket v0.4.1
|
# github.com/mdlayher/socket v0.4.1
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/mdlayher/socket
|
github.com/mdlayher/socket
|
||||||
@ -355,15 +352,15 @@ github.com/pkg/errors
|
|||||||
# github.com/pmezard/go-difflib v1.0.0
|
# github.com/pmezard/go-difflib v1.0.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/pmezard/go-difflib/difflib
|
github.com/pmezard/go-difflib/difflib
|
||||||
# github.com/prometheus/client_golang v1.18.0
|
# github.com/prometheus/client_golang v1.19.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.20
|
||||||
github.com/prometheus/client_golang/prometheus
|
github.com/prometheus/client_golang/prometheus
|
||||||
github.com/prometheus/client_golang/prometheus/internal
|
github.com/prometheus/client_golang/prometheus/internal
|
||||||
github.com/prometheus/client_golang/prometheus/promhttp
|
github.com/prometheus/client_golang/prometheus/promhttp
|
||||||
# github.com/prometheus/client_model v0.5.0
|
# github.com/prometheus/client_model v0.5.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
github.com/prometheus/client_model/go
|
github.com/prometheus/client_model/go
|
||||||
# github.com/prometheus/common v0.45.0
|
# github.com/prometheus/common v0.48.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/prometheus/common/expfmt
|
github.com/prometheus/common/expfmt
|
||||||
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
|
github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg
|
||||||
@ -626,6 +623,7 @@ google.golang.org/grpc/tap
|
|||||||
# google.golang.org/protobuf v1.32.0
|
# google.golang.org/protobuf v1.32.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
google.golang.org/protobuf/compiler/protogen
|
google.golang.org/protobuf/compiler/protogen
|
||||||
|
google.golang.org/protobuf/encoding/protodelim
|
||||||
google.golang.org/protobuf/encoding/protojson
|
google.golang.org/protobuf/encoding/protojson
|
||||||
google.golang.org/protobuf/encoding/prototext
|
google.golang.org/protobuf/encoding/prototext
|
||||||
google.golang.org/protobuf/encoding/protowire
|
google.golang.org/protobuf/encoding/protowire
|
||||||
|
Loading…
Reference in New Issue
Block a user