From e7797e2e46d989ba0ba207466d9e633fb7ddd4ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Jan 2022 06:19:14 +0000 Subject: [PATCH 1/6] Bump github.com/prometheus/client_golang from 1.12.0 to 1.12.1 Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.12.0 to 1.12.1. - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_golang/compare/v1.12.0...v1.12.1) --- updated-dependencies: - dependency-name: github.com/prometheus/client_golang dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d17e45d..ca7805b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module go.unistack.org/micro-meter-prometheus/v3 go 1.16 require ( - github.com/prometheus/client_golang v1.12.0 + github.com/prometheus/client_golang v1.12.1 github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.32.1 go.unistack.org/micro/v3 v3.8.16 diff --git a/go.sum b/go.sum index e5d233f..39fa790 100644 --- a/go.sum +++ b/go.sum @@ -162,8 +162,8 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= -github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= 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-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -- 2.45.2 From 629a3fee489900a63b28d96d933723474224c01b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Feb 2022 06:24:56 +0000 Subject: [PATCH 2/6] Bump dependabot/fetch-metadata from 1.1.1 to 1.2.1 Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 1.1.1 to 1.2.1. - [Release notes](https://github.com/dependabot/fetch-metadata/releases) - [Commits](https://github.com/dependabot/fetch-metadata/compare/v1.1.1...v1.2.1) --- updated-dependencies: - dependency-name: dependabot/fetch-metadata dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/dependabot-automerge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependabot-automerge.yml b/.github/workflows/dependabot-automerge.yml index 69e4c39..26cf8ca 100644 --- a/.github/workflows/dependabot-automerge.yml +++ b/.github/workflows/dependabot-automerge.yml @@ -15,7 +15,7 @@ jobs: steps: - name: metadata id: metadata - uses: dependabot/fetch-metadata@v1.1.1 + uses: dependabot/fetch-metadata@v1.2.1 with: github-token: "${{ secrets.TOKEN }}" - name: approve -- 2.45.2 From 2a6371c7976aa6957cd41d3e9cf906dacd4048ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Feb 2022 06:32:50 +0000 Subject: [PATCH 3/6] Bump golangci/golangci-lint-action from 2 to 3 Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 2 to 3. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/v2...v3) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/pr.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb19b68..4182c04 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,7 +33,7 @@ jobs: - name: checkout uses: actions/checkout@v2 - name: lint - uses: golangci/golangci-lint-action@v2 + uses: golangci/golangci-lint-action@v3 continue-on-error: true with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 545baf2..f807f24 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -33,7 +33,7 @@ jobs: - name: checkout uses: actions/checkout@v2 - name: lint - uses: golangci/golangci-lint-action@v2 + uses: golangci/golangci-lint-action@v3 continue-on-error: true with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. -- 2.45.2 From 071a135a7049600e6bf9401b4dbe8c5b3a8aa8ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Feb 2022 06:52:03 +0000 Subject: [PATCH 4/6] Bump go.unistack.org/micro/v3 from 3.8.16 to 3.8.21 Bumps [go.unistack.org/micro/v3](https://github.com/unistack-org/micro) from 3.8.16 to 3.8.21. - [Release notes](https://github.com/unistack-org/micro/releases) - [Commits](https://github.com/unistack-org/micro/compare/v3.8.16...v3.8.21) --- updated-dependencies: - dependency-name: go.unistack.org/micro/v3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 47 ++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index ca7805b..72a0109 100644 --- a/go.mod +++ b/go.mod @@ -6,5 +6,5 @@ require ( github.com/prometheus/client_golang v1.12.1 github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.32.1 - go.unistack.org/micro/v3 v3.8.16 + go.unistack.org/micro/v3 v3.8.21 ) diff --git a/go.sum b/go.sum index 39fa790..6975bdf 100644 --- a/go.sum +++ b/go.sum @@ -33,16 +33,21 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -51,13 +56,20 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -100,6 +112,7 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/gnostic v0.6.6/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -121,8 +134,10 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -141,6 +156,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -180,16 +196,23 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/silas/dag v0.0.0-20210626123444-3804bac2d6d4/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I= +github.com/silas/dag v0.0.0-20211117232152-9d50aa809f35/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -198,10 +221,11 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.unistack.org/micro-proto/v3 v3.1.1 h1:78qRmltwGek5kSQ9tNmDZ9TCRvZM7YDIOgzriKvabjA= -go.unistack.org/micro-proto/v3 v3.1.1/go.mod h1:DpRhYCBXlmSJ/AAXTmntvlh7kQkYU6eFvlmYAx4BQS8= -go.unistack.org/micro/v3 v3.8.16 h1:wBED4qWYVXme1CyT1jDqVNNSBFuFoxM+kVUDXqeQpIg= -go.unistack.org/micro/v3 v3.8.16/go.mod h1:zEbgew93bFhU+gANJubbbnPP1LtDTQRbM/17QXTbTrY= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.unistack.org/micro-proto/v3 v3.2.1 h1:z7+V97LcAwMbBiYStmf8b6fFk2UPJTzni+rxNqk4NrI= +go.unistack.org/micro-proto/v3 v3.2.1/go.mod h1:ZltVWNECD5yK+40+OCONzGw4OtmSdTpVi8/KFgo9dqM= +go.unistack.org/micro/v3 v3.8.21 h1:8vYxtIlPnCBZ888BrQSP6+b0CFQcn5FiaqDpI5XqorQ= +go.unistack.org/micro/v3 v3.8.21/go.mod h1:aBOCQ6SkAwKMRI7Q1CIsQA2S88ibyJfweJZlT1M2qpE= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -266,7 +290,9 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -316,7 +342,9 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -326,6 +354,7 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -420,12 +449,14 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -438,6 +469,9 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -459,10 +493,13 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -- 2.45.2 From dc498edc1be1e90e976f5a5fd0221163cb47b4a9 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 5 Mar 2022 19:09:31 +0300 Subject: [PATCH 5/6] update workflows Signed-off-by: Vasiliy Tolstov --- .github/workflows/autoapprove.yml | 20 +++ .github/workflows/automerge.yml | 21 +++ .github/workflows/build.yml | 7 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dependabot-automerge.yml | 14 +- .github/workflows/pr.yml | 7 +- prometheus.go | 182 +++++++++++++++------ prometheus_test.go | 19 +++ 8 files changed, 205 insertions(+), 67 deletions(-) create mode 100644 .github/workflows/autoapprove.yml create mode 100644 .github/workflows/automerge.yml diff --git a/.github/workflows/autoapprove.yml b/.github/workflows/autoapprove.yml new file mode 100644 index 0000000..ebe28c9 --- /dev/null +++ b/.github/workflows/autoapprove.yml @@ -0,0 +1,20 @@ +name: "autoapprove" + +on: + pull_request_target: + types: [assigned, opened, synchronize, reopened] + +permissions: + pull-requests: write + contents: write + +jobs: + autoapprove: + runs-on: ubuntu-latest + steps: + - name: approve + uses: hmarr/auto-approve-action@v2 + if: github.actor == 'vtolstov' || github.actor == 'dependabot[bot]' + id: approve + with: + github-token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml new file mode 100644 index 0000000..5ff3f69 --- /dev/null +++ b/.github/workflows/automerge.yml @@ -0,0 +1,21 @@ +name: "automerge" + +on: + pull_request_target: + types: [assigned, opened, synchronize, reopened] + +permissions: + pull-requests: write + contents: write + +jobs: + automerge: + runs-on: ubuntu-latest + if: github.actor == 'vtolstov' + steps: + - name: merge + id: merge + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{github.event.pull_request.html_url}} + GITHUB_TOKEN: ${{secrets.TOKEN}} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4182c04..d8002e9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,7 @@ on: push: branches: - master + - v3 jobs: test: name: test @@ -13,7 +14,7 @@ jobs: with: go-version: 1.16 - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: cache uses: actions/cache@v2 with: @@ -31,9 +32,9 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v3.1.0 continue-on-error: true with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index b50aad2..9b4d428 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -43,7 +43,7 @@ jobs: steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: setup uses: actions/setup-go@v2 with: diff --git a/.github/workflows/dependabot-automerge.yml b/.github/workflows/dependabot-automerge.yml index 26cf8ca..3681028 100644 --- a/.github/workflows/dependabot-automerge.yml +++ b/.github/workflows/dependabot-automerge.yml @@ -1,4 +1,4 @@ -name: "prautomerge" +name: "dependabot-automerge" on: pull_request_target: @@ -9,21 +9,17 @@ permissions: contents: write jobs: - dependabot: + automerge: runs-on: ubuntu-latest - if: ${{ github.actor == 'dependabot[bot]' }} + if: github.actor == 'dependabot[bot]' steps: - name: metadata id: metadata - uses: dependabot/fetch-metadata@v1.2.1 + uses: dependabot/fetch-metadata@v1.3.0 with: github-token: "${{ secrets.TOKEN }}" - - name: approve - run: gh pr review --approve "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GITHUB_TOKEN: ${{secrets.TOKEN}} - name: merge + id: merge if: ${{contains(steps.metadata.outputs.dependency-names, 'go.unistack.org')}} run: gh pr merge --auto --merge "$PR_URL" env: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f807f24..ff10c46 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -3,6 +3,7 @@ on: pull_request: branches: - master + - v3 jobs: test: name: test @@ -13,7 +14,7 @@ jobs: with: go-version: 1.16 - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: cache uses: actions/cache@v2 with: @@ -31,9 +32,9 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v3.1.0 continue-on-error: true with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. diff --git a/prometheus.go b/prometheus.go index 1354a66..3d1f187 100644 --- a/prometheus.go +++ b/prometheus.go @@ -89,30 +89,75 @@ func (m *prometheusMeter) Name() string { return m.opts.Name } -func (m *prometheusMeter) mapLabels(labels ...string) map[string]string { - labels = m.buildLabels(labels...) - elementMap := make(map[string]string, len(labels)/2) - for idx := 0; idx < len(labels); idx++ { - elementMap[labels[idx]] = labels[idx+1] +func (m *prometheusMeter) mapLabels(src ...string) map[string]string { + src = m.buildLabels(src...) + mp := make(map[string]string, len(src)/2) + for idx := 0; idx < len(src); idx++ { + mp[src[idx]] = src[idx+1] idx++ } - return elementMap + return mp +} + +func (m *prometheusMeter) metricEqual(src []string, dst []string) bool { + if len(src) != len(dst)/2 { + return false + } + dst = m.buildLabels(dst...) + mp := make(map[string]struct{}, len(src)) + for idx := range src { + mp[src[idx]] = struct{}{} + } + for idx := 0; idx < len(dst); idx++ { + if _, ok := mp[dst[idx]]; !ok { + return false + } + idx++ + } + return true +} + +func (m *prometheusMeter) labelNames(src map[string]string, dst []string) []string { + dst = m.buildLabels(dst...) + nlabels := make([]string, 0, len(src)) + for idx := 0; idx < len(dst); idx++ { + if src == nil { + nlabels = append(nlabels, dst[idx]) + } else if _, ok := src[dst[idx]]; ok { + nlabels = append(nlabels, dst[idx]) + } else { + nlabels = append(nlabels, dst[idx]) + } + idx++ + } + return nlabels } func (m *prometheusMeter) Counter(name string, labels ...string) meter.Counter { m.Lock() defer m.Unlock() - nm := m.buildName(name) c, ok := m.counter[nm] + var lnames []string if !ok { - nc := prometheus.NewGauge(prometheus.GaugeOpts{Name: nm, ConstLabels: m.mapLabels(labels...)}) - m.set.MustRegister(nc) - c = prometheusCounter{c: nc} + lnames = m.labelNames(nil, labels) + fmt.Printf("!ok lnames: %v\n", lnames) + nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, lnames) + c = prometheusCounter{c: nc, lnames: lnames} m.counter[nm] = c + } else if !m.metricEqual(c.lnames, labels) { + fmt.Printf("ok && !m.metricEqual lnames: %v labels: %v\n", c.lnames, labels) + lnames = m.labelNames(c.labels, labels) + m.set.Unregister(c.c) + nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, lnames) + c = prometheusCounter{c: nc, lnames: lnames} + m.counter[nm] = c + m.set.MustRegister(c.c) + } else { + lnames = c.lnames } - - return c + fmt.Printf("lnames %v\n", lnames) + return prometheusCounter{c: c.c, lnames: lnames, labels: m.mapLabels(labels...)} } func (m *prometheusMeter) FloatCounter(name string, labels ...string) meter.FloatCounter { @@ -122,13 +167,18 @@ func (m *prometheusMeter) FloatCounter(name string, labels ...string) meter.Floa nm := m.buildName(name) c, ok := m.floatCounter[nm] if !ok { - nc := prometheus.NewGauge(prometheus.GaugeOpts{Name: nm, ConstLabels: m.mapLabels(labels...)}) - m.set.MustRegister(nc) + nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) c = prometheusFloatCounter{c: nc} m.floatCounter[nm] = c + } else if !m.metricEqual(c.lnames, labels) { + m.set.Unregister(c.c) + nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) + c = prometheusFloatCounter{c: nc} + m.floatCounter[nm] = c + m.set.MustRegister(c.c) } - return c + return prometheusFloatCounter{c: c.c, labels: m.mapLabels(labels...)} } func (m *prometheusMeter) Gauge(name string, fn func() float64, labels ...string) meter.Gauge { @@ -138,13 +188,18 @@ func (m *prometheusMeter) Gauge(name string, fn func() float64, labels ...string nm := m.buildName(name) c, ok := m.gauge[nm] if !ok { - nc := prometheus.NewGauge(prometheus.GaugeOpts{Name: nm, ConstLabels: m.mapLabels(labels...)}) - m.set.MustRegister(nc) + nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) c = prometheusGauge{c: nc} m.gauge[nm] = c + } else if !m.metricEqual(c.lnames, labels) { + m.set.Unregister(c.c) + nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) + c = prometheusGauge{c: nc} + m.gauge[nm] = c + m.set.MustRegister(c.c) } - return c + return prometheusGauge{c: c.c, labels: m.mapLabels(labels...)} } func (m *prometheusMeter) Histogram(name string, labels ...string) meter.Histogram { @@ -154,13 +209,18 @@ func (m *prometheusMeter) Histogram(name string, labels ...string) meter.Histogr nm := m.buildName(name) c, ok := m.histogram[nm] if !ok { - nc := prometheus.NewHistogram(prometheus.HistogramOpts{Name: nm, ConstLabels: m.mapLabels(labels...)}) - m.set.MustRegister(nc) + nc := prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: nm}, m.labelNames(c.labels, labels)) c = prometheusHistogram{c: nc} m.histogram[nm] = c + } else if !m.metricEqual(c.lnames, labels) { + m.set.Unregister(c.c) + nc := prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: nm}, m.labelNames(c.labels, labels)) + c = prometheusHistogram{c: nc} + m.histogram[nm] = c + m.set.MustRegister(c.c) } - return c + return prometheusHistogram{c: c.c, labels: m.mapLabels(labels...)} } func (m *prometheusMeter) Summary(name string, labels ...string) meter.Summary { @@ -170,13 +230,18 @@ func (m *prometheusMeter) Summary(name string, labels ...string) meter.Summary { nm := m.buildName(name) c, ok := m.summary[nm] if !ok { - nc := prometheus.NewSummary(prometheus.SummaryOpts{Name: nm, ConstLabels: m.mapLabels(labels...)}) - m.set.MustRegister(nc) + nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{Name: nm}, m.labelNames(c.labels, labels)) c = prometheusSummary{c: nc} m.summary[nm] = c + } else if !m.metricEqual(c.lnames, labels) { + m.set.Unregister(c.c) + nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{Name: nm}, m.labelNames(c.labels, labels)) + c = prometheusSummary{c: nc} + m.summary[nm] = c + m.set.MustRegister(c.c) } - return c + return prometheusSummary{c: c.c, labels: m.mapLabels(labels...)} } func (m *prometheusMeter) SummaryExt(name string, window time.Duration, quantiles []float64, labels ...string) meter.Summary { @@ -186,18 +251,22 @@ func (m *prometheusMeter) SummaryExt(name string, window time.Duration, quantile nm := m.buildName(name) c, ok := m.summary[nm] if !ok { - nc := prometheus.NewSummary(prometheus.SummaryOpts{ - Name: nm, - ConstLabels: m.mapLabels(labels...), - MaxAge: window, - Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, - }) - m.set.MustRegister(nc) + nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{ + Name: nm, + MaxAge: window, + Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, + }, m.labelNames(c.labels, labels)) c = prometheusSummary{c: nc} m.summary[nm] = c + } else if !m.metricEqual(c.lnames, labels) { + m.set.Unregister(c.c) + nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{Name: nm}, m.labelNames(c.labels, labels)) + c = prometheusSummary{c: nc} + m.summary[nm] = c + m.set.MustRegister(c.c) } - return c + return prometheusSummary{c: c.c, labels: m.mapLabels(labels...)} } func (m *prometheusMeter) Init(opts ...meter.Option) error { @@ -275,92 +344,103 @@ func (m *prometheusMeter) Set(opts ...meter.Option) meter.Meter { } type prometheusCounter struct { - c prometheus.Gauge + c *prometheus.GaugeVec + lnames []string + labels prometheus.Labels } func (c prometheusCounter) Add(n int) { - c.c.Add(float64(n)) + nc, _ := c.c.GetMetricWith(c.labels) + nc.Add(float64(n)) } func (c prometheusCounter) Dec() { - c.c.Dec() + c.c.With(c.labels).Dec() } func (c prometheusCounter) Inc() { - c.c.Inc() + c.c.With(c.labels).Inc() } func (c prometheusCounter) Get() uint64 { m := &dto.Metric{} - if err := c.c.Write(m); err != nil { + if err := c.c.With(c.labels).Write(m); err != nil { return 0 } return uint64(m.GetGauge().GetValue()) } func (c prometheusCounter) Set(n uint64) { - c.c.Set(float64(n)) + c.c.With(c.labels).Set(float64(n)) } type prometheusFloatCounter struct { - c prometheus.Gauge + c *prometheus.GaugeVec + lnames []string + labels prometheus.Labels } func (c prometheusFloatCounter) Add(n float64) { - c.c.Add(n) + c.c.With(c.labels).Add(n) } func (c prometheusFloatCounter) Get() float64 { m := &dto.Metric{} - if err := c.c.Write(m); err != nil { + if err := c.c.With(c.labels).Write(m); err != nil { return 0 } return m.GetGauge().GetValue() } func (c prometheusFloatCounter) Set(n float64) { - c.c.Set(n) + c.c.With(c.labels).Set(n) } func (c prometheusFloatCounter) Sub(n float64) { - c.c.Add(-n) + c.c.With(c.labels).Add(-n) } type prometheusGauge struct { - c prometheus.Gauge + c *prometheus.GaugeVec + lnames []string + labels prometheus.Labels } func (c prometheusGauge) Get() float64 { m := &dto.Metric{} - if err := c.c.Write(m); err != nil { + if err := c.c.With(c.labels).Write(m); err != nil { return 0 } return float64(m.GetGauge().GetValue()) } type prometheusHistogram struct { - c prometheus.Histogram + c *prometheus.HistogramVec + lnames []string + labels prometheus.Labels } func (c prometheusHistogram) Reset() { } func (c prometheusHistogram) Update(n float64) { - c.c.Observe(n) + c.c.With(c.labels).Observe(n) } func (c prometheusHistogram) UpdateDuration(n time.Time) { - c.c.Observe(time.Since(n).Seconds()) + c.c.With(c.labels).Observe(time.Since(n).Seconds()) } type prometheusSummary struct { - c prometheus.Summary + c *prometheus.SummaryVec + lnames []string + labels prometheus.Labels } func (c prometheusSummary) Update(n float64) { - c.c.Observe(n) + c.c.With(c.labels).Observe(n) } func (c prometheusSummary) UpdateDuration(n time.Time) { - c.c.Observe(time.Since(n).Seconds()) + c.c.With(c.labels).Observe(time.Since(n).Seconds()) } diff --git a/prometheus_test.go b/prometheus_test.go index bed8c30..c153027 100644 --- a/prometheus_test.go +++ b/prometheus_test.go @@ -50,3 +50,22 @@ func TestWrapper(t *testing.T) { t.Fatalf("invalid metrics output: %s", buf.Bytes()) } } + +func TestMultiple(t *testing.T) { + m := NewMeter() // meter.Labels("test_key", "test_val")) + + m.Counter("server", "endpoint", "ep1", "path", "/path1").Inc() + m.Counter("server", "endpoint", "ep1", "path", "/path1").Inc() + + m.Counter("server", "endpoint", "ep2", "path", "/path2").Inc() + m.Counter("server", "endpoint", "ep2", "path", "/path2").Inc() + + m.Counter("server", "endpoint", "ep3", "path", "/path3", "status", "success").Inc() + + buf := bytes.NewBuffer(nil) + _ = m.Write(buf, meter.WriteProcessMetrics(false), meter.WriteFDMetrics(false)) + if !bytes.Contains(buf.Bytes(), []byte(`micro_server{micro_endpoint="ep1",micro_path="/path1"} 2`)) { + // t.Fatal("XXXX") + t.Fatalf("invalid metrics output: %s", buf.Bytes()) + } +} -- 2.45.2 From 8ad0258828f99f641e2ff281d1c87df118248740 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Fri, 11 Mar 2022 01:24:14 +0300 Subject: [PATCH 6/6] rewrite most stuff Signed-off-by: Vasiliy Tolstov --- prometheus.go | 428 ++++++++++++++++++++++++++------------------- prometheus_test.go | 3 +- 2 files changed, 248 insertions(+), 183 deletions(-) diff --git a/prometheus.go b/prometheus.go index 3d1f187..eaf34a0 100644 --- a/prometheus.go +++ b/prometheus.go @@ -2,6 +2,7 @@ package prometheus import ( "fmt" + "hash/fnv" "io" "sync" "time" @@ -13,26 +14,73 @@ import ( "go.unistack.org/micro/v3/meter" ) +var _ meter.Meter = &prometheusMeter{} + type prometheusMeter struct { opts meter.Options set prometheus.Registerer - counter map[string]prometheusCounter - floatCounter map[string]prometheusFloatCounter - gauge map[string]prometheusGauge - histogram map[string]prometheusHistogram - summary map[string]prometheusSummary + counter map[string]*counters + floatCounter map[string]*floatCounters + gauge map[string]*gauges + histogram map[string]*histograms + summary map[string]*summaries sync.Mutex } -func NewMeter(opts ...meter.Option) meter.Meter { +type counters struct { + cs map[uint64]*prometheusCounter +} + +type gauges struct { + cs map[uint64]*prometheusGauge +} + +type histograms struct { + cs map[uint64]*prometheusHistogram +} + +type summaries struct { + cs map[uint64]*prometheusSummary +} + +type floatCounters struct { + cs map[uint64]*prometheusFloatCounter +} + +func newFloat64(v float64) *float64 { + nv := v + return &nv +} + +func newMt(v dto.MetricType) *dto.MetricType { + nv := v + return &nv +} + +func newInt(v int) *int { + nv := v + return &nv +} + +func newInt64(v int64) *int64 { + nv := v + return &nv +} + +func newString(v string) *string { + nv := v + return &nv +} + +func NewMeter(opts ...meter.Option) *prometheusMeter { return &prometheusMeter{ - set: prometheus.DefaultRegisterer, + set: prometheus.NewRegistry(), // prometheus.DefaultRegisterer, opts: meter.NewOptions(opts...), - counter: make(map[string]prometheusCounter), - floatCounter: make(map[string]prometheusFloatCounter), - gauge: make(map[string]prometheusGauge), - histogram: make(map[string]prometheusHistogram), - summary: make(map[string]prometheusSummary), + counter: make(map[string]*counters), + floatCounter: make(map[string]*floatCounters), + gauge: make(map[string]*gauges), + histogram: make(map[string]*histograms), + summary: make(map[string]*summaries), } } @@ -69,17 +117,16 @@ func (m *prometheusMeter) buildName(name string) string { } func (m *prometheusMeter) buildLabels(labels ...string) []string { - nl := len(m.opts.Labels) + len(labels) + nl := len(labels) if nl == 0 { return nil } nlabels := make([]string, 0, nl) - nlabels = append(nlabels, m.opts.Labels...) - nlabels = append(nlabels, labels...) for idx := 0; idx < nl; idx++ { - nlabels[idx] = m.opts.LabelPrefix + nlabels[idx] + nlabels = append(nlabels, m.opts.LabelPrefix+labels[idx]) + nlabels = append(nlabels, labels[idx+1]) idx++ } return nlabels @@ -89,191 +136,156 @@ func (m *prometheusMeter) Name() string { return m.opts.Name } -func (m *prometheusMeter) mapLabels(src ...string) map[string]string { - src = m.buildLabels(src...) - mp := make(map[string]string, len(src)/2) - for idx := 0; idx < len(src); idx++ { - mp[src[idx]] = src[idx+1] - idx++ - } - return mp -} - -func (m *prometheusMeter) metricEqual(src []string, dst []string) bool { - if len(src) != len(dst)/2 { - return false - } - dst = m.buildLabels(dst...) - mp := make(map[string]struct{}, len(src)) - for idx := range src { - mp[src[idx]] = struct{}{} - } - for idx := 0; idx < len(dst); idx++ { - if _, ok := mp[dst[idx]]; !ok { - return false - } - idx++ - } - return true -} - -func (m *prometheusMeter) labelNames(src map[string]string, dst []string) []string { - dst = m.buildLabels(dst...) - nlabels := make([]string, 0, len(src)) - for idx := 0; idx < len(dst); idx++ { - if src == nil { - nlabels = append(nlabels, dst[idx]) - } else if _, ok := src[dst[idx]]; ok { - nlabels = append(nlabels, dst[idx]) - } else { - nlabels = append(nlabels, dst[idx]) - } - idx++ - } - return nlabels -} - func (m *prometheusMeter) Counter(name string, labels ...string) meter.Counter { m.Lock() defer m.Unlock() nm := m.buildName(name) - c, ok := m.counter[nm] - var lnames []string + labels = m.buildLabels(append(m.opts.Labels, labels...)...) + cd, ok := m.counter[nm] + h := newHash(labels) if !ok { - lnames = m.labelNames(nil, labels) - fmt.Printf("!ok lnames: %v\n", lnames) - nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, lnames) - c = prometheusCounter{c: nc, lnames: lnames} - m.counter[nm] = c - } else if !m.metricEqual(c.lnames, labels) { - fmt.Printf("ok && !m.metricEqual lnames: %v labels: %v\n", c.lnames, labels) - lnames = m.labelNames(c.labels, labels) - m.set.Unregister(c.c) - nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, lnames) - c = prometheusCounter{c: nc, lnames: lnames} - m.counter[nm] = c - m.set.MustRegister(c.c) - } else { - lnames = c.lnames + cd = &counters{cs: make(map[uint64]*prometheusCounter)} + c := &prometheusCounter{c: prometheus.NewGauge(prometheus.GaugeOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.counter[nm] = cd + return c } - fmt.Printf("lnames %v\n", lnames) - return prometheusCounter{c: c.c, lnames: lnames, labels: m.mapLabels(labels...)} + c, ok := cd.cs[h] + if !ok { + c = &prometheusCounter{c: prometheus.NewGauge(prometheus.GaugeOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.counter[nm] = cd + } + return c } func (m *prometheusMeter) FloatCounter(name string, labels ...string) meter.FloatCounter { m.Lock() defer m.Unlock() - nm := m.buildName(name) - c, ok := m.floatCounter[nm] + labels = m.buildLabels(append(m.opts.Labels, labels...)...) + cd, ok := m.floatCounter[nm] + h := newHash(labels) if !ok { - nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusFloatCounter{c: nc} - m.floatCounter[nm] = c - } else if !m.metricEqual(c.lnames, labels) { - m.set.Unregister(c.c) - nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusFloatCounter{c: nc} - m.floatCounter[nm] = c - m.set.MustRegister(c.c) + cd = &floatCounters{cs: make(map[uint64]*prometheusFloatCounter)} + c := &prometheusFloatCounter{c: prometheus.NewGauge(prometheus.GaugeOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.floatCounter[nm] = cd + return c } - - return prometheusFloatCounter{c: c.c, labels: m.mapLabels(labels...)} + c, ok := cd.cs[h] + if !ok { + c = &prometheusFloatCounter{c: prometheus.NewGauge(prometheus.GaugeOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.floatCounter[nm] = cd + } + return c } func (m *prometheusMeter) Gauge(name string, fn func() float64, labels ...string) meter.Gauge { m.Lock() defer m.Unlock() - nm := m.buildName(name) - c, ok := m.gauge[nm] + labels = m.buildLabels(append(m.opts.Labels, labels...)...) + cd, ok := m.gauge[nm] + h := newHash(labels) if !ok { - nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusGauge{c: nc} - m.gauge[nm] = c - } else if !m.metricEqual(c.lnames, labels) { - m.set.Unregister(c.c) - nc := prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusGauge{c: nc} - m.gauge[nm] = c - m.set.MustRegister(c.c) + cd = &gauges{cs: make(map[uint64]*prometheusGauge)} + c := &prometheusGauge{c: prometheus.NewGauge(prometheus.GaugeOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.gauge[nm] = cd + return c } - - return prometheusGauge{c: c.c, labels: m.mapLabels(labels...)} + c, ok := cd.cs[h] + if !ok { + c = &prometheusGauge{c: prometheus.NewGauge(prometheus.GaugeOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.gauge[nm] = cd + } + return c } func (m *prometheusMeter) Histogram(name string, labels ...string) meter.Histogram { m.Lock() defer m.Unlock() - nm := m.buildName(name) - c, ok := m.histogram[nm] + labels = m.buildLabels(append(m.opts.Labels, labels...)...) + cd, ok := m.histogram[nm] + h := newHash(labels) if !ok { - nc := prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusHistogram{c: nc} - m.histogram[nm] = c - } else if !m.metricEqual(c.lnames, labels) { - m.set.Unregister(c.c) - nc := prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusHistogram{c: nc} - m.histogram[nm] = c - m.set.MustRegister(c.c) + cd = &histograms{cs: make(map[uint64]*prometheusHistogram)} + c := &prometheusHistogram{c: prometheus.NewHistogram(prometheus.HistogramOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.histogram[nm] = cd + return c } - - return prometheusHistogram{c: c.c, labels: m.mapLabels(labels...)} + c, ok := cd.cs[h] + if !ok { + c = &prometheusHistogram{c: prometheus.NewHistogram(prometheus.HistogramOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.histogram[nm] = cd + } + return c } func (m *prometheusMeter) Summary(name string, labels ...string) meter.Summary { m.Lock() defer m.Unlock() - nm := m.buildName(name) - c, ok := m.summary[nm] + labels = m.buildLabels(append(m.opts.Labels, labels...)...) + cd, ok := m.summary[nm] + h := newHash(labels) if !ok { - nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusSummary{c: nc} - m.summary[nm] = c - } else if !m.metricEqual(c.lnames, labels) { - m.set.Unregister(c.c) - nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusSummary{c: nc} - m.summary[nm] = c - m.set.MustRegister(c.c) + cd = &summaries{cs: make(map[uint64]*prometheusSummary)} + c := &prometheusSummary{c: prometheus.NewSummary(prometheus.SummaryOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.summary[nm] = cd + return c } - - return prometheusSummary{c: c.c, labels: m.mapLabels(labels...)} + c, ok := cd.cs[h] + if !ok { + c = &prometheusSummary{c: prometheus.NewSummary(prometheus.SummaryOpts{Name: nm}), labels: labels} + cd.cs[h] = c + m.summary[nm] = cd + } + return c } func (m *prometheusMeter) SummaryExt(name string, window time.Duration, quantiles []float64, labels ...string) meter.Summary { m.Lock() defer m.Unlock() - nm := m.buildName(name) - c, ok := m.summary[nm] + labels = m.buildLabels(append(m.opts.Labels, labels...)...) + cd, ok := m.summary[nm] + h := newHash(labels) if !ok { - nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{ + cd = &summaries{cs: make(map[uint64]*prometheusSummary)} + c := &prometheusSummary{c: prometheus.NewSummary(prometheus.SummaryOpts{ Name: nm, MaxAge: window, Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, - }, m.labelNames(c.labels, labels)) - c = prometheusSummary{c: nc} - m.summary[nm] = c - } else if !m.metricEqual(c.lnames, labels) { - m.set.Unregister(c.c) - nc := prometheus.NewSummaryVec(prometheus.SummaryOpts{Name: nm}, m.labelNames(c.labels, labels)) - c = prometheusSummary{c: nc} - m.summary[nm] = c - m.set.MustRegister(c.c) + }), labels: labels} + cd.cs[h] = c + m.summary[nm] = cd + return c } - - return prometheusSummary{c: c.c, labels: m.mapLabels(labels...)} + c, ok := cd.cs[h] + if !ok { + c = &prometheusSummary{c: prometheus.NewSummary(prometheus.SummaryOpts{ + Name: nm, + MaxAge: window, + Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, + }), labels: labels} + cd.cs[h] = c + m.summary[nm] = cd + } + return c } func (m *prometheusMeter) Init(opts ...meter.Option) error { for _, o := range opts { o(&m.opts) } - return nil } @@ -299,6 +311,57 @@ func (m *prometheusMeter) Write(w io.Writer, opts ...meter.Option) error { } enc := expfmt.NewEncoder(w, expfmt.FmtText) + + for name, metrics := range m.counter { + mf := &dto.MetricFamily{ + Name: newString(name), + Type: dto.MetricType_GAUGE.Enum(), + Metric: make([]*dto.Metric, 0, len(metrics.cs)), + } + for _, c := range metrics.cs { + m := &dto.Metric{ + Label: make([]*dto.LabelPair, 0, len(c.labels)/2), + Gauge: &dto.Gauge{ + Value: newFloat64(float64(c.Get())), + }, + } + for idx := 0; idx < len(c.labels); idx++ { + m.Label = append(m.Label, &dto.LabelPair{ + Name: &c.labels[idx], + Value: &c.labels[idx+1], + }) + idx++ + } + mf.Metric = append(mf.Metric, m) + } + mfs = append(mfs, mf) + } + + for name, metrics := range m.gauge { + mf := &dto.MetricFamily{ + Name: newString(name), + Type: dto.MetricType_GAUGE.Enum(), + Metric: make([]*dto.Metric, 0, len(metrics.cs)), + } + for _, c := range metrics.cs { + m := &dto.Metric{ + Label: make([]*dto.LabelPair, 0, len(c.labels)/2), + Gauge: &dto.Gauge{ + Value: newFloat64(float64(c.Get())), + }, + } + for idx := 0; idx < len(c.labels); idx++ { + m.Label = append(m.Label, &dto.LabelPair{ + Name: &c.labels[idx], + Value: &c.labels[idx+1], + }) + idx++ + } + mf.Metric = append(mf.Metric, m) + } + mfs = append(mfs, mf) + } + for _, mf := range mfs { _ = enc.Encode(mf) } @@ -344,103 +407,106 @@ func (m *prometheusMeter) Set(opts ...meter.Option) meter.Meter { } type prometheusCounter struct { - c *prometheus.GaugeVec - lnames []string - labels prometheus.Labels + c prometheus.Gauge + labels []string } -func (c prometheusCounter) Add(n int) { - nc, _ := c.c.GetMetricWith(c.labels) - nc.Add(float64(n)) +func (c *prometheusCounter) Add(n int) { + c.c.Add(float64(n)) } -func (c prometheusCounter) Dec() { - c.c.With(c.labels).Dec() +func (c *prometheusCounter) Dec() { + c.c.Dec() } -func (c prometheusCounter) Inc() { - c.c.With(c.labels).Inc() +func (c *prometheusCounter) Inc() { + c.c.Inc() } -func (c prometheusCounter) Get() uint64 { +func (c *prometheusCounter) Get() uint64 { m := &dto.Metric{} - if err := c.c.With(c.labels).Write(m); err != nil { + if err := c.c.Write(m); err != nil { return 0 } return uint64(m.GetGauge().GetValue()) } -func (c prometheusCounter) Set(n uint64) { - c.c.With(c.labels).Set(float64(n)) +func (c *prometheusCounter) Set(n uint64) { + c.c.Set(float64(n)) } type prometheusFloatCounter struct { - c *prometheus.GaugeVec - lnames []string - labels prometheus.Labels + c prometheus.Gauge + labels []string } func (c prometheusFloatCounter) Add(n float64) { - c.c.With(c.labels).Add(n) + c.c.Add(n) } func (c prometheusFloatCounter) Get() float64 { m := &dto.Metric{} - if err := c.c.With(c.labels).Write(m); err != nil { + if err := c.c.Write(m); err != nil { return 0 } return m.GetGauge().GetValue() } func (c prometheusFloatCounter) Set(n float64) { - c.c.With(c.labels).Set(n) + c.c.Set(n) } func (c prometheusFloatCounter) Sub(n float64) { - c.c.With(c.labels).Add(-n) + c.c.Add(-n) } type prometheusGauge struct { - c *prometheus.GaugeVec - lnames []string - labels prometheus.Labels + c prometheus.Gauge + labels []string } func (c prometheusGauge) Get() float64 { m := &dto.Metric{} - if err := c.c.With(c.labels).Write(m); err != nil { + if err := c.c.Write(m); err != nil { return 0 } return float64(m.GetGauge().GetValue()) } type prometheusHistogram struct { - c *prometheus.HistogramVec - lnames []string - labels prometheus.Labels + c prometheus.Histogram + labels []string } func (c prometheusHistogram) Reset() { } func (c prometheusHistogram) Update(n float64) { - c.c.With(c.labels).Observe(n) + c.c.Observe(n) } func (c prometheusHistogram) UpdateDuration(n time.Time) { - c.c.With(c.labels).Observe(time.Since(n).Seconds()) + c.c.Observe(time.Since(n).Seconds()) } type prometheusSummary struct { - c *prometheus.SummaryVec - lnames []string - labels prometheus.Labels + c prometheus.Summary + labels []string } func (c prometheusSummary) Update(n float64) { - c.c.With(c.labels).Observe(n) + c.c.Observe(n) } func (c prometheusSummary) UpdateDuration(n time.Time) { - c.c.With(c.labels).Observe(time.Since(n).Seconds()) + c.c.Observe(time.Since(n).Seconds()) +} + +func newHash(labels []string) uint64 { + labels = meter.BuildLabels(labels...) + h := fnv.New64a() + for _, l := range labels { + h.Write([]byte(l)) + } + return h.Sum64() } diff --git a/prometheus_test.go b/prometheus_test.go index c153027..498bf93 100644 --- a/prometheus_test.go +++ b/prometheus_test.go @@ -13,9 +13,8 @@ import ( func TestBuildName(t *testing.T) { m := NewMeter() - im := m.(*prometheusMeter) check := `micro_foo{micro_aaa="b",micro_bar="baz",micro_ccc="d"}` - name := im.buildMetric("foo", "bar", "baz", "aaa", "b", "ccc", "d") + name := m.buildMetric("foo", "bar", "baz", "aaa", "b", "ccc", "d") if name != check { t.Fatalf("metric name error: %s != %s", name, check) } -- 2.45.2