{"_id":"@opentelemetry/metrics","_rev":"143-77330faa2f176855e7803078f0e10f5a","name":"@opentelemetry/metrics","dist-tags":{"latest":"0.24.0","next":"0.24.0","canary":"0.24.1-alpha.1"},"versions":{"0.2.0":{"name":"@opentelemetry/metrics","version":"0.2.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.2.0","maintainers":[{"name":"dkhan","email":"daniel@khan.io"},{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"1c5889e3154d36a05062a18ff592e2b7385788b2","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.2.0.tgz","fileCount":19,"integrity":"sha512-D7jEcNT0kuVEa+lFUG2JQlyZCmphndB2W9Cuw3oI9YiIl92PVbb+xOT89Sg/P8UdpddXeqOOBzuHlHAei1xlTA==","signatures":[{"sig":"MEYCIQD2uRA/v/iBn3sV0cVYvRVkN3xUgR1xn0uPPtThAyQ2ngIhAPgFZForDh1tRnnU8lLzk2QCUDrg67pD3Qo554IMziq1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdwIeZCRA9TVsSAnZWagAA29AQAJ8vF0lnP1gwnHIq6Buo\nspFjtqNAhXFxbjaDx6DDmwVzTnCxFETOSOEsC2G3v3NaR7U+21dI1ikXKxuY\nHG5T6IcdrPkiFltJVI2gD142l5nGvc0VrWlUfbJ1rlz7XytBCe8+LvyE6qvV\nn4GVxEwenAcriuuS+wkj5p5Ie7Q0TjMMNKYRNSXRBrnc/LmIYK8+/DzhfKRp\ntEqDIbvi28sZoGJNOKOt6XEm5BNZ+iwDV0O0/Hj9uKrHAr6JNBBZR+Rlmmf6\nb9RoIGexDKzYGNz6vrRLnpXtqvTcSNyA0K4qNaxlCTe6SEEKz8XNTHJBUyeI\n8WnF/TaA2AvPtt4aRQ4yowBHSqQ7uJUlZjG7Y2bHwI2CMOzdOOoUBbp3xpX7\nkqwNRF8GUH9UUtKYEUgdFX+6nwcm2nAJ4SIEo2ihCrvMS1BHEnvdOEFNMprZ\nqDtvgFie2WoHSOolQfgAUazpH3V9ipagi9JRy4Wv34G3G61QLlXAfMAX/4M/\nAf1OvkE38tpgMlRjBaq35oPAE3Hgr6Lj/gh9iHlcqrEhL1wgV3Si5mePVuZ/\nnyYh8H9Dk3cqHMMv6ytfNbi4MhLzF9q1ozfiQ5dwFqI72IBuUPGsrjj2dxx/\n5F6NerwkT+0wrXOhTSobD4ntuWTXX3VRLYjLR/nPVWGFH+FQT2FsbQxzCGVy\nu4g7\r\n=84HD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"fix":"gts fix","tdd":"yarn test -- --watch-extensions ts --watch","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.ts'","check":"gts check","clean":"rimraf build/*","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc -p .","prepare":"npm run compile"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/base":"^0.2.0","@opentelemetry/core":"^0.2.0","@opentelemetry/types":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","rimraf":"^3.0.0","codecov":"^3.5.0","ts-node":"^8.3.0","ts-mocha":"^6.0.0","typescript":"^3.6.3","@types/node":"^12.6.9","@types/mocha":"^5.2.7","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.15.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.2.0_1572898713304_0.24267025189654823","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"@opentelemetry/metrics","version":"0.3.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.3.0","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"c4097b1e72bf029676621cdc77121b9b51fa918c","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.3.0.tgz","fileCount":23,"integrity":"sha512-VsS6lUaYwoTCqmDuCYmPA5Voer3PrY6bM65I+v+R1oEGd/kPVGGARIxWBgBdlDgZea+HfIP+QfpJ/H3SXUPH1Q==","signatures":[{"sig":"MEUCIQCJCJW8H8/nRKsfmbbCYOqMl0X9IYzgborfSfRXLkOXJAIgMySVqbBwleiR4KOqDh9PNEQgTWxuKWx62heHGCATdHw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8+h3CRA9TVsSAnZWagAA02UP/R3ajMjLl95qp8jD4kN2\nLBcasLHrwLBkP3IiD9G5D0h4l0hlIsdbR4RIrgyiNsBcRGBI6tHbjYmWQvtm\nA04DpmVQuGyaajwz/RVtn7dyuvXycub7Fjgq1kQ5ICXXjWiX8fy2iw3vGiNK\ngLD1Z5tfs0rEZWRTbN3amEUEnhYZHtXOfOC+XOGV7qi1Ag3s7CYZR3zX/8AV\neMnCMzlsEt7uwuSsROyBGJvf7I3mik5UZK22DMpKJ3kDcheBEffAg9JEV6qv\ng4OuGw47MV/regwvqaw4g+1tMUwAF41JGdg6rOkWkCo5dk7tzP2/qnVuPGyq\nTHgXPckkq4H21V4Tq5QOnZZyJNvbPYBG/gsvDwcPnWsLKDeiIL8OUh8hay0T\njGEECLmGafOiL03AiYb4F391pqpuwPTfF5XVXtwdOA0srQrrDXFe2jquKgbq\nDNaheKPOWyZ687s9kbAy0j9eXdIiTuJenf6rT6wo52KN6mZl/glQBDEOg7dz\nXcri3F2d83/m5sDdyLzlICdjlWcJ7K3l9m2Bq0TqW840eZn55R35GWqQ/5cl\nehA1kcDfrHSpqzKaf615nHvaIc8O3c2Eyd9+unejRPgNEPQepSduFNwYvvdR\n+dtvR8MhTZzvWzAbHFYDE9F+q9DqGTrQQhfoNCGEn62+VcFKgTpJDPbgA12S\nEWze\r\n=ApIM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"fix":"gts fix","tdd":"yarn test -- --watch-extensions ts --watch","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.ts'","check":"gts check","clean":"rimraf build/*","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc -p .","prepare":"npm run compile","precompile":"tsc --version"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/base":"^0.3.0","@opentelemetry/core":"^0.3.0","@opentelemetry/types":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.3.0","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.15.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.3.0_1576265847244_0.44376159708953433","host":"s3://npm-registry-packages"}},"0.3.1":{"name":"@opentelemetry/metrics","version":"0.3.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.3.1","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"b6425756d9e7b92a06dcec446629ce65e0ad758a","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.3.1.tgz","fileCount":23,"integrity":"sha512-hNbZl9C0CQbWRQgB1n6ZsPBU5qrWkr5tnu1MqUWxIWDolyY6xBBBWi6LMInEMGSkFKG9bhXt5AnOvjaI0MfcZQ==","signatures":[{"sig":"MEUCIQDGP+3V65e1CpWeEwAFMb+I4vi47cPxY/cwMq0pNujb6QIgbBDndq5CdnnjSwiO1p8N6CfNY0ZR93/IdwG5kklu+OQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd/WC+CRA9TVsSAnZWagAAXDIP/1VbsnFHGd80YfxWhk19\nmi0F7dqTyuLMKrz4Kf+VVkxuIOMPyLaoj3/4/eKtbmG1ULIoI+UVEtHm0Ksl\nLTRmIAyV4mPsvSmz5ZQ+yIibC9MI3Xq5xXosMbrxXCr8+ABv2PLUKWHPYFZv\nzSHyWlfyLGXz2lVMGnCOeREmc/O98fPWIyk1OVYHxXjEd9BZC2r0Lo5rOWdd\nIg7mj4TxDbDlk+O2Xl46c8ydOyr059+JoI1P2F7Fvii5/9UlbfC1CTLDeSTz\n6Kdzyg1JkpKtk5BFqlKwdRVWI1xPCSrtaXA6BvB2h26ioZ2X70zq2zfe1oSW\nJ0VPPYJTNAOwh3AAcfWjzrv3kgAxkgFEUxChO+W4cKYBcnsHErMBZwGNUUcZ\nccGfSOVpLF98OnFKkmZdgVKE3hjg5TyOSvr6Mm4LvPZJfrDxyw0yG1U0czU/\n7Gj/+aRIkVukzCfprCG8Ixd2AvVXpBqg/RWdDIwozt4a8H7XyIappILkkJvx\nu4PYusPXyiLgavt4dCiaMEOY9LTDeIVw3vTDyCLfA5Df1tbFB5ef1llzRQKx\nmYcbLUDw6Jfqf8UWOTZHKcztWMivp6qiI+laRYncB7Mv160CvqA/yhCug57/\n2RYf/poq4SJ5KsCnScAejjl89143JEqOe1iu06uyjS1ajLPUpWjYDbDNbQ5R\nG/Fd\r\n=Haup\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"fix":"gts fix","tdd":"yarn test -- --watch-extensions ts --watch","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.ts'","check":"gts check","clean":"rimraf build/*","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc -p .","prepare":"npm run compile","precompile":"tsc --version"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/base":"^0.3.1","@opentelemetry/core":"^0.3.1","@opentelemetry/types":"^0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.3.0","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.15.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.3.1_1576886461934_0.14362484242197393","host":"s3://npm-registry-packages"}},"0.3.2":{"name":"@opentelemetry/metrics","version":"0.3.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.3.2","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ffd2f15edec89607f1b16b830da87bd65dce248c","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.3.2.tgz","fileCount":27,"integrity":"sha512-DMehQr4qius0U6ZnG3FqeVW7lQswIILIhV6gLNiiuZ1rmsdPV4+IsY9FzLmEcfqR3NRfEBHSDo2BSrJ3zdJWBA==","signatures":[{"sig":"MEMCH1XLFjfkYRUcdTsGMqwjSeJOBjqivaxRmh1YSWaAFrwCIAj3Ts7W5z7ky0orOYgpXm2HAAy+MHS883dSouMfAMok","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeD7jFCRA9TVsSAnZWagAA5B8P+wVl2L0LGPDpSZYMfifb\naa9aYIrk6p9GMMrTNB6aO/jg1PSjUF1Qe3ekdfmb/boR6YssCyMpp7L4SPfL\nIwIJtTAy27BaJAKka1R5sJiC/TPJQ4qrKpqzamCNCHXdeccK8/cu2RJ+8XFu\nIMeIsRyZcOtx/mmfnpzzxub8neIpX8YgM/F8fKIXADjCovE+qKHZej6AjOYS\nUNrJ1sWG2gP2l8kKuUpYlcu4pUh1v1rlLV3zN2A369suy7Gfx1nW4C5hVQxd\nt4PW8AP4C2LvZWmVeumILtDQuz1ve8+wVc/qPAqk2pA2ak65/q43NB2Tvc53\n8cRGiihNh6Oq9J2AE1uzNckKk7nZuPukuLghTmGftOwqKqmKhOuqoLwVWlQd\nfwM41/3kRQpw9DkMF/gdZFPjqyB2iZDGVmRvr6qcYsx8gg/2VVsGSwx5Nm7s\n/oN+5PmK887gYRFqFF98556EUgKDiHe2AT270Fy+8yZYvLy+WIprUmcu2fOl\n9BVwzvxTxYuWPxbb0IdwbouGFAPETz7ILs0JZaxhSc/ctd6ESg3SfCYrx6Vs\ndAvn4WVoHwE5msKFkVlth+Bn9L3zTn6fELr7OQtbyk+7/Zf89f6A0QqiORox\nZcbD5bbl5eyp3VByKte9Hr9ajninkwOsykqCs3kHgml6vs66e9tKUvhoszR2\nAD/p\r\n=U7H4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"fix":"gts fix","tdd":"yarn test -- --watch-extensions ts --watch","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.ts'","check":"gts check","clean":"rimraf build/*","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/base":"^0.3.2","@opentelemetry/core":"^0.3.2","@opentelemetry/types":"^0.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.3.0","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.15.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.3.2_1578088645500_0.9458022727266395","host":"s3://npm-registry-packages"}},"0.3.3":{"name":"@opentelemetry/metrics","version":"0.3.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.3.3","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"a0eb2e092589cc6dfb1a7def8063c87965bad9d6","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.3.3.tgz","fileCount":29,"integrity":"sha512-EMmBFfWMwXpII8fKV3YutDwHqCxKogjsp/HWtwBiI1gV43uxSZ8IUv/15u46IUg4iCqAFEkTMLdCyJM6cNwJwg==","signatures":[{"sig":"MEQCIHfK4Qb6gfovXsZOrnGuRpM1jWkRMHL7kF14Mp6PwtN0AiA8HEPA2tnuKXICbTj10BeFsZiPjxbfybe9nLa2yQm45A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":82766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKNFOCRA9TVsSAnZWagAAFbsQAI+eKmTTL0gigJT0cIlI\nwxzjBc3u1CIJ3GCAGCvZPwrpz9/RAX20F+XBY+LAXs/gPU6DxvQw7CEP7/vf\nmeU9SJ3AHmWxBv4YnJBsXKr9zOpM0Z4cggSgxh269/e8VDcZue/tig1NjCWw\nDH2lTMuJ8sJOXrUSe9KZPz2erDgCt1Am+Czdi+AhRGreN+vembzlzYZDB1Pr\ndo2cmh8sqPjyEdR4T8K9ozYEHOWEggK3QfgVVrfO4T/1yfINLFELZf6Dv1M6\nC+71M93NdCWp6FowlIbDPHPcHr04URrYNiMpqFsvVXd4U47eHj97j4F5PIla\nnA0d/EYpu0pfPqIxRCCcXxNHRSxugG/3Z42BYA05PZjGW94/UNPZqbnbheXO\n1cKJJrYh5/LEo5O9nsVIBNNdSm5QndjaFNASiAhAok22Ji7If5pr3wHPRFzN\ndhYaBTB0aRS1e+8DLGv9joBoDcuBNF3DkswJup/9FX2Hhz7tdGJR9WnIfX77\nOGjnWTdlExMXKc7/LkEzrXdh4EgdYrclENBzc5vpLKObF6r4aSkP7NFpxz2s\nNyzGwKoo+7U/JF61kzOjZYxkijk1U4J13lmgn7oA/w/mICX4zT3dCFSs9CPs\nhFapKil3FvcwGDrV8shAPdwxm8B91kfuaTxcn42MD3K8Mo8HhIDZPiNhVgIm\nb/Sk\r\n=idc/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"fix":"gts fix","tdd":"yarn test -- --watch-extensions ts --watch","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.ts'","check":"gts check","clean":"rimraf build/*","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/base":"^0.3.3","@opentelemetry/core":"^0.3.3","@opentelemetry/types":"^0.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.15.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.3.3_1579733326373_0.08549510244618452","host":"s3://npm-registry-packages"}},"0.4.0":{"name":"@opentelemetry/metrics","version":"0.4.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.4.0","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"4b8eb3df508b7e43e86b21ed048eb283d97d8f37","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.4.0.tgz","fileCount":33,"integrity":"sha512-72yZZlTOBBumLMXJSl/X25sIpo/+jNHEXaSrAKMLxsHa5GI+4v5HVeN3qP6Be40z97Gk2Z8ZJgifW49SaTFJRg==","signatures":[{"sig":"MEUCIAaml1V+wPwySpadD1Pr+FJelavh1Jcx47TGdgaNybnoAiEAx/5/dznCnHDn4iAyQKKnK2O66rczA7Zx7WsyAZ4ceC0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":89102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeO0nPCRA9TVsSAnZWagAAJmAP/R79FYvb68tuEEQByNQF\n5xYOch5GWniMbP/d+83reX+TusAZHLaczQvRDz+kwlUZTgg2itDDmGpFKKC2\nquJFZ0VXV/mxJTc3aozVwCvVlPKoZ1t7vJxqfvqHocEwzkar/M+u7APbGYF9\ns8tyjDUOvI4cpdxzZo/Em05J1Hu04KLWI0orrRQTj87MqYCkRMrQ4pOdHdGa\nqTsh8z7YZDkaZ3K0xez0Da1JT3n1WMwb3jFeok2FHsi/yK3hYljLj4qdMpgg\nhjACMIUAYeNn4Dk3yp9RwwzcnE543tS8MnHo8YVVrUSlin9at0XGOCv0QGYz\nwSXxdS3L9nbqiCRpd3VuQ5Of48d+6AYhHX17JLjXWf1mx9oBxmUCDCD32jy0\nUFjKWD6iz80ktJPSlxOi4+fF/onEvZ0UwKkMPVs5hqKMRc+z54CHoydLXBjd\nqQA3c9TO6/MfbezocZmcg96Yt78ZfqiJLD3eWu8JuVWUzdYXCSjzWOf491aN\n9GOIShEj0B2+lwH7XAnFJqobmbK4q59P3QSMYPWpukD1LMXC6HlrC2/K+RwM\nh4E+pTCKBjxjhxBkAiaGG5Rjfses8ervtkn0sej73cSmvlWqHCCCwbFM9vI/\nJmUVyuod0u8+4iTYEB2IyXj+teaFcD7MUrQPBAAAesIsYDnENBmZeAbpITa+\nVtva\r\n=D+tB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"fix":"gts fix","tdd":"npm run test -- --watch-extensions ts --watch","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.ts'","check":"gts check","clean":"rimraf build/*","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/api":"^0.4.0","@opentelemetry/base":"^0.4.0","@opentelemetry/core":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.4.0_1580943823230_0.45393479543273796","host":"s3://npm-registry-packages"}},"0.5.0":{"name":"@opentelemetry/metrics","version":"0.5.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.5.0","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"39822a401d04354dc65688b5a9a58a6541ccdc57","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.5.0.tgz","fileCount":33,"integrity":"sha512-CObXaHzC/alOl8eOniu3cCEW2deoPuz1tD4xLgHnlhAttc3vj5vcUnCbXEo8G9l+xttHdatdAIQtT90c51zEXA==","signatures":[{"sig":"MEUCIQCSMRVuSzx3qh9itsPcl5VCId6l8O6tKTOwhx/dnsPtowIgEkf8yk5bNHDkRhRezTBcE+//P1go5YY/NJ5CyJcxyhI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb/fZCRA9TVsSAnZWagAAtl8P/ROZKXp7OpYfFl7jgEkh\nBC6zWz7apmCoZbSAnvN/lh/dAYEjJX6SsnGonPT260Ec9T9r7pRZK2h9E4d7\nJXk+kolTkrOrZBZTgRcrYlJSMcIClwg5yHaRSgslF3LQeYlo4a9g7GB4pTC8\nLVLW4t+ZIJ+nAEMsq+MdaynFf8bOv6zZn/f5z0u/sz6RPM5GAYX+n+GcQE/q\n+yFxku4ZUG/pkcS8UvtxGPARqLJo58WB7xmBVpgYDFlqOJUrJ9XI4q/XNOxu\nRmOJUQzUXBm/naUvqps1pDfaOMTzU9WoP+FwLrYLYxwCkEAM3PrXCYoV4i+e\nvu8CQfTBD/NaalX94ilEoE4TrVU1K5hx+wSxy8483EhU1EwnsonMF2MxTY4o\nRQpSugglDQSgRHUZhan1aOCIwDzpKoIWeLt9Q4+U3KBJXjsnIbRKCQvJ1RyW\nUAwYnn8+2DB8onUzK3lkuMw1GBKjg57lfE3BfVLQVBiD0dY5cpY0v19+fNnI\nPECwo5rCUBAqhgPqhimMmwDN0dgRQgi2SEzenI0IokCYkyQ74vRgaBAvZajw\nQ00oq/EiPGJ4w5t4Zbsx/c4/DX/m4XV/PyO8zh+fFz+cOfVapgIaNpjYMG6W\nt6vybH+rBxefhKScKz13w+9eODVPHfE2Z4mY1nrxERyX6WbV9M7reHjqJTW4\nGRjk\r\n=SZj8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/api":"^0.5.0","@opentelemetry/base":"^0.5.0","@opentelemetry/core":"^0.5.0","@opentelemetry/resources":"^0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.5.0_1584396249070_0.5138032356948183","host":"s3://npm-registry-packages"}},"0.5.1":{"name":"@opentelemetry/metrics","version":"0.5.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.5.1","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ef75ec7b604c576b88e002022a6848d4aba3293f","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.5.1.tgz","fileCount":35,"integrity":"sha512-ixbux+igLOe6z6r4pcuVuKqKlSWrep5nYs1qB4zfmu6/2xe5J9OstcHrTVez7hg5s3ykrONQzfdi3B9fhBEfqQ==","signatures":[{"sig":"MEQCIGdabQoDR6CKXwTFAVqyuRI2fKq1P4AuxHx3jWCAp9VmAiA7iwUCtU0ghVmDkReG/UG25W0yDWHdU+4BOOp+hvKRlg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedBGTCRA9TVsSAnZWagAAchQP/AurhHohX5Uthx8c6cCz\n4xSqNH12DEXRzlDKvKcD+Jzry+m7pwiaI8PyT68wnTZlXoux344qaoauMXhF\n/sD+42nHbU47PCSO02Flq4CPvQQ9pjqCRSKlKlFQhGqoBBo4IRYCxFGV2Rh4\nfoxPBFjRCna5WJEz9HryKx1ZiKn77VIhOppOugeYcbmF6N1eaYZMkkL+7w9Q\n+uAUEfTdGb0I5BWX0/S1O/SSn5LZ6ehvTT6yJW73bE1QoqiDj4LQe4PgOpqe\nNYUI+Hw9IO5SNWCC4WFHbGoQjjmplXgdFS4bqr1828j1zeA7Utew+ryFp2ne\nN9jgwjQt+jnzSNoSbON6YxECkqKj1ReTQoLJDwzqBB/6YXqa+KWJ5hKH6Oav\nEawEE9ZDstGKphfURG3oQzMHCYQRu1HVZaSSZwVBSCPazgvDyW7G1sHzwhyo\n74mfa1i13DnMw6MNNgKM1ffdvrqGogeBMg+0zPdUzf672DnWNS8AEEAJMyOf\nrbBxF0JaXS+Du7yCAAXKgMXbqIVjyZ6aUi7OPdKI4PpMyB+TtJmNzYI2UPcJ\nQbjQk2blIeQ5TmNq/MmQXAUb3M8RXTjG4GyQhz/8/+Ouh1iHN++uzYK/33yv\nkqOpTXX28i2wANd5MccRIbshlYFzxo7DqNXv9FZv5OyvBuco3S1/stcKf9JB\nvOx7\r\n=OTub\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.14.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.5.1","@opentelemetry/base":"^0.5.1","@opentelemetry/core":"^0.5.1","@opentelemetry/resources":"^0.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.5.1_1584664979312_0.2090443171990295","host":"s3://npm-registry-packages"}},"0.5.2":{"name":"@opentelemetry/metrics","version":"0.5.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.5.2","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"d78cfaf92eaf7c8ccfa152996e37ab62a41c2eb7","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.5.2.tgz","fileCount":35,"integrity":"sha512-aIAiLWPZ4d8uT7tGdBBTbMaEVj8rSNxgDRPJtrTt4TYorfI4zy9RFj3y/AKFOio0USqYatIAKee7MUT1iYWDWw==","signatures":[{"sig":"MEQCIFSQhnqmMLak/TAUzSFX87s+BXD8vk9THOdi6qnM76g4AiBBvWFOmnUHfAjA9N817NFXgvEDEMbMTZAbmoPdgWagwg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefkAbCRA9TVsSAnZWagAAwDYP/1JowUzjCbkm6Fzn8Mkz\nKM+yEKHDwtGEeNwwXNYTTWAyxDdUtX7FQQhuHVTUx+w8YAP7To0mQAXl5o/Y\nOKsZykQA1xnQ8mYu/vZ6Xc+NV+d1dwxcUb3AYzAefZG6D9QKCCdRbbn2DaLF\nNamEDuC+o92Ihqjm9/unfbCYllH25fryC1LRMt2FqOCZFGhBj0Owy0Re4Dqr\nW6DloASgGv9tjP4LFw+Z1G/+JhMMPoVIRqlRKaL7HqGax3iC8K9AVbhH7Z5W\ngGpUwYRqsH9zB2cRIK1RxYcBhG4Dm+wiq32rjT9RE3Ufow7ueBxOZUcuyX8e\nNWM8nGAaUYiwVQJdmShz9HmruRBlJZ0jx7qcR+K5dQFj/4gzuLShv3TcJ3Lz\nF5rWPnyctofHPVfw3JBtZzDFubJbnhcRCz4gTl6qlyRf4V11LYmwQM5zDIYw\n9rLkyUvCxi64soIM7ye3LGvrog6y9CFKSrfjbELd4/i0TOQIyAxhDM3CP5wg\n7lJdT6SqmoJq1RWxdEXyTf5oumvNR9YkiruZucA55uaGNYrqx1LHv87qlGjM\nXzw/gyVVownNUTo8WtPn16QQQa2EOxYshQltDzef9PwK8Hvhxh7Hr2Q03IDn\nOyoyQwgz29DJnzoDHborFZ8tAwPAWpfAtqrApH4z6uynUx+PEjcHlcLYaelw\nvi7B\r\n=xA9q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.14.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.5.2","@opentelemetry/base":"^0.5.2","@opentelemetry/core":"^0.5.2","@opentelemetry/resources":"^0.5.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^14.1.1","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.5.2_1585332251087_0.7906271329589025","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"@opentelemetry/metrics","version":"0.6.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.6.0","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"450327e9c9f8521cf181f153c1680b4adf3405ab","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.6.0.tgz","fileCount":35,"integrity":"sha512-tEcjWBvB3sc0GxhgDFqaMnMzKTYwseLqvYjl8F/OP6YEQHNS//VzSpXR9rldfzw+GFA4urAo7F1cu25X5CRStg==","signatures":[{"sig":"MEUCIQDaZcSnvvsFwjOyqard8CkIDb85lbhT00DECmYPWTDwYAIgVo66NftK8v4l0RbDk8uAClQm13YCES3bwjYNuHQStfY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehiEPCRA9TVsSAnZWagAAfFgQAJ6nD7Vdlxjh61j4cdC+\nOrASNuWlZFRWJf1/ULZF7otSN4zJcNplB619S4PlEMeI4L+Mb1jCWmGCv1WN\nvTXza6lawnRRRsfet+brhd8ljJuunfjNNVYHd3qBSOvtkOb1PbWJxihvXxNh\ne6r8lcYQW2cy6scu/Ap/6rSP2CoLbrrxy/hgJh7S05+u/ULPbFKPQA1PJfWp\n1Jv4XmBsdv4zMzc3lbDL6eOIoYNkS+Ca2PU8LmCXWRZLLxJM06NZP3w1YPmS\nBgwP89m2XflMjToiNL6whMHiGqH9jy0pGFQ6NtFNdeT79sb1VssM4+CDt67u\nIVWgNYRRAWCgudSZ0w8zAhqPAj6pi1JWHntNYAQIC3BaAzDo+ROQdvr4dSCK\nbv46zXrK4/YUHDfxFACErsqQiFHnbA7REDWgO3QHjj5Dk/rS0o1pb4BN59qW\nUO6qvriUu3xMyHc+GetUjbF1L7rMUl7ZCdEHZ/azQ/ZlTbbDMlGv2YaXi51c\nMmDlu8ZDJflVppYi2qB4pwW92LduJYsO+PUsSLkXKrDWBZYn0KA4FBwI5C1C\n1JeB61XSTzhu8zetTwgc108wiGT0pG7KgI1PRLTztD2uq8yqG1eW0jaGrhPV\nTyAuHxq5cC/nRlbTCoQ48xAdBpSZg8p05IPDzdOG06jpEnaCswpjNx/H0CE5\nznwe\r\n=sCmY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/api":"^0.6.0","@opentelemetry/base":"^0.6.0","@opentelemetry/core":"^0.6.0","@opentelemetry/resources":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^15.0.0","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^5.2.7","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.6.0_1585848590739_0.05186546436696604","host":"s3://npm-registry-packages"}},"0.6.1":{"name":"@opentelemetry/metrics","version":"0.6.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.6.1","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"57457462dd6fbfb4fdd1128c44012368e5c7b68f","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.6.1.tgz","fileCount":33,"integrity":"sha512-gxouFHXa9qtxR8eJEWa22mKjY1HMhn8gJr749xQpbANwDFYeDiCKK+apH26oe+I28eGF3S2KzbD9/FPgGRXhjw==","signatures":[{"sig":"MEQCIA7N/QplxIVHzKVJAPi4hm8ZuLtEDdi1gfR2J7rgvkJqAiA/1jGKfqaJIyXlkY+ufjOLhf92NNOrWGoY09T05jSIQQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejhn7CRA9TVsSAnZWagAAet8P/Rgsw+lA/p56E7U06Xbf\n5DYlYd6RpH6xA8LIVPFktze9O9jqL3gxafTkaoSdvYDJBcyUwALUa8jqse40\nxQ+h12lvowRczBHiFmqK4/9HAyOQt4TJB+n4oRLaKk5ig+Q3YyZIxiIdN5W1\nZTK6bU28LyxPjPw3xUby9paD5lMU9Gwa7fqP0MmWk6Spyk6w8LyZrcGOHb8O\nZ/3TMttSJqJ2Dqc31H/4gzT70YUOh1lUD2AT0cKahFDoGgOy05iyht8Us/dQ\nNFBaUe7O9oaeaS8cxqR7VN92RzH4QMz/1v0/ErzppI8qM3Ouv2ugwsVbM88E\n/qwPhMp+fG0IrVzYCgQPY4IHLym5RgqxzCpYMqJCKhb9Kd5ACYMFMM8bs5jt\nG1VWY3aeJZluF5J9JhRwaFV/zT8B9JMRm9dfjzXR2Y93YYyjU+5Oq2EUtJVY\nGVmN/WvmmyezdrwaKiWNlQvTt6sVeYfZrzYGYlY3r+qKs0wic3VLx5w2gW1F\nDlKV6yFJYzIF1CEwCfLEstWkpwq3psRWYriNwL7lGXQWC26KGyOA7z4DxL3m\nnCAXt5SUlBfjy9+zcrOzBk48AtIfYY5l9tLyHfCARCqCJA+tOrd9XVvjB8En\nQIs7SkCXDvNCU84FMaSHLXQlxF/HItTkF960OWHhmaoH1YHsfiT1aQDe44RT\nr7ou\r\n=RbTM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.14.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.6.1","@opentelemetry/base":"^0.6.1","@opentelemetry/core":"^0.6.1","@opentelemetry/resources":"^0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^15.0.0","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^7.0.0","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.6.1_1586371066916_0.6038242809153715","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"@opentelemetry/metrics","version":"0.7.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.7.0","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"8b234760adc7d220779ff70bf266b1437175e527","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.7.0.tgz","fileCount":45,"integrity":"sha512-LUWy5lAjF2pqfTnbE8A0/yH0394L3ACUj055J8VtseMEgpttlZW7GRtNLQOF/OgIBVadGihkoomLikt5bdVpDA==","signatures":[{"sig":"MEYCIQCQcANFUhWsxQ3TeleTTsuFEmLEU9j2TERuPc6KYRYz9wIhALogE7NL5TfVar8VwqUXXWfqFihWhWfditFVB3DSGW57","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90343,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoyy5CRA9TVsSAnZWagAAou0P/iwlWyiR0H03JR4WfaVM\n4jLOQxxayegrmoUznoD/cJbfYXq6oPUf7wsKy2sprQW3zk2F6ZODaZfK8h38\nn3KagaTH/f/liK9SStdDsjpxni31ZV4mkyjrC0+bNOvOepZI8570lV0f2DqQ\nEWvzJ8ZvR0Y6qfnegmRSXBGhhXkZtaN3Hl4xJQRk97cUulGCjcmgQsEYDNNA\nx8wWJuIVz8aPlhWWQW2ST6LC5Mlx/AoLb9Tfw3hFbVqdMQr04Cevo/wB9lAE\nGgWmm8levQ8Rp93Sa5rjJ2sOsrwzxvShm2pcfl3qh8B0ch4vaUuxCgDbIxQ8\n8zEOXjf+G6WwpjUPh64S5YhNg5RwjzNfKjf9sYuclT/80YOk6Ar48QNKzi1w\nK7gHj73v+9M+wNjdU6K4M4DLz5utJMTOFiP2jE3DpRJpRbQM5kAWaM2RTNNE\nfJkpZcu+zZOu4bG0WBH1TgGCfhvgrZjh+nDLXCglJJpf0JqFj+CKN3tHSz67\nIGdoVBLAW/pVqw1VddU3sD1tlllPvzCMjc/dDZskgFo/4/4oZlPDFdBmwIT8\nI/D4Ke5QKkUihw9pHbg1FOK9TDE7M5WIfoxTF0F7Nj3LIG4ACtlSaTEbYVqN\nTMzk2LXaOanNpru2ytkH+P96UftIxnsORbSpoFgiRqeB5Y2qUf0n7i62njTG\nsmWh\r\n=QVm5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/api":"^0.7.0","@opentelemetry/base":"^0.7.0","@opentelemetry/core":"^0.7.0","@opentelemetry/resources":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^15.0.0","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^7.0.0","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.7.0_1587752120967_0.7542481128813117","host":"s3://npm-registry-packages"}},"0.8.0":{"name":"@opentelemetry/metrics","version":"0.8.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.8.0","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"42183a24888a140ace956ba0a9a6916d5821b7f1","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.8.0.tgz","fileCount":45,"integrity":"sha512-PtLtPK75kJhDA3/0YlqD8z96Hs9qExHOmuCJUOJPfGUd51u8XQ9zUEFMHCpNafQFjBZ/p7d32WvZqyMgnc1/Lg==","signatures":[{"sig":"MEUCIB9IuEbCzolXV3v0F8qA/McVIKGk8fR48YQv3fF/qwrQAiEA4rvmLwHs0Pci2DZGPK/gvqqrD1jL44Vz6BRjai5iPrY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeutDPCRA9TVsSAnZWagAAjnQP/jEWSZM7nhjhnCa6QR/a\nkujvK7klc/oU8zc9F5EvSZNO4vybXvsJkfe6tRqUG6jFnulOs6p5P0kRpbKn\n7sztBIhOF6lumwrUCl1RNGNSdfHKPO+XV/Y0/mhJzIIUOEuo92n5ymkFQoKf\nPKjnPx02bDhZxp8EBg4ACd01+0nEdyZ7Pc+4S5c6EBjqYB/ofKpySWnbcMuA\nnnf9QeYxbBhW1yjdK/iXj2gGUR3Ufm1ZdSIIXU0IjuVBLh0KB3L2m1SNfQea\nAucl7UrTmmf/hhMp9veRFX7cPEduh0CnMfliVdt3S72FKxhL9PAUtQr5DLIY\n15Tm5Hq7HHLa9Aw9YnY5nC5cYht9qzCVzzV32ezUJ35Q+BWsKvsvrBmv6EI+\n80MLTo6Nii8owDMvhEPYO/zr4kH7wYCcuGK4qrQA0PNUX/Iz6VigZ2qSgwKy\nBKhADSeNsw30DCaDCVxNiSVY1H8sIOqG3rps8Ylrv517tewpUChDbKoaNoVy\nUDeGD1igXkNnRPt++/JoKr+FGJjTCKEKdZuGLdTx1ButMVBR1MTqLHFGZPqN\nyuk6Lm2ScdrHWrToaZDycKFMnl2R1hLfaz5dVRcf3JQZKjnJVLt27EiqcKkK\n5kDGJm7u5Bhf690dZSAtCG8hRlLtw+MfU8eKFK76JpNw4uc2vZ84mgzly1TG\novmr\r\n=j2L4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/api":"^0.8.0","@opentelemetry/core":"^0.8.0","@opentelemetry/resources":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^15.0.0","mocha":"^6.2.0","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^6.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^7.0.0","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.8.0_1589301455336_0.14361292648179913","host":"s3://npm-registry-packages"}},"0.8.1":{"name":"@opentelemetry/metrics","version":"0.8.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.8.1","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"914a1bb4918cf20b6c49bae758efdf505340af64","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.8.1.tgz","fileCount":43,"integrity":"sha512-XDq3LJGXgn/d9uPYV7XFvtI9rMecKuaR8PIgVj2SrNiDCmTvpT18uFDkdV8yX1ykFkxnSC8BG5623bVPtBRwIQ==","signatures":[{"sig":"MEUCICCadcuUUs7gVEyQj0ggH78IE2TO+suVnfhQmc7sZvTdAiEAz2O09fgz3o5tNjv1nA1SjThI+qW0j+fhA0kvDEibFzY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":87035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewuQNCRA9TVsSAnZWagAA98AP/10QJLUxEdWLH/7HAFfB\n8ZlYOJbSz3lA1l9dREh6qVGNZo6GyWgwcWDd+i0rpDnEomrhv0j6RuW3ZYQx\nRYHnoUXumfCukdhQ7SMSHkgLEKHUrr8RMJ94xymE70EuuOhBcgZ3UlgZOHD6\nq7ZXuIbAso3LA5tTOalUdeTtKftvkk+YlsJ35sMV2CTjsUaqV4gQC8t3CBeS\nAADeb2WIMtBQtyQqsYSVptyE86XmZpznGBU2WGkd1qg7V35+o9WKJeEQf7c6\naZTcBxCN8S8WVzbZVgXdZfrMtwPWXj/AXox9g5Uivtq33X8yKLaZk6hC7LRh\nFj3hKnzL7DVE0+SkuN+iG2aNT+JTJD3QJLG3aaYJHTDaD+01eLEezTOYNXhj\n5oV9aCq0QC1QR8jqHupT2qEqXFQRQdaKncLOjPXRyzFA1r9mylu7RrVeR5se\nn6V2hSZBIQOdHLlhaJ0zxWFsSGLDPNxdeTtQ1HRxC+Q7GAKn9nzleR2lqH5O\nKVOv7J/gUgBHmY2jny74uI6ZQq8firUtgz6Z3EZ3oTrdBxnppICYe607Nh9m\nx9+L4vl+Etq9trmC2iRYSM64hOLdY01ODa+U0DCF3WN9aSGXff2nQirnptxY\njDQWZZpMwb2qxwaaM/Tr254pXMjhI+SsD1kpcvtf3Utf+mXUsd3qEe3REcpC\nTzFV\r\n=cw6c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"gts check","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"gts fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.14.4","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.8.1","@opentelemetry/core":"^0.8.1","@opentelemetry/resources":"^0.8.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^1.1.0","nyc":"^15.0.0","mocha":"^7.1.2","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^7.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^7.0.0","@types/sinon":"^7.0.13","tslint-microsoft-contrib":"^6.2.0","tslint-consistent-codestyle":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.8.1_1589830668682_0.9222930116397363","host":"s3://npm-registry-packages"}},"0.8.2":{"name":"@opentelemetry/metrics","version":"0.8.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.8.2","maintainers":[{"name":"bg451","email":"brandon.gonzalez.451@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dkhan","email":"daniel@khan.io"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"79116d8b52b75ba6d1a414d52464283e3e323640","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.8.2.tgz","fileCount":43,"integrity":"sha512-hd/eBUhAP/OgpGUxC3hNFmiNC7OYNMKk2mCtt6W7LlpANHA3a6DTdfBH7otQTk94TMhfHV1L9dkD02fEKrgzNg==","signatures":[{"sig":"MEUCIG6ZlPLXN69v4MjiW48mricqpc4QJMK65NnP3EKAknufAiEAhuhRdoSzbcPSPb1AA3sGw0rOeTVxuXCLcBrqd6oVlKs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJextbDCRA9TVsSAnZWagAALcIQAJDgu7PbGGokpmSedECf\nZlU+jyjO5FjASs91qX16OP612nFjKPZTckvKgp+T68fUxAvjCJVwJfZiZizP\nBf9Bi1J8scp/c4A+1vkEQ2PZSO/IKHnChwnH9YpzWhJPtRpYMpRvOWIfVMbJ\n2cNpPV0aifnbFNuo0/gReoofy6gvlxB67G3Wy63ngXyAFPt6Zy1a+tk8su0p\ncg7ye3EgyK0JIIT8BHFYfPRUL4jD8k/dgqNV/vF0DYUZtM1bIMCrVdberlUs\nNWeD2rKDJirF5763HDhoFrytVxJlLDimg0d9izW4v8ovxIW47Q5hlWFYTD+Y\nxJLKqiAnV7ef14u9NN35D/fDba51QLOUpDPBUEJ3KEWj2ZBif1cU5pauFGZa\nORabo9u6SAypo5eG1ZHX3OcY3db6tgUJu1JtAW1gq7W0dq8MdC5rmLkYjgsQ\nAiK35Aa2os72b6nLO+RsyR8vi1dgcSTO8+c2DBz7RR4H302QGKLTygcdC3vc\nKkozM9qxW1wYBdzQacn4SE4D59Uxm2gAe+hM/5GV8mbXHwuK+SQhqvFgqneu\ndeR9RHGopt+a3K3a8nIZtl6GGA4UiJqQ0g4MM22q8/pOH3ntJTpxZfZ7SIZA\nWocS6l8260pOwjsQIt2B8Cv3ZOyL67s1Yk4Z+oHBm6avQr5dgJY9QNHd6/Wa\n0D99\r\n=Xssl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.14.4","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.8.2","@opentelemetry/core":"^0.8.2","@opentelemetry/resources":"^0.8.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^2.0.0","nyc":"^15.0.0","mocha":"^7.1.2","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^7.0.0","typescript":"3.7.2","@types/node":"^12.6.9","@types/mocha":"^7.0.0","@types/sinon":"^7.0.13"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.8.2_1590089411381_0.36341478768960034","host":"s3://npm-registry-packages"}},"0.8.3":{"name":"@opentelemetry/metrics","version":"0.8.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.8.3","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"136cc1e4592fd397363aaafe4aa9d6216468af96","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.8.3.tgz","fileCount":43,"integrity":"sha512-5T1Ux1mFEgRiU4uzSiih+NFWqOgYuSZCvyLsL5OTXM8nAzCxuyeHwvCotYt2v5zdgobmc/gtiUrM6608ImkIPQ==","signatures":[{"sig":"MEYCIQCRTVzdoREYVkfbcD+mT7eM+nzNGeBk5l0aPZ8Bi4ASZAIhAIopM7JYzq5eQlBN6LM6e0apBR5L+pU5bX6452c27V3V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86362,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0BziCRA9TVsSAnZWagAAi48P/2QOxGSk4yqzFB2G0QIl\n2Bh0IoZAO4vWUK5aTYEcD+44ptoqa0NVG1CGQ1GHn2Jv00vuXbly2jT7Kigq\nv4d2clEN3LsY1r9Z1axJPjfEHMvUKpY71NrzZ5VZCQ9U5Wq1ffqc6PPFWytI\nr5CWhGEepxQGhBqPrVproyOHHj/rj6CccbyeCXnUImxGJa2AIit6dMoNzuqV\n7QlihGXhuIGe7YREj1K/HTDLSJ8iM3joWPTyluTlcp8O9Y7Vb90orS05tZxd\n+4klEWlUEVjQM1E4RQWfdY8d9enRivx3scfDCYyL+TEQvlEy+2iBpU79NW4b\nTWDDCUlkLDUClNcyzoHuJ+ea2hoPq8UV/zq/iOlYNZcwESn7A+4JinE/2ukA\n0xsUKYNbXntPvEr8RyFc6S5/gZOmgPFQ6y5gtbB4S4JHgwSpii+qGwXg7xw8\nPwdIfiFZ+Sc4Lmzv/RqAc3duaGvVWYGwrV9IsdZCnwhB+MXMUeMZ3hZqMFpS\njrQoy2ci29IXN3O6oCmKiIiyuh0R2IPjI+5X2BtJkJMuCpclPb9QHFVmOef4\nz4rokHSBelx8XYwRRtXIQNAaskbecMAmnnU7fJqCeT3ztKv4CzS0N2QQNkef\nOEoRYTxeiZOM+7yqnsuFQmjyo+8Le0tXs8eHaZA6Y5wew+d3p44M6p/7YP+r\nM7al\r\n=MICg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.14.4","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.8.3","@opentelemetry/core":"^0.8.3","@opentelemetry/resources":"^0.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^2.0.0","nyc":"^15.0.0","mocha":"^7.1.2","sinon":"^7.5.0","rimraf":"^3.0.0","codecov":"^3.6.1","ts-node":"^8.6.2","ts-mocha":"^7.0.0","typescript":"3.7.2","@types/node":"^14.0.5","@types/mocha":"^7.0.0","@types/sinon":"^7.0.13"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.8.3_1590697186051_0.7988552538408409","host":"s3://npm-registry-packages"}},"0.9.0":{"name":"@opentelemetry/metrics","version":"0.9.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.9.0","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"b5c4b75ac0b12330540128a2c0f51e223e638dfb","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.9.0.tgz","fileCount":47,"integrity":"sha512-Gz7a8DCZ/UyDspdb2W/a1yQD0hT7uzjqjKpMgX0dTze/B9PUDdmKGjy1TOOUloQ4zw1YTtcwxL1CX3pVC/dzNA==","signatures":[{"sig":"MEQCIGahhG8P96GGQOhf3vYWgruRoY0A5mBiVHoEe6tDYmp2AiAD1O4byiVS2Hn/qqxaSZ57UPpzDaH4864PehQYew2SFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":84800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe69t9CRA9TVsSAnZWagAAVzEP/igIpPV2Yh6t2zlDv51g\n+6z0BBHwuQCo6tFalKU/K9bGFLzVY1JR7rWBP0m1omSZnESSaWr1lBaq98CN\nHNl8dFrY5pqx2j2x0+IeLsJS8kSpWPh9ovXYwjO0nbZms5esivW4isvdXthv\nVUj50+PH54qWhd4KNFiS0QgCSNI1LkCN0+VuIP3E/YI62ZiYJRe4czcINIjb\nMcvjpJJgVac1xyPBYv99WQrMiM9XsnPafQB42enT7XNtQBtBYz+NFz76MEp7\n0RiIlgqIxrdoxiXTlN6o0FEdFwPesQtzwHQ9n8neZq92hNCWejkHyH5Bwvdv\nvkrnSpt1EO1tAsaEy7/WLn1hBG6wKh9RszvStsRgvDxzd9BO+xIDbwJKP3AV\nO83U80Gp5q2kymO8mAqHazzlleWfHOxsPDjVxq3Hnz4b0BlVWRelzOgfFD5N\n680u1fRlkTSkIRJmEEQPwTb7YVvxdrRUuYEmt9kkTQNVNNlnFA71vGsCjdf4\n75VY6S3lIcoymoAVf23/tXg7ZJE3RDhi2zCSVMFIWuvNZ2n1gN4doWCJC483\ndtrlslLa/JrptRHYJ5knvz46IPFDgr0WPsIcoeX9i1cZrARF1G1hK5KEtDkW\nVlO5t0JbAwZzk00RktaIF2Rc266pQw3ALevQ7DpZ44ojUdH9eNWpy6lsdlC4\nm1bs\r\n=x3Vq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"mayurkale22","email":"mayurkale22@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"6.4.1","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"10.15.1","dependencies":{"@opentelemetry/api":"^0.9.0","@opentelemetry/core":"^0.9.0","@opentelemetry/resources":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.2","rimraf":"3.0.2","codecov":"3.7.0","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.5","@types/node":"14.0.13","@types/mocha":"7.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.9.0_1592515453064_0.8271550824268568","host":"s3://npm-registry-packages"}},"0.10.0":{"name":"@opentelemetry/metrics","version":"0.10.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.0","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"db74b884a52a588136814afcb5302071a8865dc1","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.0.tgz","fileCount":87,"integrity":"sha512-vxU7ZpKyXouyIdg4KqFxj6PG8GHfaxDvvMnVCjusVn3XGMAiSlFakaKpfOJ4jnoHFsc7QV8rRES8maECflNbaQ==","signatures":[{"sig":"MEQCIHBpKVNv1PayWrmGlLxSFOPn8GGtLfoAWaVwCCP7U369AiBFkMUAeSHaxCmf0PAAKVoCf+0NBA6YyS6t+FQUl3y9XA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":131792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfH0AvCRA9TVsSAnZWagAA3zgP/3Tz0JqiUO/7kZJOTn5W\nKyUWfQ3W+hB633yufXeW3pR9blGolhwaS/gb6HRkPkf0f19494F+OfBAITZD\nLWP5L+ceZ18InYx2WGS/DrfEIMJD1xHrK0/f7oZD4a59lSgnX1bTRxzEr3hX\nV2M08qxO1pRsk5o3zkZ4Xv2AiGEHVt8VOT6l+58UyuGqXqnyi1DY4KzoT4o6\nZqVPVmf4fNPp3QsVENfencR0sVOBRVvv7QaWc25bz1sWA/xvNDwSxw+iUIbQ\naHXKSiruN3OSF8GLahT6qMoa1+0R8+J9cgmiV/zifiLtax4C+213/nfnSOzD\njLqPCI4mSn3kl+LHnnmR8Vpan6kC5gRt4ouump7MG55G1mwoQVxrDRvjdN3G\nY5nn/1A2xf+Jei0BOwBYiMF0WSFO9uae5E/hz54TouuU97HOb44pIVn0E93e\n0SN9bkVU6/JVzWdxnMsljo5Jf8rGWSZFqd7RY19I1IsUcRovqVhwoZ299rv7\nKA/syF94/zBPsJhKTVS/qaWXPhAPJvOJ3ylZH/DmjT0D/N0fMQWqhYEeix6l\nLYt7sG+rg8idYjmhKMoGI3BDgBlhMwrH83sqaiC6WtjEBZDHpIrY+twxC5DG\nGMxtoc53pfe9SpJY/S040pqufleY+Vq7vPFMM6KTiX2E5uwvcoT+4Wn3ypsj\nLeai\r\n=A6Y0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"ab62a4d69b99b3a8c9c26100c04f3226af7859df","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.14.1+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.10.0","@opentelemetry/core":"^0.10.0","@opentelemetry/resources":"^0.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.2","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.25","@types/mocha":"8.0.0","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.0_1595883567114_0.931830024074896","host":"s3://npm-registry-packages"}},"0.10.1":{"name":"@opentelemetry/metrics","version":"0.10.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.1","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3261b732cfdaacf6f7959b8c167007c13d1522a6","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.1.tgz","fileCount":87,"integrity":"sha512-MKAWkgbv7JU/6QrNmnbQULllx9S3yCMglx3Vw93A/FTNzJkIV4U4gy3pOdkrtycsfMEYbFpVs+15iUuPuO4qWQ==","signatures":[{"sig":"MEQCIGvAytBOpCGSgZba3TaEGqH/jbx+WPv6E7dXZutGpiDHAiA+oRGyvVPZj56rUdVPI5fKYQSI9tMzFN0xcoubIKqkcg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":131792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIEB3CRA9TVsSAnZWagAAYOoP/i8NRqW1DFudb+sM0Hp1\nPoTrkZIl5/mqXMWwYNUe7yZx5RTGxxAGYX6VMQEimaGYreUTJv81fjtyNvYA\nnLhr1DNu+gUnx/vYFSY5dLHkyB8I5nJxzJsv81fTZC5vqG+FxuKrdP5lIeTJ\nRMQfilQ+89r9anPqTPQz5fTZ5G1W7EH9rQk2olYAni5ztHKHWzNLDS+w053O\nDuQn0nnE35C0tZeYJLBUeAFUgh7JwaWpkA875TQ4PkaxkvxFNMlXlABKED+G\nQfRB+tDnEP32qkQAJnfbGxRfU84tYu51/ouflFczXY540jK5b0lqLvVEeO9P\npEzmPI5k9F8sa2T84xK+VqNHmRd/xlqnfnJ3gldGqRHN0xuKppgCsUi9NSL0\nR3X7XZKGL1nH1qj9JGcT6p3E+reEOsx0MJW/GL1FZjYaez4IqkojnjD6+tfc\n4wv+aidFJGhBeco2xCvMU2zklK2hKALKQ9vuWpWG6nflDccg1a9VdfwpB7ew\n5G3VG1TLBVGHaYTAdCrDWAUVlhdlDdIgj3Zu626RJHuJpFZHwmsqioybVPdr\nhBxaFAebmeb5nrhsjWkqX97fiGnLIoRM4fC+YFRGv78i+gMmsJ6i6XY2DnKw\nqanFCceazfcFktLGEgAR9jLEo/tNxDHI5B722FwMbVXaHKSuv4a4H38Xa3gb\n01ZB\r\n=MEBv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"03981e4299282d0611d1255ab0076368d5830753","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.14.1+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.10.1","@opentelemetry/core":"^0.10.1","@opentelemetry/resources":"^0.10.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.2","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.25","@types/mocha":"8.0.0","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.1_1595949174693_0.23516933185064248","host":"s3://npm-registry-packages"}},"0.10.2":{"name":"@opentelemetry/metrics","version":"0.10.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.2","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"9bf3fe34fcfec6f7e815d2a48bae2029b55c9989","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.2.tgz","fileCount":87,"integrity":"sha512-NmjuqHzanC5uS99gxFKtzX/xKOzDHY1mTzo7FtVM00r/+KK+wng3bf39HMRbSnemi2HRW3ZACPYs32sZzfhjmQ==","signatures":[{"sig":"MEQCIDdzbjvFnQBa7Awuj5vvhJV7g/9YUOO8Hm6XMmzjN67iAiBSBoxtv57XGQKXKESI11EIy5EbOGXSuMSHQPWoQ6d1EQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":131792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKJz6CRA9TVsSAnZWagAAODgP/AjBRiGKeqf9nRu5EuOl\n95vVdruGXVLb8Gkz3SFz7D2ujgFSbMwMzcGMWZ9FS3B2eyVXigvlG/QuWQpo\nc9fGiuyj+Tq6hWDZbT2oYrTGcr4wnHdtYqMP8/LKAOx3MhAk43rRuVbIzTN2\nzrbnSO1jkisPI+dWzTlpuizdrvXUGzOEI960uMsCG8uAVKM3WgBseFbevhHv\n/3R1ZDYHa0ns3h3yWT0C3fdsrp1SEHF6qDfWQIgSXlqxZ2T1YpNluU/GvnEg\n2lle0a7fdWT7aFVRg7S/VvIRzNQtlheDly/fJEq36nU6wO1FAkijrfwbXNCg\nXJgiYOZb7QbTbCMTh3IainQsiExmY+I4sN2muArhoq9FewevLHpJAGfrwm/C\nJZMyow/5BBtJC3NKSIU4NU+aWEaOFkLJy9uj99WbKlMx8UgsmGPSD2Pg8a57\nkpsxPkcnO+e7TEo/dcIqAdtw2NYwW2KsGR0xOqPIO55R7FN5pXCQnpLUaAvn\nMv4ivLA+t0bnY+o3QSHEqPSnIpIfJAR6g1RcMwq1y1FQxIwgU9BBT3i9DkIN\ncJWSDGpjboGy2RaRZdFckNi65nSrUFofXeypHKKY56ypW6Rn1zioL9lBoCPh\nMUgckD1UUbZGHuiYLDtMjr5nxowwN/d3Oq8PXjopJVbH3hMFs8/EzCYw+swp\ntyWg\r\n=gtyd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"b247e69034a7888a842fe75e0a5ff06f8bea44a8","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.14.1+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.14.1","dependencies":{"@opentelemetry/api":"^0.10.2","@opentelemetry/core":"^0.10.2","@opentelemetry/resources":"^0.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.2","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.0","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.2_1596497146018_0.0996643282084606","host":"s3://npm-registry-packages"}},"0.10.3-canary.0":{"name":"@opentelemetry/metrics","version":"0.10.3-canary.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.3-canary.0","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"cb425f29256e92a431a8160f786c908f9296c79b","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.3-canary.0.tgz","fileCount":87,"integrity":"sha512-MEYYP3xFAkBePmOd1qji+tK89df3Ik2MmuOrmGjnzItUAgARCzo7/gSCDy3kObIn2Ya9O6qwW6A5RAyno+KRiw==","signatures":[{"sig":"MEYCIQCg2SxdCEjG5G8LqTclNg7cPx3YHWg1iZBbEjJh8PQMXAIhAI8SxyIGQfVExo2eYhzkrFiEsSSuASJCKpQfc7KCqw6/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":134936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLYWkCRA9TVsSAnZWagAArpsP/RR2eBKPZORu8wpV2Nbq\nFGvXwepGQLzUr7i78yQFAa1cwsgO/3PbIK11UcMLrKMB/H60OmPCuZuI7dlh\nd39shLQHVqJCqvOSKoIqYFN6LELKThp854DujXb1SDf4d/ZizzoEloq/K9hk\nvWOwAiW1TPzk8z4+hE/1HgolKQDBgwZjH/Z3ddFJQtM6pj9xQspMAw54VJJ9\nsVZoilC7msMsa/Yq9AkPZOfIFHbHB8yRB5m7YScMPP8Eas9kloIvO4M1aTYS\nEDprcNZMAhgF+qJgC6LmFWvZHT03SZQRrYZjAYcps54+eKiifuKlZKXHAGkF\nLgTyq1NXSrfEfbiwPZySYWvHf8IqmIZzH5nOL9q4vDSu/+wPdO9Nr9+jl3JB\neHOvOVdfwUZLZUkxXVTnrfiizgCU+hh80Hq9Q30cVhn2S+Io7xCctL43XOOO\nuJQvSo4pkcXBU1V6N7O6q/3xmqa2rKCItIdT9h0VDzemC7LAj+HqpaIuwPAX\n7jpBuJmqi0KIqfq16pYIGaIcKCPvTiQfJjZGBF7H/eoi6t68XQcnmIzNevgc\nquSGnl8Z1YBrk5LrJh+ecE0eFGx0NqAdxCciMToxr3ia39WQdep2mI8Emhj6\nmg6phqHSOUYtw/oFGvb8Z4HDySI49kF6Ld31wJ2LGmspgVtnOZ13QjPKZrXT\nNpOc\r\n=SiDz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"f4f2f84bc087389b3206a2e17837b7b0b95fb2f2","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.7.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.7.0","dependencies":{"@opentelemetry/api":"^0.10.3-canary.0+f4f2f84","@opentelemetry/core":"^0.10.3-canary.0+f4f2f84","@opentelemetry/resources":"^0.10.3-canary.0+f4f2f84"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.2","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.0","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.3-canary.0_1596818851976_0.4694031953405273","host":"s3://npm-registry-packages"}},"0.10.3-alpha.28":{"name":"@opentelemetry/metrics","version":"0.10.3-alpha.28","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.3-alpha.28","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"fad28df92fe22dba6d0e600830768e1753ce5c11","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.3-alpha.28.tgz","fileCount":87,"integrity":"sha512-xnEhFk+BbXOsaLCENGJ9fa+5ld1+2gSib3jjXOgZDz0sXA/5P3LnsBA+K/jiOrAnTwh99cV0JrtddyI9sQZ1Bw==","signatures":[{"sig":"MEUCICn8+SjKFu1yjg5qoXtH/G/e9/rXR3ggSfGsZbSZKIplAiEA6QwL71jHpMlOvb4kurKHvGGpfVyks71b85F1YALrQwA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137270,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPT9aCRA9TVsSAnZWagAAYDEP/2g+DSd2isDuW0bU/myW\nfv957UOxfraeESgL+stlKHWH3V5WYEUc+raGnqcHOpgNwutxfG6pwpIOPJ8g\nz1LtYFHMHgZeRSgEZUSUZxGjQJci0wLN2h825cpDeFvbI58Ab701Y6LLNSnv\nyN7UiuhCYKiuZV72SANj+IBybdwSOoZSQxASUlLygV8/T3Rb2AD/FfvQ6NcD\nwxdtsulkvuMVUl+G8KArvkQn1xR8FMXWrURQaAMalt2cuPX1R/xzveWSmb7d\n/vJfxTwp96xXeB7Dr8GG/E+hSFW+vOUtfynyScKpg/dKSQXWSHTGow6MLTBG\nrwDTlzJ1XoptcoXDryI0zuRKfemgSe9c1QxtrYC/NQZUOnKpu8WZjvLOipHS\nvyFaYxuuSHKIImkHoDt2e6FoQ6ADU5IEUxDlkIMynA59cMlJA/8awjefzSQr\n77hfgkyQuRvUoFjCvsfXSiCeAWMsfiGrS1AvAjzEwY1hVgFatysyCBGtzypU\neDc4sNZx56bkpk5plXkV32pXGrc4AdnMMdrsAU9C2wYL8nzVrNOV7nkaTcdF\n9hibbqnI1kZsq2qr5XMvXpUBjNWF6foFFfr0aYxMB3l2B1VSaUFA0UgwQD/M\nJnD3j6soJGkBKhSkD+TxD3I9R+ozb+Z6xB/o+CCEIgGX/y4Zum8Tf6jvycTb\nPIXC\r\n=P08f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"d68ff0fb7594f6a367cb7a5057cfb2875e8c082f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.7.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.7.0","dependencies":{"@opentelemetry/api":"^0.10.2","@opentelemetry/core":"^0.10.2","@opentelemetry/resources":"^0.10.3-alpha.28+d68ff0f"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.3-alpha.28_1597849434156_0.15999922679680378","host":"s3://npm-registry-packages"}},"0.10.3-alpha.34":{"name":"@opentelemetry/metrics","version":"0.10.3-alpha.34","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.3-alpha.34","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"83ae4c5121f78f15333f7d283f5af530d741e62d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.3-alpha.34.tgz","fileCount":87,"integrity":"sha512-q83Vhc/jHQoJVEFbB6jONwfdv+gD9/3SjO2SezwgSqjuwvkAXyddp1rWf+cz5bp96QvVWSwvfkUp3zGgOWh4Cg==","signatures":[{"sig":"MEUCIQDSh/7hYeEzXJ06QercyiIMa86Zl1Xr9DJZzVsr6wfxwQIgF4YcKXIP7L2QVC00waNLxBCsOPIGgxXyRFyje3TpLQM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfQ+5yCRA9TVsSAnZWagAAk/gP/jxfjPCld7FRkJKc8i+H\nBnGb5odzdRSFMhqCJbWaCPk3gI4txrikQ/gjmWNeaupxYrn6Ftzu0oXANojy\noEsFKOM8OwRyiLjjS8hHhz8IFJXMQCYJo1DbeQ8Fi4xBy3c8ul8Iv60w84KO\nHcxY29a1QQjvYU33iU5X4aAyJajndsO1KlKmOJRj3D+gM3KObOH5WwFrOz77\naOaHGoC/RX6EYs1/uYqHTbiIz3n+k2oTM4d6S5Y3WvXS7OUlwsppvE4jz67H\nOl1hglEHqGYGkFEWB7Gxa6g8duMdSzw5jexzbaPUbolyGZfZjgTyMCVPA9Cu\n+OFgmt9ufOIJtR3XkeAFq5l/NpLS3WLgyfi+OCfTD+usX5UiLU0hcJpzKdv5\nkM/Q5KWKQbzBc6K2jR9+kGqDbCxrpbz6iZQbuBIGudqVpjFtE7xQBS3J3JDJ\nmDSkk/xZYsjyjRiNn4uO/OzyTQS+/+AiVjTrTqLfzQZ2KKqoRfm8jNw2b2Vc\naxJikLSjgkdzuHhciVmM/Yad8/gHCB5vOTfGha3jCI8y0EGtnSP9A3bwgI7s\nT+uDrLJvkCbY8V3S15mdkqIeH5HofobhjO4tiBcxn9O2PhHyTqw1kHlmltHY\nOrHPWsPZxq+h9c7EhoAbzLo7mU3GaYgn5B21ExgliW16Dfeo83PLxZ4c8gx5\n9mv1\r\n=f1uv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"fb06b5bb1142286acf5b326925f3af3353aa9d90","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.10.3-alpha.34+fb06b5b","@opentelemetry/core":"^0.10.3-alpha.34+fb06b5b","@opentelemetry/resources":"^0.10.3-alpha.34+fb06b5b"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.3-alpha.34_1598287474393_0.32345046734205374","host":"s3://npm-registry-packages"}},"0.10.3-alpha.35":{"name":"@opentelemetry/metrics","version":"0.10.3-alpha.35","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.3-alpha.35","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"4223b15e54d39bc9365c00c10647825e8336c031","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.3-alpha.35.tgz","fileCount":87,"integrity":"sha512-WUVz+FMHqIDTNBhdXoCDfIZuCD9RiNG2C3s086MoAP22zBFAiYYp3NpsP8IyjiiJ2AVIJxcQBki7GBLYrR0rxQ==","signatures":[{"sig":"MEUCIQDvZC4q9E4nkMEX3cXJsnnRy5pefygox2XBHuzZeWu8kwIgTyPbMwNJXJ4oSOtTRGIpZOTFg7Kk9X/1EcAP9+nSGeE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfREMICRA9TVsSAnZWagAAriEP/iA5Iu7/kDklZ+vcIqxH\nfhRHBqqHB+2qv6wcKHsfwvglPNOufbbMtwK/YiElax8j4fH+sXtf09eFahMh\n4Q/0BvYOk6FCyxSSdBHkw+IgEfhPcuaTTfiP6A6jI8ysl5vWURxSYCAhjFhH\n2djPHpOpMzzR3dwJjINcYG/jvG+9Bf++2YtW+YTnv2cjmZ+R2pXmxe8VZrKL\nqWQ74UMBW+1J9t5ZXKtZH2aX0agGSeh8kb3FnQaHLYLshNa4XYD9ArUNsJJ2\nQJUrg4cDL//nGeNY2keGnmWDSCdMUBGOw8DhVe0vu5itmBGYPa6RGvnR1f9h\nX+izzdM/l1JsFl9CMfBUyERIhvFG78kcJMfltuiFixkzRIhBGFjnvEkFK9+I\nWuKbjgWpydfDN+adIPSf1m7bTJdktPKmzuqkGrfSrF2H8rF6oeAqYD+r5FH9\n1yQwBHgXymKvwkVqgKA3eS1VfwKklpfrbIAHREJMkNbj7TjZvg1tfR7K3paP\n5dTx60ZXrcGuRIXVcG0s+4S8GS1UbWdHbk/bb9Y4S0rLZ08zcmABtYABf4mD\nTBUAZnqs9sCUyI0q4Z1BxQkHGrGLMbdEKp7LMaAbJcf/mWrGqaH/Rrupn85f\nGM7+8kH5kzn2RbEEyr3vk5F3ZE20fJBpTVaVQThtL//fkudZuEavbpA/N9+l\nYycx\r\n=f00o\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"2ee9f1aaf7b61c4b4ae6b748f0a07f8fc708f07e","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.10.3-alpha.35+2ee9f1a","@opentelemetry/core":"^0.10.3-alpha.35+2ee9f1a","@opentelemetry/resources":"^0.10.3-alpha.35+2ee9f1a"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.3-alpha.35_1598309128237_0.1985611990741487","host":"s3://npm-registry-packages"}},"0.10.3-alpha.40":{"name":"@opentelemetry/metrics","version":"0.10.3-alpha.40","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.3-alpha.40","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"a468d8855f7272a88a535e9f32c7394911cc4ad3","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.3-alpha.40.tgz","fileCount":87,"integrity":"sha512-su1Jzh5AtVPdG63TK28FwnPszNr+N765V0UrtNWbH3L3C96AW//py9II3eu/18hCLwtSghtOVh5kqXSWTGR/8Q==","signatures":[{"sig":"MEUCIQDvYWlFtzc82Xv7NSndirs0NIbnHGIEQYsB8Uv2lFP3VAIgGuBXcjJ2vUERWC0XdhpX0xGL4ELdZd3DfeYhrD4Mylw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR8HcCRA9TVsSAnZWagAAG8YQAIJsVUR9KhULtKuqF6/N\nGZu2swqpALTTIlHXos4NkTj69H1/1lqWVKC+fW9pjIBuEW3KqLJ1IAZBYXUu\nFWIaKUwYJUAjGuG+0gJEGWwpCSN2V3IByBpjuWLDMrlQFnHpXzzf/L4CoqKF\n1z6cPYaToLpEiklmFaZfYoBPwMW+s2IDmalR2LQEEJ829LjIqKFZFsZ/9gs4\n632vH4WB3BNPKSNr92RDIIzKAPr/UuSBruD+W+7zHT5+VNq/4W/GDC1cZ+Gm\npARXrJF2uOY9sULxMueuUJtQkcv2tSmyY6gywRxkGF0TBMnjuxbpl+FKvbd9\nbtwO9NsYsrGbIL5iMf++rsbEElk7rHh1/03mZ43nu1riuWdMw62nljlkoMZI\ndrN7JVSZbgQc9FIRVsJEDKJuArzo2VRDeCjRcHWHR9JBsuqRSRysbMG2gWuf\nVQ/LgGyMbBIjCVqAVAPDlNIPqyMDQtLMQAHTR92HcYKDcluupRlD9yNgWOoo\nRvoZ4RcPH/bjZb7Bd5G3SdyVspO5mgg9hG13bD8mGHMKsxO3ICSEh/+wnTwR\nL0P53Jw3FiR0btlNjGmb9pSIhGsTeykesirtbF0DHejh6ZExMCtzOtbYF0AU\nH5o6jv42DIsAHQThwNemVEedVrUhZf+mD49ba6Dtrgpvrfvc9le0jhcpIQUR\nx5Gj\r\n=jaca\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"2052a245bce0d7a6ddc273cb3657bed5d3d21dc4","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.10.2","@opentelemetry/core":"^0.10.3-alpha.40+2052a24","@opentelemetry/resources":"^0.10.3-alpha.40+2052a24"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.3-alpha.40_1598538204000_0.47992086511715226","host":"s3://npm-registry-packages"}},"0.10.3-alpha.41":{"name":"@opentelemetry/metrics","version":"0.10.3-alpha.41","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.10.3-alpha.41","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"b2debfc299a458c00cced7b912dd6be6afb465a4","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.10.3-alpha.41.tgz","fileCount":87,"integrity":"sha512-y3/c3hYQ6JH1veSxQOeqR/qj9OxhnHuk1w+I0Hp2MFcZ6kuCzw9c0NBlURhoO5qB6SZieoOE1JleS9Vyc1TNWg==","signatures":[{"sig":"MEUCIQCrdBVHkq9PpGq6jxaSbRbyXE22I7AU2SP+wzXYwVxLRgIgecmYq64x+kySpEzqIYlhnXh1reOrMxYVOrJ2PfNLCzI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfR9qOCRA9TVsSAnZWagAAGCEP/05TAJ5a2XI1hdpzKoos\naE8lb3Em2eKrrsSnljcRRhFqIf6HeIUmNBY+I4L2HQBXr5t0bqQD/VxzjpOX\npIVwocv1vEyg0WmB3xsxL3g3pTVloBcM5bcE4GJZxHYker4P4goh44rSomyG\n8j4wVBnQ/3inqYtWK1M2HmrmsVFW3yEU+HB8CERGgMpicGtsk9W3vXZqBRiv\nBCnDUxQo4X72CO5aDf5c/bLFtbPigiuW9ijOaZT+UoKvIt/RSnNtCiswTTzF\nS/iyUadMK9pcHb6WkPxq4bkmVcIHAabyl/tmbEhL7p6jvU9A+cG4MoBr98i0\nSdKHCp47+bJdAOQcAcYwqJ6chWJYUlARhd0jPCJJWzHuU/EqHysk+gPzA9NF\nax0+e1hVuAvYpeGII3dSgInYcTFfnAaIB4GUdSSDXdRP+zmv4kkqM74Ulcbb\nVywQee/D35NJYDq0KTVaoVxOe1aFakTOMcv8W5UaEvt+dnLvTDAvdCJ8zCNj\nI8MwIeo8T0Gnm6JhZiFsTkP+UJM5DiMjR78ZZSDaPehB/BL6O50NltQetPsN\naAzDXEDb4xeKEBtRAgownMSbCSj4McTRHtoyHVBzuYotOJDKmxMyIVjaMAFt\n563gwHxLxy+TYbGPiJxBaXkv6PnblsYlKYa+H18VdwA0nD9jS5sinHjEU3Cz\ntH2a\r\n=G7e8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"5c7753fe6534a34f0f4eaf653d53f8c002ee299d","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.10.3-alpha.41+5c7753f","@opentelemetry/core":"^0.10.3-alpha.41+5c7753f","@opentelemetry/resources":"^0.10.3-alpha.41+5c7753f"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.10.3-alpha.41_1598544525785_0.3633067791592164","host":"s3://npm-registry-packages"}},"0.11.1-alpha.48":{"name":"@opentelemetry/metrics","version":"0.11.1-alpha.48","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.1-alpha.48","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"cb59d1d876b44f69ed86c69b595e319d22e2bf87","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.1-alpha.48.tgz","fileCount":87,"integrity":"sha512-wtt/Y9ymxbOIpyrsdOiMW9XT+qnl2q5CY84Xnzs4B+GQchWKLVlaxNYZOhN/xMVufbo53zGAo96VijBLem2hjw==","signatures":[{"sig":"MEUCIFd1hdLmk2xua0cJ+E2G02Ph2BkDugMmi4QidxWhvkvLAiEA6/JYVyteL/IXmNwJVYyQofB6v99T/GBLFh3ItODNy1c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTp/rCRA9TVsSAnZWagAAlCkP/0p8eHmDv41jff0g6gax\n6JfIgW1TOcRV4Zy0Rglo8xiaSAr19Q2tz551jgc9X52oeIM5izQygBUU0sMk\nIs17/Aht9aLmdR8YQkJPxWv85KjOfoMPKZn/0jKdByqd7AcaxUczP8t7KeC+\n8xfwteWXAqU1oKsHWHWl5gD1YxaumxGWUxJgh4xQM8yne+hvi+3cwMniH7PX\nYIEQ5q7yWs1v2B1AMNmD0YjYvSuS82RYNERfS43ULk/Tex/WgjVIVh7tDO43\ndlumpKdZRUGekUuING7wiGgS2sfmUgFoYQkj0v8pcsTar0bJzGfHo20hKasJ\nfUx/uaTzS4Z/FFWCbOYvm2PgJlAAmTIpSgKxpee44rTn2c8qQCt4ay1ExzBx\nNwdbFaGmXZnbFMyllZ2ir/hDyOSZvY0X6so65F13Pq3Y4r/G8iBV94nPeA6b\nvwGxol55oYkyY3Ml/NVMdxZrO7qZ2FaaxtuXN9J3qiPweO4ahzUo7HWyrNCZ\nrK0lCYQ91C8LVqgSuzsBkqVVywKGx3MTtuCs6d/C3LYUzZsZkV6RkgkIWqFJ\n7ICRfLCuLH2DQmrXKE9wJE6ePR6ryBgNLOPGRByEha1kFTLfpZjSwuOLgGF4\nuuZdwXU29KT4xh8YoTFisbucn597Kjukec+L/Nzi2WOn5cmWFrhbfNaakAfJ\nnoyZ\r\n=Qmno\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"15174c6647ab9863dfc1424412fa60f2fddb3351","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.11.1-alpha.48+15174c6","@opentelemetry/core":"^0.11.1-alpha.48+15174c6","@opentelemetry/resources":"^0.11.1-alpha.48+15174c6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.1-alpha.48_1598988266504_0.40349573463450406","host":"s3://npm-registry-packages"}},"0.11.0":{"name":"@opentelemetry/metrics","version":"0.11.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.0","maintainers":[{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"e4916c3adc49f63b3d2b4d6a8572c995cb1ab863","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.0.tgz","fileCount":87,"integrity":"sha512-OlEG1yVrfxkeQinx0c9/J37RPPnFKh0wRov0t2FHf2n2OnS831xhT9jSsopYlrJ5fe3NY0HuHshDoMpBOJXaGg==","signatures":[{"sig":"MEUCIQCWGKkxhtInWf0WUbzws7YfEMwN34c1MNlLGThkFv39mQIgI1YlJepxKq+BwuUnrLfteuoj7Adr/z8QDjcLUewaLUU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":136639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTqHLCRA9TVsSAnZWagAAhwUP/iJjgp0SRAxG6DcwtPzz\n+FmFzrmm4nKo9IL5OKsBYXsK3sf7q0E2AnMNbi//YiObnCOaT+HmjYyRUqwO\n6tPl/0MiGEyKo5bPwiezFU1ICJOLotzhrycau9AWBgBwmr+qwi3STyEM70e/\nl2VoEtqaggYMK9QZzMtK4Ms4NzNEioiXR8pRCeQchDcb2GOFwdSicJscUXmF\nb8oO8fh5rB8qiy8AgAHGE2XSCMjHjh15rajohe0kj7XVi2j5oOWVaFuDefi5\nTsais0TprAjbqmtbIcL44ud+y70OoyO1sjko+wr8z77QhefdqKtPdlGk4GoU\nyAKqDV4ESypgoPdoDYdzCNwqpqyafMxWKw190+v2UOBSsbTniGR823VRfuXB\nPCLczN+z4etFOmnfJRRpPggkvJJ3aWwEmpfBoeC9gYxPFVIhgG75OJN2LEZT\nLrpYSjInd65jaR9jiXV684/BfISZOVA5woTYbz2Gxne9j0TV3e4fyBFNZzbn\nAXUuf4JPAoixhnNheg8VgDymO6aayOpedD+MseQwYlwYa3kZ4L6Lu9blJcYr\nUMvO+tHzdafCx4sjnJ1XyUn6j9J3n28pjQkNOyrq/KeCgfwVbMBCi8UYmy4u\n+HfcB+8rjuOn/Q2FG4igmzpaTqmz3ovN+uVY5YRiK95zJe6JvoB0th2cqDy0\n1YSd\r\n=Z5RT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"15174c6647ab9863dfc1424412fa60f2fddb3351","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"obecny","email":"bobecny@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.4.0","dependencies":{"@opentelemetry/api":"^0.11.0","@opentelemetry/core":"^0.11.0","@opentelemetry/resources":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.0_1598988747435_0.1574429767353298","host":"s3://npm-registry-packages"}},"0.11.1-alpha.15":{"name":"@opentelemetry/metrics","version":"0.11.1-alpha.15","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.1-alpha.15","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"0c2cfc512e8d97fc7eda0a050a6e66fdccc06dfe","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.1-alpha.15.tgz","fileCount":87,"integrity":"sha512-eAmVenI2s+JUaPeUR8M1z1op+TFINlyYtqXi7KkIt2ZEL/u1GdLjWfot9tptBWOCdmxXoPhYq3z8iG/WN41fjg==","signatures":[{"sig":"MEYCIQCHbylahXgWXcdcVz5j3yNljIg4rGPn2Aey3GwCp46xWgIhAPcsmMdF3e9wSudemtp8rbeG8vrwDlxL9HWj4Oz5TS7y","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":140780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaB5DCRA9TVsSAnZWagAAHhsP/jNgaH52Wk7BaZDYvJ8A\nmtit5y0clLD5pFObxyOyNpauaRoyOcKdu1Nex+P9B0M3NIJCGVpIInq/f7vN\nwhGqWoVfZd8Q0ZbKeCRcOGHX3nxOAeyNGG5zBz/IEG/PN8bu7LDxyLoa5p2+\nPUng1Z2ljwuDN1l0XTa75/2gXwkRgt6LTl2RXVLR/Hw7HgFaDYHVi2MNS8eS\no5tzFr3DBFRjbt5Mr4/FjA0BJjbHSnn8shR8NDMvo/GgcFnRbVK0/2LGCiSE\n3hKpfjPMcQ+2kSq4jITYwfOD4yc1awk7HIAdNwtn/vZ9RpZw38udOgX8OybU\nZl+OcaL4JvoOIXs+bNSZZ+wc7VkgIRx0sUS0FJDiCFdOA7my6quIv3IvclIZ\nPQBxbWGJn6lRaPO2I/+zyXHXdRS6ZxzDaaEmOqPRDr0Mej9E13eOLnOk6qyt\nN0vSaB2gUVhDKu4JBo0ujZRT/PJJSWsiNlCzkFuy75tPZ34afpyZFaUzSvZn\nA5iw31dZQJlcqDlwEFhRJJCOMMR8m5OvFCUAYMUC4jACEE/IjGtZab4I0zW4\nkxjLGVV+bMkctZ64Fg5vybY09Zr3v4wRmCl/rOsTpZVmA5Xo3PMWzcOc6toj\na2KxEQJ0iDsB7h/zuBV2oE/Oyg//Rjgxlq2NaZb1uERZAiKk8bosYQfwYLD7\nVwCd\r\n=mivG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"e170039015e8a1a7419bb835a00659b2a734b8a6","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.10.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.10.1","dependencies":{"@opentelemetry/api":"^0.11.1-alpha.15+e170039","@opentelemetry/core":"^0.11.1-alpha.15+e170039","@opentelemetry/resources":"^0.11.1-alpha.15+e170039"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.1-alpha.15_1600659011230_0.5458384318282277","host":"s3://npm-registry-packages"}},"0.11.1-alpha.35":{"name":"@opentelemetry/metrics","version":"0.11.1-alpha.35","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.1-alpha.35","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"298ddb7700d7b27aab1bcf34d7d823ffd444cc83","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.1-alpha.35.tgz","fileCount":87,"integrity":"sha512-umx8lU19kOsObpmN/+QmR8JYYRcEAGQHdEG3DbVegYug4+cqaakiu40rtarDBJF7t8UZ/f1dQtM24K2EQ1UEEA==","signatures":[{"sig":"MEUCIQDPueHArdLtOKMnbhJAsi1lepxmRQOwhf0h9/sJZH67+QIgMifn4vo9QpIxdAvsTV8bghh4khx+WMvWV3uU4Nd7nWA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":139680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdHh+CRA9TVsSAnZWagAAeVwQAJFAypTyJBV7vYIr7FpH\n71/eVClpQjX4orwJyFpTGgJdklhQQJVsKDR7wW8jMK181L3QUJPNN5OA8+aJ\n8AzW3G00YZfQ0JNwTWuJ2ja4I/udqUJdcUkqGo82skJmRaJ1K61ZGfaKtXfI\nkqaqAuKCtEEZoHCoso4ymeFm09xiBd2cmUkEc224Fa0PXXj/mRaBD6on3WhN\ndRBIajyA2OR21PO4peFlYv2A2NVsNuvcADuK/xQ4pDU/j5QJbZYc22Cj4Oep\n4H3Ijiij0Bd7smY9K7QIGRjA0Ld45mEW3w+vgZgdeVYOvc5oKchLiYnOnL0R\nlqDFxuT0MtCmm0NHGZrb03Ti3SjFZ2R3rlVdDRgicxocRpz9y1Drk90g7Ypi\n2UTCmvXf6wa7bXjFpIyGm0tYaPzJSoWsAiGl1eI3D4HDri9NPMUaWxBvqM5Q\nOzgdjzh6yVmjKMoSHpVyQ1g2y4bcnqUkPAsTOoH0j5abykUsuIncJiCNJiyd\nOm3JHF7/MvkZSOtNkwdwjqxMZZcFwgTGH/yWlozOmNPadxx2o5M049cAMGLQ\n5n4vaWyUfiHjNBIpzBD5adJ/ecaHc8L2QTTYApUvIqjkDGGcAmEsrXKgVuMD\nbVoqrFzm/rF/F9b8EXlKaM3IWgHm2SwfweuDE1aYk4r/CEPG8WroYMHmdkXZ\n918u\r\n=QhGs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"c6c993bb16c58ba907337a5667da01b3c248e350","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.11.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.11.0","dependencies":{"@opentelemetry/api":"^0.11.1-alpha.35+c6c993bb","@opentelemetry/core":"^0.11.1-alpha.35+c6c993bb","@opentelemetry/resources":"^0.11.1-alpha.35+c6c993bb"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"8.10.2","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.1-alpha.35_1601468541680_0.9688402295783503","host":"s3://npm-registry-packages"}},"0.11.1-alpha.36":{"name":"@opentelemetry/metrics","version":"0.11.1-alpha.36","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.1-alpha.36","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"c23978caa730f9e90a2be7fea5663eaf7c287fdc","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.1-alpha.36.tgz","fileCount":87,"integrity":"sha512-QNcCmH74r4QswUQ8rqaJLOkLG1ip1ifP5SdcJbJGeNqBAR5WqXqygHOFGygzYXJQGOwOXR84OLYxuW6TtuqJhQ==","signatures":[{"sig":"MEQCIFgQHsCrh9338yAsq5Mp7gB+osaN48SuQtRzOUU5fsCYAiBtgl1Ui//SgP7YZA8aiqQoHZuamVwQoCiYnEypi34Eog==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":139679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdHxjCRA9TVsSAnZWagAAOtUP/ibopa9JSNRNE0WnofUK\n6VHhzKWDuSrHcx+EPy/GKBaMWY6J/Ci5SXmr/H9wXbgmRNeQxx81GHNp1EQE\ni7SA5nEJhMSQyqFHVxWxVZXF2C8+9BoaAoy/hl9oQt0cVLqkfUn/5eWy/kH8\ni3N4Mkhyw0fdXvlyK2KR66tR9DPqZ3B+/g312l8O2CHkj7/5YBQF5ylwU5BU\nyTY+sPZhsQCBXgDesQHX80zMdSV6GwQ7UYiNhKG7e3RlNd4n+O7FA5TOAhsc\nYLKitCRZ/+ZPRpluWd18yCfYegGHJ8tRBOkvDEHefw3WO90VbcLArPsqD2mB\n75zLcUNi/YtnQbRfDBBjlpNNGH3EigRmVWPgWgH1aGXtwFUxbR8fYS9/gF7u\nmYS6D8I6HRvhQokJYO4NIhZw7kPTu3lZlkzOHbz4O9K1Oydvr9cRa7PhbZzz\njYE6c7bhKUFSSOZesN4mTEYptGFOyhZhUfXqfgE5KyUlMubNsn+ht047fV+d\nBkZG+S4OqdZIe/G4ILN5ZqjofTMm34O2B0NyujtM3XvEphnCfqbjjgPJ5AUE\n2/gIs3NhyNhMu254RHitrvYWRRf9p6s0XGp/i0RUd5pH21oPtq+ZF/PB4TMv\nB7Yio7Kswun4+vz5TsgEhl9j+wApquiacwPD2i8XxzJYqtnbbnh4nQUO7EUh\nlMhG\r\n=DZ6U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"6eb157c66925fe84b4960f247a86678441f3cb60","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.11.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.11.0","dependencies":{"@opentelemetry/api":"^0.11.1-alpha.36+6eb157c6","@opentelemetry/core":"^0.11.1-alpha.36+6eb157c6","@opentelemetry/resources":"^0.11.1-alpha.36+6eb157c6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"9.0.0","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.1-alpha.36_1601469538795_0.9099130105634672","host":"s3://npm-registry-packages"}},"0.11.1-alpha.44":{"name":"@opentelemetry/metrics","version":"0.11.1-alpha.44","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.1-alpha.44","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"03deee7be1f1f893e4e2ae1a5b309c92070e1af7","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.1-alpha.44.tgz","fileCount":87,"integrity":"sha512-ENKaPdLtFU3T1bQhTGkNHN/vSI5KhtkWSnddYt+DfRFnBGyDfUf6QKw8xf14ZW6Agu+Xl5tTylyCTp9IEtT+zA==","signatures":[{"sig":"MEUCIDE/uzHpSKwlGmxxrC2Oz3FvVZzx7+47+HX15n76ggAdAiEA/Bk5wAI1h20/ZJXNCE8IHOnytAFLLJ7s6vrzrBbt7D8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":139767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffh0eCRA9TVsSAnZWagAA48IP/1x3RmlzfufChkNpWrpT\npilPrwfZh9xvZjYK/0fZd6DUrmSvNWILo+HkNcmJ0yakJhkU4xZRC0Yr2vad\nicn7lAZPJJwDOSHZrCASBAxJzS8s+uXuT9Y67P5tadShQEpgR0yNdhu7nWBj\nT9neCmO1dPAkOPPh5TZHeQfxs+A+tDeF5v1exgeynXi2t7dtX8gwBsMCog/P\nPw5izVFEwLGr3La4z13rI+Pdb/veSKojs7qaDNCI3BzVRBClqUsy1xFsZGVp\nof5qot4jy3uvr8mGiIq92rWkGKkqgkFKKsKsj5aootiCbJdC44EyuUtiv3NO\n4yj7fUigdjyEd5g9SifFvvC1iGQNpk4DFTSRWpoynRUc8eGyaUsDh4v5Yp/n\nB4HoTArUhu0M7bR46Di1hHXrqaetKZwtIn+DdHysp8131PrPa4IiZpXOoQ4d\nHoZ9Gncnv2anwbMK2n5RYBvR+Zp6mjLMqTRh5FfQKEkzWCZ+d9WoSx6CVrx0\np2hgLPnWzuYitHDyr7ozylhJvpFEqQXi7Ue+ShOggzyK2p5vFrmp/vZViv3l\nFzxWudr78QS0jrDSEwPIx/FGAiGVh031DvfbMF50u2g4s63/YN3jPc6GfOFB\n5Y35cE53GaJI0bZD8j5NjP1T5PdKCPTSqlViOlxaZD3xHyZg8w96OHyQZedX\naO1b\r\n=dStL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"240f852cc41707c751f28811b7ce3d243382e3dd","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.11.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.11.0","dependencies":{"@opentelemetry/api":"^0.11.1-alpha.44+240f852c","@opentelemetry/core":"^0.11.1-alpha.44+240f852c","@opentelemetry/resources":"^0.11.1-alpha.44+240f852c"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"9.0.0","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.1-alpha.44_1602100510148_0.32304286608052846","host":"s3://npm-registry-packages"}},"0.11.1-alpha.53":{"name":"@opentelemetry/metrics","version":"0.11.1-alpha.53","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.11.1-alpha.53","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"60f518081ad098528e4ecfacb296a846d7b1b314","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.11.1-alpha.53.tgz","fileCount":87,"integrity":"sha512-OFYfGC1y/GcGbF2LwkNEgtfsJw06rLFhl0O1BJXPQrNMhJN/DPTwGI7uT21xGNN/0EgEmLzrS1TliI7Ev7zuhA==","signatures":[{"sig":"MEQCIAab7nTqXlBCMvb/jG8SN2Nu1ex+iDvbAjwfqgB7evoqAiAtVOGm0HsRnbte3q7OLeezPKs9/Dt43gLdqAO9fNxJyg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":138097,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjX0JCRA9TVsSAnZWagAAhiIP/A5uXV+QMncBOOnFK9mh\ncz+0sfRyOFWJoKhVgBEhDdVcImZlJEKOBoX5uh9ZBqXGqet2U/Vd9st+DPI4\nbEIqwWmnAiCS0HNV8NAoZJ9KRF44MkiCVLTxQqTodyQmPxAQ0oVld5if8Jm5\nho2fDFPsv23gN3KSSE4RKyqoYYgo8EZkwUrTozRfq9dULBhUFPihRs40TYxB\nAqWWnxyKsmCVxvq2ASypSETBf5ElbzHXkSiwHFRoYBa/t6+cRPfVXPcES9wn\nzlAlg3wkt+M7juxJvejrs/1MxzIp2YAbhVYfZclinaPFipuWF6W0fsYFWHqn\n967IWPGeI7RbF7WwzvOxOBtT6kduJEB54JnlnBpDXVS7lI1eodQMr2SABu1x\nHlq/EtVb/Jk7oCYrxUO+HiSZj4pc3S1ZU+W+1NwykRv7slg+Vrnm2JjFOESY\nX7EWnZeruuQL5d4SpW407kvoCWuJdeTHiXskECOEj9HG/3V+abObpxpxEK8p\nPbGDvMo5JlEJGo9LuXJoAoosLfIRtRO8W3AIKsHWxCQg04kSK+GU+dLi5yqc\njZFEOSin8P+BeNjU5uRj52NJ7GZtiW5wY3JzbzJ+e92IrEjPwdAienU0niBl\nG7A9lITQguZDhVM3UWaiE+foEAKjsoECbL0HV66m5fbaFtYRIIUV3xeyVooA\nWbgW\r\n=8XC4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"00a8ce7f982ea24bcd4bc398477112894078ab29","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.13.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.13.1","dependencies":{"@opentelemetry/api":"^0.11.1-alpha.53+00a8ce7f","@opentelemetry/core":"^0.11.1-alpha.53+00a8ce7f","@opentelemetry/resources":"^0.11.1-alpha.53+00a8ce7f"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"9.0.0","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.11.1-alpha.53_1603108104866_0.07155897694669222","host":"s3://npm-registry-packages"}},"0.12.1-alpha.54":{"name":"@opentelemetry/metrics","version":"0.12.1-alpha.54","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.12.1-alpha.54","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"0ebf3b33f28742d1cf0f1b1bff34638fb645e6ac","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.12.1-alpha.54.tgz","fileCount":87,"integrity":"sha512-yHpjyHHtGRbSGkBElGn2wiqLfVhwpbdr1QQIsOehwmSsxLt71kXWgXPmx4DXQ1tp8CBNmdXiCHtA0YgfIZ30Vg==","signatures":[{"sig":"MEUCIQDRnDaHkaOmR1TVpDXhSRkaoOUywKzkDwFKU+uZ4ORp+gIgFrotjf3xJ9rOtNkXEmpqBONTeR5Wk/0n1/ZZDfP4Ppc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":138097,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYuDCRA9TVsSAnZWagAA9LsP/iDP6z+lSdpf5a0iVjzQ\nd9tykPzCvepfUMPOyHUAF2xV/woHTWSyluYrdd/7OD45+kQFW22r/zWkHKmI\nvrfO2MzzvFVp8wDicnhLE/Hd2sdJVlOhkOwJEK/6P0+LGPLw7UvKG8sawq7q\nXVa/K0vb2G06/qdAq2cnQiG2YV8lpyi+jMe9LHRMtSNPg0ES9jbI19Jmsj88\nv/9u7EQoFyfPDvtzVhxHPkdALYqLXBZJyxAqddTWo8RDRECqXc0nVrGQJ6DG\nF7jmmmAyD7sdLAyP729/Ca9t9eZ+r1lcSdmB4euQ0WMyVmsz/0lnxIhHQhvG\nxNL+XnkVOMKvBIv9XAzyrm7CW64fwiZgqT0CJmNRJQMMOcrhlT1PLrplmOUp\n/4yOvjjkCuauWYaeT9/HZ0/wto8Utrlqb73TNbp1gyKzRXvSDv0L2G67VpSH\nXgqP6JXqo6yRohWF5/BxwMn1CcoS1dQvu71yMJ8d3r8wMyI5lnDtiCcsVYRY\n/m9sFWVxU1opI9eMVbVDZMdG/YAbAJMigaKbGFViSd/P4zZ7b+AgSCv6bQPr\niWsJF5+RgSxpnTHx3j5vk+6Ur78Zyit3lfBwp9kjiTgMqmX3+hsFqoF7mdqH\n2UUloGkMNk0YYaxoXDvry4+IXz52IQU7vKGmT4Kp8USp6VCMesQUcRPOOce9\nsQxJ\r\n=z7Wo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"3f72613a36b6f97555a0fa7481755cf8b6cce1a7","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.13.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.13.1","dependencies":{"@opentelemetry/api":"^0.12.1-alpha.54+3f72613a","@opentelemetry/core":"^0.12.1-alpha.54+3f72613a","@opentelemetry/resources":"^0.12.1-alpha.54+3f72613a"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"9.0.0","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.12.1-alpha.54_1603111810568_0.7792630237627431","host":"s3://npm-registry-packages"}},"0.12.0":{"name":"@opentelemetry/metrics","version":"0.12.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.12.0","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5597b5f00384f31dde12b2cd0044bd6e0952e379","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.12.0.tgz","fileCount":87,"integrity":"sha512-S+xEReh5Oyqiqg5mGGb5CcjA0Ki8k/iGcS3k7Pa1JhXaovzoJzCV/7CEgShTMN8PVRitlHzvqk3Bl1FioY2MNA==","signatures":[{"sig":"MEYCIQD/Z2TlkwFTJpbGxAsa38x5bKNFvYRpppHCmMGpDUtGqwIhAJRppUKTHwbG3/D1/gh2MDKZ8wwsxBj1F/sH9RxZd8S6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjYxpCRA9TVsSAnZWagAAtoMP/14xXQhB59t9ykmZtv/v\nzF8IpBOOvg5eeJM8a2oac+4QCK10jZYs7mzmGdu/4AwS9pIsCGZkxcQ8BT/F\nUECnVW8UJn8/COgNrVsU6XXvpGnh7xO/mycQXTKz9Shs+KCz9UP9V6rBFRuK\n39AF/L4hAaz3H29Jvty3pXGZCcj2uVwTKPUJk+VT9VnRk+nrPPiRiJna10+A\nqMDOXdTOcSfczqUOMG5f4Pg12+pn6PCWVKwA3a39qkyq59PmR9Bp87ddvMvY\nD/6cDxBolzPTeeldnFlXz9n37FrI/3o1VFRpE5cvARtrN1qe1BR5EUGgea/x\nwIErXQb73jLyz+qos7zOQcPrhTkD842l+xuewGdPLkXUG3Az8CaBYgxiq6v0\nNCJcXlGbGKHD1qoHUrzIdLa5nFbqpmBmzLbVujr2fXY+mFL/UFUrCND+51Tm\n3obWB/+Dl99l+EYBzvnzxRxbnp0W985Z6S5A00S8knPNJ2vUK8eht7+0xdu0\nKkIj/O6bpW5jZfjk0H/OkjUFzqAeLD5Sp/OWb5Sus9x8LA6EspZhosplGP/d\nbvF1hB4/sm6c3fxfoaX2+jOXDxAMEUX5WPKao3QxfzWWvRMAL7YqNfDKZ1Jh\nFq4GUGXJxpflapv695I7gjntEV6DwuvaVicQUortrPTLEdkVLwNk9tI2BVzA\n7Mdq\r\n=Qm1l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"3f72613a36b6f97555a0fa7481755cf8b6cce1a7","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"obecny","email":"bobecny@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.4.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.4.0","dependencies":{"@opentelemetry/api":"^0.12.0","@opentelemetry/core":"^0.12.0","@opentelemetry/resources":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"9.0.0","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.12.0_1603112040936_0.8898441949322224","host":"s3://npm-registry-packages"}},"0.12.1-alpha.7":{"name":"@opentelemetry/metrics","version":"0.12.1-alpha.7","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.12.1-alpha.7","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3dea3cc63f5c3ff923bf17b3d4321855d76fc799","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.12.1-alpha.7.tgz","fileCount":87,"integrity":"sha512-mdoQNqOfEDX6Cbxbz10PNBLAP9+l0MOraRofo+vK35/YDmneT4JnCFY1G/PdTs31nI/ysJtWX2MZt+k4N+1X1w==","signatures":[{"sig":"MEYCIQCLnksQBk5RRcAAYmjkjhiy2SC96P5wUx5O4vvittINzAIhAP78J8iYgD108VG28zDHT46L8bi/rMyQBy1qrx+fEb3J","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":138091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflzuvCRA9TVsSAnZWagAA6wMP/011fiN/4XerROwfmBkh\nLFqr9b4OzUaQS1OBDk4+oosxQAqIQQPfMgNrBGPGp47wHwADGogyhNM/HYbI\n4gKtAMkj9otufiiwWIHmV5P9z81EUrwz3BrOvMfoB9MZMWlD7QpYpVUOVcfY\nAVEfFGWs0n36SGLqKkVC7JmYSwfcupfkLiaYC5hPraaKleYDitOZtSy0csNn\nXI3btruI3rOftAPEO9fDnN+2czA21ZdmDvpNxumn7fsgsdzyiDZ5rBvdxfBr\nqb7hjatcuSDLX37VsI/GU2DckTnhJCi9CCCKOMBpefMc1hkDdmG1Pc4TLrT+\nmv78RmCwsCOBztvfOVmeRs9GUgOUXhx1x7Cz8pCCG0zuhKb6XgixAihzh1UC\nK8RfQppOcqADxljKS3OVplFKsN3TPRSz0xD7vLHufAuv/NDFEGGh32rD1MMh\n6m1nKwMIl5256QtombwoHLnAcDLjRj/vhkuxj3Iap9u5XaOZ5qHkCxuT8xsZ\nueiZS37zknGREXi7sYz21ML+pOTuEtVAuzF/YYoMISluerWtnpiA+8RK2Niq\ncG2X09Cz0VhYYR4K0lFzfxRpCwX8rwmlCzHO/rYDowhhAhd1RZPviAhRzGZJ\n8d3Ym4aAZ06I7oijNA3OGtTR1WDpyYsRnTPeuI4nQDGSEN9ndmLPej6jK9Xu\ncK7R\r\n=GCRZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![Gitter chat][gitter-image]][gitter-url]\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver('metric_batch_observer', (observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us on [gitter][gitter-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg\n[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"46f31dd2285d55d239195032528c3dab1bf0e15c","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.13.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.13.1","dependencies":{"@opentelemetry/api":"^0.12.1-alpha.7+46f31dd2","@opentelemetry/core":"^0.12.1-alpha.7+46f31dd2","@opentelemetry/resources":"^0.12.1-alpha.7+46f31dd2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.0.3","rimraf":"3.0.2","codecov":"3.7.2","ts-node":"9.0.0","ts-mocha":"7.0.0","typescript":"3.9.7","@types/node":"14.0.27","@types/mocha":"8.0.2","@types/sinon":"9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.12.1-alpha.7_1603746734962_0.9117263553568697","host":"s3://npm-registry-packages"}},"0.13.0":{"name":"@opentelemetry/metrics","version":"0.13.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.13.0","maintainers":[{"name":"obecny","email":"bobecny@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"mayurkale22","email":"mayurkale22@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5a7519fad65b86244f76b2f272621c9d7d47d06e","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.13.0.tgz","fileCount":84,"integrity":"sha512-cgIMRyF8OEFMKasiNwM+cHPe9bp2/rqNn4Jkx7tQAkvtKTLEKtQ5R2fhUI8f87mm/f6qYTsOunKzb1r2QWljQg==","signatures":[{"sig":"MEYCIQDSMqhlFsqRFlde/OaVtbh7Nj9exJ21hN7zmwfU9OpdPwIhAPaRr1xV3SG+iMjE/XiOrdsEB1gG6ofuMWLiByTD/m22","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyqmDCRA9TVsSAnZWagAAI1EP/RfBtD6W9VlusmfPsGvJ\nsO63LIe8ZtKMaG4aK5HfGj02pgTdQRgNosVitCGPsm0ouquqB7GXe5B3ZfKI\n0DpS5EMMq+rEmvYMszs4LaoMEWHsne4mmuYFP7aQr+0/D5amsuugu0le20iL\nUokB0TxEheZmJYZGSsbZ6V+J/HO2BXvCttQ3NCUlUJRdj9+gG7Af19YTe+hF\nfW8PSeOli/O9cVIw+Yxon9f/wTLAS1ttSwvtNIn8Om3m+2/qNquSecU+DFj8\n/2v+BMXfQC4044tT+jyRtlnsWOxL+Mr+3IuPuSqMrbqJYF/87GBsw01Q1ZwP\nWJW/Ics4/xdIj4cH8r/6Zn3dhjhjSv+uAHnJmvh0vvSNu8azC0EF7W5+mP6z\nMScDdKF+dp5FHP1GQMUrsu5TkoaumwLuJ5QLS+7Ff/aDBJK18QfJykurUuCs\nwhJLMLip+9l3c8FjuLsLWjXQ45WIMVadU9y9PHLrEZ8Rx8FqiTh27Vc0Z/vW\nqDewjS6NAYFxlawvcJFw0WQ33OAUam+DCbSSsFUrNmol8RKNNp8ed58mkjhj\nCOoTJfurOnIpOwqaLSphvFnErps3OvVsRsw3Ph25CKz5Xe3rjMrs0l2bwYdA\nrqhP9BT2qqgS0ikBQT+h7SW9hVmXXBgXDOqm0WN6FrROEaMnx0SYolEdlXTv\nmJ50\r\n=HlSD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"86cbd6798f9318c5920f9d9055f289a1c3f26500","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.13.0","@opentelemetry/core":"^0.13.0","@opentelemetry/resources":"^0.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.1","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.0.0","ts-mocha":"8.0.0","typescript":"3.9.7","@types/node":"14.14.10","@types/mocha":"8.0.4","@types/sinon":"9.0.9"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.13.0_1607117186617_0.030961107671108268","host":"s3://npm-registry-packages"}},"0.14.0":{"name":"@opentelemetry/metrics","version":"0.14.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.14.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"06c3c09a74d2c9dfbcde51b504d14771a4e07d70","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.14.0.tgz","fileCount":84,"integrity":"sha512-gIC/ykE7V+5qKybSHr+83ATTaXEZLUdADLjLmd8ZIu1+I7dx8ZM+OJCmWyGyZppD1ZlclvhybQDUQOCRKpWMWQ==","signatures":[{"sig":"MEQCIESYFvCl8Gh/oerhhySWyxiIpbWD5sqYNtzkkGiUopPOAiBLFVfPi73t9DisC3nCs2Si1Q5rV+ewW/Od1/kw/2WwCw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":134686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf28UyCRA9TVsSAnZWagAA5mwP/1cRujPc3gPpPHNjxrs1\nKLs1PElkaVvVFd1tU7tBGcz30u1G7233pgAVEgkKFntWiSIyqAqPJcKHewyG\nn3r8qdZqQQXeFxw8NtlbGVPKeiTgtCQhx+jEO0GV+AAenmNrTf47wwqhnqC0\ndhKeYCi9xAH1PJx9aegr0CIdxdInICxMThcIn810W5rE9eVQRgZnFnjz4HjE\n/To5te1l05qqzfpB0md4dxHbPlcnCH5YhrXRNcgBrLHoUdJeKX1+5JDiftTs\nnPxfEkgj99UToA/+/mnlNLi4Mb3DddKiB+thO5Uo5GCUnxQma08ZnNYoNQpW\nAAIZ3HCHc2qfl/JD6uAyuMPqVF3u0DMP0aChWhmDpSYXsw616P8s500+eJVO\n8xcUHiAwDZiQ+6vtCVWuf7CyB+HLSwUa0MoDGOpYdUWhu2csmc/9Y7LAcZLa\nzJwo0Chkn/5AAjRSKMriRnSYRehXeGlIkn6a6MW5LDEzFUdFrYfM0k5mfIOX\ncpgkhijVzR3Uh4TabChchLwHAyl/0PHCSpOrQr7UyGINvOQt0sZ3FHRsUWjv\npuMJ7efQBCet9LeJKuau5bRavLWcK1hej5iyZbEWHJBoHJ2tliTOVE5Z4CL1\n0cytSA7qf3ceG6E1UrOnKCPO4nydQ7Mr/V5BzwwD5tX8019jnQwTzhxgBB+a\nyGEF\r\n=ezF5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"27a8d4530c56257c191468b073669909bf8892a1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"rimraf build/*","watch":"tsc -w","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"npm run version:update && tsc -p .","prepare":"npm run compile","lint:fix":"eslint . --ext .ts --fix","precompile":"tsc --version","version:update":"node ../../scripts/version-update.js"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"@opentelemetry/api":"^0.14.0","@opentelemetry/core":"^0.14.0","@opentelemetry/resources":"^0.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.2","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"3.9.7","@types/node":"14.14.12","@types/mocha":"8.2.0","@types/sinon":"9.0.9"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.14.0_1608238386211_0.8994200354460646","host":"s3://npm-registry-packages"}},"0.15.0":{"name":"@opentelemetry/metrics","version":"0.15.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.15.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"108614b7a973b56d492bf39c43a464743799f109","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.15.0.tgz","fileCount":84,"integrity":"sha512-ga5C+jDC05vHWUlrbXQ8tkL+zt1+EHm8+bqvTgOg7FeuTfwVDpo/y/A0itK+H2QxodVivIqofL1F+JTBwsLkJg==","signatures":[{"sig":"MEUCIQDODnbQ3YXtD2I7STEICLjUKoKfAvE8KHdmKsp5ge7Z5wIgJfD+R1+X5iLsPwm8hJGAt/vzsm5ApbH01Vth4KU3TUQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCf4ZCRA9TVsSAnZWagAADgAP/3xW/pUUrdYEEbRe/Yk9\naotqfmBOmN2X0qum5JhyQs1rB2qvg14L692aS6YHetFuDBjDxnsXsbsq8Wl1\n6yRG/Ugl5/gAFOOMoOK/HoluFFtzFc4s7YaCXwix+1EF/qwEVJ2TSD75Krbz\nkuyv9Q5kBUd3t4xh1TOJF1E8S+QkfDxgBJyFCc998RHAwFVF1MYaVXKJ5lL0\nOWFEIaiHifSlCg6Zq17bu13G9EsCJDZj7kKoMNk/AgEcBCMcLDfRc86WcTtu\nvR1EMKYi0OJggRT0uJy9qsPVb92sbTeP+qZGOScPBzaIDkLmIDaCrS+Jtv3W\nxN0yfDGqLfDQmTpKqogRomBVf+MHZspaf58CtY3eBy/QSmvDCwEIAX9UH/i2\nCh6ZTzW2AYMdwcawcC7iv+SO9zSSLGb09/YVm62rH4DezxtuT9q83Ywtr9em\nVBXZE2S433bn/4LtJPEkFMrjLJ4ClPQ0KN4zbwdIiCmFCveQtTjzn66oCgYM\n7E6gE0Rgz0uIQ64+O32861RqeNoYJafEaAI74kgKPRZ1Pwt7kc3XBuUhjj5h\nSRxkLH/j4+PJg0IwN0/tbuxaKqaGRsK6TKLz+O4Bvpgyxjb3YXOgqjmSKkPk\nyuzazP0s53+8mIvEDSFB3/MBym5DBFTsZ37nAtd+xG5Rbx61tJNu/vFAbGOn\n4vF1\r\n=QUD7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"960b868f5b7686eabbf49190071b8463551e5d8f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.15.0","@opentelemetry/core":"^0.15.0","@opentelemetry/resources":"^0.15.0","@opentelemetry/api-metrics":"^0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"3.9.7","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.15.0_1611267609377_0.991889202946648","host":"s3://npm-registry-packages"}},"0.16.0":{"name":"@opentelemetry/metrics","version":"0.16.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"783b766fa3ef332762869a50bdd2e12abb119404","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.0.tgz","fileCount":84,"integrity":"sha512-Qpzy+qDyJeR6rIzyzfTpDX5Jh1MXRL785ctmY2c1kmRnk0pm+waw5BDkZM0l/B3YsshVlLKTTw0GPBLml7VXtQ==","signatures":[{"sig":"MEUCIHfAzLViOb34gCc0B0an0TLIUQOExqqyIu3qy+IZrQ2vAiEAnO870QRt65337empmyG5Eqw9rAK2eF2DTl+qZrzlNZQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGIHACRA9TVsSAnZWagAAvX0QAJ2PPZcAiMRMdHe5BX9F\nYevS515Qk36YPzEkuCa0DVfzixhmCmzBTDuYaxIhXchSZjV6YbuKBhUuzn4j\nV7S1c50MzYT/Lb93BH/Kjktxo13aPPwzuHUUFazheI90X9aWCmx69QqqVX+s\n96nrPbCxuI3QdH4lUWeDEdst1W782PXEPI07AiFmj+qh3HGXNMB7OLD8Edsw\nEkYK+kiX28HlwnQfBrpuuJVa1XGuY5BktAD8G57YwsmBDUypvqmyIpk7/zEx\nKCrTsAlW0B6FMmGo4ofzGV4kDieLcZXkNj9vaAL6bXidldcmSmdgMd6sifCE\nF/OxuzVK8fe758soyWv8iMdDrlrEAgEXVlZdv67/yXQMhhsmLxCM6no1Byb0\nOh4o2FYstSThh55j1ebq/fCxju+28wjSt6XVdC7xslvfx1Md/rF65eg41Zq8\nL2pFjkxEJQk8luXJhx+pEGSL7x1pZ8FrhQIKBilMQULl/YaRFQn/4NY4WqsT\n+cC+aWODGYT0gFokwkWf+N5gOjGwSVqlYSwJTtXQ3pSa0xztQuJKJsa6IcNl\nXRXpQagTsre/1yV8AhERrkQ4feL7lbIW1eWZ1N3pcxhXsXFmlpC+owWNXrkg\nUJTUN2ddeIvnUt+B/5iG0PW+j+I8VYknaoPyFflKuMGZlyAQ8HTHm65caXqd\n5Msh\r\n=fpD8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"e68863f8e63854b08ad13fb54677294ac6d6b681","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"obecny","email":"bobecny@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.19.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"12.19.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.0","@opentelemetry/core":"^0.16.0","@opentelemetry/resources":"^0.16.0","@opentelemetry/api-metrics":"^0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"2.0.2","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"3.9.7","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.0_1612218815557_0.37432665611496385","host":"s3://npm-registry-packages"}},"0.16.1-alpha.10":{"name":"@opentelemetry/metrics","version":"0.16.1-alpha.10","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.1-alpha.10","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"62cd78038719b0ff495bbaf7b12deda4414968ff","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.1-alpha.10.tgz","fileCount":84,"integrity":"sha512-SpxTNARRHbABONNeluGIGV95xD5Uyhqm4FaI5jqbUu1u+vjzcxgTKEKpCTMJcW+GquqywZyO/C1ogb3xJ/lXSg==","signatures":[{"sig":"MEQCIC7aZ3scG/NxD6TxUVs2/zMboJ70Ckw1jKA7lIdslwa9AiBHmw7vdBjUcVT+CybRUiV6MiE5rQiMScP2ht6gr0IRaw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIV2/CRA9TVsSAnZWagAAumIP/jug1RLxe7yvkThVOTe+\n1uZoDpElC7ScplYtXrvaF0OOJSRkECKL2dd/MgGBYZNDb07bRKFhc/00ZAi9\nMSomb06pvb5Efq/mGBqaxpPUG5ZX9O41iIMSxqMsVd7JjBj2cuKXEhdNiU7G\nSayQACpBnFC0MwtRAHG/UXE9Vokzl2dD91QZXjody2PEPw4ZtH4LD023YUcM\n9KE7urzjT/F120Ecgy6pt3VftGy1uJJF7/i0DTzw+Kl4KFf8qfroMYRGENYJ\n8Ivd1XRqOC8VCXasfZixveuD50LwEvCg4X44jBI1Jr4xk0Zcs1LYyt6jgepV\nXFVITzlWuSy96yeJHOLJxrd+TUszXPyASeGabSaC/tyxQ78d7+1gxKRywgUw\nsVI0DsRWFBU0ysSFhzLPVO3qIoL+BwMtfatZrqiQDBU9fdSRBP/SVckBLK8x\nA9LU5w3Me7kzfvkXmEDmZ1Ru7dmlTKgxGDVAcpacdqZmBuG8OV0TA71NyAbX\nJa8uEHBsOHLIFx3evVG71uIHJJWga22INEvk1bRLj7lX0c0fm5Ga32FJeO68\nUZdZoNYXSaABsUBO93kC/YmX3S/pe2IQj8ijRAWNRHl38cSzkRYVeMJlqZYy\nt9iMt+rcOBnMO5U+RortfDFZG3pwyOc4B0JzbvZ1x9DItTu4wadmlMri0CAP\nD99E\r\n=F7p+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"cacbbdca0e89d31e2e0b10a8ff5fb86d7a714906","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.0","@opentelemetry/core":"^0.16.1-alpha.10+cacbbdca","@opentelemetry/resources":"^0.16.1-alpha.10+cacbbdca","@opentelemetry/api-metrics":"^0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.1-alpha.10_1612799422740_0.37896458425842994","host":"s3://npm-registry-packages"}},"0.16.1-alpha.11":{"name":"@opentelemetry/metrics","version":"0.16.1-alpha.11","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.1-alpha.11","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"e917c8522a7a5ff60e9a64f354ae52bef380a02e","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.1-alpha.11.tgz","fileCount":84,"integrity":"sha512-Ek2o4wUWM0uDyYFZgW435PkkzAdwLJzaOpI26B5nARc4Cw/YOZohojjqTw2dcowmVsnM8fihk8DYSp0C6Qt1bg==","signatures":[{"sig":"MEUCICdp2618GX9m1g8XH9xKXRTjbb3Zt6WQOH5daVQpy6jGAiEA6qccsmnnq9JwxAEC5S0ZARKqb0HcGBun0TWC7oeMxX8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIWRFCRA9TVsSAnZWagAA18AQAJaimwGs8IrLBdO80s5+\nlQia0UIBK5lGdd46MU2VO2R4Z+8GSq9ZXCtDzEPbjoZz4puyzT3wGBaRxctP\nRjgPNyn616YgxdDpUlN6zEQt9SnaSkWCS+QX0QP+git9NeM6nKy/78wF/KcY\nKWG1Mfwp+wp86Znx0GUeeauqOjckXMuIWrphBl3iVURNh14AZNaNRGqEcV+A\nP6hkcLixrKu0O2Pxdkq1OvsYPW9YRXVDBtIKVZp3mnFmkVrbp1iTXiXuQCAK\nIuJ2Y+XSiTlbXUzJRcRXe+RNvauRFKmS308Bj8EBu/85VPhDYrkoz7Fp8UXe\n4QVoZVQoqAvmmnIaBqX4/OG0g1QrVsgB4R3hsUugfIgxFZarPexyntHgciy+\nXwNDQc+BSdHBGT6oPy3kV+5KZWxAdtoECzFm9eB+jBV0MMOmZFMATzn+QqiV\nYueMapG6rtfJ0GysYm8a5sDPUtjZs30ucTWcWpM84fW6b2BJtXCpD2GL9hya\na7fhapaPnyELGKYBEYRYef5EtigilVsccie8UcHKjiEd6rNS8ttMOsfzAtKJ\nyKcSQP6+let4yfJxKzOkAaIbuVlDSWeFCjnIYxphyZc1r0AtuLg5cZolGFok\nzN+m3l71Z4UZmBEGTQ1V+DYWMgnECO0kw3LGemO++XPd4boHoowClb9tzMYF\nHUur\r\n=Xncs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"70a128ff5dca16060ca7c2cff943369ae9999c34","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.1-alpha.11+70a128ff","@opentelemetry/core":"^0.16.1-alpha.11+70a128ff","@opentelemetry/resources":"^0.16.1-alpha.11+70a128ff","@opentelemetry/api-metrics":"^0.16.1-alpha.11+70a128ff"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.1-alpha.11_1612801092732_0.33435007763222235","host":"s3://npm-registry-packages"}},"0.16.1-alpha.14":{"name":"@opentelemetry/metrics","version":"0.16.1-alpha.14","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.1-alpha.14","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"f1e9be104e4fe0c4f697a716a236d063a9d66f5f","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.1-alpha.14.tgz","fileCount":84,"integrity":"sha512-HTFTvQBUaUPaAlGjpuHlVJfRI5lgFy5vy8ELtVOnH/wgE/ntnlDuk9PNVoyf3JijADsECgjXdC9OeE4/WDDHCw==","signatures":[{"sig":"MEQCICr9HPzkOXPV4RsUoIHvvpvyHlMmM2XU8hGmD5ZvEmKOAiBGL6rTQmNs261Pme0Yj5kyWYq8i8h72lPACo4tUvV9eA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJAR5CRA9TVsSAnZWagAAOwIP/iiQDGxyBlNGZykJxR9W\nkoUg2OFLpfS5M678wiGJvTDeuiuqEJAq/5YzBciP7o74YvugYkWUUhST55nQ\n/8dKvA/AoktiDBt4cqL/u40UF3o1456Qla2Izqt9Vhf1/UEw0zDC50DhJ3WL\nTvlMooPYrYIeyN4KyM4HcELDvD1BLxtLFpI4xKDtNS0OoT0izC6yek8v7c+y\nGQLA7D33XDt+0u2MVki0JoRWURSGCSS4kM/LGjgy4KvzgB+WlUSanVj4aDQS\nTtLv7LpzVNvJF+qMV1LkdsFV08vAWP/4S9IBdSJW8+d8/kM/mWd8+wZTjF9R\nzfRi9KRrqo1nd2G/x/wuGpHBnY+5Y6d5/CzyNemBpMZ2EKqqZBm4ZKfslaxK\nw5UjzTF97n59eogk3lDzVUZJsCgLHVAa5PGS0ycSLNOFNEkaImNvbRta0W03\n/XyFn+W9d1funOR0N6qegyRWK2aXPKe560TigkedNk57HT6WZnpH5NtNUuwM\nvKbb39VxoeGK98q/Kr1CJbc7R8JQctU2V4/Gl9Os/WSZca0O6YbYlzfilFna\nOvcwU+woNQ9IMn57H5+L0UySUvF4UT8JfHPv48KhrJtrfZYdv6KmDQ8q9lT6\ngSY1ktyhImHyzm3yHNZJhKAaPHU+59bwOwXxPDwpSaZf7eQa5lMoIZ08/dKq\nSPTC\r\n=bqfv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"000a8ac099a3848a9a3c66f4bdd4826b4cff987a","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.1-alpha.14+000a8ac0","@opentelemetry/core":"^0.16.1-alpha.14+000a8ac0","@opentelemetry/resources":"^0.16.1-alpha.14+000a8ac0","@opentelemetry/api-metrics":"^0.16.1-alpha.14+000a8ac0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.1-alpha.14_1612973177259_0.4116629210830063","host":"s3://npm-registry-packages"}},"0.16.1-alpha.15":{"name":"@opentelemetry/metrics","version":"0.16.1-alpha.15","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.1-alpha.15","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"59124a8629e66c658bfc7d72a88d905a261078c5","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.1-alpha.15.tgz","fileCount":84,"integrity":"sha512-fevaJgQgBMISUGiLsFoQk0d+SJ9Ym+ItraljqL/BCOs1V4kXjjw/MJQ2cQ4aZVDzHfhrP1tcEyxBrq/mU2BTxw==","signatures":[{"sig":"MEUCIQCeyB4Y02VfbwJpKGtKcNbx0JdIJb7bep7ZewkyojvCRAIgW7+VBu7hENWC0dRLNRMZL8S7RQN8hsnvsYVtwGC7ang=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJFuuCRA9TVsSAnZWagAA5fAQAIVJ19cPI1GZ2WBtElOF\n6up/DchJ4Ag/yjpUrmvSt6Gi3LWHqOl2vPf0HIqqCSUAJbpNQaKyyxYqKxC4\n52KDJlZAzuENFD+5bZv5gl/QeJvj9RJm4t3UCd67tmX0ytY2XPJgAIDQm0g0\n9+czD/wlv9PtB4SLdrXwUHH1WaixslzsChDSy3JZ6e5sj6qdvelsgzBnkTKj\nRoSbMpLCiTKaeMZVjCd9YMYomyjvx/s9Ku3UEn/61vyodER7TA33DGZPgb/g\nnzqAPHZkbJT4z3flMbkWexz3gn12broVwGLaktvQjf0q2KWSFRliGkJSVV3y\npw/mZWn3n66udfPlOWg3cgBDODxcfPiwvDsP3+bWl9ZmvY0qxV3n2oeRk3yD\n4SfxcHXpsk9J604ZqrnbvaT4uOcoKPjsjMQIiKoop+p8iOQUGM2QKZLK7peW\n1NnfzvqMNmDYObA61HerTZe106c3QPjLckvLNzbP98rfsRWxzHrTp//RpMvE\n9C5/ndKnZzMV6Qdju9FCqO/tazQHM/rNpA4GOLK1ZEoCP/KknQK2Lgh/hSo4\n4Vz7ymO6ZNJXDYhhmgWwj03ggsKEiRwVTipZFT8UDBXT2K7QPQFUiURyydmA\nefPyDm/pFZtTfm2caWCMLm0m/UyfBWOTaVQkz+fJkmo8x9F3jSsD2k50rhD2\nmeW0\r\n=cM9x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"1d682c2f75f9d11265cfc1692fa822174594d4b0","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.1-alpha.15+1d682c2f","@opentelemetry/core":"^0.16.1-alpha.15+1d682c2f","@opentelemetry/resources":"^0.16.1-alpha.15+1d682c2f","@opentelemetry/api-metrics":"^0.16.1-alpha.15+1d682c2f"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.1-alpha.15_1612995502015_0.8866190031487928","host":"s3://npm-registry-packages"}},"0.16.1-alpha.18":{"name":"@opentelemetry/metrics","version":"0.16.1-alpha.18","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.1-alpha.18","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"929490bcb645dda58ef349a90f2ee559ba598c2e","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.1-alpha.18.tgz","fileCount":84,"integrity":"sha512-9x/15K+3vcpS2YbezWuOcgRllvwOVvSZswdUapTelEMfRJvoqHrWe9cNYhM/uGbKPTriSh5rosLlL7DkDk7H8g==","signatures":[{"sig":"MEYCIQDpvNCuMA5EuT8ZIAVOcA7NIfgJ2YhOSDGNxh93nlEkMAIhAKuXFlT1IYr1UtZVD1v+ilBetSpXn947n546hyi5aYER","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKWgbCRA9TVsSAnZWagAAh60P/iiXtb/5acAXai/w3DgB\nk8A3YXGkVfSZAtA8iQIFN83cwLRrzG7ZqptO/GI1aDsmRharjXxRahXOAQpj\npeinfsFztpfZJnqbN/7M2wzMfBH6d2b0LSeiJbFbf8zcaS+/5QVB4FvAzCfg\ncIcp5PG3P2SmNQf7hOHElYTHrK8OtFVJapz9j9MMt9AJruuR/u4YjA3HdHrM\ngqkeAXZ6MTcGuyySZ9PL7yZnl/Ng1RrOOii2TuVK0S+c9jL5DJyzXK2nfbXb\nXyWsMxfXCp88Ps+tznMuVNeqxWaECsseb9ak4uwxngTVspTBpVwLud4Sfffl\nKszQNnh0nGuZ4YNOlqVRd32MxKBJBBh4wJOVx26z0XuJgA1MDQYIQN/AVLWW\n3k8/Wsd8Ru6pFM8Yadi+kg5Tbap40JKtPci8dXdLbLPDuHzKgS/SjOdkYB/X\nC6IxP3xa9EFrU9C6VK23qAphV5wzbKzn5tO0OqPpc5dUqmJgioIUJqCf8PVk\naP1tjgZRko4m4RPuoopWDQxm6vNr0g7U3h/ePAmLDFYpDF+vnDhH5RnGM59W\nZGdZgxX1tmGGiD8kaKKQlbZFF8sEhSnvamN4I8p7/HdzM2SEdoRPcTJXRG6f\nAHjq1NH3yFbexHsmuuaKvPP6Nn3CYYvgVeA68fszlh0ZKKRJLkhl1qbeU4d6\n4auk\r\n=Rns8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"9f965b0c749108df00bbe44eeab84d79b04bb0a4","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.0","@opentelemetry/core":"^0.16.1-alpha.18+9f965b0c","@opentelemetry/resources":"^0.16.1-alpha.18+9f965b0c","@opentelemetry/api-metrics":"^0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.1-alpha.18_1613326362779_0.05444564033466581","host":"s3://npm-registry-packages"}},"0.16.1-alpha.20":{"name":"@opentelemetry/metrics","version":"0.16.1-alpha.20","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.16.1-alpha.20","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"b08240ee68f6bdd24457cc8ed82c3cf4b3f57a53","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.16.1-alpha.20.tgz","fileCount":84,"integrity":"sha512-/J52zdnSRkIJ0Xc7OE0lnbf9DsVvYBvk93l48WYjGTGvHjYJ13EZX3xNRcERrQ37O6GUbBSIn50ELmB0uVy/Pg==","signatures":[{"sig":"MEYCIQCwT/oz9FEFQ4xaZ3CGgbWvOPP1NcPYHGefCJehq4CbhAIhAO8Aw5QBeuQLX9Vz3tgvgR6dBTDOiazQAL4zdsYEScRg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132834,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLYH8CRA9TVsSAnZWagAAp+kP/jcpb6+HG2XqZlwpySmC\nZ3tzntdv3VApmXlqak2nivsqovn3MlgGFJuvXtagf/Uit+wy+RdmryFRfOq9\nySWjfPq9cbZtdEpJcl1JZSRr/tf1BK/E+vu01x0tFJLyhKQMb3Piw5SGhNOK\nzDCHt5CyGxQaEPonSoKf97oQ+MPW9iBo9n4gT72rIB5NrxbUhhqbzTVnDxbl\nS9qbNSTv5XY92dNJclzAG2SX5XdJssDnKdz+BT4IxhsDy+Q8/QsXqt7J4S0m\n9qHvrLDpHz5A05fuX0002gAhB7SMusvdgMKB3ndd45JwqazQ7xCaFPQyO940\ngWope7zEbUizmrU7O85WRDQOEa2WnoeEvowP0zNGPRiNTMTSEiD4WIgaX8Z6\nGJWJH7uNrjLoA5rP6Jnk7G55d9tvC3Y6A1xAJaAYycdHB+z2mpObGxm++uY4\nV9aQvE82cDbnwhxpzhk3zbknvvwRsj8ZjtaGAmHiiy9TA2nInUO+SnBBPNQM\nUlBZ4axkUulzVP3accLRMEN0Vyr4yYmt3YslCtvGMByoCb0SmiX5MvoLZOdn\nU8K0efV+3raAfGoHRmmnf6iN1n23oFB12AfUqWh6etcwpfAv/NtGjh8NMyL7\n0OPOSYvn0PawMOA/If970Ck4kQID47RPgO3CrAysCZtqRndc+exrPUYiuqAe\nmJXH\r\n=/KIC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"62f8695d3fe5309c62418a1043bc6e8a176bc11f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.16.1-alpha.20+62f8695d","@opentelemetry/core":"^0.16.1-alpha.20+62f8695d","@opentelemetry/resources":"^0.16.1-alpha.20+62f8695d","@opentelemetry/api-metrics":"^0.16.1-alpha.20+62f8695d"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.16.1-alpha.20_1613595132517_0.6911404248625563","host":"s3://npm-registry-packages"}},"0.17.0":{"name":"@opentelemetry/metrics","version":"0.17.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.17.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ad8606cdd5f003cb2970c0975c1c661c4decffee","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.17.0.tgz","fileCount":84,"integrity":"sha512-Fa7ClnXSsq1xzz09mf4uryR3Hbq5g5/dz1rbbTIuwXOqewMgbmbIpRzvh/gsucDD5l8Nx0M6aKOdinh+8QALkQ==","signatures":[{"sig":"MEUCIQDSqAlEiw9IWsQ7kNbzkasQumNp5q1QJQ5iavQOK/m+lwIgCfcToutwbOpzyETjTO0OQgwET3LRpkLIgosJVji/Jbs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLYefCRA9TVsSAnZWagAASfYP/1rsvahITVhJrm7zE9I/\nE7x1DKLliSx1JVg8M3iEJzuel15Rui6V6M5W5gVeTyE8KmuPVzC44u+W0WxU\n9uSS4Og5rSH5h9Sb35fDCSP8zSQ6qYsekNDm5Ms9/Divm4a4WJSL5mb1b+Oc\nMrYSibMlbxHZleGLfDH8G3gFFmnkV9hz10jhA8ogBM8WibtWd1KO6VG8KSwB\nScWvpBhzy1ZYG/n6YNkwOfhX+NFwloBjv6/95WFNFNVxoA3rLYTQRdzjjgi0\nCCHjikWBuV0J9p2ILi7Z38haecZb0mxNQZH66xi2ZVETCw0SKyF1Rd5+N0+t\nrEG25UXWhumvZH4TkTSSg9Y6QZFDs7o2DW0eQOlrjeiesiLKPK6eX9HWnRKO\nrFR/YKzecenblLIa2PBD8iv2D1D1mfEPUAVKkuU34LC3Kl2GbbaWmnpD4Nmy\nuTHjW+fLdNEebINoHtcutG5Kg6pVWu4noHAofy59YLvGgybckKDhfA/eK4Jf\nTCSTe1K/SBOvQkB21Po0qAQrKzcdqSkTwrrzkF3ImaurRPj5+qcmSX0t6LeL\nGlYMt51cPLlxcDpr0uYXOUhEdowFUdzgqjr/q6VmpEJ3VdUKJGB5N+sn9uRw\nGVJVDl5h72WYnMykRD5OqE06GMISp77cxEkv5azn+HvXwzDDemWLTlILHvnV\naR0B\r\n=z16f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"a91ea7617f288af632934334d0c8ecece318ce73","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.17.0","@opentelemetry/core":"^0.17.0","@opentelemetry/resources":"^0.17.0","@opentelemetry/api-metrics":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.17.0_1613596574707_0.1310860445011326","host":"s3://npm-registry-packages"}},"0.17.1-alpha.21":{"name":"@opentelemetry/metrics","version":"0.17.1-alpha.21","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.17.1-alpha.21","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"473c47ce0ae59ecc290083708dfa88e889a68d5d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.17.1-alpha.21.tgz","fileCount":84,"integrity":"sha512-Lfi5GHbmvqZy2lf9ExCGLQxMSY+4ThQODmVZJGRviDWj+xhsbBGZWHRg8w+0rc5HTQ2UZbHqlkIFmZ2rus7YhA==","signatures":[{"sig":"MEUCIQCgJY2qSlxwY6BRxZNbWvtX+hS0llew3ZUmJirGqOJwfgIgHWx/r0u9ueRcN2pNkmgukXBSgg/+dupKO6seJ8/eAvU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132834,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLYfRCRA9TVsSAnZWagAAvCMQAJcKYpHewApjkhYuVSrA\neHN9iapez6LPZvkvqzuFf6YDGayNIcLw4dL6ueNKZimyIutsyWPQq0Pm24b+\nsr8PO3yT6M1sMDX4bcAvScFS5wv6yteFN6+fiEkrgzseMcrRwWRaxyihQeKH\nQaoj/BbyI0YE29JU2mFBJkJq/zE6BP5ErAwrZFYMSBlakKM21hCGRCZk9Nem\nkt/7yPzYQJlVq6uWuFQcx/yYX40ACAOtpFffAzGmhJMrNdplLoFHPF68q/Iq\n5SJOWtadq1kQfuKRHvE9pxNbqr0uH19MaC/Fek3VIc2N3GGaYgATMv3J7oxY\n1vb1kjgEOdF1PbccTCf3+Ybmc+0/OAjhCJEAzXe/4/ovH+FGYcbRcMSPFQ8+\njxQgI0GRaJGhVvGGkE10MkFCCecawEo7UU83R2nl7uSKW4BMqm8dxwzMgMNQ\nVFhTTNydegILQKDQ0zio/OshTJzCDx6jWn09HLZZEPFFpUr5sGyV4MMyY/gf\nsNz5gbq/PheIQuHsmiwmxIpklc7vXrst8hbBFu9froVRC+kU8ETxoRFWh/2a\n8yvdTb9VmaHrDreNuM3O2+heS/krf88EBl8BPfvqvE/EIlFXS1G+c98y17fO\nil4sVz9aj0QGyAVz994AnjI8PRkmzjk1BB6/grMCAeSQqqv5WtRJVk3C0Jv8\ntK0t\r\n=0XhO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"a91ea7617f288af632934334d0c8ecece318ce73","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.4","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.17.1-alpha.21+a91ea761","@opentelemetry/core":"^0.17.1-alpha.21+a91ea761","@opentelemetry/resources":"^0.17.1-alpha.21+a91ea761","@opentelemetry/api-metrics":"^0.17.1-alpha.21+a91ea761"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.17.1-alpha.21_1613596625241_0.9501923025468657","host":"s3://npm-registry-packages"}},"0.17.1-alpha.2":{"name":"@opentelemetry/metrics","version":"0.17.1-alpha.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.17.1-alpha.2","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"fe4697573530f6896bddc70ae61a138027798349","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.17.1-alpha.2.tgz","fileCount":84,"integrity":"sha512-yssxA05JFo/S6gSrAl6XZX4s+dgBUcFKPlwoPxCsTjEFEVMk8Q5vd9YdIyP2smNViWHVZ/eDsSI2wfYbfuBpUw==","signatures":[{"sig":"MEQCIGjoFHVUlQRyRYYaRCcYnbfiTSozPmNJcCbZwr0iWB3fAiB4iLC1Im1EK6wxRFx5zHBZpwWSF+8Jbk/EiPPXM9yqkA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgMUjgCRA9TVsSAnZWagAACbAP/ROQ76mT2e+9raZsjGfi\ncMMhQN4d0exAtW3HrnTHE/q23s1UL7yI1ZUwMzBXMIezWN51tLbAKqD4k+3s\nqEKaxQ/D9u3+/QTF00/bt4ccypdHRyXztrItQT5zcq/Bt7tNwDWMbXuVtgXN\nD/Kfb01cfXMXdxHrGPShSxJ9lfFk5FAHv7xCU1xfVHINEol0E7aUp2E9vbvw\nTCXXh15Y9YDopQXz3VShvtK74u+xjOloZ4keR/cQ4roYkK27ZotRm/qYLDpx\nPExmm99uQpHA5kkKCJduTSoDOdPEPC+WBC33V/033Ueg2A0+vst7uzNqWBhF\nodCfsydPL8vwgoHyzWKaWZGZUdBVo2/Aw8+CegAaEvfbit3eIJSAuCSwIQj0\nTUd7NLj4REzhSNmzCbvKlBXNDkdtlZgYd0N7+oii9PcDn+VhPBf5GB/Ad3Pn\nQpcTIzAnhQPDN3eqloZFcR4nba7adKrdsVK4ra8rxPFHPNHB9R3YL07ShgOy\nomJs1CBldTbHHHjUF4nAiqG9RJUB1iQOlrdLEfsGsS6I/2OiGyJk8KS6vup+\n45ZlIGIahY3GOIUc1jur/v0eg7YmG3j2nag7P6mNyB02LQPH0oBnn86Cwx7p\nJfntLFoBAuVCBj1bZKB0pnaYhsxUo7BheX/FUKPAiedb3jfKV0PkaaVt2ueF\n068M\r\n=Qv2z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"38d1ee2552bbdda0a151734ba0d50ee7448e68e1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.5","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.17.0","@opentelemetry/core":"^0.17.1-alpha.2+38d1ee25","@opentelemetry/resources":"^0.17.1-alpha.2+38d1ee25","@opentelemetry/api-metrics":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.17.1-alpha.2_1613842655933_0.6516099936860316","host":"s3://npm-registry-packages"}},"0.17.1-alpha.5":{"name":"@opentelemetry/metrics","version":"0.17.1-alpha.5","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.17.1-alpha.5","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5ad1c3c72b4b3f91b9c871a0d6d9d3489971ee60","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.17.1-alpha.5.tgz","fileCount":84,"integrity":"sha512-G7xXhMu6ZaHiv+5dl/9N3YJB8nNpOX7I6zDd7WmwsPX+tDPkzWL/meN3xUNQ0MYb9D5RXTE18JbOSequw8lGKA==","signatures":[{"sig":"MEUCIBS1OOwjMpgDSY1+oas9MtLsOTY9xqn78NKtDwoalllvAiEAgf/bJMUl00wRp2rC/QTwBCNCMxg03BqyvHDIoJUf50U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNoq5CRA9TVsSAnZWagAAECcP/2v9V4G2zrl23DAbnVc1\n5z8prw3KPtUOVVoptVsyHnaSB6ynaRp/sTRjhApDPu00/tSYgipgzdtsr97Q\nZHw+KXLq1IQGOY9nqxmGe208+Bciiiun8cTC9hFCkxdBXkL+/N5WTColAPDK\nTZiqzRRu/O127mEXBv90LKz107/7FMqgfaNi76bzXxTBha8cShEIBvEsRf9U\nl2/QpIcteGwlr4cXK580yVSFdWVbQBzt9ckzaceRZdG1VCfRlBetK4W9SiIx\nwDn4QPIVBaYN6oxJCYDTbE9iid7TEFsHNAzmyZn9yZw0dOI84BX0apgiOCXR\nn6WZBk+Q3D9LAyosIxnpJWU/Ig7tX5JTexJOBL7T5b9YT9DmvMbAGB9nHs0L\nzBJheIPfos3WUcyuALVanJ77EVg9UCVoegkQeH1EZ1lGV/Rbpgj+PA4vppmU\nLQXULcXz28l+xB2Mf8dE9N/c2TprNmCRGUV6ctaKSzlH+aUOfXM3XqDJOr3J\nHCtwjd9p3d8Zdi1pjv7WGuEocEaGVKnK8jxhoTAQxgdWJatO3EVVzwcgMTRm\nDOkSamJmJEl3PfWE1h4RPfwueEF8ahZHEu3N5VK6I7N8oP7tCVKxObwI61Q+\nNqN+ShdogrIeKujuKMxw58dPnW9R5VCpGjlbzy5fVAwo6MCdyKxwHY7Ot+ZP\nd5GK\r\n=68h9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"36ae1bd89abc2e2cc7f64e4a35a94d7e75a81d0d","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.5","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.17.0","@opentelemetry/core":"^0.17.1-alpha.5+36ae1bd8","@opentelemetry/resources":"^0.17.1-alpha.5+36ae1bd8","@opentelemetry/api-metrics":"^0.17.1-alpha.5+36ae1bd8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.17.1-alpha.5_1614187193158_0.7338120123135452","host":"s3://npm-registry-packages"}},"0.17.1-alpha.8":{"name":"@opentelemetry/metrics","version":"0.17.1-alpha.8","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.17.1-alpha.8","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"744d5f2c328b5a980f7af24f2a79d6eaaa1d36d8","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.17.1-alpha.8.tgz","fileCount":84,"integrity":"sha512-0nZf9UMJVUZMH9fmONu/iTPBnePNF65qTZivCaLABpba9qV/eoalXYRq/RxNfwsu+9sfltum01ky3OeDyAdvdA==","signatures":[{"sig":"MEUCIQCcfuRhzw2GtXML5Fx3gtCfe7vE1my7c6SSrMu/zjmP8gIgT/C/8pG6IFrL7IbMTw6zICDze+oNeUa4/EOkIxRbQ6k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPO5UCRA9TVsSAnZWagAAIp0P/ROThY92a6ftsgZrZE27\nXgPqbPA6KFZU92EdNb1MxnUIMgQf5hX+xd/hWauG9bmlf+n50wxUT/u265PU\ngfVB31TQ7A3g1TX+kBeTi6nsSpu5b3s8N7Lqq91z32w8zH/YZfMJJHVJl4X8\nSzZ0X2n9TOjwXfnTG3tPc/2ItRAOSVzdsEUHAfw05nfYGPcHWwLnLxHviADW\nE2Dun9M+OvgObMzSy8gAdrhuZj9rFodaCkf+DoJQw3uZSKCXKB6LXA2f5/nU\nXl0aM360W3ptuz5deOqACYRgksdNDfqSkPxo48IWYFjBM03/hXXdXu/hONb5\npdv7SJBrlNv7skHfdjWJ5HnbuagiTGhCKhEBo+Xxi+CHFVC62EBOGRU+ldZG\n4N0Y3nqX338utirYo0B+0hXgy6gkQkhRkUPd6dWvyymzyFFyNBvhIFpROsyk\nkGMWAehEbXNsMYzkZorLc56wGRUHcfz3u4TnPb6x/H+tht481fAv+Mw+zUUf\n4pPc9LLAoAOmrlm85CZi7521+pESpQ7ksu4Y9NVfMf1grCn3ANvuCRuqe3AN\nmGPh9lHiP2DQI0zraV0/X+plOGsUVprLGJJxrHETy/uFnWpJw0n/OThZDbgR\nRGFLJOjgh7I6doy9xmpVzIEHA1DV8QqbyeoxyrNnrSkRsgZLVZWUYaBRZdYk\nbqv6\r\n=RX3T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"67f7e70a3de005484d3e110b06f6bbee75b6f8a6","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.5","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.0","@opentelemetry/core":"^0.17.1-alpha.8+67f7e70a","@opentelemetry/resources":"^0.17.1-alpha.8+67f7e70a","@opentelemetry/api-metrics":"^0.17.1-alpha.8+67f7e70a"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.17.1-alpha.8_1614605908578_0.7828738174086913","host":"s3://npm-registry-packages"}},"0.17.1-alpha.10":{"name":"@opentelemetry/metrics","version":"0.17.1-alpha.10","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.17.1-alpha.10","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"7f6fa769966b783adb83dc4e1350f02ab5782ae9","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.17.1-alpha.10.tgz","fileCount":84,"integrity":"sha512-CLwB+W+7JAZ4EXgZkIBUjPpBf9v/91PLNGfFytmDcVrMoPzswcqIVZzrphr1HKrR8wrvVXx8OgA0M1ukcqgnNw==","signatures":[{"sig":"MEUCIFCi74xYb1BAZq5sabnRmO7nW56+7egwIvGcqzV+5jIdAiEApQN6wmtNupgws9I1gyH8qj8j+cgVIop7BakEGknMOeA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPjwGCRA9TVsSAnZWagAAwqAP/1M1ot8a+61sicEDS80L\nFNwGj6lEk0F3hfRv1ay2nmcGKv8VgNpQNI4rWhcak6iZEKpdA9SfVmiPl9gJ\nIhkGj/0x3rFzXSMriGQT9Y6wmn3p6GAUmLcdjvRIrTg4g5pG8zOp6msixtsL\n+oG4N/8tQUYq/xJIeApSUO57CBOIdRNekElA+dXf3/8Y+2bMaxWvCJ76s1WD\nPjrnlPnkEgZp0Uwm5WUdG++B8JSixOCGqxRRLHZo8pgjghWigV2NpDRn72Do\n+YCvzmTGyKFoix43d6fis/xWZYM/j9EZk4+FVPi6kHZSKBVw9BLtmp8KVc8F\nCHi+dNYcxzZxpVYlbpjU9azPyEjoC6zsfM2BxDq2AnhJ7yAQrt5f6nZoaQJm\nfZiDle/7vtW/UVjiYFPggIUb6I0QTLwPPaN8Nb7fXYJN3sLRmJ+m19/DU0Cb\noFDW2Do/2hiWB1zkMCIP7lVhwX5Qj9PZBJqW84S5kaen5lZNR0ZidQiFMq4Q\n0VwG530CkudUU8+kXG+kBqTqlSgBQeQC7YX6VLDqTnQgxvV/6WEYfIz7b6bW\ngVLb9yC9ETcQMAE9vEZ+AsJs5HzjMEi32CUCyYZCPa0YgwSPa81dM9cY9zmL\nOwfur7ay6oFEveZG3AuN+mRk9BhBRhAeFytBY3Nx1u1jLcTmlgELiJd2jRts\n1k+u\r\n=vFNW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"4c609aa13c899dd2b7a963d2e3e491bc35ffb742","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.5","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.0","@opentelemetry/core":"^0.17.0","@opentelemetry/resources":"^0.17.1-alpha.10+4c609aa1","@opentelemetry/api-metrics":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.17.1-alpha.10_1614691333686_0.4506541837517455","host":"s3://npm-registry-packages"}},"0.18.1-alpha.12":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.12","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.12","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"d5670dae6d63abbf74a06e87d988e0b03b9d97ed","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.12.tgz","fileCount":84,"integrity":"sha512-hqo5puYyJofSdHf6o+pFoHeb7iTBXp4unJqbctFCM6dotKZ6P5sZKuRw3c/aP2qLy/l7JoncQ2C6Wsg/3kViTQ==","signatures":[{"sig":"MEUCIQCQnoIjTy9qG938jNTEBZ/EA8TmeotXPmW0lSTCIxZERAIgL78vgEoe8x2kx14E6WOxbpS/EYKRTjkOgV8YJmt9kGY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPkOECRA9TVsSAnZWagAAnecQAJvweHeQN6KgrYXDkED7\nGFIOocamTN3E6pB01DSV6uLsq5/+zLMCSZ28Mog7b1oAdJTdLA6lUftl3Hky\n9ArIPHoTSvLUebm4bHDKZkd7+Uch2n0e01HZvU00YzaIpnYqvyxRfhgAAov5\nI6ORV3vloNZi2PoQFl3Ceg00OKl0eBZhaRSnaSQ8tlrTp9jMSdNYW18u/egs\n+jNtMoYfmx2WKyzuY9L31ub/HsJuXW3dugP8n+28sAifhZBeSYnXcsarrxWO\nrXB8ofxPleGL5iiQDsLXT7CGMva0b2dG5y0LwShBOcVlYGpdXnTxOLtH1Vw7\nmUpLU2TQhnvQjVRgA1gOPB75Pev/VWWhKH6s87MYPG6Sw+XQyl5zA78OM+ri\n551+hzLkm8fts+l2BU/wcZn7HRRytlij3n6rxASnjugPhj63K5j7s6L0FzJn\nQzcVHa/V297GiN3UGakBfDqYkXCuo6g/0uqVtymsXFFxHPWOeH/rLU6Nmvvk\nrcaumeMLYaC3WOZjIUC/iCx790wlb/pIouVfrab8Zl0CBN8DEzFstRSu0/Tl\niJlfaoKbCXUEMOtz0Lrs1wlENprtohCCTawiGTwuAXa7l7KQ/oh/7wuOD5Tj\nwQhkQvZHFoKMUqIyo2l1ePi4NvYzJZKPTmoVrihwwoMkfOFY4yx7nq8cdfly\nh8iR\r\n=Qi2I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"6540b54a8bd49746e164ab730269188237f89b1c","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.5","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.0","@opentelemetry/core":"^0.18.1-alpha.12+6540b54a","@opentelemetry/resources":"^0.18.1-alpha.12+6540b54a","@opentelemetry/api-metrics":"^0.18.1-alpha.12+6540b54a"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.12_1614693252107_0.8740203017949986","host":"s3://npm-registry-packages"}},"0.18.0":{"name":"@opentelemetry/metrics","version":"0.18.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"4e61488a88a55f0ebeeaeda128457108e7405013","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.0.tgz","fileCount":84,"integrity":"sha512-BH1P97bY6ZHBPNlW/0gV+Bc384Gqpu0KOdKWy2ZcntxGemhZ+byguL1AlqqS5ip+AaoCvgAmaY7JzuXq7YKo4A==","signatures":[{"sig":"MEUCIQCAFpfKKLf8H7U7Pvp4JiW7cGwY/jHacO2RuNVM6Og/kwIgH8gx7dk7A9fNka/kQiXmCVMzA+PU0hxa79lnQDLY8Mc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPkUsCRA9TVsSAnZWagAAGNAP/3Ucxl3gB/MqqS2rhxzI\nCORtZMZN1HRzPoo3O3uaTEQrM8q5cw/QOwyWst8JLAMjdFHB7yUULJrTcSqp\nhvbv3XgcO3d8U3yexbGlwX3wu5YyAPROhnAUrKwUhSMclJklvQaZ4kEDf6+2\nS+X+BWm2ynU00rtjzpUnHX6Dq4eAjhAfzgAU/lwH+XKpbkLCcGPoeK1FkoTD\nPLrkV8gnmJ43RHF8ilxBZLekkQseEimLZYm8Rzwf+Yz3BH76/CND8wmimbZi\noTbfNzonadNf/cEznoFS5z8tYVl8870Cwvz1ZRqx6axMYRQLbE2hJaLl8ejr\n0X8svWhbwpiNAm5YNkDjAzIipSzBYSioMaxwkU6MCFtk2i4Mcgt/QMHXUDkm\nA6bfabDl0D1LhCeX433XRGIgjRrmP5WIo8b8Xe5/5fGmIfRxkocmcvCZX+FM\npIkgpal7+u1Gvs1aoevZ86zB0ej35qKllVXz7lVUYwoqNSOUXayLlFw+TADt\ncIWG9rx6bSrRgVR08T4By9DeNU5HTvylsoI2iSCQH6wGZbyARBIW120miWb/\nqrFPqxzRaQy6FzwmKdVG6+vLm5JfInPPGKtaNGbhAyo0AmpxQzGsvDSj1vQl\n4HDycOahb7crXyUkqRcWKLnOMC+5UAliYPLuQsRwZ3DPSIpEZsX7Ozs5+UdQ\nz/Hn\r\n=8JGK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"6540b54a8bd49746e164ab730269188237f89b1c","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.0","@opentelemetry/core":"^0.18.0","@opentelemetry/resources":"^0.18.0","@opentelemetry/api-metrics":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.0_1614693675844_0.043601021617518","host":"s3://npm-registry-packages"}},"0.18.1-alpha.3":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.3","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"15f8bcfccede91aaa5dd683d8f9b4b2b1c37d947","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.3.tgz","fileCount":84,"integrity":"sha512-itpp0PXR7NZT5PPn+xSH7BvQ58XfLDjrixEjAlqkl58X74Km54A4Ty+/r430ylV+7Hlnr+NvKjC3L2afcxObSw==","signatures":[{"sig":"MEUCIQCJls8mFiYwfaLTn9RkcMrLJLuw2LPf6dHXdHKXozNUJAIgE3TXxeO0x5IVBBXDcg99f50RgPTfC7RAub3V2ENrpZw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPo10CRA9TVsSAnZWagAA0twP/2K/yTROd737hd8uojcT\nBJiZ103HJWEgeZGcqt8gmzrRus1BJZEwKktKGBHXzIW4GAgPOuoz5K55eupC\nDYnE94yuWZpmR1bj3YdVQFSJ02Tah+/4wkviqqLsv3Hg3NlRusfNDgLvosT1\nChWhPzZ8bBDkD3HfLq0onCZ+woPjD6CcAH8K79U2BEfDm28bhBM7uCo+Wkfi\n2bmTf7I9SQu+EcDjZmjwqU/cGMC+WsFUhWe42kQKtdCvshZtUdMJpNBY+0Of\nsFhxQULk7Ksrjdj34laPq/AZHNbou0PA0sj3J7CVVMSGF/HZuwu+FwQy+IHa\nYhajqmK94SHex2Q1AFWJRKBJSJdtz4H6NtKu5CkIo/YkX8ZMgiz1RnC+4rxA\naWJH7h7WUTWzCMIUwDURTynJfnTZlXBhAGzvMkKUXfE/5ja8EdXdp0ibMEfr\noB8S8MIHiW2ee+dmZBjbSMR8QkZuTK2/lvxnLRekkrlX52wCiCoh9+I8SJhH\nO2cy39eI+yNB0cqrkBm25NDzKHdzOzVKD55hnZoxEPlKjigpGRQ/Hv4nNYoA\nwKkEZeqp+10jUndBbxngJryOF7uJXhAtZ6gtqOT+Y2pMISS+m0eOK7RIsrTg\nvzVgUoW/1D9zpUO07UGAqO60phAJddncXhNTpx9jsS2qy2Sh0WzkVxBHHqDJ\nwWd2\r\n=qMKY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"0643642f61de5e2bfb8942ce7b5dadea643cb295","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.15.5","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.0","@opentelemetry/core":"^0.18.1-alpha.3+0643642f","@opentelemetry/resources":"^0.18.1-alpha.3+0643642f","@opentelemetry/api-metrics":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.3_1614712179583_0.1376432396990097","host":"s3://npm-registry-packages"}},"0.18.1-alpha.16":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.16","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.16","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"205c6df2c6a2952ffee62134c6f2779cd41271bb","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.16.tgz","fileCount":84,"integrity":"sha512-0Iyls8iQrPelq9UemHl/TJaE8QSMOUoZ/oC1nrauCPhxsF6xV8NUSQsHEh7IvgTnt9r0W2kKP57xc580kP8kYw==","signatures":[{"sig":"MEQCICY4xyaWR/sm03DQbdOneMrpGI9eWZAT4y64VMKBXFkeAiBmxHmjUUsoTUd70JlS+gGHx8i0mpA5PGIxtHmAmVfZ4Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWJeHCRA9TVsSAnZWagAAp1EP/3DIZnow9zDiUjVD+mhY\nErc61Q0oAmVP3p/BtYBqUejfhd60hlQXs6ggGGsQkpkEXZvJ+k3B93FSfq8E\nWkF1S/+FI7Mak1TMKS0lpq/1GIuq1ccCEmXTM6MQ+B+iKeArcHc/ou9LaBDb\nu8o03+ooV3DpJdi2Y8zkczZmLG7T4HDx0uREvWSsLEey4zc1+ctX5lmmCeHW\n9V1bHcGImX1W2kPtLQkxNnM+ulthUuFqpd85QGiMbx3r3xfDCHRmhjmBohA9\nFEp3vk4OZBilWFIO8uTpOiJ3YDCqWxz+4lDJx7HUfzDICrOFzpW4KQsmVY1Z\ntdpPOZq4ApEpzgr1rnO44PgVuAKtm9ETURi4hrRN7TosLH0fUQqEekkTz3hO\nfgL+ODjU1Ybw7LDhNR/+x/mvhAmfW9ZYm1AYHLVNUiSEEd4O4uSJhBMrQcco\nKZBAf6MlwJ8ddrd8mOQF/UP8L40rneGPlOis0IoGDjL8i2Unx6c6x1TXOnwf\n6n3AtfNvipgFlnPgfpZLMOiJJWCVtqFan5b7fN0dvQSSr3XE/0j5VhA5k3G9\nswg3FbEcztChahDSc/8U+FE7omvk6M9FTZu+eQeVNk22+L6Lta1EI+6SZbmW\nNShGSFSREzQCMDSG53fuOdrqW21J3SBa4xYIvQtivZ14JlDgIi7zkXQ5fyyY\nYhcj\r\n=pMaI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"f045eef8b02e6dda452aab3cdbeaf78b225c2fd4","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.0","@opentelemetry/core":"^0.18.0","@opentelemetry/resources":"^0.18.0","@opentelemetry/api-metrics":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.3","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.1.3","@types/node":"14.14.20","@types/mocha":"8.2.0","@types/sinon":"9.0.10","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.16_1616418694789_0.612611365341861","host":"s3://npm-registry-packages"}},"0.18.1-alpha.20":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.20","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.20","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"2de1cf5a1cc9e7020c468ee936b3376f4834846b","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.20.tgz","fileCount":84,"integrity":"sha512-ggx95yJl4XxqQTty/jSSAy+GwGpZyS6oV9BhFuphxswC/QRvOqys7UEcWj7CSAzLc6KWU3sUgZqQOXlFgeZDVQ==","signatures":[{"sig":"MEQCIEjUC9HTkc8mL/3QDUWLmLHgTPfAAu1Gfhr9b9F5pkO+AiBHVKeQ7vWk/HLnpr67Lgl6Vw6I6w0tKRJYJC7L6IvbDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWzpsCRA9TVsSAnZWagAAttsP/RIUD6sQJkovcQs8XmJ9\nEs6l6EyVC43z/zb5yl3Zlacv0DGNll5ho+7U2SbfCjXOpY4icX+cd56HVmJ2\nWDXYCmOss7w58h+/GncO2p6UqwsK/ubDa+7KyacHQquAM53AotDkSmtdIefH\nDVpp15XbuPOp1zJUHHsWeukpyd40g0g12Cvc13M8iZCwsWAmzn0/2+lY5G2w\ny5idZLmXF+ikZYFzp9L4YVNDhntcb4sVRQjFYgIqaevLXtbX79P63I1HLWaE\nuDhwB/KpkByE2wV6yr1Hkpx4U//HG7RkqbyXFVCzlPlfC9OTvLHg7z6V83ER\ne+fMtFjdSDhEe/RQekkX9Uojim4A/IZt/BZGk64dCm7uaFFS9juaI3gpMcSh\nBmUeIZTGFs4E6hyTbGl2f6p6TQYOS06Jscb2Z7wE9DpIi4Ac3RHOeQn5E6FG\neJKhLNB6ZB1e2TKPMyHpYrl2C0bBi2tzqugJR43kl1ExjvV6DAv+OfUITtVG\nPReQGxxglj7BTnPU7xZoVfvDjz/u/5tH/EXHCHDwefJhMHiowUMsHWh6rMuN\nyAp0I0ZuA0IpHwGal3XO2S34+g7skD3ejCtXY6+NCH103wUBe4QhpDjki+LW\nd4t66J8biSi54zPA1oFZTdDs7VKgHJ96yARbod4czcdf/3u0++6fKa/rw2fB\nYtGw\r\n=29eH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"24bcfe82340e02e605c5c722b0f955da50bf82cf","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.1","@opentelemetry/core":"^0.18.1-alpha.20+24bcfe82","@opentelemetry/resources":"^0.18.1-alpha.20+24bcfe82","@opentelemetry/api-metrics":"^0.18.1-alpha.20+24bcfe82"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.20_1616591467748_0.6992681709676063","host":"s3://npm-registry-packages"}},"0.18.1-alpha.21":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.21","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.21","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"dae9a155173b959ec07d97c200a03c474fa86d40","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.21.tgz","fileCount":84,"integrity":"sha512-i3bWBrWCGW4wGr3y/Pv+/6z3BCQZl019B5KXGjXxI+Q9HY16j6f7HJ898jZrgftUZaqghjth4xTHbl8c7kFUVw==","signatures":[{"sig":"MEQCICpAW+cQdgzX7zCpE3EVMjfIVpd77HNl0YdQUgi7AereAiBm3+NDjufW99t3lm8xuqp9VEwjvUM84mXhE8iYwGBg9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW0j0CRA9TVsSAnZWagAA69YP/1oiVzRCXyihSbidljN2\nu5jgS0LgDJsoc9nm41HUCJdo9wanCuWUU+X8VmWUURWpw/mtj2ydMXB/XxcH\nVLAhwJ+8aW6BHJd8kx7q0I0e0qrB3tm8Rj4dsCN9Ro4tmly0h2OhEQFhyqlb\nL3Vn6qJDcdOGV81plbtxUOS/OSWH1AnXki91WZAunSG8BZKs4fnKcg8MYlRB\nYCQ/DCXhbnOguXlM8xzPv4JpZSQzdEhij5E/3I1700hgSVMQ99rhxW8zdF/C\n9hasfZdYQLq96KXxu30W0PWjnOHYh/XVLWnHJ3OdwvuaHwShjd/yV2RRoNfw\ngNRwODgFWwg6YszRGWwJrKASCQzdBGoDcwFFrI3ko1C5GCnt7UVhy/INqvl9\nF/E3K+e1zZ5EwcfCbflyXuUqPudmJLI9f2WXcM4qphysg97u6GK6phEb6csu\nihyCLSwfsVaIYl7p0TIfEs9aueXjD85+4x2ZTxq7mPKsiAIfNd1uCDWarZPs\nYVVZIE9Py5ku4hpjH5170oIayVujRxj/3Nh22JsUEI6R13K1S73jbkuzMjlr\ny6YG8xK199XlLcD2Bdj+uUpNdNmdwshkN/lji1QAJ3ChKK6sPuaessfkeQK6\nzEeDjyjWUZwFEsqgpCnC6yq9hRKtDYbuPSOoDPa6lU/uFtmywjA3gE6HUyIq\nYS7g\r\n=MQXr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"8010ac2fcd0c658c0a4184cb0f5d8108db3632e5","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.1-alpha.21+8010ac2f","@opentelemetry/resources":"^0.18.1-alpha.21+8010ac2f","@opentelemetry/api-metrics":"^0.18.1-alpha.21+8010ac2f"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.21_1616595187911_0.22933154201449146","host":"s3://npm-registry-packages"}},"0.18.1-alpha.23":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.23","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.23","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"731a8afffc1e7dda9d457625a968d0f51d6e52e7","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.23.tgz","fileCount":84,"integrity":"sha512-IjbI1y/nQ+XL4wCNf+D73/2qeqn/+cwVUhwXAyQ23qnx1Zii/AdGRmoWYJIvljNG7+qiI8xGo1S1sKZwfbAkbg==","signatures":[{"sig":"MEYCIQDlieKkOKDwQFkM76VFmsFd6q4Y7VKI3OwDZzjb/AIlYwIhAJx1EVRIAdxGG3MxDPXZ8YDLF8ExC8t3FLB4VTlfvxKv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW5A7CRA9TVsSAnZWagAA1AYQAJWi09r8Ty+cu76nZLRp\nTwtTMAKSYHOzFkavaPzy+jPjwocfOPmmpd44b5RRQIypd2Z87mBJREBV3cku\nCtxHmMRoUTA6vgsMhSfHHAaYuuUuxj2f8XdoCNYj240eiXqPHSzzbcY48nuj\ncqqbzQVJkM+kxf1/VfweAmJ5whnTzRlq++VUPyZ2ZZSJQngHDAxvX3EgpW+0\nTW9RCbI4QUQzN6keXyEdwH/ak9UEV1cuFJN+vMlu+PaB25muWaj6sROaVq+J\nicYIZBLIsBGjDbvBNAI9m9S5w547ETmxs0iwtQP3KdDxPXduap6422FfWw0N\nDUArPXcB9jbmyWjRLRDVwHBFeTJZlQskrgoRst+hcrIG4Al0m4YvLu1iiT/w\nNZg6wjkE++0pcfK8I6jp5zkIVAiDnvXuaDRE7r2EZ1fQcPfe85LzOv9hhjRw\n9tknHYRnNzl6wroB18xNJ+4jU7YtoV0uqDTsBksYQo8jFj815hFq82zSZVC0\n7DkeUqqBrQ9iEhxweGWYlxblRl7WjaA44C0mM5gKAGPllKxM3Qks4eSZ2qrH\nBhgLnNTG9xbsFlL6ylH3Rwy2YKQTOA1V6OMvZ3WttKOekEx/N94YE3z8yVEH\nx0mTmrVjp8eWEReMrtgn1pGGhEWxJ88LFBiC6SbQBqZGLLP2Gzd/WIFlkRUA\nXr5G\r\n=JdB9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics\n[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-metrics\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"41db733e60b5e4f981be94eaa56e4fca24b539d9","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.0","@opentelemetry/resources":"^0.18.1-alpha.23+41db733e","@opentelemetry/api-metrics":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.23_1616613435384_0.22646446454921332","host":"s3://npm-registry-packages"}},"0.18.1-alpha.24":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.24","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.24","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3a56763be21ca67e5b51b51ef7c24fc8e16a5837","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.24.tgz","fileCount":84,"integrity":"sha512-yHDp459dm/tC7miHjpuhrcgHeiyoBSDIZvzAbci0Gfdt9iQ3vM2jf4BN6VuspegYarq24IoY4zZpbPNNZ5xqZQ==","signatures":[{"sig":"MEQCIGkzWcg+/3dZnbjWdIA7QDs27zi5KeshozFiGxI/ZzRBAiBmUvc3qtQdA16xAYoSCYJ7WTlcqS1FL60P98wrIlNxhw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW5VPCRA9TVsSAnZWagAAL6sP/jPDDekcZjL6WMG81U14\n65dfkFDEybAYM96+KyPcxUHOQyT8JZdeQggduHYwMvddcvInBrU98WoWDjMG\nrBvoYRweGSVcaQ4UayB6RWfuvARSUFoHgvXUAnZ7NfqhasHT5elRC+P4tVcJ\nGGq+KutrIpS8MIDHApL6Nz34+jpGPCxf7MK3MDB9W3UMrrBzFh8UmYgVJsPS\ndZKWO2x2d/3KSud8m410Y2wURy3EWpF2SMDxu1Cje4vkFsQkZf/ok2qA60j5\nphj0QA+hO9Nm1fz6Dn7omaDizlyeWfRwEc9zzQ1Ga31hDgeX9qrzVd/7Wibu\n1ZuqBwn9fFd1TA8rhovA2DGW6X7nV4rJUx0KRVNHekC2J4noObEE6U/AVxAo\n06Xfevtdsu7mYj27J6F0io0mLC2/8a7wCHrieDHNwRIUx6SqwuoZkAmoDDk0\n4fQ5jFYlLXYcsY+8LCwAWb++9xBd8BBA86fQ735bw0aTbUDPGORF+NyiUVv7\neOCQJchAAUbj3rGZzvU3SjPsx2cn5otZt6G2Py9pm+ejYTkSw426ZGj+Hsgz\nCWXCrlUDiKkLd+4m//bGjV6uzX475jpq+fkzjGBkXx1od29YWGzfFG/Yadl3\nwlDEU7kd6SMlw8O4hLh0dhPSKqA5cjA6sCd3NezOKghzAZhJBAga0mkrDJhE\ngcBT\r\n=tdjh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"69f2d3c264497bfdefa2126d0865ca56ad5f22a3","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.1-alpha.24+69f2d3c2","@opentelemetry/resources":"^0.18.1-alpha.24+69f2d3c2","@opentelemetry/api-metrics":"^0.18.1-alpha.24+69f2d3c2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.24_1616614735119_0.37792864236581725","host":"s3://npm-registry-packages"}},"0.18.1-alpha.26":{"name":"@opentelemetry/metrics","version":"0.18.1-alpha.26","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1-alpha.26","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"93a786de8f57b98359759fdc49fc164874ff28fb","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1-alpha.26.tgz","fileCount":84,"integrity":"sha512-p+hy2lM2Cdje27tz6r5U2Wv1Flna42YWHQwsQOvsYQI9szzII7qSru7Ngq86eobJxCNhkfrr7Oz8ReKykOW0fQ==","signatures":[{"sig":"MEUCIQDiFX5xxffFmsKPoQyPCFqwEculJ72o1U9tBviMKjYJCAIgXAG/G33cV6N3Gj2um8EockcvGDUpP4P56d+j1sY3Olg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW5xsCRA9TVsSAnZWagAAiPQP/jDkoED8hwD8neUjiYK0\nDxKsvAEI8VcrD4ABDSr4+ivjsF8sVusHf5nEWX1K+D4BxMBVZmoRm9gp5wg9\nYc8DiaJycT+wqyrG5evcNkMPGZod1MPxqCpTM2bK+06WPFSRLv28H01mW44r\nIri9hGvJIDXZRDjvH9fApk+8UCtU3zRAkC3ZieerVXLpFVSIQm1smvRijb/Z\nQMRpAWtDn95VqZ3LwNs5XBHvFoPfbhSHTYhdBfTEb4/mDbmlwy2P/E1WHqbD\nH/lOIywf1KXz5407B+6CFkAKr8S9tsq8efd8T4gE5R0GUeKstUupXs0JTn5S\nVqttaIfrQavS1LUKJupJ4MV5+gZ1BpLbwPMTwjRsSmGrbkylWzFtnKgvT8DL\nFyuw/HwSkR6zXHqLSrCN1dYllAK6EYm/svZsEv96x0Zx2OH3UIDATMNt7lWO\no9AWTIBgzlyIPfOzF46bgZ8yFUF1FBET9HhCg650oOQaT1ous02YDSqOe8Sc\n98/Yaf0tNjbQeqQUt8sWg9ziCZ6WTWILXqiuqMyBlafBLPwCHsFMaU5QCTOt\nb86mN1VGjhZ2tORTw2Ev8i579xbIgOYqnUrY1rQZR/TLT+Q/CNGu7gx4lOKa\ncwnUUm9Fft5sgQLxnld/cGhpxmSkKxeTtP6BagXmg9Kel2niVfqJyLh4IKHE\nJjlA\r\n=qmI1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"91483873ae3e3e8a686dbe3b7711a233167efba5","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.1-alpha.26+91483873","@opentelemetry/resources":"^0.18.1-alpha.26+91483873","@opentelemetry/api-metrics":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1-alpha.26_1616616556491_0.1660442363355883","host":"s3://npm-registry-packages"}},"0.18.2-alpha.81":{"name":"@opentelemetry/metrics","version":"0.18.2-alpha.81","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.2-alpha.81","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"b29aeb52aa36d595803e5ea3d59d72ca871d6f3c","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.2-alpha.81.tgz","fileCount":84,"integrity":"sha512-744OTUaJGqHheaFdyaNMjL7Oj+inP9PAzFDYFwvBYpPY6WI9E7LKU6ifZ4Kf0chXITVyPBDZPA5KQdcDqiaOyg==","signatures":[{"sig":"MEYCIQD8aK9NIF6ILcecfXTBo5B/zHuu+wBFfaAH0RSkU/oEMQIhAO6msMjWZe3f5ebKXVvntGsb3UXofxvfzTIaeW6XFvUC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132939,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYi/9CRA9TVsSAnZWagAAJjoQAKLrH2f+lkKgGXhyTWmT\nXIuGD1wXino4dFOUY1X6O4cpWRl85RZc6QlF8qlylfvBsl2v7dO7qlcTeG+j\nYhpXN1BLYC7Du+/D7332+NgwX2O+jG1CHEh/l6CGqmWx6MRxnevgtIbWErq4\nlv+EFffDKAL1TLdt4A7tWYCloak29WiLHjO0NzzWnF3a2uW8KKRK32pPRea0\nMMtobRPfHpVX8qAXvrT9cJyXWOaOT2i3Y46v0ulTcLq+SR6BH/ld+g0g+uLt\n/hfyF6W/HLVo3kPlsmiKYUImC6V25eDCclaKNfboSxWdA4T9S2DEPu8U740x\na5aPlMR5+FL6B9tB0DNax8r9GS281puTBcqcGfAqzATrUH9u6udZDCG1f9/F\ne3/nckgwhobC3R0aXXRye0CEXP6WBjwu0nZwf00IT0VQc+zSIMX3rzXWfL68\nKDxBFNgjrbfrfxteHggKLLMimDgwYRwKcKL8vRTamufMHI33GjLJq+DMDP2C\nSPyOMV2EnKIvNdksjTTDnuUUtk8VD0GE/Qxyb0K7OD8mMfPC+FP/4+DtiJKB\nvUYgRgoB78CUkwM+l9Rwk85ps/y9lVHnulrHGOlVewElzFrc9r09XgpL25Vf\n1sqivA419Y5uo1VBrzQ2IOetWZCVHvN0sI+MyUcmRd/7lSAItVINUEXPOpvr\nf2Hx\r\n=26Qz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"e369035cd228a5c8781069a99322c5b938061d20","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.2-alpha.81+e369035c","@opentelemetry/resources":"^0.18.2-alpha.81+e369035c","@opentelemetry/api-metrics":"^0.18.2-alpha.81+e369035c"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.2-alpha.81_1617047548972_0.41345837397192287","host":"s3://npm-registry-packages"}},"0.18.1":{"name":"@opentelemetry/metrics","version":"0.18.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.1","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"002313bac75b886a2de9f5214bfc7483321d17b9","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.1.tgz","fileCount":84,"integrity":"sha512-Cr6X6I/7UR5u56d9McZ4hyjK7facn+0bzTSvHJRMOAW1ZdoL45UX2mL9Dgm7Unoih7h2zZspgVVL4ZJE5J/7oA==","signatures":[{"sig":"MEYCIQDw8yfet0si6Y19G3jryHhNqpd41JrDoqClDc8AjS/ykgIhAIxv76WaU40sDCjvn4es+QgdxrQMUmjnW9HDkZjtVem5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132867,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYjK3CRA9TVsSAnZWagAAdrwP/RJqh/2N008d9a4xeG2e\nzlYIHmrgRXNWHP2baDtDFT4ukegwYfjmhnTAydXkm6dY2YDzlD0lBPUY/Srp\nBD/FBzRtLlhOSh4xD9lpS/mt3mc+AOHlv7mlZFiwv0GzDolXNMUwbPB9MUg8\n80WC8RW4/ErCgwkmHVM8TtKfgzWT6pr2DS+hB+5Xvy/6rNWFHSvXM7FACrJl\nGrutIfSWc/6yn1KvE+FIKfxpGO00ot6gPJpaLYM9HCbOcMvSX00CHqJfBxX1\nZfPfgPXQHyQZBbXW426kARkPgHN8XG5c9wmSAo9fWQ6pGLPLnSgJR07unX7r\nUJ+2n8TzmJW//LBCJ08E/t0uVabvhbJ2UF2ouKbKnzljiqvwCNPCpI6qwaYa\nX5gJUwtuktOQ2IWirqbf6BZ1BalEOBgdOJ0RWC5uysQeBROuykmTBrZ6oeW0\nYDxhYDJWAC3pBQzXqStIy5lIF1hKMS+NCCz8Up3SPHN6V4+OEeyMMLVl7SGN\nX58bftDxv4hjlLzfMR8JhVN3PvKpN391inGCsmBadIDDK5q/XRcR7SFqBZol\nmjzTdpD8HQj8ATDx2elzEoZDVmA1Rvg5XCfOk29kLC0oKh6sbXESnThArRR/\naSVGJ3vuxGsks3WXlf1IqhjU6ctacMiHHVz2CMEwcFOoK8ESiPbj/YHDnI+X\nNykb\r\n=hFvX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"e369035cd228a5c8781069a99322c5b938061d20","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.1","@opentelemetry/resources":"^0.18.1","@opentelemetry/api-metrics":"^0.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.1_1617048246987_0.24197108213664786","host":"s3://npm-registry-packages"}},"0.18.2-alpha.1":{"name":"@opentelemetry/metrics","version":"0.18.2-alpha.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.2-alpha.1","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"106eadaea6bcf5c6e9dd8f050b794e2ccad1c71a","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.2-alpha.1.tgz","fileCount":84,"integrity":"sha512-TZEUqGGVSxo+v0qqKAlYnSVkPRNNViXjl2ZRXsFrGYu9l0psVjJJZHDm9r2dJRSIlxaMwLLX6MNc/cSkZzIfxQ==","signatures":[{"sig":"MEUCIDN3W5NyIpKDkr9caSuRHpSjpebC6KexGX9wg1MQcKZaAiEAuCdNSpZmSC6lxsd/DZX+k/hiEudx0hVXVNma18ymrb0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYyJQCRA9TVsSAnZWagAAaYgP/i/LJtcVJuKfYfuD3Fjr\nEN6EDTfK+eOkURBLc0DQDrS9KxDiS3jD2CXqlhrGMM0+Efj34+BSWjsYu72I\n81G9j+U+tg/FKqjpRfzgWixw/tDh/WHbSVZxtZnMYibPy+5UWloZRmO4Kvyb\npqJVmvrLrHPp3mZEbhU5alApedsBqB9k6+MhwNRyukF5qPhAv+IlAbhmaYW+\ntmBr/2tVu+FSBSSU/E7bofl4sydiTQQQaVDX6u4EUKwWVjS8F/9n2fdZA3B/\n3PB3n0UkDfAx5p43Xtms+vC5tqeqHA1x0TgBQOZnHiAhV6bRJ51+FF6yBZog\nKKKq76GsHhztP1KBc6RvKyAU5QpjtR4jZe7u+uWLtTcM7H3j543WHejzi1cK\n1k45iZ1p2g+5vktKzsGmFqYKX49WoGlUQLxWA2setJpeENfb6WQnI+NLUpoX\nNqc8QuQ1meJQKYOql4f00Zg4pzcYzPDucAlhCeqtM6s2u+3YWkQaQfBkjjW8\nsp9M+tyFdbxfbjcFxN9baKfO6Z6gCHW95GjVDHAjDuwLBBwboxpDImY5J+JH\noTWTEJC3YdLiKxZtqRGsrAhL9DQBKLZDxrJn0L4FMiVoeZTXaobVwb0A0LPI\n33GgfBTjuXcyj5R4JVmYrctugepMbxcsWIgprogMOaS1YwPVgpNlzsUBlCUf\nRWBM\r\n=3w3Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"54857c012414c05bc83b4a8da224492c98abfd46","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.1","@opentelemetry/core":"^0.18.2-alpha.1+54857c01","@opentelemetry/resources":"^0.18.2-alpha.1+54857c01","@opentelemetry/api-metrics":"^0.18.2-alpha.1+54857c01"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.2-alpha.1_1617109584190_0.941318037436087","host":"s3://npm-registry-packages"}},"0.18.3-alpha.2":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.2","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"d3fe209e68c8f61709def52c88c9621747b62c09","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.2.tgz","fileCount":84,"integrity":"sha512-pCOnKdXj3J+xueFK//UxFh9K+UdDCMNN1rdWinS97ZAYIvKJwTsA2a7p/C58nr5a2eGq43wogbTbR09oNK1kDA==","signatures":[{"sig":"MEUCICORjb1n3N3baHToIJntn/d9O5jDxOpMoFQWTmQREz0EAiEA1Zmjjba+6EPrOYgO/4RvYgALmsA61luFOIGV6lfnRNY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY0NYCRA9TVsSAnZWagAAtXkP/250XR+3QU3hVEVJvuuv\nIeygnnjDzCqWRsdUsvUhI55t4I1jd76DlAvpi2aJYdmG5bP42Pb4T+h6BOMN\nQu9yYfxNGw28gBV37TjBIg9yTckUXf6mj5h8CqGE6a0UGOL7tS53H/9mbPvs\n3R9NyF5KqB8HAb3a4dca1IEZ1UkQadSHmA8QtX2Mh0BRDSV/HoebeSxiNboF\nFAY87rZ1myuJ59tWsMqzV6pvMgYHBmvXwM48aK0a3BVTh6+PyNhgJAdE121l\nhweSf82dr/gNJ0liIZBtqotJzSzCweeI+GFMW3jhucR0GSJjNIlRsXLJ9HvG\n6ODOxGRnULSM0lAhtIBkR6Hz5j8D0sD52b9A80IiKKUV+he/nkwmY+gZ54Zg\nbH/f0hWmmBaIbakH8Z1E1habaxCJ5jHZch/UCF1ReF4fkMiXtOZf8OVbBFYu\nAOupCvA1UqdjPnBOvpIKbZtFBENREVzVbmKbqHLAcJaSWEoN6ddP2UovP4F3\nMcg7Urc+PZmbyn0zo8xDE6bHWBVcynDdPbw6dj8As4MEb1aCg/jAit/HCd0S\ny2m8KAIZFMReA9ihlUnoZtUhFLmesQuPtaUEmKkUv08P/PiJCgntwJRwcCQE\n1pChTM5179MHyuKVcM636zc9bdk/npsGaycXYnqs3hm7B+NTlc5O/MWH3hRj\nKfU5\r\n=H+UH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"2409f1cdddd92c23548c18c055a6a36efe36349f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.1","@opentelemetry/core":"^0.18.3-alpha.2+2409f1cd","@opentelemetry/resources":"^0.18.3-alpha.2+2409f1cd","@opentelemetry/api-metrics":"^0.18.3-alpha.2+2409f1cd"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.2_1617118040269_0.6536850948505644","host":"s3://npm-registry-packages"}},"0.18.2":{"name":"@opentelemetry/metrics","version":"0.18.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.2","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"4541f54399ba37bff3573f7ed31074ba8bb41a5b","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.2.tgz","fileCount":84,"integrity":"sha512-Fp+1rmey1xMgXAFpBp3C61bnAVPlQFtPBlm7oSSYCsjwqBtDEcaT8EdY/c06Vo6k+aXTuMw1BFNgTHrwDtNGlg==","signatures":[{"sig":"MEYCIQC/bhgfmtlpSCRAfww1KY4KMgT/ov4t27UOxIHPGi/fzAIhAPiLrajtylho6fmf/Vv2ixr2KIPZDTNHW27DmouL5gc+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY07ECRA9TVsSAnZWagAAZnEP/A2oPiTT6w7mhkCI5bAI\nqg/iWjIgJf4mE2hdiCg5M9ndKEbGhIFa44I1bkbdK9DM8ehhIOUY+pU78wFc\n3aYPJ1gz/lusXfTRONTOzOpPoK2Kwvep6ZkR4iPu0TpcrFbBNMHdGEMwxwLP\nXFbxdxg55W+NEXrGBJJ3yhfqyEaXJcL3lPF8wAbbLos3TOTQUBowYl0zjB5y\naHlq0suMCvlumBUOtZ9eYBM1JGuM0i/V3dMwV7vWEhCvTg73QqkAlfnuJtOq\nimo9oHA/bWxbbs1NhHTDVKiX9fpPHBhiURhYgT22qrgpyTcLlST4JXx7kRuq\nhAbsu2cajJMMazuhbzYjvZpZfuu6Zi2nEkcTShrjEaxy4UvNVyCMLH104PPK\nLZlY3IrvuKbG/fz1p4ChGuHb77TMk/ifjo8D+FdGWC336iBLtZzDukfLUzJo\n7hwQgEZ66a8HrhI43c5rTCGPlU7PNzMGR6BEv7M7Os4LBxG9CcxoGFZUYUml\ncY1UCkAIB75KypImzoEqKYHDM0slNORlZhKaNVAMpTbaGJnmwMKtmpkGXrZt\nxBkurNPMzX97koBVY5aAyYHudiPu+QKnq/PfudXJF7EZM1qXKMy1cs27X0ZI\nAAp49uXKMiaRnae0uu/JUgkArAdRQzbJRg/T+OszuhNsJ6X5KRf8a4y9l5MN\nbAQU\r\n=XKnk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"2409f1cdddd92c23548c18c055a6a36efe36349f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.1","@opentelemetry/core":"^0.18.2","@opentelemetry/resources":"^0.18.2","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.35","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.2_1617120964366_0.7719566173264505","host":"s3://npm-registry-packages"}},"0.18.3-alpha.1":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.1","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"81f96aea894d1bbc8a52344a229d98091e0c5ea3","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.1.tgz","fileCount":84,"integrity":"sha512-hK5e+Ko0efPe03FJlQqRnifgFwxOmEXPsy9GOxmwwC/8KjiikyqM2zDekoifAV1na8Q4wb+AREH8INuVE/VTRg==","signatures":[{"sig":"MEUCIQDnROUiY9OAjCs6jfaM0m9fCr9pMOHNH+iq/gSeOd9ybwIgW622KMNyg3CatKsy1qPyIa3fyCNeiaXqk7dz7HplFzI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY2ALCRA9TVsSAnZWagAAYXkQAIcRle4PMpF7pGmtH5dP\nXK79uvr63AA80q0ZcJPaBZ3SaaNMRemgVUCRADGAdCL5x5x9S9iS9323dNrg\nFpL4CmwLY4onF944Gq63Ie+cu6Ue0pO+VtzUU9C12OXhqXS9MdGpwFY8DN8V\nS8dAYAvZhK3oBwoZE6PwiPy6UvPKrtmfJt8GcX1ZMVGlcw/3WIaNWKdyHlRL\nma2Tmid3hEUdfX5JyJr0eJC/48+8W4dHJLHlDiLO6CWRWCLhSBUM8GlmFtYb\n9saWFuTRoY7yUt/6cRWhAF0ZM02sIxC93a+ykm8IS3iv8QJ/syVgubecyS+w\nk+uZrT0xqx6HwGHIOq4T5V80Qxri5DcyxP1zOzFdJcSLPfrJPlPA5TtLzNW/\nR0zYnXWNCM+ct6N4nhQr60j26jYNESHn8gjfiFKtDRuO8/5HjVcxdJjrAEtT\nZUJ9Ov18yG4DQKW4I5bC3I07JrOXoil3FHxKvnLhIrElBh6cuLCnONtYGrJn\n+Qg4m2Pi6nvf0KT0v4D299JeD+syksjbbhVWugxzb0Q2eApw6d7f9wBw8x1y\nXtsjilK1KAaUZ9CEDz+tv6AeQMhT0lpODsMrUdjs9v0PP72/hv5AdO8qGNCp\nip8td4Z98MIYWFTw21r66kJyZC5rdE+8hkfn3M6WlOg9yzvbAMbZd5wToM75\nG0by\r\n=sTUt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"cabf8630cf2e295ac2e7e5f44d6efd1ae911cbe4","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.1","@opentelemetry/core":"^0.18.3-alpha.1+cabf8630","@opentelemetry/resources":"^0.18.3-alpha.1+cabf8630","@opentelemetry/api-metrics":"^0.18.3-alpha.1+cabf8630"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.1_1617125387317_0.629241759277096","host":"s3://npm-registry-packages"}},"0.18.3-alpha.3":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.3","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"16248d50a66170128cc377df6738c288671b94ca","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.3.tgz","fileCount":84,"integrity":"sha512-VVIX8LIbNU3qlh8Lekr+AezJ/P35QCMaLkU0170UPBjhYY4WornkC6fqnI25xjrAywqGA/UzbjpH6X9P2SiTBQ==","signatures":[{"sig":"MEYCIQDQJ0SbZLfs6dAwHx9Hz5HTR0IecZ55NQGmwZtVt28dSwIhAOJttdxODbUOZPPpSVENEsM7HOyXMGNBx6M/2+vG/kJ1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZCbmCRA9TVsSAnZWagAA9jsP/0i7brzTrJ+dYFdma43N\nUmMbY0uEUvi4jjmajHDU3V/4HnfiUMppjPSDsZwZ25JqOd1oYkzydgKfrUsF\nWuD6xXNN5/1UGpUOEQOmcS/U9z+oCaFvPggvC0tKRGeRcoJBGZLuCcB8ukrr\nVEC/XvLNSQsO9sVDWE9Iv0s+S429mCQsMFWuCar6Tm7sHUX/YxM/Hvn4j6t7\nouba1kdqJbISGBerxT8eI6sNlYSB4n5xdV4VKLlJQFauFiMI67RSkWaabhHL\nZBCOH4ylTqlLmHwOpRu/NBR0uQuPSu1Fva81J+wNK/43hpM4q5mn7RqukNKz\n8EbDgfQx3Jk9ToCun3nAlxUVlLIiPeurNbbVVPPF2pdreVPH8DqSefVpMxk+\nyGRdw+kVhzriGGzhqum6/5WRfl6DXIUZUqjE3kwlBeiL3cvNUZ3pYpVlgw9G\nN3g9XUrGur2UPy7frCvZWvK/NIG//WIIW+pw/f3aZSCwoCIu320ZqIFXeU5N\nFJdjNcSRDxNmFcUmIUSmDfH8WPGT7zrigXKhzBJdF00xYnbmtt6bOz7LTd8b\nndJGrx3U/+9cU6bnEc/13nR2ClyvzZIR67f3tuVpk3FChwJepbd0ve0Xbw2B\nj3pPNwbsdROZQ59YGwxuodUcoRXLdPrp52MnyTXeCNigv2KCg52sYHnfJYzE\n03h5\r\n=lRH8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"853fcb94cd96cea0bd1af18cddb355345f76adad","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^0.18.1","@opentelemetry/core":"^0.18.3-alpha.3+853fcb94","@opentelemetry/resources":"^0.18.3-alpha.3+853fcb94","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.3_1617176293798_0.33613937696814267","host":"s3://npm-registry-packages"}},"0.18.3-alpha.4":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.4","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.4","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"051d50e0e9e75b0298cce302fdf49252934d1930","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.4.tgz","fileCount":84,"integrity":"sha512-cAwe8GK7lloYA3jshCCowsO1cWYEuojpXiwdzoEJQ6zuAH+CgavsutpERIT9a/pMQDSrfpJYcu7qedUvH3GBZg==","signatures":[{"sig":"MEQCIEH28GA5TOOcCY+I+7aVdyLAdf5loAI+Bp+sfys6dURiAiAsk9CGBmjsjJc+/eo4pjam4azOZnPrNky/kMCYAhyByg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132935,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgazzvCRA9TVsSAnZWagAAKwMQAIUBX4/Rln/6f2xwAwbR\n8lstUdfRPwmP0/EasTZhfuh4qGN6KNtK9aZV+UVESQrnU69q7BVLdCP5flg/\nYMbl7Ai4k+IRUmycC7MH0N8OsKl9GmIxxpMdjeUcKorbFGoEejC/5znHyGA0\nX8GvIe8QxTg1Eaa2Ir2FVCAj+NwbV05Qp2RVcEiB4pdaa4+0fEinD1iJsVYr\nM5xlWLintqu2BVMyFLAiCaUVRVRMBsgIBbNmANFzXqkr6xq2sCwP4t6koYo+\nctf4L7Byl+M/krV9iaeVqFI5vXpHNZjFJOc9XQrSHdTpgvZIa0vlLFU4uvRL\nctdqNRddpq5INCNlvmpA1CUk1Wc8yatidcz45kieLluusyy3/BFvLxx93dqf\nDICNBZzzCDQSZTWHkFRwP/odkORt1bs60kwVZt81kIx7K3R3/3hP6sl5Zgb+\naJdzYiBekznwFmm7qVhjJzZVe3Vzdd9lLV8xkroRMUkz+OWE5o+Ge/GRom1p\nryfBYuQoc1nNYcDAvcfZOq2kYSXp88uv3CGpQvooV4pGBjKadABKKFqDhBvM\ntO5FdOJr/Af92icdGLs7O+2SCCAuO6/d+HX4d5pe5JSu5PSuhki54+J7n2SF\noWfsj1r7a++Tz6VHQjU5ys7zWREngPL1Tvm6jxmvPHYY4E9kwKfrl4oN4zAQ\n5XJr\r\n=jMmM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"02175dfafde72898d7ab40d8078b0e1b6576e82a","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/core":"^0.18.3-alpha.4+02175dfa","@opentelemetry/resources":"^0.18.3-alpha.4+02175dfa","@opentelemetry/api-metrics":"^0.18.3-alpha.4+02175dfa"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@types/lodash.merge":"4.6.6"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.4_1617640686705_0.6491874350458033","host":"s3://npm-registry-packages"}},"0.18.3-alpha.5":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.5","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.5","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"51e591bcea2ca2c5e777d409a377e7c99b7028bd","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.5.tgz","fileCount":84,"integrity":"sha512-dhILt9HzKx74Pc97Cu2CX+dGoQrfWSyq915MPZEcSAnCEnYrc63n7i3D2PDPKiF/8UrprkdV2ShvQ130rMrD+A==","signatures":[{"sig":"MEQCIA7jGaHPQUR97wWTF9/EKPraamJ0iAuBbykpXvGSOOvbAiB2u8lzCgulvpI7xp5E0UpHQjtWA8y60U0wteHC5Nt2xQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga07+CRA9TVsSAnZWagAAQ8QP/0Nx79Vc5PSvfi4C+z9p\n/zZsQcNof0kOoBFBKtkviMQnt7zwsPOZDWvuyZrv5tr55JgS53rMmWBL3NdH\nyxVCyGGr57i516loUhV7tzhgfFGlTPQGPZkJKCGzUPdznpF5aelGFX9+RXLG\nbmAzrix5RRko7hLhVi/LdjunBfb/nATOc7WKlkzNy0YAUwetlBPzJfvdeuE9\nJwNVDQbTE0zGNhEwxD9RJCApAATc7wimmN7OMyyZH77dJsQUpOV8f6jfhlrn\n4UN1P8O/LqI3Gwdd5gICFjDE9P6Ty+0WSWixpSY7U7S0Pk2rTIWY35ArBWFb\nHf6n1xVbG63gjHGaHJhB+XOvDL9ZG1AeeiGBhZaeREY5qJytNe6wT5SDS5IV\nX2lZxqPF262T16oI4Krb9WnNfVmqJ/AWVRZPDOVBxoebMOOI3Q+V0hJkfOUP\nNfrKX3g6gI44q4FW3u90Uj+TP6mQi9N4WXcaTc+2Wq292NE5O5icbnn6zOGa\nBXpNYgtwYKs3+wxu1lPp12XEhJjEOreYps2pSmQrdM5yWZDP0sFhJwCLrbrl\nLWmUbXzvRd4Nba9MuVVEUamC04kcITd9+yrfhgfKjPgosP0/nJGffxSC7rID\nD9fRyMEiW3j6zN19weE6BR4pFfRgYKNdqJXtOR4FgrjE6mNgpU/9cGRFUXPY\nPXZc\r\n=EY5u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"8e2e2a9653bdb648849a0ac64df55cbe3ff0c503","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.5+8e2e2a96","@opentelemetry/resources":"^0.18.3-alpha.5+8e2e2a96","@opentelemetry/api-metrics":"^0.18.3-alpha.5+8e2e2a96"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.5_1617645309682_0.11314882106066504","host":"s3://npm-registry-packages"}},"0.18.3-alpha.7":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.7","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.7","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"0684d23bc580b74a5313071ea964bbb7b7b470d1","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.7.tgz","fileCount":84,"integrity":"sha512-xMp6hlQ/2Lhs5NVDKtToBk1TQuOg8w8uEPl4K4QRYrqaKZMYxsiPHthXU7h7c6qRfpESPc84jNDGt+YUy7cDdQ==","signatures":[{"sig":"MEQCIEP7f45yBsL6+WhrkCQq1wih21lcr4/kRvSdJbWramMiAiB0ZUkvzhaKGS04pplmcp6aWOMO12AeOtwktoJoTi6jCQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133004,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbdnxCRA9TVsSAnZWagAAVGoP/AhHGSmG75ONYc/aDdl8\n2Ot9brsryMJ/8uONn43ngBsesmXH6V9DicqCnMzlAycnLxp/BdiqpuuGvIav\nwLDIL5s/EXiQJp1AvXjYCKjofb34yJlWl1GbuNH47pgXiszmADikR3Os7/8H\nunkBXJzTM6SkHuQgjmCSbMH9FR8HFW9BCfTIDqO1m1cozW0XeLMOXI/A2dQd\nCr9ghx1RQnu1VPbwUmX/j14HIHWyYmFMH5xbOlwsxMEVnBuW2GxDGPG+myzT\nM1H/L9gpkSTM+ss60V/55vPvDCYwCAWm4Tl29HAjeBz3DHdT0Nv9Kuf5ur40\npv4NKcwQ4UmvDvO17WD7226I3Y1h5eIfeZPCLXjm2w3SyXQviwFIgRAF6Mga\nXeu8V547JHtt5L1G4GI8goVD+K4wG6nMg6ON0M9/aioJNr2q66N9HI6PozV6\n02W0eYGp9OOblz3Utp02HpYRQiwzO3+ZD/UGNQ9d+F6Yf6Wox1p1WfcRST4x\nCTDJtJ0Rbv5bIpuEwOkUqtCBXDlf7MOZ7DMT0eg3RXvNKTfNOCvjLsvhJ8kU\n+06NWFLoPiCXtXgLFykHG84+9/afT2mZAW+yXopLBrUIcZ4a1wvyM8SyfeE+\n7z24/HCJybXgHZnP4+r5BHK/DB6Nal2UV4tar+haUcgCStoV5bQayj7LywRh\noCZM\r\n=za8F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"897c35f497363ee3f3ea4c1e5ad1628e09ec9041","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.7+897c35f4","@opentelemetry/resources":"^0.18.3-alpha.7+897c35f4","@opentelemetry/api-metrics":"^0.18.3-alpha.7+897c35f4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.7_1617811952578_0.4984983828991545","host":"s3://npm-registry-packages"}},"0.18.3-alpha.10":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.10","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.10","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"50d1d7cb1566854293ef4db68149dfb63f4544b6","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.10.tgz","fileCount":84,"integrity":"sha512-7y9yEEcqWcHP+B7KAROX/O9pftOd1c+Qy3lfTJPz7b1KzaV0jymMIKpQy39gZu8z6EuuuwP/ERIWCu7Dq/eWoQ==","signatures":[{"sig":"MEYCIQDI7czd9s/dqdOpbfbN+JejqhQj56EaqWZG9DVhbXJX0QIhAKcl8kfca4Nx8x5UEqgzCRFuNve/mrVJJspkiKvezg5P","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbxJjCRA9TVsSAnZWagAAeWYP/jJTmy0gUScqJuc2fyuD\n19tv6v90oHnOkdA50p49Ok1zPQBdURor4st3ZGbbapcvNmh6Zoellka9KFcL\n1M2suB1kJaV3MMYjd/0lUSTLwrF6L52UIl6bClluVMzYd1T9CT86JuCnbeSb\n9geNXvqirmpDevzfyLOfDFS3OLq8JXxTre9RB+ZVZBEj5JtdTJZjUYlgKjeH\nYxKFth8h/HgEqSysDE5W2lgqn4d7MdxeBp8VCV2qME8o1eAOJhDysjzsCFSt\nGwmVSdhkGf4cbvgxW0xwuqIp94IRmIvrJALb9HvoLxKUPXkVpapGnrjK/jJt\nmlGnq0It5Ld4ctia1aKF182+K3SGNbv3krJ1IhA5OIDrIa6rLjuerOgkraoM\nxE4CjXhnIcMo2az5ELQ1KGlVn8VlcqvHYowQgu3C7wJy9QSfuBi7F/6MbTRX\n1JwUjidL1lDfNvYVrxfnwTBYf99utZa4GEikBu5Fjw3mnvzK8BpdALmqRYqu\nKlByNz7s0X3YDxeia5QzRAO+NS6sss74f2UDY/88XoAq0h80hTKA/45VZ1gk\nAGODXEYx7vgqb9GiDp1cwNcsiij2laNgoyIjbkA1IWdZyrXIu6fOPHo7NVLR\nOYZukYR8LoHVDgTRrSmQHgbRMMH3qGUIh/xA31avKE5mpTIs2mGI21eN338o\n5vwm\r\n=8mxE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"80ff5e2af390ed8bf97c4bfcd1221d2a855b50a1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.10+80ff5e2a","@opentelemetry/resources":"^0.18.3-alpha.10+80ff5e2a","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.10_1617891939233_0.5013410516318297","host":"s3://npm-registry-packages"}},"0.18.3-alpha.11":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.11","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.11","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"da0ccb5fa8087f2431e364cf63d6e746a81381dc","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.11.tgz","fileCount":84,"integrity":"sha512-STym7BQZmgHrdupiyJiO/W8BY6RPlqznBtyfkW1occfVl61gjakV/cl+iS9qveawOHXCFbNIqTqgbtAIMxDELA==","signatures":[{"sig":"MEUCIQDScjn5TMnl28OXECFre3DDgbnI2/Gv6y3JGDRGwp03rwIgXsQ4XlNdR1J4Bp0q0bIu8XhaWGoVwdAxL5kkf3QE12E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb2XqCRA9TVsSAnZWagAAVlYP/RWG2MtE7c+tZh+brbJX\niVnqkPMy/n7/l1gQewXQoYdDjonTcfIJwwtxUAIATwLUw7sGf5kA4fXSPGzJ\nEyqa7yqHbEezqOHciClwCK/ihGWexwZZ2qL2SJqdIaEGAhqmXon6P7VUAdqD\n5P/xC9x1n0CTiM6EBuWeA59cXZSxzLR6qMeXP5p51yxSeg3HdOgpI+ptOFH1\nhotWsi5+nq5zGtlkBjbatKqPq+edUob0JJpRoAMZghNWKe1oetDkYuv4TRzc\nrao4+DBxlJwlOAWOf+7ynYCCODD5ktcaRLZ6yHPNBS6jqTaxk5ie2Wtuidz3\nJW/qbqKZmkfDcdHnszO9AoyWrjFVUoYU/MoJF31+jYOlqGsJyFMS0/8xfooR\nqBre9OTMy2obhdqA9OLmJpjefrpcNyplR36lDDntErRuVv1ekdmCGmhYEscv\nR6ztxt7Mp8Wq3pWNq9/RXUKKn9NBSGJ+x/z98w1wERu5I8tMW/G3VxsGvr6C\nqilS0lHtgIWntuzP47Ze5VV5jcN16PBy5mC4BPJwtJyNoSdKdNvlhtYcrrwk\ntmV2EoRVGr8oqZBJAJijiaiFtPKKR+SUtmUec8wqkYIxaNGsg/xKQMMRNDRr\no4TusFAhOnOckV7JQpSGe0zzvsjaSOlhB86Mpt8rOiiaboenI8zsavTacBii\npYVx\r\n=xcsY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"64c8ef57a9fe3b8468f2388ff78687b927ef8965","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.11+64c8ef57","@opentelemetry/resources":"^0.18.3-alpha.11+64c8ef57","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.11_1617913322306_0.6847124544627687","host":"s3://npm-registry-packages"}},"0.18.3-alpha.14":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.14","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.14","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5b43713948889c7970517df5e922196bd217e4fa","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.14.tgz","fileCount":84,"integrity":"sha512-XtWXAJ9mc9GClADuVYlTaD9ZvSSExIxjhovHbEDRd5ICQ7HM2P1PbngVFfhzoScgWD29LC2erzokBJ0k21sGyg==","signatures":[{"sig":"MEYCIQCQdgMWGxCN9pZ/PDe/PMUPHjWH/TySDQK0zp5GSga12AIhAL9hl5QGeiyyBMiN+Z2zylSpU3pvWVt4c2JuBbhUSmdB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132990,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcBpFCRA9TVsSAnZWagAAYsQP/22S6xKQL76gBZ9CS6SM\n4xUJ65hCbmot3ISdEDlXbcG8PuRoagIPwH0hYcq4KE3h/X3ac9xFKtJd1tVO\nre0Xqh4l9IcMrhTIO+lC8omSOHqDP6Is4ye4aSDlG+ZGEJmSwELy5eMo51kb\n8RBw/dNH5AjKev7n2J1tJ4Zerc1E7LTw84AZyCAVvJeSybuq2LoLfaDuZfyq\nVWxX2a2RonvX+LHzi+A/NDQP0ZdD5y366I2bsu0ZWgKk2ZrR7Az48taeFVVg\npp5MZK3m8xAkUX6f39tjIlzUVqVvOd+o8IBT4ClvL2Q+oxLNdSwww1uIhAqG\nJNh30QvXlRLTEWC5rzF2KsLfiig9czCvr5jVSRp5amKLCXIqu80RAkUr3YMH\nEmtYtz9u4rghGk99x9ffEcxzSrcOXIZPYgt1aZlX4ZP+ivq7NPoRIglizgQH\n4n2RJbUd/bhk/NU3XtmNsZkVTNBEcgZ5JdODZmOSra8sk6VzUQB7yZGe3TGH\ngMmz4R+VicdIpRKDKmtU5EqSQO0IK9xL1GLjtj8T+UmMdFhnRXcyEX1xwB5x\ncK6ZTf7wuf5RL/Md5H83ERGruUTUW6Q+XMAfKjI+GMgAUjlWRM4dbPUiyjLj\nK3aSVSqSKQcZ1PpYOMiiHVyCQum6t4IXymsGvW6pAmHo12PJsNlPTVL6xPHL\nQ8HI\r\n=ip+5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"4a3fd1f4d86499e4485c1f1af0f5589de993b0dd","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.14+4a3fd1f4","@opentelemetry/resources":"^0.18.3-alpha.14+4a3fd1f4","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"9.2.4","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.14_1617959492573_0.3843923219365597","host":"s3://npm-registry-packages"}},"0.18.3-alpha.16":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.16","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.16","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"324850104068b7ead2c10ed86f4156102e94a308","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.16.tgz","fileCount":84,"integrity":"sha512-Lmv9gQSHxSoyyttAwxPVU1odq5EHctbV7yAYxTObEiuVLfd9g4r8U7frb9a9LFoiFfE4tnS7jLQfhAVo8vzapw==","signatures":[{"sig":"MEUCIHIGAZtd9f9bt8z0ZO1jDDIHrUT2371c73YVyfEopz8tAiEA0sILTl6VvrN/SnscNGs11OWZH6QLE0q+XyUWk6nxrrw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcLQeCRA9TVsSAnZWagAAI4QP/1R/8ndF38Y6eypVwCen\n8OzBUG2d5EFD1nkeDcfU3U2/HbgtuOgBWelbrX48X16P0KiceJPkpYR+DwLk\nKjX5DbjzFgR0aItBfwjmq4Gc+c4F20ygS+tOs7Xg/lL7u9Je8VldL02pPIgg\nAb0EGf5v023+eENAyzzMLAXgEWdMpiPiE7ExeGEeJZHafRmRqpeU8WqqEE5A\nuKmHZbC44Wp3KgettaqIO4RSD5F2ytXnrkt7tYpvyU5w6njo7sJDpxTXJmTE\n8QlYmZh1PZwzAHB1IZGVn+2uO88CvRC8qJ7wR4vyajYQNhDeEz0ayn7bvmo3\nfUTWM2GqiyjdKoRqtFK9YaXGR1oCKNEeGKaF2zA535TYXlzRVoab+eQAgpu8\nLRw+hfuHMjS8NuCUKSQ5AFMkwpGcsvGutr3eo/E5HScqEUEGp+7G5sNHvU0I\nVKKlrgopv5xsBa2BWSI8AoQGcY/55fRVlWfo9aPh+q3pShYmb75tl2qzK+5X\nHDP3fc26X4rCyoNu/gDsCmAuQdAzagkgBYFDhP+dFd+KecjHftEXBvCEgsks\nbbdxqAsbMcIb8E+fc2NoSYHSxWfCt9Enr8PO7kaIJ3X1fUTA8MggWoiRE9s8\nPYwAepJCR2zkeCc0PJjHP6QeOc3YXNb/JryuouOEK2na3M9qqYF+XVjrl8sO\n8T6R\r\n=7R2I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"7f7afa7bb88edf4a4d46da8b252116d92b578b79","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.16+7f7afa7b","@opentelemetry/resources":"^0.18.3-alpha.16+7f7afa7b","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.16_1617998878050_0.7584567711191075","host":"s3://npm-registry-packages"}},"0.18.3-alpha.18":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.18","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.18","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"933e9b62ef54c41daf0cb9c3b14dd66eda1e48e4","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.18.tgz","fileCount":84,"integrity":"sha512-AxhgmfzUNHD0O5vjsYWy356u02+skbSQHWhLS3WHvzybOsLsOygI8wyxCXWl0N1moFP6BKoe7nfst8gxUn3fuQ==","signatures":[{"sig":"MEYCIQDPOJAAlYCcNZn7tvGUwi1KbyQ7+yYiUP3Eau3G7O8IwwIhALtT9dMYJUYSbJgjlofC2vH3jCq3wBgfeXnLks78s/us","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcfXnCRA9TVsSAnZWagAAgF4QAJBjemnMjVwAYgRK09r3\namk6IhQFIixLu71hwLstA6FrvHC+UDWHaO4OtELgkdpYrc81ysW1JFWP6vr1\nCFOXtUzriKJLZ0aK2uFU1uLZ9xOWhkyL/PbPAgL+TBAY4IPV1YByYe0JNMq6\n5CzeX6ZtJ5BJoBf2y/tRXK3RUvTCoDk3pLVl/NmBkqsa0PPgceEVPElTl0aX\n7u5fbPjSFckbGEDKaMry9Cc9TBIe5vpaxOISHzJN4jk9GW/gxB8Ohpej0cV5\nKX7gfHcFV4H6QGZBlx7JrYTmhDkeiGC6tt8+CTodcP5kbaMqaBSZupn1W3Um\nz/8tmmv7zWtCwMkqE52OwStcq4toGTLPNx5zc24T4FFQufOzUcuaVQbd0fBk\nA59BaMNHNBuT/ZVJQ1YBjOmSvKBoNI5PEL0lx17pof+oNTpCDRLZ8Dbevswd\nsGMxhRJOvrG6xQQ9Pprx7K/MV+mdmBuDtvY1F3T7Y+GztvAgYs1JvxC9eajM\n52F9gIAjDouHC7jMwE7lo5UYo+IXAkVP54kdDwF5EhU/iGquJ8uFapOdOdVx\nx8Elbsl7GysAemayLUOCrAkOZn8xEpEDvhPMtt30gQhYwq5k+OZG3JjvPDJ9\nmFEA/3fhNB9AGhnWOriotsk4yCLVFHgldggwAYileKt2e84WqaqLBOjxEV/3\nZBLO\r\n=DVgg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"9fc1b109e7997b054c7182cc6db4d71d7ce9e5af","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.18+9fc1b109","@opentelemetry/resources":"^0.18.3-alpha.18+9fc1b109","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.18_1618081254758_0.18428119731745118","host":"s3://npm-registry-packages"}},"0.18.3-alpha.20":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.20","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.20","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"455c908043b2317763380a11d050ca1c8d1ca2e2","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.20.tgz","fileCount":84,"integrity":"sha512-L0SsYI8ApMIqQjBZnbbRYUG0JQfL9ah+sbCJlh+XLZfzQwYTn9gnNC/gbvJ9FbXcKNgFXLDmg+dm2N62HVj6pA==","signatures":[{"sig":"MEUCIQCVQxzZXLJCK7XZ14InzgfHMUZ/PMU4TZQSbjQkEQBaCAIgaJ+hlzTll1aLc6jDRwCoitUSTLzhiCaYfY1wKw+IKcg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdGKDCRA9TVsSAnZWagAA/ucP/3vecmxu8Dt+kFV4i2bH\n/nPGNWmY9ZUeTZxmkbm6NPvLGfrwDrQ5ZbIpsbRMHHc24Vmm104t9THZds1U\nKh6gxZrJ9eZiOInGgdcMGD1gEqUlDbWyXd/OMy+zKZC8cQuXkNf6rRto6SWl\nk8R8rKc1x2KoP5APbs25ScvSReDY1yASQULxcwkiNoQ4pFE6qTBQVt9WC4id\nmnNffihMX5vXGUdtMIZ+UnEtPE13ehgsWt3vwHK4dPGQEpbMHnov7Puslygr\nHbob2UVwE3+EJym9WTPYpxBngV5YU+3eOWU5xSuBSqOYn0vrMenZ+QLGvETI\nP0UkMdIS6zl1TDrqY26+okBuogKOXlUVXvKL8T6FVcN2bO7oCp+EuwHlW3JL\nasS9G77mcYM/6EU2OLYoPmmV+pfIIWTfbmiNnSq+UUQHv9v2ZZgGuRBiLrYk\nA1L20LIg279iFWcmaOezstsaBJSmXR20KgYGVOcQBW/GbVxwTE3IsA3v/ERT\n8wjdNY48i8d8SXJEcYxXjDSGkSoAfU0j0ziR28wTTI+uFOHvYP6itZFl/Xmw\nGVlZu/oNZtgxANgknlNZlmmDrbv+k96zifgFwn4TK9epuWQBPo8Tu0Ez18Le\nDCGRFFRlulcGpjWrS9+rEIFPQ4VMOk6Z7Nfbx34m6N3sV4+hm2yOuAYeazET\nGB3u\r\n=OD1v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"b6dfd978513eb400a706928e604b625961ea7062","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.20+b6dfd978","@opentelemetry/resources":"^0.18.3-alpha.20+b6dfd978","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.20_1618240131176_0.3371353361809064","host":"s3://npm-registry-packages"}},"0.18.3-alpha.23":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.23","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.23","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"05ea7a8bb741d9d6cfe39f031ebf94ed43708c2d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.23.tgz","fileCount":84,"integrity":"sha512-3/PzJeGXPpdsJ4pUZEOULkwkaBtbOhwxniujccA+Xwxb9jXAVRg2IAi70GlxbOWQgRyWrfVQBMgCouaneJV8KQ==","signatures":[{"sig":"MEYCIQCvucLAQ9ur0NAggxrtJiaV4/xNdoqW/8rax7Z3ZtxqoQIhAM94msJ4orMZ6mo9V+dfP8XUNUc2fzq8Aku682iORfFY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132991,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdI2lCRA9TVsSAnZWagAADhoP/0XSRwIt5pMreqI5OcUM\nj2P35cXfV+/ant6qh5+5tKtOvUA08FmYguPDB2M5yAqEdmCb4vrWltpQLdQU\nLrViBcOcUYUFVZLeYR+Te/JXGTUizCwchE06DRuehyugHpZr4bnsp/W4R5Xi\nTz4ICLb4u+gAP/78H04OKzd3395Cgu5PRTvqIKW+x4DfF8lqeev67fLGHm53\nwiSWnOC0AT5z1rxurSrwewOqdqRpLRSLukTAqtDFiSrClxRAf1YjGbSvpVEh\nSsTbsjJL3YWbAilJoOzWVIGtubO0HQ9xJmczlFH3a+DnKNY79CwTfTt9Zzvf\n99/C5t+s80rwpXq436hjufF+qxggynPKJElqBGp/hz3S5BCWnYlsrPPGAVdh\n+IJxQ03eygMXH9p8O3rQ5KDmbqMWt1pp/r8Ryb3rno3d5STYgHxbMigRyn9O\noCbNWcOIhPyDNGB1Zb6UC88THrW24OfOelvQS8Ik0wAre8ntrkqgNlAtyd1o\nFl1vpmdrGGwtoI5r20D7WR22QrjWMwamq98xL0zmCvm/xRNuAEK5m2+t/Itr\nxlgZMCJahWHXxEgkVIPVDevNl68ariKQG1n977bvHPt/AJRWMrf89gueMYIX\nEwTob4ia3hi46tUUX+tlULDH7oJ3QC5H2k80aDfzi9RTgI/sdMr6BmB0Si1r\nXXWs\r\n=S2dW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"2260dd6594bd007f886e7985bbedba1d655a6d3f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.23+2260dd65","@opentelemetry/resources":"^0.18.3-alpha.23+2260dd65","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.3","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.23_1618251172965_0.10696954526650693","host":"s3://npm-registry-packages"}},"0.18.3-alpha.25":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.25","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.25","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"163db8078dd4a533cc9917849db4adad70912cc2","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.25.tgz","fileCount":84,"integrity":"sha512-rwWBl1UpWEIhkdAkCo3mNdC5HSQXgXh+7T930kO/dBwhNK8V0srIgXBLbExtVYlopIt4VmwKOvSqf3HJFPnVxw==","signatures":[{"sig":"MEUCIQC5WLev6/kWf2R6OekE6p9ReKXX+C9W+XyO5mqOo/eGkwIgGDycCho/24Ie6YMmPsDLeDnJAvIyjymlIqnLeRcn4C0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133009,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdKKuCRA9TVsSAnZWagAA8DwP/i8nyaEyY3qKJxkQFT/U\nRUEIZHkn84Ycu6eIZrJIp1ePrsNpiX8O3N7M0djjJM7e5kKqvA/f2j1gpI9G\nj+Ehv0T9veNzouyxck+rHzcgGtdAOd43IjStB671Nrg2XJTO8R4QnWc+WUlB\nQph/ajM86q96Rfw9rDC9HaRlP9T0cFWXqXnQOOfB/ZTr80XsON9CwSIlq5d0\nU2Esz0tRhzqMBGohHPrWv81g3jIp7l3Y+DW9zd/YcKRVdDzhG6GyUZ3Pr4+j\nAgkkRzhY37XGin3PBCqj9apvjDXZY5X9tgjCcDlLPn/DMD8vi0YSGVKCRErG\njnx8B1xN9ZE3jT7F3qI/0/FlWj2/INwpsxg+/lcebQ97PUnMwz7rbJxU8DpS\nTeVCoZLTHiCBMNMJ0ULlzHm76QQOcMEqmnXw6TLHJIhkdHMeNG1TUmAU2kbm\nvrj0VkZX9I6SEKIR11tAJ62lpTRu1MVBI2F1IbvZLJ1L/fFsYD7I7JSyAEIs\n7s0tdyn3uo9cZ6bv+2ebR5j7SfRuayNp2RhnwiJx+g/AzJrN0WINwGKZQYxi\nW0qpNHx8H/YaJmGggH/DGK+JNObW7Gm3gsRbd8GXjkFGZNLnpv622563t0ge\nVyl6rWdVf6v/muOlROvozdBYn7frsZ9bfk4A2oAK8Y2kg0Vhd/QnYPCtmXDE\n86pu\r\n=nh0G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"4ef22cae74b9c976f969151ebcc3ae3d931cf9c6","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.25+4ef22cae","@opentelemetry/resources":"^0.18.3-alpha.25+4ef22cae","@opentelemetry/api-metrics":"^0.18.3-alpha.25+4ef22cae"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.25_1618256557794_0.5757879932352892","host":"s3://npm-registry-packages"}},"0.18.3-alpha.27":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.27","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.27","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"f8bb3137eb030bc050400ce9406a7df8a6f673f4","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.27.tgz","fileCount":84,"integrity":"sha512-MYM4J0TdyUNkD7/mODZ98Ky/Vg7NjVQ8ALTB61kj0hlUqeeh3H5UJ26eRKALX+aELA0bj4oslx/AV8IvwVOt+Q==","signatures":[{"sig":"MEYCIQDdVkZ8Ps5SIuFSMjuZdjTqFuuOmYwXNEFHOqQKS2RUnwIhALnFNR66tv3rhiu/pLGihJM3a5iUBRrGqyDhtmbp4Kge","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdfcQCRA9TVsSAnZWagAA0yUP/A5pdxy7+LhrqZF1Yq+L\n+Ll4HaRRB25gCZbpJGs3j8z64yrJ57pQUNafWxdGqlReifmMEkdgVqFkq+hv\nOC2iLO2J5lisjuujO0sqZh8SK1jfgdvhYllXbfpPzqO2UPgmxrhhuHSkynwo\n0Sydrp2H1XooD2zj9y9E4CsLZ3q+5Wzkq0SFRyqC8PMQAhw0fTGML+QQ5y8R\nNXjzami7HnInzKBUR2uW9xw/IjnpAiJKU+SG8gWC3EI+YMa/V6jVl2f0xsCN\n1Y9pXqCE7jDn0uL6ApISzzkPtYq97AR5Ukn/hQbBrNYEk3eGRor3/rFv/OVX\nQJaEUh8u90nM1jYP7tkhMUwXpXz6ngF9PJPSREvDSKZqjONgWx+ULrisTG35\nnn9PaojzB54aEyRm4L4lFdNOni5ioJ8OGtBNOY3UlxVLLUu8hCTPbs58DD86\nHwXxjdxqusxz0ILab+ef76LDtsT6YYR6ebRglUgSJGxVdUwxct3v9EhQrKVL\nEA+pOEYF5i7a9hFZP13/zhx7Jeb3tzwJ9JifhhzfT07La9gNLxPBc5gzfBOE\nO9we5Cp8WHr8nu5DaDvcIlUPd/D9qgKjFJ5slMtGjHJc20fe7yNfr4NVC/8H\nsgioyg53qcwc5nyinEhIOkjMmzNTKYx5cgUYD5D076M4xPgbzEfUxQDPx02T\nQcMo\r\n=bIvB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"115ee3977a9c5f5228a0ae91abdc7d6b6354e9c2","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.2","@opentelemetry/resources":"^0.18.2","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.27_1618343695945_0.15724105226795904","host":"s3://npm-registry-packages"}},"0.18.3-alpha.28":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.28","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.28","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"d7890ece82766342ec2138aeb8472af7740299ac","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.28.tgz","fileCount":84,"integrity":"sha512-ovkRBMVDOHP2/VaIubXN/K5fUS/6EVTsMfEAF2UdAYAXbRxqmydJZjJbYPkjZ1CtT/AuoZ608kMCchI39nmwbA==","signatures":[{"sig":"MEYCIQCm1i4oOXTkYKwlHVJ/LxXba/AdzWUPYuNEHVJkBvB9lwIhAI9OY/E6GcXwwxH6tSZDiozkmPEzaz8znLJ9cjazUP8P","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdp8SCRA9TVsSAnZWagAArkEP/1qcPVfkCvqMGoSIVw6z\nAOP97FLQHDTT07+16Oes3Qw9S9rBKfbw3eFkg4O3vXNisgKT+hoy77pJnGQu\noDGlKXAcmkDNM1RX5T9J9dP/onPQZKBxIkPwaV6XxYgmVZqtol0Xkhz+B8E2\nmAdfgGKg+ED17kvS0r5WO+4Z1YWEL6vlFayaEihyr+HlkRNFVoQTQ5GK+zcj\nDdCdsKr8TtcllChT2iNzas7vySsywBvV92icpwy3kA2mtIJsBMZHq6zET4FB\nygetX4RqIhLIkA5Ibi48DzdTSbL8SRWsKm7SzSpNjeBvPYn0Ojn+snEmyC+1\n1P261cLUyE/TG8+0gPk6WvleAfociP//6DTf+8oueIFnqRJlEe7cLMD3iVzB\npsPlzYQnLpgUalyoQiyhfMw+yjmwMgijExVUfari1/OXMrg4jqmeESL+/Vq9\nerVopSrceykQ3ZgKO3HiCLWw8RGWwfEhWLrB0L51i/DVTfo38R6x5Iqzta9Y\nApktjgvqBfgeOz2PwY78TFpWgz/u7JiIUX56q6rXDVjqchSU+OWsatFfExmj\n4jkb7xav3EgpFORIbujghFw0m4JGISkIppGMP5BNio1fyYah7Lveo71E6RJO\n0Yx4Fsy7hVhVylqxPXNs3d1or9NgVuEsKzOwKqSVFq+4r2gDLyKzdVy/IBue\nUx+f\r\n=t8LK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"181f11ecc761b75a2702ecf4a6b017f5fb9a8445","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.28+181f11ec","@opentelemetry/resources":"^0.18.3-alpha.28+181f11ec","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.28_1618386705881_0.6256490057748796","host":"s3://npm-registry-packages"}},"0.18.3-alpha.31":{"name":"@opentelemetry/metrics","version":"0.18.3-alpha.31","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.18.3-alpha.31","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ffbbf1db88fcb1c10a2d08ec89632745ba1fbfbd","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.18.3-alpha.31.tgz","fileCount":84,"integrity":"sha512-rfFJ5khgqBdiZcHEaCQz4G5aqytV++uSJhgZuemx8X8IFCFwmLKDalq4t+cFMxJgq2cu2sOKuxfd7xtS/wJJIg==","signatures":[{"sig":"MEYCIQCO7UgsiZzkECOpU6Xbj0eeybT0MjvZrPjfsi7NW2CGkQIhANXCR3P28GHQ51lP8KXucV2M8vBtjQZpp3y6a4NpOVDT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfvfgCRA9TVsSAnZWagAALwEP/RXcNpvVKaud+weaIHyj\noaTcC/JAeND48i8zywtJgz27TVJDEQgA42FQNjAP16UtDMnSG5NkXJNsSi2V\nRJgS2L4em9lTYxwGwTwASRTjbcz9n+dZ/jqJDSkGdDNeo3tmGoOPkqxC4q6n\nRVUFjt3Vmh/0th3DX39U7OBVv6OiqROsUuHiJZv/dxSUz/OKKQ+erAGQuL/G\nZn8OFB7g9KJ34IhQFBAuekrjNiMlFYP7E5QfgEbp91ub1/YQJH24XvNOysfp\njxBHU383FEHyjBwRjhD6daejCXinsr1J6Y0cRTqk1R6kTnx1iYy8p1udbAqI\n1Vhl7QFVFLtdRc6oI4a4IC7F6AOC6zNIxSQpHiUHrfG8oWtItB75EXYxLcfO\nsGeTqhyJfcfsd600kS9Q9Buf5FRp9SSmyP63mu+vmWm1AY1ImTR01byH87y2\n9SdO2pk7KLxq/xkLw1Od6zk0WD20kCwu8FMj6gQSVeU/SugtL9Zw9Sm3Fb8n\nydgnSiXnC08MzANAlfeu7JL2u8PkWOsRI6aaQz1cxuR7d6UrDQWzVK7pvQ2a\nIXa9FLLo2npW2vsoGjq6Xb95DCbbnVmkUbgwa4PKt5ehYY2kyJ1Vz0UuNuyd\nZZv6cEt4R+QaFeAvD8L/m9nG1k539ctI+RUR2ho/72VjGEkOc0r0+LHYCbIB\negev\r\n=hOqj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"d268bc6a8af633ed6803626096b124a269f7b24b","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.18.3-alpha.31+d268bc6a","@opentelemetry/resources":"^0.18.3-alpha.31+d268bc6a","@opentelemetry/api-metrics":"^0.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.18.3-alpha.31_1618933727388_0.8766627077869338","host":"s3://npm-registry-packages"}},"0.19.1-alpha.36":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.36","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.36","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"8cd6ef4fb816ab881d1989e17301977baee5de3f","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.36.tgz","fileCount":84,"integrity":"sha512-PCbTYgKEOkCx6fyOwqiY+veI5zBjxdjRc9KHlnRgqeIrE5HWc2KyYDegbP02WkQtSPFUTXe0UB9vHiQsJ+eZyA==","signatures":[{"sig":"MEYCIQD7aKdW3BPD1lVaUfDMsHQB55IwbYYotImCDCCNfZ0ObgIhAMTXCW+u94XpEXDZloTKHHx0x261HSua1TLpxHWBpvJw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggWnqCRA9TVsSAnZWagAA8vkP/39NCRABATfMdg7zi7MW\nfKi9pOoY8oOeXTlH1mSEdgtajzSEYlChNRpi54j2OMcawLbSSvLd3oCRlagK\n+01mQSVWmGPfYwDL2Poj/K2H2MEwRrdmpz6dmrKXJVReB3906m52IIKU15CI\n81QfVaj/FO8zbH8TiDsCkmJXG6j+Jdy+4y6uqGJtJDsQxtEBEAQ8CTqUZeas\nBC9lmNBkih0TiI04G08693G3+sBsf+KrDt5rJo1YtQFJVuA8oUKrxRDrJAWw\nMoXmPQvE5Nkkze7vYFHCF/mEwPghgRmznzBnkredhKq3ucaDaBjqw/Lw4Bjf\n0ACctvhcRv32spUrLrnpgcHXPx5vaF4kP4/vY7yRzqs4R9kplNC64KEJnJD9\ne8yjchsJJNmTUX3uOp2XG4THNalq2da3rKgqFXLXzaW2dFjk4Il8GGWkprC+\nN4aHHqUrQiRrcDcq6Idobq1nPHvY7od6VFu0R9qMPNSttkvG/zD3XLbc9PmP\n4MKvVg+7p3CQvmFRG0Ny0o47dUiXpagqpXr0RIzscCu82LO811Sm5pPqrXf/\nZKpxYsdZ9TST5zdMoBr0k95mwCxj1ZkHiHGe6z/R9DSj3QIMMDuJyxWF4ecT\nUGxz2Jq+uFiV5etiMOiEYFQrAJ8swxLxKterZbou0GqziaF7I3G2vfOkv1hH\nXUAQ\r\n=Giuf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"0c15999dccd377294a03cf7d36085216d6e8c5c1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.36+0c15999d","@opentelemetry/resources":"^0.19.1-alpha.36+0c15999d","@opentelemetry/api-metrics":"^0.19.1-alpha.36+0c15999d"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.36_1619093994316_0.920044460473896","host":"s3://npm-registry-packages"}},"0.19.0":{"name":"@opentelemetry/metrics","version":"0.19.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"8ec409202a373a09b505261d7749f3bb29e1447d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.0.tgz","fileCount":84,"integrity":"sha512-CJFLUQ1ck0AuHvsZEdpS7+/0JaR1Orq0TOrjgBJS0YkCYC35+RE88kdHLoVY4z53Axe/TM48vwPUVxN90fhRPA==","signatures":[{"sig":"MEQCIF5SFWRP+gJv5fSPd/vJe1+NeqCo/ouhhAb24Fkim2yEAiAjyeKQ5IlwR/ebeoApYtL5GY5RroV8PQjnXqMT0sZAWA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggWwFCRA9TVsSAnZWagAA2ZMP+wZt5dA5zVvjjG5Enk83\n7JAFR9kpTGMtzSgMz6mEIU+pNE3dOUQfYPHVyxQvU2+nnEL6tI2vpuSJgE0N\nFA4JDTbDtxt5VO1dAvbAU2dsGEWDlIM+xvKCuIrIJhxELH0xpcH+9lTInYUv\n2p22SwMWM9KlNgjahm0X96XkTorXZbK32sM17KwOV9kNuSCvpdnysMKesS/G\nkbMioiR442jNMSIc0ituUujUSKeGlusHARppU3eehM9ltLL+KTxFP6eQNWB5\nbzXDjWtdfiB+Sa8mEo1ZFKM45BHVhO1NrfOeCrzL5gnaDrO8j7SfsqnJWs2M\nZ4nL9+uib98SvFWG3BV001bz1+ElvZ/4v2hqAKRbP7+BIYE9G4wcswinNT88\nSt6ZRQMwJVHqUD2//+axa1qSIYZRqOIjqSyUnnGi7BNmMERxMZ8tb3REy/QS\nXiy+2okX4t8uzj8BNoIPt4Nb07WspgVqxNbxzXy4ScRfL0HhNGkdhV674Y7f\nmcPhTxgXjwuDUVRhRsBbNxHAQq9mW5IwNH9u/86Skt7EiFX4Ys8whfg/4qGQ\nbIwZZV9Pi3ZBUwlZGezk85+OSqB4yq2E4vps7ISrqiAPG/LOnf04UDxuxddW\nWFdPAJUfnAPug10+BbovpGROOrnDI1Rryywmwr6O2Mh3Ep1HaU/0LmqsIR40\neTqz\r\n=wS3A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","engines":{"node":">=8.0.0"},"gitHead":"0c15999dccd377294a03cf7d36085216d6e8c5c1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"0.19.0","@opentelemetry/resources":"0.19.0","@opentelemetry/api-metrics":"0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.37","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.0_1619094533465_0.5693172735810279","host":"s3://npm-registry-packages"}},"0.19.1-alpha.37":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.37","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.37","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ab9993ca9f859313263d3f36b5eaa838090e8bba","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.37.tgz","fileCount":84,"integrity":"sha512-B45Qox9q95kNiabtjad3wv6ywokojSZZehL8gL25snIyUqsDnlSTfIMWxYR9EOQ5TOVaxKP7/2uPmxPjnfyXVg==","signatures":[{"sig":"MEQCIA+FLPgKq/GisHrmlROmdFqsZexeOlmenfCa97FrG8LqAiBZx25FLTrXOhIAlSohqBrBEQ3HNvzD0a42K5Jm8LKBLQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":133166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggb1mCRA9TVsSAnZWagAAKOsP/1R9qkcatWK/zwcayW/r\nCqxTRkKJpFQecAFIFseKg25+NCL1Omi/auBCssW6ib7XEOkVI35qojup3Yer\nkXfydVhF0OYOsBXobjd8axg7jYhQZJB0m06ajKUw2RHCH2lU2NiN+KQ3KmXO\nOSxmEy2F/P2r6Wu+vsvMGScLikAIzy3kbUrOg+9cOBdmSjCxxwelZ2prHhI4\nHmHQF57ZHa2v7CkJVQxMs0dxDtufk98DLueAtzgqpKCk69zbvv7aX4QCGyED\nagovHW7ruWpuOr1SldC/1VUEr8+r1Vz1atM5+pORNczhzCfGXv9pbraW7bz2\nMaOfO4wgMcUNUtkS1DUCbyo6z/V/W7zM0bdhPLfSzrvhVddhprY7H314yWGX\nEq77cVGX6P9IDezZjkzYGT0SC+MZnZaWZzkd67lvN+4wIdHRRZCU1/ET/dfQ\nsrIoRUrTF+11s5R+9j+ODOg3GOHKmnIOiqmkfVZv9FwY7bHkrwcd9boKrtOX\npLjfhKAimf0dSS23bM9fOUNYdVMfmctfKiKc96tKp6NexRD5ArKNOoYaAiuL\nSLuhTrB3DAsSd79sD0VfVKsZrd9S8LfWZCrLi4kfOTPhmbOv5sIf0ym3RA8c\nW53oblabr6mBqVA4gELcw4zKuftbWQjtKf9RTK6MqDjrSEEp+41LaUUYSAKd\n6TkY\r\n=0b17\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"a0385c45376a86d396cb364feda2b4afebd836d1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean","watch":"tsc --build --watch","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.37+a0385c45","@opentelemetry/resources":"^0.19.1-alpha.37+a0385c45","@opentelemetry/api-metrics":"^0.19.1-alpha.37+a0385c45"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.41","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.37_1619115365947_0.6011531118912838","host":"s3://npm-registry-packages"}},"0.19.1-alpha.39":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.39","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.39","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"1fccd030372cd99d6ea372bab465aa18fd9e3385","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.39.tgz","fileCount":165,"integrity":"sha512-f58OLhG0lr56f4ucStFUTl/nodSAvy/06/YotRsImpAsHn8nO2UBeEzutsVHMlHbz23BFNn5YsGRm6Dy1xGViA==","signatures":[{"sig":"MEUCIQDrYITOAHuiL94QBQvt8BGCG99CoWgExccl1XjHGem25AIgCt8zqKzoSWb+WEuUhS5kY6xHCqxnuw4ztnWrwR243zg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":265444,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggcQ5CRA9TVsSAnZWagAAzqYP/RY9TONKs1yafg+iwuIk\nTqG+2Zd46oEdQGEkiJycdIe+wPje6nQfJMEooNIPqauLEbvqJFBhUBG7CuMm\nYAQT9+0g1r0UDTRDq+vEdaf2Zo0zSs3OmBQjEzs0yz3d+D72w68D/eCDmK2h\nWeyHm4svP3PLL0EqZU/hn9JFG+Rk3LRf7xItpL634kX6590/cc78mIudAn+s\nj5NZwlzLNatl1UzNCE8+RozEqPjfA2SgApjSU7ekBNWCKSppkkD/fY19NoSt\nGV/XArdrRXHv+7YvfMnGwfkK3of7zahvRLHYX7VYEjwWNhSW/fxesfofvfDH\n9G33aQsc9aD3lzkp2WnbnZAxsjm2zk6yObc9cBV+ar3/yfpYoxmsrgNeWMsR\n3Cjz0AbEMaHm8Bv7mU/YJ55fgg29jy7CvuX+CiYlLZLTyw6SFr5cArBpfwIG\no7xpcpL6RuIzRUXpKaAk8qdl0Ua9Yj6n04EkS3XnuZA+WoksNcfwQTDpGSkn\nyVA9TjHlF6KEsrP/pzuP2JtVX5CJg2fCmuDZQPqAolSmfJN8RcaR8xHhuR7x\n13bXEYW0OqYmvgchlVRM2YjUO1m7BDtmsMCD5CvHikOvwGX2ScW+VjhMIxlD\nelmO1yndOV7ouVc2iGU22/NMajEgZ5kSE9J/bGqrURexwYOQfMA1zz0NNsCL\nomDp\r\n=MjdC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"23ba4bfdc77c8bf594bf0c817320a31f59ca0bd4","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.39+23ba4bfd","@opentelemetry/resources":"^0.19.1-alpha.39+23ba4bfd","@opentelemetry/api-metrics":"^0.19.1-alpha.39+23ba4bfd"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.41","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.39_1619117113228_0.7682411750147324","host":"s3://npm-registry-packages"}},"0.19.1-alpha.42":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.42","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.42","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"55f51e0ba1a6172f166e2ce7cb14902bebdc813d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.42.tgz","fileCount":165,"integrity":"sha512-rDUth2ekJXBu/pQRM7HOvQy21RHVwtvolEE/bqkhuvIVLD4G/uwwb5bn3xp1Q3MO6paihdw/fVt+ojTomAEt/Q==","signatures":[{"sig":"MEYCIQCVszwuSgV5NaRyFfxlzUkvSuFZtbPPUeEXmcLlhXazegIhALht/tM4fyyi0UkOLmYxXK6U1gJOoyndNOkjC/YTIt4F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267138,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghw3XCRA9TVsSAnZWagAAjBoP/Ax5PwPc5wOyS3wl7s1a\n+STUaubl7/eUQd3PMN1+972GQ7CDhq7bq97ZI7vRGBOzR+/08hB9CFq1ozrx\n4RZ5JNZmtyeMZHZzK9LF4FxFBHB6TrUfYWuvlmrQMyEGPsM+ggPeTkIbrp8x\nm8mouFOH5uioDm5zp41oepbBrUnAsIhXTZT3L1jFYKlXLNbqabJo34aBQmea\nEomYv8XQszzgeNPpr48M1RHklE+x/PjRRXi7GM4j2tT8tMjde2JJoI6IDW+F\nK/Bh4wXfeLCgywEj80atz4xt1XsDq69UdKkhZrzJAjsGirYGzUdW+3D6vfX1\nV2Zm5p/ZnJH1YkwJLPKPaeIXxf5AaZIWoRHudYLhYQ48naEBgED7Lz+++s5V\nlhI7lVBCwl9FAz1mGpZeRt7t57d1wk5VfMD/5zWzJ6L290EjSZlv10GV/eyO\nRQY0T3F4Iv3Da2dOwcSZakFW2OTXk5TMvtZ7iWgmsLKoS8T91Si3GFC6gr5N\nsOaCrSZ+DCPjtd7xO+beZiI0R4RBZrYU1m0gDJvFEu19xdm3hjMIa8ep5rsx\neBbNI6xtRuc52xdVy3ZknUW0PYg8URhLEjiIbXY2iv8pQu/4oLNp3wFDAExt\nciqkVmn2tPkq3kuF0R1VYTR/i/pCB+xnN23Nablc90o5RlI3ZXS25oagf203\nDdZO\r\n=ukEG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"b9c842613c4439435f1644c8c8e288d1fd0e384c","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.0","@opentelemetry/resources":"^0.19.0","@opentelemetry/api-metrics":"^0.19.1-alpha.42+b9c84261"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.41","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.42_1619463639247_0.18032367905610225","host":"s3://npm-registry-packages"}},"0.19.1-alpha.7":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.7","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.7","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"77252d45d28a444d21fe433b323e324053a69834","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.7.tgz","fileCount":165,"integrity":"sha512-dxLVfXq8HZjjgqNU20POH4z/GwhpPWPYO+g+0VN5KBcT8tr0ysdh40x+KmGPpQAgMuZp4xcDRxb6l/QfH0oepQ==","signatures":[{"sig":"MEUCIGPox8DRbyv1U85KBcyl7KLX9mOoSO+jOwHkMyqr8l16AiEAnNUXne3mlBMUcvrYDyrYdWcEO4G6EV0JaTjuxtWGtc0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiYnCCRA9TVsSAnZWagAA8k4P/3DEx8lqIwvXDU3w3GHh\ndu/JI6CdtmN14vUFy+LCVZX83ZMY7MFZay55ALTiFQbBgtHDRK6uD/GpSSnD\nsohFq9JhAmH4DmxYEioXow5MuE8itqcZ5MD74D3VwIzudTtgY78edSbIpwoy\naCKRQMBSgEf1sPwVPRMpaucx5ci4GDkTNqKsnNuqoPVd5lBLCsLhMg+z82QW\nPnlzTjEf6sIGFgiiFhjxj/FvZMJFE4e0u4mBLgpBng1kYSFg/KeA37itmDyy\nLFIgB9onq/GDsbZ+2pR/32Tq77fDGG9Rz776SZ+ycKJUIzvKqb/jCvH4NIl2\nEUXysDiPXDc/B01Jm0EksP5LQr8Fo419Y7aO7pESsYtDAVN+4Fm3ZICPPw9a\ntrFXZYA6cH0m/GsSRNVL6Zq80pw4t0+77tTs4fx1B8FCxukvtTKYpVcYYHxG\nNHtC2vjiTmKhx2jZdmgHcIAVpI0J3r8aF5z2T7t/q79mhPJnqU2lyihq+pmp\nsoAHwUrfAKKKKPQa8bOAlz1M8c1gZfQY8gJRj/fOt+sAJzk++FjsRJ96GpAL\n3yH7qwuZV1W6Kl68vtQwNtePz/oykm1lgp9UQVc5Fxhl+VWAWFO99o5mf9o+\nZ8xBFie4H8z7QgU7H5cA1SojuktW1N1CxWzSHdAKw950VxHjOCtCqSjPwreI\nydsr\r\n=CHJB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"c4341c39dfcdaaa65a5d6ad8eb745b656d865177","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.7+c4341c39","@opentelemetry/resources":"^0.19.1-alpha.7+c4341c39","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.41","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.7_1619626434370_0.7322398592756938","host":"s3://npm-registry-packages"}},"0.19.1-alpha.9":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.9","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.9","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"1ad574658ad04ec912f37f77a76f042a2edaa1a2","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.9.tgz","fileCount":165,"integrity":"sha512-cxDKCPvh32OO9OEHbCV2c1NoB0lG/LUtmy2IA5MOLEQIejW/KAPQAu/jqgQ//LhFl5m4IXOyGq+avSWUchlRPA==","signatures":[{"sig":"MEUCIQD7Y/W/TXDkB68M/bKurPeCyicdf6xRy6yvpUjtpewnDgIgOlS+Ttze0WZi9wG04NE1vuHKwqJhtgyy6hZHX1Ywbrc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgimufCRA9TVsSAnZWagAAQuEP/jZu5WVap6WqrMOvli/J\n/X2yugZAyrOelVosB28THeAxjPGwvsyeUyAY5cXTMnnXX5iDT9NaFHSJ4GIL\nZxrYJL4ZKJnsI/cI9GoE/DjipVgZwoJI3wC5ShvfzfdEn6Kvyl1fahs+hsdn\nuin/vNh2HWMlkbu6D0NSdIvOfVIG2mg/OHqOIYyKLIcf8zD4DStQomGUT8r6\nxsaeVcX8y5vdrybyg7rwAdLnkJusJvBDL6pCI+qh9lG29vfoHsK9YVTJtSPp\nTYLg6FZKaXmssrCO9UgFg06n7bjVJsAwVpjCHgTO1g+lO7H6007OcIqWG3PR\nnZ4IgcJY3QtSYB6+614EaAYm5dkIMLPH87VILOh7gtBiq2Tm8Dy1RWCZrJMM\nZswqCMUrFy+ekKvnRFuKD9O4CqXIZ7s12p0kCUPAPAxPwrZ7s1iYYuLzv6E/\nNuTWCo52OWrmL+5qbA+MMW/R2DWPxyXsvnqI2ZbdJZn4s720QQtGR6QMn4gI\nBWIU2woBeju4Zszzynbl0wz2j4v0uQ0mh2g0xxVa/WMaxI33mW12DWZTx0gM\n+gV/4PNvkOlkV96zINuclxHTXQ+dZkas7RoaA06y4nQLnJgfbzPkVdcDOmeK\nIs7az2niIBIXt/7Fb6M7mw3OIMjUZTDZJ4Ysij6J9MEV1pLR8qJqKAN1izAP\nL7eo\r\n=1GvS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"677727b2da55ad1decf399f3584ef92dd5fea239","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.9+677727b2","@opentelemetry/resources":"^0.19.1-alpha.9+677727b2","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.41","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.9_1619684254649_0.3453893793503404","host":"s3://npm-registry-packages"}},"0.19.1-alpha.11":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.11","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.11","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"78c4911668a7013d1fec0e04ccbbac9fcfbcb54b","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.11.tgz","fileCount":165,"integrity":"sha512-uVUANsGkqPYd+UqV9ef6bEA1yJqeedZTvzX7yxy3XjkAw1HBZc4t/5boBN10IFRvzt+HtJEBmqa7nSweNFypJg==","signatures":[{"sig":"MEUCIQClII/BUt115YR6FMzR+CY8VkNk7raEhKyy9QL4sHlPZwIgZMBbcTL/AVIHK97YSha4eflv/o+PKHKjzbBD/okdJq0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiyAJCRA9TVsSAnZWagAAGbwP/R0hjTFF6eskIWkMja0w\nDO4LDF0KFX54XWfPtGxWIg0OB8YrCqxugDkbR8u+L1PBOJTrDfpuBgoWonMa\ncOWihCOLAxowRTPLKEIwZYUW4gIs+foAwE++hpI1BCRrs0uL9hXxYDbUc0LO\nPzaPZk7NOmDEf6b9Zc1e6QoMFmXsRNtRiPMTi0zRr4tkdpluX350Z7raD/JH\nHTJ3I9cjqPkeCAkNDHdmWOx2OhSYepz4G6lGCQ1p7+n6yjcaaaPVVBk3ho0T\nPick2rfE7ooJUsyK/jZpnzQkBR8B2DfOnT4NGa0tBeE1q15XIowyseWEbXnd\ntuxy/OuGPskS219THlPXid2yGbrWwt9efU4ALWfPw7XbvYxw9DC4meifg4FB\nShDXJU9rBz3QDUUXQu3e3Wc/XxjSyy/ruyQ4a+KJvPjhIS3sKEFuGUyUvZeL\nS4RU6tAT+Fd0QPKqKHepjgih0v7yEicspKu0oBEgVPWisF1XLWN7AO6g1e0O\nb+hjeAjC1uMe548Vw2hB7J0Ih7ziWJvKK/mXpsgSn2QEMKzQQDOakb4y9Ndy\nMDGjZTby1AtcB7dycJkpUHO+cWh1Oq+C1OVZevIAPgbEsqk4cGChmcHEDC2z\nLMVWuymcAAp70oO0fTFcM1fH+ljhYZYHhOy5Xe4bTXDz2FjNWPpYkEu83wm2\n09HH\r\n=MGn2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"2afcc7c90d93bac4fa9180f4fd312ed01370b2b5","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.11+2afcc7c9","@opentelemetry/resources":"^0.19.1-alpha.11+2afcc7c9","@opentelemetry/api-metrics":"^0.19.1-alpha.11+2afcc7c9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.11_1619730440777_0.05269183814157152","host":"s3://npm-registry-packages"}},"0.19.1-alpha.12":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.12","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.12","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"30528d2b76e666753cddea266df46128baab5b57","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.12.tgz","fileCount":165,"integrity":"sha512-aVWv1U+kEfNh/MuNC0X95UzEuovuzKv+r/eyhE3PLp0Hih88USDfM45xFCggkuCilcafocbaLeYuXtK0mxa6hw==","signatures":[{"sig":"MEQCIBndTbLSFdYze2TGK5wj5eKtK9tH3zpzuCOUQzgciQr9AiAnh6Qjl9EpzhM659skSEms6SV33wb3SY/nU5ODSdy+ew==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgjG1uCRA9TVsSAnZWagAARbUP/inbChDMcLRhHkVGFF2Z\nbNBmTjJtWQTPH4MLq9kGtpQ3JHOfHqCzRzFTFHKl12Jn43B4BR50p2LP6QO3\n0ivsJZRuUBB5URSRkgaf6CFFX8C2hlaWVdMelOuKwQXF9PuSbFUkmsxt6fQL\nMzO49gahD35KtGSLO8dc/r9AskXV/ckRyRoFGOxOmT88HTzn0MxyWVMCqfuK\n0fxZlBE1fAmbzPeQagMfgWjNhFbsmNjNw/dvSaTfLs4WAMJTQvejpqjP5KTv\nhxhRD9f5Gj8i6xgdaKygjgKHBjBgQ5iA8WG76pdQ7I1cQyMVDnIfk7ybc6g7\n4mCrIDJ/nCiT+erbZPs4XG6eyFRwkX4GpkTQRiiXajX1z+aNtGeO2jyznvS7\nTeNjfgblH0+3DSH9GUSC5p7Mu9QByvPstz8gRSweQCh6xtkNFXFsZsyftAFn\nqrbjAPgghuC/o3zAKLjGBe/v6woawaopb43OcVO2l09kSvQTgZ3PJpWvkXlf\nnTKFQviepqqbE5iup8bp43vCLmEk9aOTUckaUW5Zne4691cmV2WzMazJuiyh\ncYFdQGCQ+zXN29pyrw+jNEwvN2JFivQGJg1WbQwAdBD93lBK94bhSmql7yAj\nrppMieNHf4+w5VDWjc3UvIUZzKs5M+eMvt/rrg0aUrOunNF3b0aTVFscrEXv\nnITi\r\n=FxO+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"25c205aaffb6707d4275be6bade3e078e50e2df3","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.12+25c205aa","@opentelemetry/resources":"^0.19.1-alpha.12+25c205aa","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.12_1619815790520_0.5874670918684886","host":"s3://npm-registry-packages"}},"0.19.1-alpha.19":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.19","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.19","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"2a17c7c4dbc7f2e786c20836317671b3014ac370","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.19.tgz","fileCount":165,"integrity":"sha512-HnMRa33nmOPP7HSaCqxckZlTdPPTIys9QF9Dk/XT7o1QHMSGa7X6pE6uqmXYEHDuGmFld90mFy25vRDGhUCgmg==","signatures":[{"sig":"MEQCIEaomSq1T7ZWxEOD6X6va3+RecHVEqwSWtrkvIH2rUw3AiBskO6ZYWd+Lj0aC6ApTsPqt25xxIuSfYDUoxL71smjFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglkOZCRA9TVsSAnZWagAARR8P/Azbyhkv9D28mug0B/nP\n92Qqus8siwP3yvcghlgdv17KGNzYGT8XsRk4nF4G7qSC66MhK2+4aVzc0e3v\nxjp5AbRx6V/WV5sEKroXQ64TqXV0vPysFx7qfEZi4EbGLn5nlguG23NdpLFa\n8WrqeDakIfEmQUco9rU+v3dpee7XHmvJ0czTsZEEVyQXRA9NAAFxQe9PEmBk\nUYOxgGtl2WDepg1nZznsbOPOo+zb1BvzIxrq07Xna0gNcIOsPwHmWHN/Lip8\nBGXqytem3o6KBRypJqNuMOwVZFwGRCG1QXDQkK22wb/HjlO70QsuEZVEGOSP\nuvS8v8MIYF3LernwWBqJY+vReKjbXNz2Om9zwY8rKjrN2/0af7L9RO3qGOLz\nyum5X1VyXv8Hw3jtoQTLevAkifC8TT/Vpw4yFFuWi0iIeVhB+NIWWRv93dtO\ncpk1d8iCYFnZDDBLNCHztRaWwQhNYI7YgTYrHft24cGl0A4roHMRTBQxPgoW\nOzKWbNRZonTZ7WwwEpgL7sBAdfcAbEt4sYQ+rXdVVI4KmStfYn4lpDa9v3vk\nO/TllNGo/I88bH10hcnzXFCK7ANl/1lmlei3B6P/WeHaWE/I8lAcKMUJsS/5\ntlcyGubKz23pV4NMWUVD9YJk2B4dplbspgsntntXW+l6YsSQx2GJbBRSx5j4\ngdFp\r\n=QN1q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"9ce9eea7cad32cbc57bd80830f21e4f366ecf929","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.19+9ce9eea7","@opentelemetry/resources":"^0.19.1-alpha.19+9ce9eea7","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.19_1620460440531_0.28362515689253587","host":"s3://npm-registry-packages"}},"0.19.1-alpha.21":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.21","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.21","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"51167cf069adb152839386ce0689bfe184a3ea13","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.21.tgz","fileCount":165,"integrity":"sha512-jQYQV5preU0fHsxhOEXRr7twVeYx+Z2WIRBH2NOn6an71YhKeNbOr52DRW1nxA5s2tNGvtB98R1K0S4OU0MCFw==","signatures":[{"sig":"MEYCIQDFP2HOcM58mhHng+JZE1n9lbHhsjYWZmVaR2yM47LDCgIhALFnZqq6v9IJxY5BkggtQIwRHDqQHAvQXJLpKTK6QvWX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmtHfCRA9TVsSAnZWagAAy3cP/RqS/47DZVzAqRwl4gXZ\nV3rhtsW/vhqFR9qrMo7MdSX1AhXCKznVZnKlfhFwzGIxvedjeaFdZtE9VofV\nBFRUzS4fqm6IQNkgVJ1/rfSOe6/cF2dzOcZfyyBkcOQFB4b9lQJ9gLFA6nSQ\n4WlQ1Qhug/A3pHyLm5VLRjOuIxnmMFzIdNgll6fjmez+T/gUjurzIhiZt7Gd\nS7Tj4Fi6eWL20nVVIPq71toFtLLlWJEhjvhRHk4FQanJDEEc459GLw8RXI1F\nS6s4gulVjcJuwgph3HB/FrwmT4IfrOr2badno9JVNlig9zUw97W/lm1KSULW\nBJogiunQOmaIcTw9FAyty+Fdc4Stskvrdnl1Z54W1adRB/1b/elPty2pxQ8e\nEBoaKBMKuUf8hCcLTcpIhMxA6naQUHoMXhpzS5YbgBn1XhhRtd7aBPSNdMoZ\nPjq1knu/rDzxv0FvVqU01Rc3XOOLfRUlaHcsckzZCfRBmbUM13AJ/CGexmLs\nNZCHD7cQjfej+tMXzjqbEi820tM/D/jmbZGh8TVwJLYJd7+S6DBPiT4OsjL5\n2+t23dnkKZERW5PfAxuaykeUqXNcgDZWvkeqXHwkWtBotVyjNV957gn29cXV\ne/MmQ8P19yARLIBavSd1+DyY4puDZghfpIb3gIu8itc/Guj73f58seWor6Xu\nQiqZ\r\n=hlRZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"5cd02aa12e0bf08a9736f11f09ebaaad582eed27","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.21+5cd02aa1","@opentelemetry/resources":"^0.19.1-alpha.21+5cd02aa1","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.21_1620759006807_0.26404486465807864","host":"s3://npm-registry-packages"}},"0.19.1-alpha.25":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.25","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.25","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"57238717c7e9665ef3cde2ba1b5a831dcf77f57f","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.25.tgz","fileCount":165,"integrity":"sha512-JX6XJmCCMAenJHpnqaXQ2E6FFNYlxyN6Wg8YbXi+JL3cBs6kQ7qOZRkiFeXZ9HI3DqnaGIdtvNb4j3Zc1qvkEQ==","signatures":[{"sig":"MEQCIG+kuzcNc5nnGfvsFog8MSwVFwbwIn2Ww3o5nIjfoAjrAiBPzvBCw9uVWUIpztrwNvy410QzYTZ4FL0FPgKSchXqZA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm/oTCRA9TVsSAnZWagAAulgQAJe/5ZyOihY1H1iZA1OH\nzU5djpbS/jcH6LEnPJXL29o2vGDvHGboQYPMtBbdO5ljCEkmC4pfNtlfhV1a\npnYEKLJPrRwGeq8v5q/C6nGU598eiidFdNLZwbNXnapjY9DC9pXtvRw4lpYy\noe5lI+GAxtkkDRv/fidGVtdWXbxAL2yQksOHUC7WRlBxaTJIGyq3DnaJs/dX\nSwrSjxO7sUCd+YkWvaCn/PNBwAlMatAPyTisj2XdSMIOZJdvPYEEgAFsWt79\nFu6OLZV1u19uO+H/+Is7wB1b0wQ4j07DDXEi9RDmG00vGU2bvbcPpOliGvhW\n3Awi7bHFB65bqffxPZrlKlIi/t6VkR8UlBzmPCBfjOkfEFODYyWka5vhA0hK\nEPx70C325ogRwWWHjoADOMhTDw3NWlpTN2Fbe2E+ZYhfihPF57dxYpuF/Qb1\nyY4zYYCUTGMnMh2jCO5ZkMrCiMbMVZQ0BpvKYqVxTF9Wp4ZeTyFCglO2LTL5\n00mA7YdrkKzc7zjZcadrbbd3T9LFqGI4M+r6nzTlk7JnwobJ0det6iVUBQY6\n/+m9SXBIfYJzf4JFcYecfCp94vn1e8Cpr7CoD7S6D1Yqg4pDyS3IluhmtPcZ\nOEiw4QISKyRpQVmbq5tlcN+XpPudIpWq5ijJg23UGfNOPlLZ7pthXXhfCYdR\nCM2x\r\n=Ik96\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"02239b52557fe5b4c5ae6eba742340428b856492","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.25+02239b52","@opentelemetry/resources":"^0.19.1-alpha.25+02239b52","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.25_1620834835017_0.482367980667751","host":"s3://npm-registry-packages"}},"0.19.1-alpha.26":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.26","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.26","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"37fc58763db1c7af6fd1cc51d670ca0915cb046c","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.26.tgz","fileCount":165,"integrity":"sha512-CK7vXKQ8IYbTzxhy/MFRnjCDw/0D9tj8VieMoAs98f26UiqeXz+10cg/NuLjasy992qZPz1xL3fainDnX8Pxfg==","signatures":[{"sig":"MEQCIFdAb7eAAw1acnzgoiDoAxReY8TvLc6fU9+k1+vt3qOOAiAcxvLd52AIqlZpi4RDNTDRLR9KWp0V1tfU3vo9cgMUZA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm/0cCRA9TVsSAnZWagAAxjoQAJOD0bCrWSHOPBvUHv0q\nl1Wc9r8T+bcyqbqMFMpkOeVGhHUX2TpWkn01AxUQeIKMQiZLCvfPls+YN8Hb\nYrYBkQXCcJ2ts36NWCVhTLH1diFVXf4SsVYV+/qH7DxCf6B/GG724pi9xQeV\nc2HMXcDMhBfIyKZZmlPamXLQ8Toxv9cUV2yaKR+dUek4F2ixGXuJQIIR5Zfs\njLz6n/2pJf8O41D0mGs8KNevobUiUCXupumXl1fje4bQxatwmZ0AVNb2qk1U\nR5FANI8SSTww4cIKQDlJ9NDdinsZRp/tCnoepfKg41DCRP7N2yNae64Xbxpi\nZ1Vl5Yvdb9s+DswypoVZPQbzBTUphdkDmtWo6SdCQ2JhphZ9FfdOBmf051lN\n7Y1D1LgnUWtUH5wDTiQLCG9QcPhwmvGHF5eSxSF3SbFwVR2UMW6ucwu/Nr73\nNJXnxKQKxxlf6KFbE3RNKJ/sSqrvp7/Ku2f1vpWaYkz6cDravxu04XopVeFP\nQ+zjRoAtbzuehZJO4ot8DsFEkJHlJ6HNoJ/PXbril7pXFAdJ1E5wO8VOPgkF\n9mJz66N8jTURY/LvQKXRZ6AAoQiTrzJOSB8h7F/pXP+t1wvU6lGwy9cDK3IT\nCVGvL4akvNUJqcwmhGXPfBrebz6+7jTfoQf1KRQ1kJPDYsMO7OE5O2xuBP2q\n4MHb\r\n=a1eA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"1758fa6e84333c9c43cc468c5e99dd3646f7e3c7","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.26+1758fa6e","@opentelemetry/resources":"^0.19.1-alpha.26+1758fa6e","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"gts":"3.1.0","nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.26_1620835612422_0.009100452010078142","host":"s3://npm-registry-packages"}},"0.19.1-alpha.31":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.31","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.31","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"83e8da2c4b478e67947a995c47fb42553eb6421d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.31.tgz","fileCount":165,"integrity":"sha512-XJ8wVB1PU6NZ5wRk++hmFDiluJz3NJgPl/ViAuA5A/vTOQ2NVnss1J6di437RFhKvaJXGx/hc+Q+8WArQloQ/g==","signatures":[{"sig":"MEUCIDcVYD+u1Jd9LkNIGcV1Y+lFvUNwmOzOffZU+MA3V7v1AiEAqj7xBSSHnT8wJirOtf73wN86+dLRl27bYZflQXV/sDY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpVPHCRA9TVsSAnZWagAAyasP/2wdqQ1wuHdhi6B6wYeP\nJzdMI00vspTxrrjWlneesxxxQvwI0IWuX82yIz7oo1EwfElTKVKvtEd8/IOK\noYKl6boYS/PzdfsEgF3HhcDGyLT7fsMbNuvBHuY/uAkPQ7dvgEkaEhZ60Lwa\nhjCg/ePolP4sIdc02BJzv/ttaQ2o58xy7u2p7RhknLvcqVBi3KxtuBGk87bc\n5FEgYVvHy7GCLhR6hPCgwOva2ea6zW7NXqEbtaZEhjOfyqTbrGlxObowmq/y\nxz9wGMZwyGZYLTSqCqCcIukqRdLCbQLYIRhc5YVkWvWsi6U6g9T4bWLyHwkn\nwBtqtsFEGuCwFc5edY2tLcXGdlehBm9/55nZXMZYKn2RZodFPlvy6cRNC/c7\nRgRKyfZx6gDgTKVgf4XkCOIBx0/47QON1B2pmHLDR2dVaF6UQ6p46ojhspBS\ni/QMhlNDRIrXyXGeFvtpOl1tDL3ZZWNvoSCo4f+kzFjJ89E4zEm+yp/O7ck1\n9i5HTDDF82hZ8by11PzWR4S0m2FrX9JvXMCeB4z79GstTUocYaFbqepKLydO\npTgCOq7PD4zIm6p7mLZJ0dfDu+MIylHOgAul8CKR2hpi774bissJMSPWr2/Q\njy9SbxeoDzwB4iWfTIeO3YdfDAfYhqnBAQGED4Ag/blo4tWevry1sefeTpZd\nL2q0\r\n=ajeg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"24adbd61062759f9d9d57420fd97e50f4d8c3b16","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.16.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.31+24adbd61","@opentelemetry/resources":"^0.19.1-alpha.31+24adbd61","@opentelemetry/api-metrics":"^0.19.1-alpha.31+24adbd61"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.31_1621447623127_0.1663027452280459","host":"s3://npm-registry-packages"}},"0.19.1-alpha.33":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.33","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.33","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"6e1c1816482ffb3c0642b64dd43cf94600848366","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.33.tgz","fileCount":165,"integrity":"sha512-Yvk2yj/b9lQDZXArpWVIEmDzXbkI9AZTo105gnDQuB6ov+I0Kjaf3E0TteU2wzVkip/QNXXgdv3JOLORgpqYHQ==","signatures":[{"sig":"MEUCIQCNSGmXDnWI0mTS8vnL3ZIfqrTPahyZgU8d/3oPEsOqsgIgR5JwvLbYJbWali9uvSMtaJHdNqzU4ivdaxXlIRvv8RY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgplIcCRA9TVsSAnZWagAAeZAP/RtAfznsyEXJRklZoVjO\nhzlEC+pj3daOeBsdGsf8Y2pK+7B484LrDd+fzKe3Is25z/jj5R/0Dq+nDXrW\nIlR3GGdyS4cxxO8LyTBOd9VDy3U7Lrf8YG1RRJSlI9T5XgaaRTXwaLn0Zkaw\nhkl3ehIsKyB+neVHC+OeMuz4DEqEHZsVJ4ioxRbmZ06oK5fGTBiPFHMK1kSU\nTySKFW0OxzB/FWjo8hBTVgb18lUIPvJVwqqULCyjq9zfup2U9zoQtKD56vEi\niuR96eR7DMc4cYjjBLx0pWgT6zKBOSakSCxDM5alwcmR/1x72prPLdXNLEcO\n7EqwcG+1GT5JuGbI8Nf1jJQuLdyzpXgGTeH89lmSHIJZEJQ0ZGam7jH6ISov\nQx8adImb71txQCRS2s+uWMUugYrlqy+pOo8JjxIX1t3rhY1SeZ53tCb8J2Ec\nSzMQEBpuHz1hWgiDG3Y2xi3C1AfQH1K7PYznhdxEfzBxmJL1bgUHKh9fOLsg\nlSQQcUFyeXeri5kuATIbb6UiC7ow0Qn5AtKlmBfxP8LOKL197LodsWJVPKvm\nNq15CJPwyVwlxXXofLIpbwBeR3vlvsfbG92dvdb+/pgmw9Ty/9ea09ROzZim\nN3Il9ea7b5dGXriMXv6tQJlkWdDMt5TkbV5UBKGOGA9B4by4+wWoICnIeU6c\nDpHR\r\n=9h06\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"c85fbe6682b9a8fd52e4b99bdbb079833b04e845","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.33+c85fbe66","@opentelemetry/resources":"^0.19.1-alpha.33+c85fbe66","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0-rc.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.33_1621512732182_0.5032975759151874","host":"s3://npm-registry-packages"}},"0.19.1-alpha.38":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.38","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.38","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"0365dfe7c65b4d72f207a93dc8385a9cfc8e981a","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.38.tgz","fileCount":165,"integrity":"sha512-sZ2z2qHRiuxILdaZNxYiyU3cA/pxFdvZ9lijsahUWKPnoJOYzvvkgQStl8lKHAQKIwBmXRqRUmKkIZr7JG7Hgw==","signatures":[{"sig":"MEUCIF+jXSQKRYJ80K8Er+MWSGg1f4T94vsIh1XmJY5pinojAiEA3jG0EoIl2c9mDIIBAPrWoNwZ5fBrWiDFwEOAl+pT0YM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrmMiCRA9TVsSAnZWagAA2hUQAIneVPKkFp+dEBDM/SJ+\nm/5uQOZSS7w2c+aBr/6BrGjEs6/woPsLiW5kKjDTtkKkz+UVd8fWjBkBgIdj\nu8W1+R2shhyl7oKYSMgrRcayimgZKctdbsDFm7CwKCu9kJmnsyeqSn+0oBfb\n7Pf68AeBkj2/NuFUpp/TfpxpaNOhv8Dymu4TZ7HOpfQjeWzv4lte7bQfJkid\n8Afw87M0/jNVoHgywkqly1OJD/ISARarLW0QzoeVnlLocLH+sZTn6AF/5753\nf5SdoyPae9vZanc2ehGJoabhIeuvNzWGkG3wuQ7Y0gEtRlSgRCLJ2mKm4lIk\nnJm+ZUiIChtpimHzpm7Sh8T9zSQ7nnQmyGF59i61yLueKasiG6HUedzfECiw\niCtZr96YTLnX2KTzpH80983LB6KtO8iHFEJUwc9+uQ/3uvqj4UDhmoghopv4\nXoDgWNsGhNbUvDXJ0dQV8zdaQdUF1muc6tSDZMVoju7syi48N2rEZSMxsGzd\n/aHx2GXbFIyF1Y5tBfdbi3lew6Fxpk4Ad7Mb9CqPfAJ2fc5/wnjzbcpi/c9i\nCVT1xaADz88zlw7Rn4VFNl9ZOUMxW15k9DkszFGQ/iSL1B4aWjMr4wrUTJBB\nOC/1hYiiSICX8vYFu0z107/2uhFEpJP7hmBHHX9F93jcEfLxbpZvTEvutHHN\nLBwD\r\n=CY5v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"8e5c8a0965c2dc7517dd9f2084aebe56f678be89","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.38+8e5c8a09","@opentelemetry/resources":"^0.19.1-alpha.38+8e5c8a09","@opentelemetry/api-metrics":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.2.4","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.20.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.38_1622041378313_0.19055977378502775","host":"s3://npm-registry-packages"}},"0.19.1-alpha.43":{"name":"@opentelemetry/metrics","version":"0.19.1-alpha.43","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.19.1-alpha.43","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"45168526f886d5dcef055ecb819d8cd1a841f3ee","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.19.1-alpha.43.tgz","fileCount":165,"integrity":"sha512-WHRIF/1MEza3v1gnLHp30G1LcG05BTKUfkZDs2+mOLMTXKnRt5UfhV2lXyfBAt7uD8kAq6lNnujyLG8SOv/9cA==","signatures":[{"sig":"MEUCIQC9Kznndjs1/uY9RoUWodc8Hbc1gNKEJ/ljUqmOmd+x/gIgVKV2k9+PXCRTuCcu8PI7fOmCx7mWoqz4wW5dtJqatfw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgto57CRA9TVsSAnZWagAAHwEP/1p0uZI64pohB8nWeuPq\nVGo1T+mS8mMXUoO1184SOS67oJnz4QHLi32E0EMgForY4nERu9ZfThzbXkxm\nPOFQymgPIFDQslC4KoBVAH16qqrq9oa+jlseImpa9/Zr/fcF9yIhCtp34vej\nmFE94rrAvzRY6RK7VNiQGsHpn/scwyny90WEN05dWyKir2C5dsavhzCQakbu\ntKqWUmoOJ99/HOZ7X7SxA0g7/9TFLan9yQH5HFEoW4MC4IKDbIeufa7TBd5J\n2VGT3eFjoTSpAMoXh1PV3m5WF7MGWp2BZSyl6dt2068e9bMtpX/0y5HXQlL2\nmDEuOLxu8pefVstUR1xo9cms17h3pWUi+b/eLUD0xBcOJ1bx7V/yA7MjstYu\n3INpA36wg/1C3psoZu9uY34q2vQx4fP+oHYiNJJ2S2WQXtbLY/wGPHjAQGXT\nUCEawAVfhZ3RW5OE0SYGPSMnaK6rkCF+V8qCHxZvlBFGlSBaYFsSjtUtRDJE\neWA0U9tRPFmeiRe5wwXGWmg0Z9rc49FEx7Db9O7eNZj6XTcQNOhNxglPRTFe\ntXDTD9sY9ZsM/5Qe2ucwTXMu8NctxjqEmbBYZVl269XmGD5cg8B8FVh/sIkL\nG35H1MNeT77BjXFTvB4U4V+oEivQXwYddQoMiOc6QlRfMJWFm0WKyzeBN+mt\nWWC8\r\n=CdCR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"d5517812b31d9206131bf1df4f8a3b5183ab07fb","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.19.1-alpha.43+d5517812","@opentelemetry/resources":"^0.19.1-alpha.43+d5517812","@opentelemetry/api-metrics":"^0.19.1-alpha.43+d5517812"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.20.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.19.1-alpha.43_1622576762941_0.23695789279172197","host":"s3://npm-registry-packages"}},"0.20.1-alpha.49":{"name":"@opentelemetry/metrics","version":"0.20.1-alpha.49","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.20.1-alpha.49","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"00851afff306ea91094f9316a726a9d2fe4782eb","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.20.1-alpha.49.tgz","fileCount":165,"integrity":"sha512-vCZQIzAgdLW+LBeEbUjmNXx7qHdABo/oYqEC/5hImBXQNE7PtCkN6LLtjWcCm1QNjGSX/oXWXXVDypkS4CVzbw==","signatures":[{"sig":"MEUCIQCgTgSZWh1cGiffZYnOBW8zmwhSF0mBBGVqNoz+9ntH/wIgUvFpmneBlKdi+4TP33cOeeQcRBqqDnnwe2GrPYY+AnQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguQzlCRA9TVsSAnZWagAA6VIP/0TN9U4oGQIzcaUnNrXf\nqVx1QmnCvgXfPUz9srQnpmRLXEatLtoVpf5+1gTUpKV4UFCQ3eDQovoafLzs\nktVpdrCjp9UE40EYStdnszLjEHHparPcDvaU1vhM3xR0rVxu5MfmDuI+m010\n1hywfaarcAft3v0bmyEnxWIlJcMUQMUtVEUcCwe0zThrRNJNyVYaM9UI4nUG\nRxLWWCl9p92UC2Oy8Grzq42IYkVXpcZklsRbM79dKxbBSJgSIa2nuegAsf3S\nHYmTw7JO0Htc8Og1prYoDUpQAl4gm8Pb8m1W9zQgtiHTeYWLr5ML7o0X5z/l\n9j+rVF0z/K2W8QMND61Ysf/Fka2hwbB9C6s7tD+ZNaiZ4c5BGnQvFVBBN3Yk\nvB68mobtHxkENCj1biZqWiqs09jops0861HyG0uDFZSloXHeT9rv+HqiC2tJ\n2N8tkHcDEU2US7Ic9PcAHK1SH602Xh9UIs8oRZrU4s2IFG0QHHDr+rs1naxj\n3Rx1NaiDLFmiAzsM5wPbgaZz0MPNAaWWnH5y6k7C+lob3GlZCj/Xyo25t781\nkt5/PS5DBLg3ZaM+p4aUhLnRIhMbAPFVwbydQ+kFa7LT4BmIWlTJ8FoM6kfc\nGPL9QTtj/MPXLSvGJ/i1K9+IUqUD5i40/yoXKi+4KaxA5b2Qssh7YeO4t2kn\n8pWr\r\n=LHHz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"f79aef422b53f1314cb0b031651875658fc17008","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.20.1-alpha.49+f79aef42","@opentelemetry/resources":"^0.20.1-alpha.49+f79aef42","@opentelemetry/api-metrics":"^0.20.1-alpha.49+f79aef42"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.20.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.20.1-alpha.49_1622740196978_0.17411200360109524","host":"s3://npm-registry-packages"}},"0.20.0":{"name":"@opentelemetry/metrics","version":"0.20.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.20.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"9f8b2652929a830513dc6949e2471f325c1e8dbd","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.20.0.tgz","fileCount":165,"integrity":"sha512-1jqtRvI+AdRIG+Up8njOgooOxa570uoWTKgokanllcCRp2gOOnkgLQ8YQhbArX0F4Xi2FHYe7o5vDO3J0Aj5kA==","signatures":[{"sig":"MEYCIQDN7PMSZ68CcaL6lYBwK4jp+L0f85fOfzZovgfZcT5KjgIhAOMvszXkBo5RVj52DssRtUTUTHzO8V3pcMsZeizmXENs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguR9YCRA9TVsSAnZWagAATpoP/1qYTUT4TQdXsBLZG7Vf\nSoCWJl5FQn8fx9s6ANudKQwkBxmAgxnS3ADQ99p1ClTdJvOZBvBVhKXWpH6X\n/asSzVOpsoDXKd3aUjvSO7QmPCSNbGsE6tr+ibAnn2qfInHLzJQZh3pycqPT\nb8vbugA59X/mu5c9Vd4H5m0WnU5NkaJZr0zw6kuIzRTSJPpxnkvCjakD1LAj\nHMVLLYmx430qrD50YervBvYfxTmrgSJw4a6OEjJQmfPVJZezyE0BCPI5UA9a\ngpwKEHsini8OTrcDENZdBjsCsdLXGWQw0pgr2YBUqsIQCnozXPSDLYIiihbj\n8VSZDUgXKsVc/wocUCqfOseAAfKxnxm+KYbFUlvOI5nxnnkVASe3LaKoPd93\noqAYIPRC780B4ljpO0EWa8zAwMbcYYWpgT6gO8j/SLvL4uml7HnycugB5fB1\n4or+nn0Uo2MGQNq0t/BplI+Y/3+uyUDTp/13xHy8QrgOMwKl4Qi6gRFip4wv\nELkvZKebx4iqYTxB0Zn61Am5pUmKWCp2I8LSh0q4bQftRsVXokYXlSqdcKHN\nD/Miswi+XxVzV0/Dnk17QBj1S7pka/D7xEKBtq2vNGdXOryOQou1/tjY0z2Y\n+G+eBdbVSHG18t4m9mTrbejG1c+gkiNZVoMVagTG8K4Kn++HfJvz/lpz5TDw\n1TRD\r\n=kZVy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","engines":{"node":">=8.0.0"},"gitHead":"f79aef422b53f1314cb0b031651875658fc17008","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"0.20.0","@opentelemetry/resources":"0.20.0","@opentelemetry/api-metrics":"0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.20.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.20.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.20.0_1622744920354_0.5231589348419796","host":"s3://npm-registry-packages"}},"0.20.1-alpha.3":{"name":"@opentelemetry/metrics","version":"0.20.1-alpha.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.20.1-alpha.3","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5ae9766fb5b69950dbca7f168565aef3e83dadfc","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.20.1-alpha.3.tgz","fileCount":165,"integrity":"sha512-+ycPY1vapDqqWDYQhxA/xIL/DVZJHqv1YkYACjLbjOj1v9yiWKyBrbjJ/ozpHgMFp5xSVczj87VcD9gyVfFQkg==","signatures":[{"sig":"MEQCIC+B+0qT7+jVsB48Kg0IzMmWH1FtpSgiXzvx0FL4L1NpAiBzgZCZ97w8sRUhScoEmHU3mYLi7Z17Hvyb53/qx31kRQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguzXUCRA9TVsSAnZWagAAW8AP/AsRAJKdqzkQ5ubIpK5s\nQvNbW6apd3QHYJ0IoBWGepYB2fWyhtMWz2laChirxnWOhNH/sqb2q1LOwjXP\n5ZEnfNcxP3WlX5diiYIrnMTtlYTVDIyf9k8/D3FwDvr8GyqnQxJhlx9rXyBK\nVLMRZ/oXya9L3Fo4PHNVT+DQy4yCdIAnmgyEVldjE+9XISZ6b6FR8uiny9sA\nxi0VkNXdEuRl5ZxOAK/9CHhH2VBlEQQEBuYtuAPXKl/SPDqTrUncgFaDXxyN\nVKkOgJ77xRgvzip11OYMqCcq0IWbH5MjMjQH1gz46hMAvliewznpivP1Hbrn\nEicEbn9QIr9dxwNQ2m10iaNQ/q7V/GArThnVLoPDdqYxhJw9Aj+VJHl6bMOv\n9Vq/QNf1xRhKE0+IEVJVwtKFG2k8lohjy0Z/oBVOZytViU400ttEqpFuGy2a\nATHp+UNrvo0fCK0viSltKN+3nhUYsl27NL8zVt/LcJcyghWayByYFtFbLSQx\nHWUSwJw25CnUJgycHwp5rNHQSqVeq4hYuxpTUxfYE2MbQ+f37sBUz1wyRiCI\nuVp5On0zY6/q0DoDXnHCKI1QXIh3a9QHWUH8ntESEWbL/vFcG1K9CTJ7xPJv\nN4soT2XAq4Dg8Kl3C4isW9Ir01UQulN4ytlSFADNAXwQQh6EqbYcTEfOQJwj\ng1Yv\r\n=mP7N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"d4df2f7ebaaaf433bd84b568c482e2788103ab71","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.20.1-alpha.3+d4df2f7e","@opentelemetry/resources":"^0.20.1-alpha.3+d4df2f7e","@opentelemetry/api-metrics":"^0.20.1-alpha.3+d4df2f7e"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.1","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.21.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.21.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.20.1-alpha.3_1622881748175_0.436348211041343","host":"s3://npm-registry-packages"}},"0.20.1-alpha.4":{"name":"@opentelemetry/metrics","version":"0.20.1-alpha.4","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.20.1-alpha.4","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ee6b9450f585e521d5c44b7b0a9b7824af03d720","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.20.1-alpha.4.tgz","fileCount":165,"integrity":"sha512-JYBOuhp1imD0d7m4B6nOERg4GILYNOEtei8puqSu0Hr3WkrqJ0gFZSEwljFCHhkIJmVqNNorM+9g+FB38UHg/Q==","signatures":[{"sig":"MEQCICz7PYwSMVrR1wpjt9NN2EI82CUHSLkExVl/Vp4j0AOyAiAV9cTUndVUntZmMay+jHYXvftsK5ILVho7V+E7kToZuw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgv3BeCRA9TVsSAnZWagAAyJwP+QFsVY8lkiCOQtnXK2j8\nDpFMne78nh+NKwxJPyKGV+jHB0OCdvTs44pHYebeNMuJaluXJw1JozVxgr+l\npF3+XOqApgmkiR6I50MxfGzaKH8fEFvTQmBwtjIwGKzNqa6FsM57Z6+q+/Lw\nbHNdfTC8x10U/PoddP96UA6uk60CnPflVjRhwa837GpJ0ATUC5f7IoNc+Qha\ngP6k1DnQWtjEQuG136puDEmhwOBSE0w77i0tl2z5wekJ9mPW3mGWCFuqqyIw\n0sOknSQaZhAmPJlCfNhc8Dk/zriWRYNA8ySYXGTs7RjVBVK4yU3fCWJBfphO\nNXPpNwj0LLD/bE+kqeKvL+42KZ8Au8NrHIzRxP/CrYkgQnMCwg25MzVy0vWf\nUYOKceEKusX5ZEk8ID+zlkRBUw+vhQw4eH3uFG94ZpDCVvaIwS2mZyK9+uYB\nVn8q7wJOHXRRM0SsyYakMDVyyXeO9muO310JNqLwqYXG7DBgy3SLn/cnOeUE\nMKkcxssTGdJyYqKvIeCvrVn+RDfA45SqJ1JjIV4YhKgSonhA6BKw18eKX7Qm\n59pbWKZq/rZ4PnwCszxQ0fM3nZHMbiE5gOCELrNlSa17bbTxrh8Do1tJTYrO\n27tKbCY6vYty1UqHitY0kHW91ea8bMxx32I9FaM43pKA7SvsvX+lXWNtF8hJ\nj3l7\r\n=7Mh6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"3d98420cf530968e6a85bc4b9c2b1bb78b730b3c","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.20.1-alpha.4+3d98420c","@opentelemetry/resources":"^0.20.1-alpha.4+3d98420c","@opentelemetry/api-metrics":"^0.20.1-alpha.4+3d98420c"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.21.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.21.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.20.1-alpha.4_1623158878007_0.854890947715309","host":"s3://npm-registry-packages"}},"0.21.1-alpha.7":{"name":"@opentelemetry/metrics","version":"0.21.1-alpha.7","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.21.1-alpha.7","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"f8cd5ea8d8451f702fab2f19f3adb3264f29c32f","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.21.1-alpha.7.tgz","fileCount":165,"integrity":"sha512-3b15LpO9G+y1IOl1kmCt/w2cZHJM9luMpdCXluf6JwV/FRuOeYomNyVF2T5M2nCXcMSYKI9MN71YRuLfzfqyuw==","signatures":[{"sig":"MEQCICoS1SBRvOwXT+w8t2mkPTofJAsq33ZDl3QWT9GT/GbVAiAlqEsybG7FpZJ6hwKhOY+Hs4yfzZKHmpiV6GRBevXr8w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwkszCRA9TVsSAnZWagAAPbwP/jzvJH8cnzsBA/tnrv21\nzrwB4fFyJRUKOT/iCwQS7bMf2lvxOf1NaYLJVOiQBqvQGtXUNerKmgftuAR3\ndvXZWd90I3057mkQqFWpvLzZTI0nQhIQaJAOh9k4Sn4kMoxMVb6jAe649hxv\nBJgzaYSFiKuj4BSe45Pj6stzmqjA5b2XAUJwTuY4GnCQAyt+l5gzYaFmA0qr\nQV4mHfFvC7LPtIy2JsjkXOX34+aOWcHi3gH6bJ9cURjDb83ZQ5Ue2BOLvJYj\no+EzUgzLOgvQFYTHYKCL0CHcM4254RKzOxvsy+rlkMDaei7eGaAeewcqoSGj\nn3DYD99F5m9HcdGyFZXjPhI7rgIAFSXfCER2/nlSL+8opWD/qEb2w5/DoK2W\nmtNmqSfsdSC9ctprC5qIigLFZ9NbTo1X6L5jm1Ws5GfMxnhko3drRloTwrEA\n9DZCtiQcsbdsFLfUwkLWi4i4MlOuG3nT8WLR6ogn90/Zzos73KPsV9v+hhoU\nd+5f+07ndYA9dSyZ7Yvw8Qhz9awUU53LztR+QNnla1j/mp+6t7AtfnrzqY/m\nf9NGwfwokBf6hMIQpFcRevzBIdqANy6GcQ+9TmvMoDmL7r81SIuWRulH7H4G\nT9pP1ok+q0yC8HBRbyK11ywp89WDXKjeCfz83vx7RpER2CqzJp99Hq1xqvuU\n39PT\r\n=oLi3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"7750282034ee58bdd257446c2970f01307d7522a","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.21.1-alpha.7+77502820","@opentelemetry/resources":"^0.21.1-alpha.7+77502820","@opentelemetry/api-metrics":"^0.21.1-alpha.7+77502820"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.21.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.21.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.21.1-alpha.7_1623345971500_0.07102452125170888","host":"s3://npm-registry-packages"}},"0.21.0":{"name":"@opentelemetry/metrics","version":"0.21.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.21.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"86e7b6765a8afad2dcbc00e439b6f87c4a8375b5","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.21.0.tgz","fileCount":165,"integrity":"sha512-UckbV+09LdX6R4u2Fb5O5447Se/AkwZZdJt9sjqUqbre4971JdMpCGyia+SZ9lSMHQTzWuh55UwS+Q0l4AXU1w==","signatures":[{"sig":"MEQCIHuq332PgoHCRtqhlVhbcbjldaz5Ri1cq+/KMGsTCxfwAiBjIlJv2swuU2o7II/LnnmFH5aoBm0hkFvUPM2Vhbd7gA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwlogCRA9TVsSAnZWagAArlQP/37HyMEqLTZIhTy/kxMf\nDFx9QH2hvEToKhUYDdtRYnG4X3b4jnU3y2Hji5UucbqinzEoyw+0GHJUOmT3\n7/rB9vdm8a2HdjRak2OTMZDm3ii2ukxrGvpWsI/+1ElRtsrijjG3SAyHRChr\nAQjV8L1MJUt+oWWOKv+B6YiyqaLaao8icbYFYpSv4cnN4YGmePd3sUu6yRj4\nR4/FPVLjmbXBUcdxF4gnGZYe2SLEZ96CQsmoD0syJzUMMTW7igx+QEYvcuUh\nC/iqxW2bCEqyLu0VTn7AMtpsvlTL7kIGgDV9t9FboRDXIBe2WaMs93ZOAH2I\nlfubEsttLVe8O07ELfGnCxhvxFGcpQ/kL4YeCThvxLm+bEMdDQhD3okIbZtp\nZeU0D9dmf6mJrhNwtwMoXqDOZHYSPXfqQ7PJlCM47QEBKhLlcPgxcVKyYesM\norJSU+clbYDPKOT2GkFrn0Psn+7eM1Ge1qbhC79CqTB6ZRK4aIkEeUzMDy6d\ngvE/3i8D/30OMvZxCnvkjrTdhhPHl4zVX0Z/8eE1gvZ8af7xyDpKewqoIHR+\n4gTrhfX/YGnQDFyKiToRP6Jb3TXzYSrCHrQi/z8qpvIKnFg5zrN6NTxqJQPk\nQpwAf/NakOCrX4djdNZ8hs1riG4Ve/ORpNkH87TdAyhXDElAz43PWdkaIpZL\nHa32\r\n=o5Z0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","engines":{"node":">=8.0.0"},"gitHead":"7750282034ee58bdd257446c2970f01307d7522a","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"0.21.0","@opentelemetry/resources":"0.21.0","@opentelemetry/api-metrics":"0.21.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^0.21.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^0.21.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.21.0_1623349792069_0.23706921112415613","host":"s3://npm-registry-packages"}},"0.21.1-alpha.1":{"name":"@opentelemetry/metrics","version":"0.21.1-alpha.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.21.1-alpha.1","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"4faf5ea8b0d9cfff2c2fc4c6ef82f2d34d3c6b83","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.21.1-alpha.1.tgz","fileCount":165,"integrity":"sha512-lyvZPBua5ZwlqrkxLNEsrq4F/8wd9D2s10jZGNqM7MposWkhlnMqqN5oMuwOwz7SffFuqynuMwSRs9laGByR8Q==","signatures":[{"sig":"MEQCIBmTFwc1BSp7fefS1Irgww8ioMMsCW123K2WLnarZC0RAiBOBX7ce3UTNj8EejzbEx2R+NaGOCO8nt1zpPQxuJdh4g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxG9HCRA9TVsSAnZWagAAKh8P/1ucb5ctWyo6CgRf0ZMI\nujPNdvPTCGOrq/dBA1GEOk8kCRo/+lP5UbZGzJhPefafyPFPaEe/DCPCFfZ8\nrKCoRGGaj513wx5PmwQ10CzRM87Odzy171LWdCSlXdEUrVD0poqerp/sR6P9\nfD0M4Kyv2WwNnatnT3gsVrtpwvi5mJZ4bX7QUQxMctp/STYCwEj7QN0kTWtE\nJ0UoJ5TTGNGxbLrIWFiWclMgif2Z3/EANq0iuFyBDO9AAPBCK8kyk/iIbzsd\nB98903Vo4+WvHpDOe6xJZ3DzbgMJWDKnrV4t0QBOnyc4Q2Qt32oxl0eldGOp\nHM8rJ1SmCxiIexAEVFvZ26L59wz86hhYPjCAUTUYy7YIiGb/3+djIRL0bqKO\nyA2qHn6Dpz8IpXZMqSRLyV5OJRXlhabdF0f4FrB4djfjTXkO2W/QxeshYfqe\nh/o4YtwTNLhMFwzmFaLtgVmskWCAUAySVagBysXlsX0EGaD1udn6cNPIkcMz\nOknVFuIZMBD3KRH1qjy0kR1+DGZZAqkJUdgs3qKtwHXjjhvwbYOUbXRaSJVN\niyqhJeYRdyAUsCKhmjJmnDjA7SyJTdREQSVbvqw1JJNwdUix0JSOmJYOELdn\n0eYfhmk6dTa1J5O+7Uh6W8ZP4lRWU/BbfjVG6wahDmgzDXeF0k/DFwkCL0cR\nqn93\r\n=q0ov\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"5b6573eeff537ab49d8d8d42217e5cc794f9ad70","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.21.1-alpha.1+5b6573ee","@opentelemetry/resources":"^0.21.1-alpha.1+5b6573ee","@opentelemetry/api-metrics":"^0.21.1-alpha.1+5b6573ee"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.21.1-alpha.1_1623486279671_0.14034327845732042","host":"s3://npm-registry-packages"}},"0.21.1-alpha.2":{"name":"@opentelemetry/metrics","version":"0.21.1-alpha.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.21.1-alpha.2","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"f1a715c2f20af7a1a3adffd10ae832acfbe4aa89","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.21.1-alpha.2.tgz","fileCount":165,"integrity":"sha512-a1DZ6UWByZCZ38qgQWA/kNcZ0Kb3BtNJyPgnfmDbwV7h5TBjBgECAnVPPMrVQy2scEnJ+GLsnvW4AgVsslttOg==","signatures":[{"sig":"MEUCIB+gNmkXrf9rMcbz45mh9dE84vZnfvT0v3vk5x/8oeCTAiEAny9wv+TOiu3AlEWXwlxkfKZKIaGleCLNkDXw+KzJGhw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxHHICRA9TVsSAnZWagAAhIcP/137sF2QkAEf2/IWngpW\nOHJErvfPJquS68zn/ZG8jXFzdbibpCeBXeoimJGId/TZLrrGeTcCL0d8hV5i\nYPKXlaP0ccSJjMRSP4d2y7F/R7LtOwkCXI7mKh7XCki+oJRXZkexMvEu6PWz\nm+QXoln6rP1ErMQPa+3RgueURS7aBKqYWTDE4wyLx1hBmswzRzoP6SubHckm\nUEuS0CLto4mpEouaXsvMsrBwdb+gLgNDrcsbJC+KE//nnPi8DW9or4ywk6V2\nNT9rMMJb40gxvJYXzuFGsN/GkhlArBA62Jo28l425BPEt1ky6MprR/OW2EZw\n9mNTfcEweH4lbfCOMbeI8R8AEovcp/gT2bI5cTj3I4bboJXAAdehJt9E647z\nxtHKUopgNfkFIz9w8y2B1RCJtDkJV3slzLGqQDRrX0JCeIxwniNdfxcf4ryW\n5e5HGjyqoM12VPFMWAjqxOZbBSYKdSu/qeLOB40lJGAftpPcKNHhAR47srCC\nD3D224TxG71tDeAHwFRW1FZrmfNorCaf0oqSz/wO1ClBDlldEcrS7CiYAriA\nmgFD9B9+p6TGJqgSn0Gcbn4jk8x6Wwsg7/IuK+uieOz7XNvPvPwYWPQ7wpZ8\nyGQxrO0/uVsYjg0LTtO7IOP9v75fMYH07LsStlkG+OtwDKu0YfMyQkE4PvHQ\nq+81\r\n=G+Fw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"a3b77387012a5f53c193efdefcbf5f6272876e4d","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.21.1-alpha.2+a3b77387","@opentelemetry/resources":"^0.21.1-alpha.2+a3b77387","@opentelemetry/api-metrics":"^0.21.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.21.1-alpha.2_1623486919961_0.2529132893708663","host":"s3://npm-registry-packages"}},"0.22.1-alpha.5":{"name":"@opentelemetry/metrics","version":"0.22.1-alpha.5","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.1-alpha.5","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"f6cc5b238063d5960e66fb67f16e1ce7346be4ea","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.1-alpha.5.tgz","fileCount":165,"integrity":"sha512-wnSVoU3+AT+IohKTZOe1vkTRn8FMUeMZ4GFOU921/GNnKiktai8qBToBk+lehTfEH2KTq1xcmDDbB7RbQOOnzg==","signatures":[{"sig":"MEUCIQCSuHxuDLq/R7CitdToAFZo4y69Xm/8zs/nuIxoHwAqRQIgZb+VBx2ebIMou95x5/0OQSjfSa1fIy1XRgdo5oNqIkg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy4DOCRA9TVsSAnZWagAA4tEP/jM2dm1jonXYz9P+/nuU\nUKJr5RPlV2gabXoY8Nbbd642NVQI8oxkW200b50WGejcwQvbq5U/Q0ZNEfGs\nxhjFuj+Eon/hC4tl1fVIEgJ7HwurMDTbvcAS6FUWvIsrWm3lWfgxiIwC/WIN\n9nB4eV+bQW2isqlLQSYLIJJj6jtqtwyYAAm3h8M/dKymOq6NdIzttoNr7Bal\n+EJDVgb6K/rwtQMXkHOhPNosMROXYT18Z7ysjr81rOGprhvhk82B9EOdNUn/\nJndma4bJ2XiGpECh+Ez0glpVsKb6/kN7gNizSUWaLMS0OHugDDeR4uvD89zM\ngIK49Nhiquw/QyPaLCqAWTD6DsjPfx524ib65dDHZFLXBieIB2LxloA9P75x\ncm30g05m3FInfKf8sC1YPP2FcHqkiMcKvhKTv0CtTUoLpwFxWvon50dyr45P\nP7iUz4dZVV6jOfL5k1jkEj6M74rjhm5MG82Ve8WGodAEgWyHSqPxzRoIZxAz\nswOXaa0aK8oUDRRD6txCyVHuzk3NIKc0gWYlx3rFuITxmzA7rwupkmEvNAEE\nxw85C/gb817kQe4a2FbhoIxh1HNxSHyiwvDVJPNmYZfN//+VtCE98aObHkip\n9x7qmXF0VaU/Ck/4PkwYYseCH9v5pTf1cLrgOPK3wgmKrM8iAyiaxijvkfWa\nLODA\r\n=Bc01\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"7860344eca83449170bafd03fd288e1a3deebacf","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.22.1-alpha.5+7860344e","@opentelemetry/resources":"^0.22.1-alpha.5+7860344e","@opentelemetry/api-metrics":"^0.22.1-alpha.5+7860344e"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.1-alpha.5_1623949518156_0.4834613086798132","host":"s3://npm-registry-packages"}},"0.22.0":{"name":"@opentelemetry/metrics","version":"0.22.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5101ce0476baec6254cdf62493c472164d6832e7","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.0.tgz","fileCount":165,"integrity":"sha512-Ida3ZYSIx7RzKDicUxUP2/R03vN85Z+ZvZ8ioIfYFDMriai4zsFgMTbpEOmFUXfV3Oc5WOEq/DVonuMq1Dgzyw==","signatures":[{"sig":"MEQCIBFxDDhMBebAuyRFov969zAsCFpMx6otc0qCE5w0RIy8AiBkzAzAolnSyNcSg0zKFbONm2Ggh6f/2sESiNZ6fqc/Nw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267454,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy41RCRA9TVsSAnZWagAAL3kP/3lNhUfJMejNon43dsaT\n0piri1ng8TfupR7S+rVM5iRFcSEtT+1UlJEbDE4atmJelDKJvDGvJIzPSFFl\nrnOylVCUsKuXu7VnRiWCTgROiY5zGpybxBgVoybRq80MPCe6Yi2axDySCxxC\n8ZGdRrOmmn8QwyXqxY4uhdcrmcM7Wzi0mnvcBiRMjZUXq57yHSZI4ITV4qBZ\nHemh4O97jY+sr5EGNxX/azhWEv0bCHNe/cjAMYbmblZAW3d7HM1DaN6nHsF/\n4wATWb29tPkT6Qe2vce9fqYU1ZrhY9kD3wO32dSilQdqKV+8xoDZgIF1uzRU\nIIz9x4CEzcU0J00GFCw31Gv47S5nsqW3sLB7R9W4U+WtUv+t7Y3/YqwFG3oa\noh9qcCAXUeYhI6bgAQOrheb9l+Fwh49njM9tkuYiGwKZwZUXnF9U+/qBbtfJ\nXP4kq15qQhm4uMUUUCoNZg8+mWAYo+Ht2gUHk4nXGy9Vw7yxp9NoDLNk21Rr\nnMgs8pDLoZqjafCSN6QHVxivGkoT1Yc7Y0dulSnUXUHs99TksV/noODCZyK1\nH1rNmPWkhdR9E0uguu/lsYc+zVRqIbplOYx2pUJ4w4+AIYv2nAPYlDUNuqLX\nWqhdvzRzSy5E25r6TnyyewxqVzE7iK8fmsgvRekMouBWO+gqIcCMtUC7E2z1\nuQyU\r\n=M6Ek\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","engines":{"node":">=8.0.0"},"gitHead":"7860344eca83449170bafd03fd288e1a3deebacf","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"0.22.0","@opentelemetry/resources":"0.22.0","@opentelemetry/api-metrics":"0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.0_1623952721003_0.300666854890445","host":"s3://npm-registry-packages"}},"0.22.1-alpha.2":{"name":"@opentelemetry/metrics","version":"0.22.1-alpha.2","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.1-alpha.2","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"4fbbdc0e9c6062feebafbe454a2cb1513b8ae14c","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.1-alpha.2.tgz","fileCount":165,"integrity":"sha512-bOvbEXqgzYISFqK7hY6+9rsCwbN4eeKCEraFDb6M8FGfwv2x1LFyTSg+dd9oGGEPkIppg+C/nyljozr+TMeqUA==","signatures":[{"sig":"MEYCIQDrh5hN8vfoIw2mdznxGZoIF7NDs44B6imOdjXttd1wdgIhAIBI/HYK1XFtccYmMW6bEt+Zi/LsPFIZAVtpHCPn/c6V","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg01fsCRA9TVsSAnZWagAAYK4P/1J2Xdy32AIdAyw5tQKj\nTy4p9SoVx8c8oou+UZbArGex4fnTxoG1IQVHaYx0A4C7qE9taqFkCloE6+7W\nMU5GEtF0+IoHEeReRmESWN8PvU606i5/2m6CSFopdLbpYDS7nEUaZIf6hv3m\nnlSu3b+kZShnIqhPtIyuxMKdrdRkWJnTIDZrhJnVTVH9rKFeBcOaz2I6zG5Y\nW7rZa0+ElCGtURo1NeSQ+4MXjMe6+SFD/Tc8plpSWsRwsm4LDDmD3ZD2bUxa\nbcXXG0aiF+Q5c4dZRhX0qfs0FgVGN+6jQqgMxToh9rcMXJQl7bVcFFh0opHi\nNwG3Ao8b6olggvPj6/W5zT1rvDWBg0KQ0ZAk2vJi2/gQ3hZicPp2FD1s4x6r\nwGrsRayctHg7GmlsjkydONhHsjeE85NltV72xSETqcyamKFqj5ezHjp0EOIg\nrFEvf/h2MmPYpBgxz+vELFjxaWV1nofL29RnpR/CV8PBjdOltEWHWnqFfOGT\nkM7pHZLiizIaW9uk89dQo5gtsEwNM9NDKYG+UAlcSwZcvWXgvuCH1d5YsJ4Q\nfkCArJyFGq7IOV+qpH/J2XjaO8hrTNe3Rp6w8+gGA+8MDXrf8tnexy6r4WNN\nbsvFQCEPOlPEwXPoYJ3y6psLfQgobFpGyTmmuPvbmSSFzRaKRHrp8dMRz24h\nehbS\r\n=VkgZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"bd2a005229ea7a0a64ca0ac7c2206ee40d19bfce","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.22.0","@opentelemetry/resources":"^0.22.1-alpha.2+bd2a0052","@opentelemetry/api-metrics":"^0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.1-alpha.2_1624463339995_0.004999487246941214","host":"s3://npm-registry-packages"}},"0.22.1-alpha.3":{"name":"@opentelemetry/metrics","version":"0.22.1-alpha.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.1-alpha.3","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3a6b9e1316886f52256f6bffbbd204fbb892374d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.1-alpha.3.tgz","fileCount":165,"integrity":"sha512-Dzsga2RDHABPIyCc4uBi+kIuZRnBB8FECPK0PkrvDQr0P3UWtkuIMqaKkuKlP4BvuwG0GjvryEz/bICwO5Aiyw==","signatures":[{"sig":"MEUCIE7tmKUBxF0iYOCX9YiJ7mMXN9/EioIxNnarEj7GtqGfAiEAwWZ1znn25eGGBsx1kChKsWh0+ozfI+rP6j0JMy3/PzU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg01uuCRA9TVsSAnZWagAAaCcP/1y4BgVjUcapPBOVVjYv\nCcRuY0O+dPJll8ZoDGwYJwAtiJHwZWa3Txw58akQG5/e6uhNXnI3DbyFfynD\nbnC9FAXgueyQ74R5RxZq/DN3JDfquSzZ7kfT+z233bGNznc2hSUkm4+OOxpu\nX2jdDcjvXdeMsLjSKi2Vw0ndqz/lUlthwXW0nI8cXjhLJf+zgWvZY1Z9cCXm\nlLTbMUgi44J6N1uEcUixODlAri1JFjoDFtfNcLvn3WivE+DjTsowvVLPtIYB\nUn0Qkr2bsIkmB0sbHrUg48QKi0Q/FV48e8puw7Eb+3Xa7y1IPsG9gx5ahmFY\nilbXk9CA7zpOM0K9/1vKVBCdDW2aw0z6AoVyJqKUZWzQmvKEp46dDPT2n3YV\nbKIEB9pWC/RhzBTf1hRKwE531aPhfYa2wfU9ltmEnKPr7ID3GHv4aLcbMXrW\n3o0jkRR0Cm3DTaZlNhExTBmQNBOLURQnlihSVCsSv4lE75GXq9Xb4b1GIhOD\nfXm/NUWKIYIoFkHjodQEIeak33b4opPMu3MkfbESBHQOXXxRGolBwsZNrsVG\nN9IiVria1T7kJl/1JNN76DuqCY6zB8/ohajvSA+rXnGSTCtC9Z5A/XDvxTZ8\nVw5vKxYLJ4Oj5eKrWXrBekuV9xRRj4vcXdeyiAACm6R1BHcSmMeE8ivaM1oI\nZKz0\r\n=TiOZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"6fb4fd1712babdbb5de216c26e1283a94f7159ea","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.22.1-alpha.3+6fb4fd17","@opentelemetry/resources":"^0.22.1-alpha.3+6fb4fd17","@opentelemetry/api-metrics":"^0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.2","@types/node":"14.14.43","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.0","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.1-alpha.3_1624464302172_0.19202113539005095","host":"s3://npm-registry-packages"}},"0.22.1-alpha.13":{"name":"@opentelemetry/metrics","version":"0.22.1-alpha.13","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.1-alpha.13","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"9ba8134005327f03eab6d7abb947efc04a6f18d6","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.1-alpha.13.tgz","fileCount":165,"integrity":"sha512-OHOMwna2tNpSPHnfv3cHqWUy5pTXqcZFCpRGNGfspK66kiTkRp27vb0xEyQjXIvLaWHPR7wEd8CNYQqV2Pe9Mw==","signatures":[{"sig":"MEYCIQCO5SI7YcATZPjx1P4c76+NWziGZfUE2DdyR6+JTNaxfwIhAOAQSZpuS9U7TplVo27A1lQtiF7+J/Q4iTAyo0zEzJXf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3LqoCRA9TVsSAnZWagAAqLIP+wU0KPucR6W2lcNU9dc1\nJ6sflCam0YYf+n9ihUe38+fFsNPB3VqQeR/9N8hH4jn+YsFAmb+EDTyzHCiH\nqSBzOMXLXyzq2hVDMzRphgxnWUqnlR81xjcbhW9mANsFK6NYOvjvCR62eY2A\n6FBHxwQ21Dbrbf2t81HBIkC6Oo8UsB8hs6AKB3WUNTqoGcVeXNuG/OEXedZs\ne449Ibal+frJxSg8HHGfmjgLaUU62i4f5ll5iCpWTb2m2a68DTRp8nRmfnMC\nEfu3/y3oIabMiGLNE+wCJuswBCSv8jcT1axymvdsFaSAOnZsf72qZWUSeyha\neuJYDY6H44SW4JHY9MxWUPBYRxeeFxAK5ckE1Pv5BrOnOn+LH2e3LX6wF95j\n4gdWw9zCrXZ2Xb8rt1qEg8XczryRLvPQtp3ACKxqSZbuzqUqdDs8NIOPTIGD\nQ3R8H6kKo4ktjuhltjKBkLZWXlfRflTJS+OQIWP+FM0+qwO181RoEpoZEFhj\nrtjxVa2LXzXnZqWsUB/9YhWzlzyCX+MVU5mz2whPPPgBMTdiJObaBh3uZMQK\nJ+DxUsGn2VgO7/2W2NFUGt6x7LFF+Wrn+5DULa3j325TpHB79ZXxd+my+bXw\n5SXm5ObUibUIKBzv1wik6TCcsaZvOSiTv4Tlu/IAMKRio8Pl18mbD0xZtior\n9Dyd\r\n=JHEe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"01418978e5cc15b5ec4d5283ec48910799fe2f06","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.22.1-alpha.13+01418978","@opentelemetry/resources":"^0.22.1-alpha.13+01418978","@opentelemetry/api-metrics":"^0.22.1-alpha.13+01418978"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.4","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"9.0.11","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.1-alpha.13_1625078440164_0.01199071877247082","host":"s3://npm-registry-packages"}},"0.22.1-alpha.15":{"name":"@opentelemetry/metrics","version":"0.22.1-alpha.15","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.1-alpha.15","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"ca0b0a2685a5d77d1c7778a50a2b7bcce8b73d51","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.1-alpha.15.tgz","fileCount":165,"integrity":"sha512-gHlhRkyl4zbG9dBONjxl4/Uyk3gkGITkw3qudU0yLQYZyaKk4F7NS8977chxz2SeZguwy6wwDw1oqQgdwMzKvg==","signatures":[{"sig":"MEQCIDSVDRN7XyaOfauwOWJBjJTbYcy9PEvxl4FgNRzKM3CPAiARciaWZeZsVfFx19nkIRpjgzAyUE+4qGrHNnddlc4s4Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3MFCCRA9TVsSAnZWagAAveQP/1e3T5h/Heu8+EhfFzjR\nhWRQaLIKIASsKOXFzQIYXLhA3KbDGUeQNJW7MP3mU9hwSDtnstUNF1OlbnZ1\nmxYZAMT4UxrIZmWY2Y+UGK3u/PM2/LzMIpQRAQBF4xU8foYcECwp/+0KPrvX\nDq1sbFDednuas8mBihcaV2ZAb+iAmqMrNW4ZHfVbYNHErlE55BrxjG99bjt0\nsoS06zFPTwGgzUKlXcPn5m8qMuEXIksEZAkR81M60AoJr2W2j5Cp99ekb4+y\nZNSHROe3alRCCeINzNmhIP5+h7NP2L1Wzzvv8n/duMqQlkY/3IpUs2J0a5PS\nHwZUVu1PgqIB+vnUsZrYYyglwmhetvxIVhgyZuYbEW9L/bK0MBlOUgOOwyrU\nl2xIsHjlIANdO/wi1e4NYAD8C4QQQCnHcz+MO18Tm5ko3FBJeFX2TTrQ8h4j\nN2n5MInxKPGXgGMQP+MTcXxq/ho0QEYzVqOXZLCrwRDDLIqY6dDiVuIU3Je4\n/ojte+BKubwsLG3DG2Ui4ECk7qrSxORgWN+JmmAuFnt08jyNQBei4Yv5dP/h\ny+B362s6yGpu9Sbt6Fkvt7ZSNWMc5SJanZlVr7qQa8vnukaAoX1UqYpH1pWp\nl9zeHGWOzyCrTp7gYSB9oORpMSqM+8+Petu1rsEK/4xaPUu1cZrhT+2tvOJl\nhKUq\r\n=2CKV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"c3ff9d1a6b599f01634ed2479183aca2c6d57337","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.22.1-alpha.15+c3ff9d1a","@opentelemetry/resources":"^0.22.1-alpha.15+c3ff9d1a","@opentelemetry/api-metrics":"^0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"9.1.1","ts-mocha":"8.0.0","typescript":"4.3.4","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.1-alpha.15_1625080130132_0.9654063860160105","host":"s3://npm-registry-packages"}},"0.22.1-alpha.16":{"name":"@opentelemetry/metrics","version":"0.22.1-alpha.16","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.22.1-alpha.16","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"d44f98e8c5d88dd21d5ca6a5692360d3a43e629b","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.22.1-alpha.16.tgz","fileCount":165,"integrity":"sha512-XTxVMyvM2+Hq6eTgeBm7hxRV2zIHkl/2MNazrMel6DpB/evK+DKx3YnmxpEQtb0H1DxV88Jm/QO6xtSqIA0pBg==","signatures":[{"sig":"MEUCIQDKnQywHdHrBHftKj3kv315wQFqTo+BF+/KYc9IJO0w0AIgTGXpv6XwFvtyMSxnUO1n8b5ag+E2KWbqPWGKUSXoj3Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3MqmCRA9TVsSAnZWagAAVFsP/jCJdAraUVThFlYjsHUQ\nuNkK4montLBOEcje7jM3ccXZiMGsC43ggfTTJ/NV9Dik3+Ic21K+1ryYEjgh\n1+AITZ15uTLKxZDPnrFjxvu+sJpN1KpfKIjWCRD5kSouYnCgnzk4n2tXek2Z\nkdryyKZ+iVGxzf1FwveuRU3THN4zKvftyBXnmmkME4FzQhmeMEudh6bYFu1U\n7hbJ/77cptSX95UAcnhTQu4Rgk0mIOvhlmgePobC3qFCjP+ByNfbXl0NlntJ\n3nDmz4HM/Hkbkhn6zdw+UpVZ995ybLKHXmzkteynP7Cur9GXAP3uQLcjo2yN\nk712XgKd1PI+UqYJ0uNRx+VI3igNg9CiMDM4C17X0BxkCgNeAHYmbTJl2h5/\nLIQbZOflQ89+pQ3Ow4E5i+/YGkZ6Va/zeGikYuXJNaCtlekUXemkKZcLrpBJ\nqTgrODLuWK9SVJPq+nCxf0DjYaALGQ1TJa6NTROeS1R3wcPH8/SEuE0W/cWG\nIFBGG8/PCjNiMTtCQ+sjmSZamRCRhn8LRg+TGeCltMJ5k/LjjuL8HNbpcV+L\nnE3E9StscLckWRSPSkHITM3/8Rc9/V+ViLuSXTFb83Q0BdR3aM9E4NfytpqH\nsYU7pKkwuYUwXKWrvyPndM0xTUZ0iBlgXyEhStpSxZnQuc+koapHY8brNGkb\nh4ja\r\n=bRwp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"5af147b159c9dfad8d00a20a3b140d55736f1919","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.22.1-alpha.16+5af147b1","@opentelemetry/resources":"^0.22.1-alpha.16+5af147b1","@opentelemetry/api-metrics":"^0.22.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"10.0.0","ts-mocha":"8.0.0","typescript":"4.3.4","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.22.1-alpha.16_1625082534133_0.181965065874939","host":"s3://npm-registry-packages"}},"0.23.1-alpha.17":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.17","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.17","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"847bf79cdfb3cdb3e4919c451a992e9eba22cd6e","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.17.tgz","fileCount":165,"integrity":"sha512-oq/7YkVjooLuA2jYUXnFleWEMVXObjdJOvbEXUHBFofFbYDwp6x0T4C24pRNZShjQdyuLJnNnCwGSINDL9QFMQ==","signatures":[{"sig":"MEUCIQDMWPtVvPAa+SnAfRQnp+LGXAFJW4sVVYkvhO4ikBZZuQIgGESLbFColQUy2euApym2XyUfdLN/E7vII0f3zJPl+yQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3M8QCRA9TVsSAnZWagAAgGQP/1B5V8k355aNDOOZ3Agx\n/1AQN3iO91klRMyCVpVlrK4DmzS32oV+0rStoqjhy311qfRqtvFTz44xnt5P\n6iakel+WijUgUhIebVubkqEJyBhy92LyvB1EBWliZXfr5OVFS15CojoZTfUh\nHNv7x0FnY4bdLFlQ0qg/rtczjZz6bP+1uFK9mWyXQMkPDsQPfe+8VHi3cg04\nNp6Zd5UImPW62c2U8+MPL8q6ICg//u4wVgaE1FVIL/5Sp4JCqZR9tWtJc6SK\n+eCf71qG1wRZZJdnTSK7GlufkTDtc5uS+dNxZuGURyu0QhM6N/uxh+/rpDQ/\nq58pt1XdsL05qgx/7zXz1MJ5CtqHlbyXhgE7bBXIbYKgIFseJXeuo969Di/R\n6AAYw/TB5H/kPfZBK55moqAne+NRLizaHAcaBVjWNAcBw5VXHwlIBpGXxLBr\nSIiOAKPbrlh6HTwaYJ8c4e3/KR0/cNk6ThM3sGA8P2j2atgaMMEWtbnn7tBV\na4wNa+ADQ/zjiQMkYf4KPfJg7cZliQgCD3YHLR9LLUz6Ttmqhcw4M/5fXZKU\nZL1nMSrwyHN3yb6raYCMp7Gtfrm2rDCnTh/a8tLPhLpx1KVM5L9FTgFm1PFg\ntkaXo+knzpU5wFCrknZ29/RBzOwXS0kUjzd2mmnSytv+u22nLHjNzS6mOkII\ngbuP\r\n=Jbfl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"f2a958dfeead4f6ae20901ab3fac04e4fc424a3f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.17+f2a958df","@opentelemetry/resources":"^0.23.1-alpha.17+f2a958df","@opentelemetry/api-metrics":"^0.23.1-alpha.17+f2a958df"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"10.0.0","ts-mocha":"8.0.0","typescript":"4.3.4","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.17_1625083664349_0.3565324389448603","host":"s3://npm-registry-packages"}},"0.23.0":{"name":"@opentelemetry/metrics","version":"0.23.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3c64d8b86ff4952c91aa9010fdf1c76783b33fe1","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.0.tgz","fileCount":165,"integrity":"sha512-IRl/AfnNFmmNZrM58R2T/gVqatPve+T2EpaBbWv4zVfY9Q2S8q7oT8HZAPUc/GQTb2pvwLXpcKO8QmeEt4gfHQ==","signatures":[{"sig":"MEQCIAzUQHvzTEgfdx2p0Sa1mKs81DY95936IvjXcAdzLEq7AiBCVkrpikNTo9lvqw3r+jTIFZEYNgNEVd4C/NjqUhSL+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267454,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3NC/CRA9TVsSAnZWagAA1IkP/A+I7e5zun1Scq1Y1xpB\n8At7H6w0u+widS49R0doLYALR10Z8ZSyQh3EaN0oCLjVrGzOhllB5hZK8is6\n+t3NMz7Fgy43l0s3rMtZV1HlOrVwBJzNJdk5Hpf+Rgcv8Cq/L1wPnIFCzL3F\n9hzxJwnFy5dWTuQJrTirwd6NLFXEmd6s3UzZ6XQiBbovoakSC8NWX8wIhME5\nO/WHAUNdtE/AfRn3d4Aka2ruiGrDweDLpBweCqbNJEmsEc2fqiiAlHmXNNZr\n7wcP9MXj/9KuqC81VlrU5+u2MRc7O5CCYVS5ps//rGMVSS8CpE53nQ0+/i0i\nZzvCw0BVHAQ4uyXb6RjbEX1XcCZmLXUkvmm/iKcBDmdAmyXsRIOQvhx5FV+c\nOFEeYy2+H2H3M+6shLw3q0cRs2LaVs/rYAt7LpDGWjwMbihWqc7bH0oC89tU\nbzZGmrLBQvw4wSE5V6K6jDAvBfP/cV+YOJOheC3MA8Q0OCBfBskOggC7BNg9\nLOy8GYV5lQlqz4LopQ04KupTGsx8+ATC1BlBPGfwwA/wg6bIO4pOUSdVDjIW\nuorDoyeycL78MVA2VVunmUioCfS0ORLZPbgMs7PABmukFo9X1qo4WDl76EVC\nkmU0khl491Vigqf6orRyOKtEQ+GBL+S2GwH09NCpgCykoQucux/j5Bq0c0bf\nZkxN\r\n=kKRn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","engines":{"node":">=8.0.0"},"gitHead":"f2a958dfeead4f6ae20901ab3fac04e4fc424a3f","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"0.23.0","@opentelemetry/resources":"0.23.0","@opentelemetry/api-metrics":"0.23.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"10.0.0","ts-mocha":"8.0.0","typescript":"4.3.4","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.0_1625084094739_0.13913060701932878","host":"s3://npm-registry-packages"}},"0.23.1-alpha.18":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.18","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.18","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"0faf474f675229aa96b3a5366480f787e27da593","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.18.tgz","fileCount":165,"integrity":"sha512-ygqj0tiDttu/oCbEqozzH5RxLqp7kCpJJwS9YUsrlHlRk42wNx2Rm2RZtsg65iuzyRycUbPDPl9Fh0n6KDsndA==","signatures":[{"sig":"MEUCIEsPMitA8kBSbqAQHPbCvIszslKLr5lNyxdKVZeNlePoAiEA8jXLjbTNl5WUiFqtMNYVaTtzZMj0lldjYUEuB4iwfuA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3yTVCRA9TVsSAnZWagAACn4P/jcSBuyI9yZorEuqHFlR\nDYjvhQY2mWcd1PKlVvsG6kJumNfCArO0Oeng44gCFAcKsZmW9kqGy/Zhtc/L\nTbzPvJ5asYLQNWSPmHEcaxg06MIhChUTxgKSwYSZN9Arf03Vg8O6EKOB7xBb\nP/E+GrGLh2LYahyvZTuITXfHGD3Q8QGfrGyX0eOjXMsxrsXOR3M/l4zqmH5e\nj2c/3UNQw+YEIlQw7+/kzPIvfhNUPv7zhTehjjvsch9EhARajTEYKN5q2S7K\nDb8yhjUVpXOeT8TnMZqzUz4RgsU8cSAmZ+27JBWveVQIaM5BqaFdKbbxjbDB\nGxFb4szBdHONouxcwjDTNA1Qh+n2eAmOLhQL+xOHsCLiKtuNI1CIKcGpj8S5\ngt/qUdeLQvqkFbVsTivZcqptB0yIaDWD5Dx4UehoT4EUqifs277yirmS4JtR\nKrV/brtPSyKAwgeT+RQDKtjeohAPk8iWzTY2nlGnZLdLPReXDAH9/DP/SmXN\nsrbcwCwGbxNXZOo6tK7HBJX8fTHHylkYRPnsKK9Ow8mf+AxveeeWJamrLlR7\nVkpWPyKgoCJVZZDO5oxi6w6yWxuvguyRtbizMGFwrguaFhlWuBNZHW3Ro3Vw\nQflA7U8NPyidpvGtWZjTabyABZ4ovYxTlI4sVq4/IPAMTx/AqUY6H/dajtM6\nM/52\r\n=DEcM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"4b3425dd09f0a7087c9d741d25c7a9a0be42770c","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.18+4b3425dd","@opentelemetry/resources":"^0.23.1-alpha.18+4b3425dd","@opentelemetry/api-metrics":"^0.23.1-alpha.18+4b3425dd"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-node":"10.0.0","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.18_1625236692688_0.04671367786027503","host":"s3://npm-registry-packages"}},"0.23.1-alpha.3":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.3","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.3","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"b28a7820dce7861283c5dbb5c8c9d5be7075a580","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.3.tgz","fileCount":165,"integrity":"sha512-ojagDwmotdg80sfEVu/ySBjFvEJ+V8SkipKzk3pYNdceerxCmX/G6MyhwDY03io+CinTjcS4F99rLiuwQsmijQ==","signatures":[{"sig":"MEQCIGIy3m5usFKnMMKM2IB8Jt5XXNX/fBryl2lJShFs8uY8AiAmRhN2r5My+R/dBZtJf1l0egSU86DiDLlEl4nxqJjuOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg44dZCRA9TVsSAnZWagAActIP/jP7PpxxI8IiABGRsno6\nXjgxUIVwzB/Hb6iymR1aNVEyycnX0XJu0E3dDBES1O4xRBTuCFvaqjOt7jOR\nwVrQcEdcE+x7Mv5um858SPoOcWz3fGJOa8LB7EEu49Dk9aftIe5p2SeibbpP\ni25aUsYRpR7Ho5ujliZc6nTa4fujcgmW4j9P2jiMF6C8+APMySIUDD23oSOs\na+aOQN7i4zQum/AhFsIAd4CLthcBn23RVkDgpMeWxIks20QY8czV5gD5u4R9\nFugyBRk3x+RxW8sv9cMmarTkFHaqNQIeKYCAYrJU45M7WAMRw5aV6TZRmq6v\npSI4UduTfw48DAoQOMUTVFzUqT8RDmHJyyUlyv7pd1SX5LXV1OK/4CGxfvgo\nchNtqSg5eJhDdtfUcJXyBqoviaIg1ILhcKcOdboMmlbkWGXImZJ22MeJ4wT6\n/2i1bMSeVqWg+HSBQMsUIN8/9ZN6XnCPXkhj8EO2eoyJKTPt+AIg4gs1lNcP\nkZ5idsMFu91ANseWXBZVxqYx751og4KJfemWjfaOLOrz5eDPhhBCZyqbwoeA\nM1JqY0FnhZq0fMpIoHW8eWDGZVhjgsGU9zhFTdVYJFluJWQdHjbFpIY/RNmy\nTKyue7zDJTscTOPIQSko2dK2Re0qku7OaaNBSEas2wbVq+vS3iqmWTgaBZ/U\nP25f\r\n=W/w1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"6ed8d92559df68ef1fd3273598a1860ee5197e53","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.1","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.3+6ed8d925","@opentelemetry/resources":"^0.23.1-alpha.3+6ed8d925","@opentelemetry/api-metrics":"^0.23.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.4","@types/mocha":"8.2.2","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.3_1625524056838_0.1742118261051131","host":"s3://npm-registry-packages"}},"0.23.1-alpha.15":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.15","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.15","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"34a92d2ed6ba1895fa303b888dabfbad424c4e67","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.15.tgz","fileCount":165,"integrity":"sha512-+TxsfuqrQbWvI2VgQs/PpWOYkGbMR602qJzjw+CfjsRUy15wQ8vIKqJdIhZbCEuh3cvYonlTM1ohhWglezzz5g==","signatures":[{"sig":"MEUCIGkCdnMyaNPF9CHy7J7lMTrCJb9WKVOY0wNvE08sGF+SAiEApN419HESS9ctxSNrQba3+zmkh5ex+jHWQ78fiu9cSoQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8qBVCRA9TVsSAnZWagAApL0P/1mxvFwII89Ll42VWCeF\n59iW/igRo6Q2mcfRC+51vYJADYmNa3vALKNZE2zUQigb8g91phTv/ZVXTv5S\njCRXgjxO5HQZnby5xq+AywBZjZu6wKPrZ9fhWMV/3rdiijwMXExUmHdgiBcw\nH1a7k10lQG5/f2FR43pPg4B6VrGWeLYQ70S7BggcXPy2KsLt61meFypBAYmE\nmgtGD8EZBvsgSbampnwx5tN9ea0fu4xZnMm0wB3aFQelV34gG3o5nXyIod8O\n5/yfxr94hyOF3U9QX7dFw1BqoPLoOx7UkVHGI9ajk6SNY12IpxmNIPiYdFnF\npIVUMRo2I5Dxzww6T7KtItv2VJzowAvaFiZSuqVXHwkeoakgkf7q8bvuG7E+\nOpGXpGq714d2Em8ILcJzOv42TvFDhbe+F9OTGjEoLtYTVzE8EWOfV6zJQFB6\nb2qdNwvEw+h7tFOyfcSnD7Zf+KM96/s6JhH8dc1N5kgVTqd7sGs8VPD72jDk\nWzhXFQ00PA4pgUGJAnyhg3/zPtb93s6vT6bO+lk8b63b71YlcWmrfgl0Pol3\n1fybdG2Lp3g4F/Y09/wESql0wpo00k2pOmBuguPwQeHfnUz820apt5AqPRtc\ncTnkfl/vJ3rjhBKxGYTAp+vp5Fu0sbZgp4A4JLdGHi/+IwHzrypO2rHUHGAs\nTjBN\r\n=Lyc/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"b67ca0568c333e5d841c9b614ed40b3e107682e9","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.3","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.15+b67ca056","@opentelemetry/resources":"^0.23.1-alpha.15+b67ca056","@opentelemetry/api-metrics":"^0.23.1-alpha.15+b67ca056"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.2","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.5","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.15_1626513493055_0.11725852840997963","host":"s3://npm-registry-packages"}},"0.23.1-alpha.23":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.23","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.23","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"a5bfddadfe3ce8ca75e48b2f263be6fc23953125","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.23.tgz","fileCount":165,"integrity":"sha512-vqGXXiEQu7mDqy/bzwdn/tt/7oPe2ApqjUJxiSqUEXKfFDKUdRdAyPRBvEBRV2LvkBZHNz7e/BKFMhDC4AgPtw==","signatures":[{"sig":"MEYCIQDPTeHFh+U5oskZhgX2Crxcm+OUEK3gQxQeCkkp/5ykUwIhANN5i4YPfk+jVw8q+lfgg5AS5oy9IhtqXaPIlMg7ngDJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+wBtCRA9TVsSAnZWagAAedoP/3A1eGMRGRhoXI06PP9u\ne8zcwFRUR3WdKu81FUrwMhKJwmlau4tBtm7kB/09sHcuAEfgzvmDPCAqCyxp\n5xeNJu+iH0WszBK74Y7zE4Xx7vfrAvhx8MOu/MZ3woPfZl7i5AVzmzdwHoQO\n55NlxYbj8AjXliYsnw4Eqrq0ngU3kgZmcXi/ja9lUZIi4plc/2fW4krKRLWu\nT7gwZmv7aE6lIWWJSYl+KrTbD2P4Rv2pWj8T5kXu5Ox6pQf9QdqDRec+ez4F\neYSXJSJkt26ZamiDaBCTKtB5f8+ky6QdBzhUf6FkKvadDuDYJNF0o4i8edHK\nSQkhBH3MZ2FZm5GSeXtpmNehe3rUBAHhDWhi2+wYKyXpMMkkGuWmWpKwVgl2\ndO+MJMP7qzVYJwPpenPQ/LVP2Uc8mdGd6DHHjoaRTiaZDPTZaFQAIGXR94bh\npdvLQ88jrMk7guXwKMo9YFX9ltp/wHzvbekbTt6JNNY2I4c5/vh1Gvcpxb6j\n90dNSL4/FuXzsYKSZlN52gKvrbPl2L6zQYjoIyFw+lOBjIIoTr3YeIFWiqQk\nhDvAZe8vdj5BtKSjwej2ckMUQpHUt2ofq+1wF7K0zXiisRjVhbX71MHqVHND\nNso0jCBLSeiIWyJ5gyD93Opz3knjd4Q0ZRRYp2+9/CmobItOqrQAWsfU2ITh\nHmww\r\n=Z2Ok\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"884d20ab417bf0283ec84a72b9a0fae8ebcb82a1","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.3","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.23+884d20ab","@opentelemetry/resources":"^0.23.1-alpha.23+884d20ab","@opentelemetry/api-metrics":"^0.23.1-alpha.23+884d20ab"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.3","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.5","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.23_1627062381099_0.07539696046007105","host":"s3://npm-registry-packages"}},"0.23.1-alpha.24":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.24","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.24","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3750b8334f4b9ab6bdac98fd8c128339d74f409d","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.24.tgz","fileCount":165,"integrity":"sha512-75XlZ7ihu4DiFZ9DCQR4+YVXfH+xPROyDz71N7rp743Zg5PRvc4LAaDrEDQjg3ZJ+KbMW+5Lu5unXoVg5gEhMA==","signatures":[{"sig":"MEQCIEDvwEtnxvu5zbbPnJgMW1kLE9qX9i183EiTqLvBR0b/AiBe8AcZ50lCc0M9EAVhqTNeOqVWWTl7dQslSnsftxkyAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267486,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/QiBCRA9TVsSAnZWagAADT4P/26km2a+zsbaV/M/3xFV\nxRneHM92yuwg0EqZ9Z7KvIPxipUFLpKBqIMEteN8WzGxWhwME4snS+5KtFdg\n3Zjcu/m2Kak50iXP+u5odDU72iqmq3MGMjgTJzD2+H5YOeMAxCsWNTmIyEQ/\nwVerii3pBW02qWxQGj7BpZyMFvmaXzMbXkcRAd7Qa7xsTYAQYf/NxYNC+KdO\nw5BVbZY474mQJJtLiuhAlPeoDtTVZEHDggMUg0DLgqZmyYzWrmzYgmVosdo7\nDwQL38qNiuEibBHcwWN3/i+ZyM++tFtfk72YBMKsd97cGqbWwaHT957xESI/\ndFDi81+A8kBeNWuEXikas7KgVrQF2az053hrp2QH3C4PRNwYqxt4dVVk2s8z\n34jwW93A4FaCFCI7UZ7NQ1TKQR9HM/F33DRpklVpJQKY0fJzTR8umqSa4Ud2\nuZ5Bw51T9Tlz7XnhgkfsDzhB1kfqqeqFUuT0gD/Yd6rjaE2k4A/6sOa9pMac\nvJldYSXUK/W0UoMD7vl63KSv+WrMmFmllpsRFdBPtbSAHupFEa1dkVRo2e5t\nopu0VUX3oYIkPI6BdRHS0OxkYLwIdX2Qi75pNjVXhhHiUdBe5oqExWW9tt9Y\nTxDoM1r1O2RB5XOtDqryO5suJQUvfwbPhUEcRzp0htm/vQPxZDsJmggDnlbC\nYS7s\r\n=1PUk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"3bc3452814e30274d7eea1f3c9da968b88b1a197","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.3","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.24+3bc34528","@opentelemetry/resources":"^0.23.1-alpha.24+3bc34528","@opentelemetry/api-metrics":"^0.23.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"10.0.0","rimraf":"3.0.2","codecov":"3.8.3","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.5","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.24_1627195521360_0.2637250707128256","host":"s3://npm-registry-packages"}},"0.23.1-alpha.28":{"name":"@opentelemetry/metrics","version":"0.23.1-alpha.28","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.23.1-alpha.28","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"71edbf17b52861449edb5cf78a74ad42be2847d7","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.23.1-alpha.28.tgz","fileCount":165,"integrity":"sha512-5Rkyu9eU5rNaPgy5UsMHOdihl88u7DDVF1alaWllj+HRgSaTEUbcBtBy34FQtn/s7hWHPvXW2DO7Cjz0Hy6gjg==","signatures":[{"sig":"MEUCIA3ukUQrH7WwHHC4nQwNUP1Dr+AfceY9J8aE23Ewl03hAiEA2KTnrKJLTX/ZKW5J7wRLMxf3sXk3NRRqXNsI9q02R3g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267486,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAGIUCRA9TVsSAnZWagAADbUP/RZFbEhAS4wUcPD4Xsix\nKOKOMCcpyKLIADFXAnMNV95OIgl2UR5Qh5g5kKN0kA2Kl0qV5dlIdxr8R0b4\nTn5E/YXESk7tC8X1LCWH0vSYwfhnWXI9WBPQ/5XUrgCn6XzXVVp9uEw95MCW\nH2pXdw3rM7S1q1gDvWODnplUi9TZqcLUqtWscY6qxFlfU7ujRCl97wrm8KDo\ns0XFoURyotUs7I5o6ZqX2TbmykBJrFJL26f6hssEK7kA52f7stZHxNgf7TRs\ndi2iFLRaNZXXoPrJoSid0F92VI3HsUPt/aHbYLsVYjPk5v8jOO72cLqnE4SN\nDp9sqQB7IJyn3pAy9VnFNyN+mjxSoorFqFM2oyxnfK+KWVQcCUrbwur/gyRK\nAIUm+GsZYr2WZzIpTjwEfYs8arANir5fTFCEDzXCMK+92RuSco2TWblpGz4L\nNWRUNEojJqOhc8k3tTSuRI9Np91NowACBOMsaIXg/M7DqGNo2wkFjLcdZI8n\ny5B9gGI/2NkwtrIvOn0UX0wCywUP+9gsQyETabjj3gvhVTtNPIYNKVJ1DgCG\nIwbEu7F6iOJCAVYfr/fY/pLRbTIooxHYl4wg2iCMH6ttnhdoMTN9rSJFqaFA\nxVJciDeLNd6rB7u0m3f3JcUW73W9711eGCFZMFHRO3tHAQe6c1nFuYyMGE0A\n7buW\r\n=wrnE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"d8fbeddacce3e27aab40b24c2ca3c271155e74ea","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.3","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.23.1-alpha.28+d8fbedda","@opentelemetry/resources":"^0.23.1-alpha.28+d8fbedda","@opentelemetry/api-metrics":"^0.23.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"11.1.2","rimraf":"3.0.2","codecov":"3.8.3","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.5","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.23.1-alpha.28_1627415060562_0.1990458877480492","host":"s3://npm-registry-packages"}},"0.24.1-alpha.31":{"name":"@opentelemetry/metrics","version":"0.24.1-alpha.31","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.24.1-alpha.31","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"115233e54fa7e41ca141373c31e511d5eebfdcc9","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.24.1-alpha.31.tgz","fileCount":165,"integrity":"sha512-Pwd14IvunoeKY3dr3s9GFVYeNyE2+ne0lmYxp7Z4dhfVep8bxBMTzJW3wCmVRedVrZiZYKVmI163QZZ7gHrgPQ==","signatures":[{"sig":"MEUCIQDcHUEgSxYe3R70H0dK/T73aNrHAo273zKua2rgudjw3wIgBzj5KZ5SxvBN4HmMXtYBQWbjLh+JKaQ9agihAq9UT9Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAWSLCRA9TVsSAnZWagAA7/gQAJzMYYerdTPbGw3hax65\nyfhl/OBmbq09++xxhUoMHIPpLDhy1VCVphGf1AvX68BImKI8+a7jZpD5ekGg\n+uE2hrMtP8ud2A/ClVHdJw9cxPJU5RFIZx7ftX1grJexZojS8BWDm2NPbFiq\n7gsUM3JcJK49Ax81QG377KGbn7sdmuF9xvKNx9r3BbV+t4hID1E6edexmIX6\nehIz9hqK4y+hsp6Ia6JxWZ6Dp2P1S8qlToizh6ABZj9soHCDedookp+psxyL\nbuZ+rmBpCdfmLM8cVghpLDXr4Ex7Ubl8UciK6RJjPD5NEDvlQCi+6sBVhFpt\nBYa4HGI1vlopFueX87synAwF7WoGSxkIRSpKF4O5BIGSWNeJzPOVbPJV/lDE\naBXN6hTvN90hp7QCFGaZmUoL5qhbi/YYEsyq2Vy8GZJI7FjCpqutM6nrvmwh\npIAt4CKifNtK7TOvHAYuo6Rm0plofNKREqYrXl5xAYDqkUZ3u6QYXZODyl46\nN6faIYGBSFe66US484csMmjb7OEK3g3NGjjxT39eqMC3rxEmzFm7Iy+Zvo8X\nbux5xJTqN80IUcKuDS7nGMO7yxxFD2pldtRFhN04mT6joHnZGAevpWvE+9K3\n+6YaXy7IhBiZttbLj5NIVN/MsYGEiu2O4h+ViEr9TPIi546rmrojtj1vJmFo\npW4r\r\n=4oRn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"fd2410cc9e8d43210b6ea44b8193fa70ee900499","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.3","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.24.1-alpha.31+fd2410cc","@opentelemetry/resources":"^0.24.1-alpha.31+fd2410cc","@opentelemetry/api-metrics":"^0.24.1-alpha.31+fd2410cc"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"11.1.2","rimraf":"3.0.2","codecov":"3.8.3","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.5","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.24.1-alpha.31_1627481227111_0.46974085103293706","host":"s3://npm-registry-packages"}},"0.24.0":{"name":"@opentelemetry/metrics","version":"0.24.0","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.24.0","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"3298b504049a20316513cd9de726f069b238ec66","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.24.0.tgz","fileCount":165,"integrity":"sha512-QqmQCzrSuJE+sCOJ2xXNhctWPp/Am9ILs0Y01MDS08PRJoK20akKHM7eC4oU8ZdXphMg8rYgW2w7tY8rqvYnJg==","signatures":[{"sig":"MEUCIFHaEO+ozhfMrp0sDXWWwROKrO65cVH5lk8Q/XhXKeeUAiEAoZ3JV4G16jY8ppf1INh2xHa4GvvUYdhk/739JjriRJo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2Up6CRA9TVsSAnZWagAApyYQAJzbXK/RAUW/qIDBnFgB\nUfYw1p8Nw9ULYx2l/PKrBhDMt0/O3D86TmiNFCcTWF3RhKqLfo7vC9Ppku2s\nif9nnSX/Iy17aFFH4/LToZ/hPO0K/TRBltvntr2HzD8gv0IIt/8XAyvUPyBF\noOk8Q2T/vNymHJ7ZdkRMjFCMQro31O29C+1xHPaQ1XplkS8UkJOJej61b0Xl\nae7UvcnO5acqAZlZGMv3wbxZyKQB9YgLZbflW/34n8CDvrHNrtYMJJMmgDzz\nJGizfT6WhfjJlb9MgMpllyxpf4zTh9Lzdu5P+a9m+z6z6uSbjFbX4DLaoHc3\nV2lKzFfHyM42NpXWbb7jAPuiizCkX4C60LSPMV3un4/r0D2ayZkURRrm2o1U\n27bIqknlLZEXo4zk7Mq60UeDPp5GGeHebPer1rlQQ+tJK65ZZgss25mY4xKT\npzIb1+0zYZd+XhBHIX+b2Agf09mw+zq2BwqbozN/YGPNTRep2OREVAazH1OG\nYodX5OU40pngkcxbsARieeWa7E7/7/3CtnHGDHBkRw38kr3OrbVHPKEA0799\nvfK/hb4L/iwPwvdXJBC9/yqzGzFoCz/LqfArMzFqlOkeW8C1kdf1Vv9cL5Mn\nWJeCSdx1LrNA80ey2UIsRiBY48g7q1URdEtvZmtsgIILRVi7oMjszW2lwlKW\nQz45\r\n=REv4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","engines":{"node":">=8.0.0"},"gitHead":"fd2410cc9e8d43210b6ea44b8193fa70ee900499","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.8.0+x64 (darwin)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.8.0","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"0.24.0","@opentelemetry/resources":"0.24.0","@opentelemetry/api-metrics":"0.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"11.1.2","rimraf":"3.0.2","codecov":"3.8.3","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.5","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.1","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.24.0_1627481642960_0.335717504298676","host":"s3://npm-registry-packages"}},"0.24.1-alpha.1":{"name":"@opentelemetry/metrics","version":"0.24.1-alpha.1","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","_id":"@opentelemetry/metrics@0.24.1-alpha.1","maintainers":[{"name":"mayurkale22","email":"mayurkale22@gmail.com"},{"name":"bogdandrutu","email":"bogdandrutu@gmail.com"},{"name":"dyladan","email":"dyladan@gmail.com"},{"name":"obecny","email":"bobecny@gmail.com"}],"homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"dist":{"shasum":"5f4b075b9514821d4fae7217de01e9f16f687139","tarball":"https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.24.1-alpha.1.tgz","fileCount":165,"integrity":"sha512-ggedGy28aDujJWYYHSL7IBCIMNJuMzK3kZzJImzR3Jd7M9OF9XCQ6NJpoMpfllXVpTS/1UWRypSjcQ3g5A0IRw==","signatures":[{"sig":"MEQCID0jCeOf7zzPmvRsY2yuqW1FLlmx+1s84g1Gpeq3zxh/AiBJEHi/7WIfj/TU53sOsPrpGptEcpaMYQK8/dKX6Omj3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBFYuCRA9TVsSAnZWagAAWYUQAIbNZ/PG3KLFmNfiuGjE\nxDHN+n1EcZlDW9lWvJS8/7bSqquUWRQkM9y2KbGEiDr1BviTq2a8Ps19xF+/\nGWH4JG4txiJrXCFN9ogmM61HR7uAsuhx5QvUHDuWj/OstlsS+Ca9frkF85UV\nurA69VGa/E6X92VUaFX/PrL/FZLCxrNiEBG8mqnAhC2cvzbynIDuOQwWM4gC\ncpr5qXAOVKM6uQ6hRe7bUqaRU9msrbYwvyBUBtPW0+7EhzSYAsmR37jHXMQ4\nsyWftRdi80hfF4tmIxwSgXUM8SSPYodFf1eh5r1DjDPZLbAKrgqwm74/x5+O\nzlYiuiZSMoP+1gNH0csP28iRZBqSs+yFyvxjbSdbIOfEvdjmmM3LJONjFYUW\nesVAvE29VSkL1h4GCcBMm8mAvSHfzpiHkCS0x4Trr2IMkERVyP3inqZdi5M5\n5Y0uxU63Ny4RXkJiH1C0QCi5fPfbwN9p2lP3jsch/3HmKqwKWSjNz0DRinud\nGnKho4PNh8sexFoF/xrDLizX/Rycuf6ud9mBIAp9xhUAz7eDnX+R+JzoH+oV\nCCqSspN5NWtIjVPNUri58WDpNNnnse3y4l7H1JyPW9RhL7fZE9fwy8m57jyz\nFrWY4KKK9aNIICqiNzaRP0dyZtqzd0wxeV5QWG3dQo/CPI9f9t+QMfADSX8J\nO9zn\r\n=2f36\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/src/index.js","types":"build/src/index.d.ts","module":"build/esm/index.js","readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","engines":{"node":">=8.0.0"},"gitHead":"3b9cd16a8eeed7a262bdfea4c93098861b4c1ba0","scripts":{"tdd":"npm run test -- --watch-extensions ts --watch","lint":"eslint . --ext .ts","test":"nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'","clean":"tsc --build --clean tsconfig.json tsconfig.esm.json","watch":"tsc --build --watch tsconfig.json tsconfig.esm.json","codecov":"nyc report --reporter=json && codecov -f coverage/*.json -p ../../","compile":"tsc --build tsconfig.json tsconfig.esm.json","version":"node ../../scripts/version-update.js","lint:fix":"eslint . --ext .ts --fix"},"_npmUser":{"name":"dyladan","email":"dyladan@gmail.com"},"deprecated":"Package renamed to @opentelemetry/sdk-metrics-base","repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.3+x64 (linux)","description":"OpenTelemetry metrics SDK","directories":{},"_nodeVersion":"14.17.3","dependencies":{"lodash.merge":"^4.6.2","@opentelemetry/core":"^0.24.1-alpha.1+3b9cd16a","@opentelemetry/resources":"^0.24.1-alpha.1+3b9cd16a","@opentelemetry/api-metrics":"^0.24.1-alpha.1+3b9cd16a"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"nyc":"15.1.0","mocha":"7.2.0","sinon":"11.1.2","rimraf":"3.0.2","codecov":"3.8.3","ts-mocha":"8.0.0","typescript":"4.3.5","@types/node":"14.17.6","@types/mocha":"8.2.3","@types/sinon":"10.0.2","@opentelemetry/api":"^1.0.2","@types/lodash.merge":"4.6.6"},"peerDependencies":{"@opentelemetry/api":"^1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/metrics_0.24.1-alpha.1_1627674158438_0.9318585143195053","host":"s3://npm-registry-packages"}}},"time":{"created":"2019-11-04T20:18:33.083Z","modified":"2026-05-01T17:15:35.803Z","0.2.0":"2019-11-04T20:18:33.470Z","0.3.0":"2019-12-13T19:37:27.351Z","0.3.1":"2019-12-21T00:01:02.097Z","0.3.2":"2020-01-03T21:57:25.611Z","0.3.3":"2020-01-22T22:48:46.519Z","0.4.0":"2020-02-05T23:03:43.386Z","0.5.0":"2020-03-16T22:04:09.222Z","0.5.1":"2020-03-20T00:42:59.414Z","0.5.2":"2020-03-27T18:04:11.196Z","0.6.0":"2020-04-02T17:29:50.935Z","0.6.1":"2020-04-08T18:37:47.113Z","0.7.0":"2020-04-24T18:15:21.147Z","0.8.0":"2020-05-12T16:37:35.439Z","0.8.1":"2020-05-18T19:37:48.881Z","0.8.2":"2020-05-21T19:30:11.522Z","0.8.3":"2020-05-28T20:19:46.138Z","0.9.0":"2020-06-18T21:24:13.166Z","0.10.0":"2020-07-27T20:59:27.295Z","0.10.1":"2020-07-28T15:12:54.914Z","0.10.2":"2020-08-03T23:25:46.128Z","0.10.3-canary.0":"2020-08-07T16:47:32.106Z","0.10.3-alpha.28":"2020-08-19T15:03:54.274Z","0.10.3-alpha.34":"2020-08-24T16:44:34.561Z","0.10.3-alpha.35":"2020-08-24T22:45:28.354Z","0.10.3-alpha.40":"2020-08-27T14:23:24.269Z","0.10.3-alpha.41":"2020-08-27T16:08:45.899Z","0.11.1-alpha.48":"2020-09-01T19:24:26.723Z","0.11.0":"2020-09-01T19:32:27.562Z","0.11.1-alpha.15":"2020-09-21T03:30:11.326Z","0.11.1-alpha.35":"2020-09-30T12:22:21.842Z","0.11.1-alpha.36":"2020-09-30T12:38:58.895Z","0.11.1-alpha.44":"2020-10-07T19:55:10.248Z","0.11.1-alpha.53":"2020-10-19T11:48:24.992Z","0.12.1-alpha.54":"2020-10-19T12:50:10.766Z","0.12.0":"2020-10-19T12:54:01.044Z","0.12.1-alpha.7":"2020-10-26T21:12:15.142Z","0.13.0":"2020-12-04T21:26:26.762Z","0.14.0":"2020-12-17T20:53:06.369Z","0.15.0":"2021-01-21T22:20:09.512Z","0.16.0":"2021-02-01T22:33:35.759Z","0.16.1-alpha.10":"2021-02-08T15:50:22.933Z","0.16.1-alpha.11":"2021-02-08T16:18:12.885Z","0.16.1-alpha.14":"2021-02-10T16:06:17.373Z","0.16.1-alpha.15":"2021-02-10T22:18:22.165Z","0.16.1-alpha.18":"2021-02-14T18:12:42.885Z","0.16.1-alpha.20":"2021-02-17T20:52:12.691Z","0.17.0":"2021-02-17T21:16:14.836Z","0.17.1-alpha.21":"2021-02-17T21:17:05.428Z","0.17.1-alpha.2":"2021-02-20T17:37:36.135Z","0.17.1-alpha.5":"2021-02-24T17:19:53.273Z","0.17.1-alpha.8":"2021-03-01T13:38:28.768Z","0.17.1-alpha.10":"2021-03-02T13:22:13.980Z","0.18.1-alpha.12":"2021-03-02T13:54:12.304Z","0.18.0":"2021-03-02T14:01:16.027Z","0.18.1-alpha.3":"2021-03-02T19:09:39.846Z","0.18.1-alpha.16":"2021-03-22T13:11:34.995Z","0.18.1-alpha.20":"2021-03-24T13:11:07.918Z","0.18.1-alpha.21":"2021-03-24T14:13:08.156Z","0.18.1-alpha.23":"2021-03-24T19:17:15.511Z","0.18.1-alpha.24":"2021-03-24T19:38:55.286Z","0.18.1-alpha.26":"2021-03-24T20:09:16.682Z","0.18.2-alpha.81":"2021-03-29T19:52:29.182Z","0.18.1":"2021-03-29T20:04:07.182Z","0.18.2-alpha.1":"2021-03-30T13:06:24.329Z","0.18.3-alpha.2":"2021-03-30T15:27:20.391Z","0.18.2":"2021-03-30T16:16:04.593Z","0.18.3-alpha.1":"2021-03-30T17:29:47.736Z","0.18.3-alpha.3":"2021-03-31T07:38:13.943Z","0.18.3-alpha.4":"2021-04-05T16:38:06.866Z","0.18.3-alpha.5":"2021-04-05T17:55:09.881Z","0.18.3-alpha.7":"2021-04-07T16:12:32.776Z","0.18.3-alpha.10":"2021-04-08T14:25:39.396Z","0.18.3-alpha.11":"2021-04-08T20:22:02.443Z","0.18.3-alpha.14":"2021-04-09T09:11:32.719Z","0.18.3-alpha.16":"2021-04-09T20:07:58.182Z","0.18.3-alpha.18":"2021-04-10T19:00:54.859Z","0.18.3-alpha.20":"2021-04-12T15:08:51.355Z","0.18.3-alpha.23":"2021-04-12T18:12:53.090Z","0.18.3-alpha.25":"2021-04-12T19:42:37.949Z","0.18.3-alpha.27":"2021-04-13T19:54:56.112Z","0.18.3-alpha.28":"2021-04-14T07:51:46.037Z","0.18.3-alpha.31":"2021-04-20T15:48:47.612Z","0.19.1-alpha.36":"2021-04-22T12:19:54.595Z","0.19.0":"2021-04-22T12:28:53.623Z","0.19.1-alpha.37":"2021-04-22T18:16:06.107Z","0.19.1-alpha.39":"2021-04-22T18:45:13.482Z","0.19.1-alpha.42":"2021-04-26T19:00:39.546Z","0.19.1-alpha.7":"2021-04-28T16:13:54.554Z","0.19.1-alpha.9":"2021-04-29T08:17:34.904Z","0.19.1-alpha.11":"2021-04-29T21:07:20.946Z","0.19.1-alpha.12":"2021-04-30T20:49:50.691Z","0.19.1-alpha.19":"2021-05-08T07:54:00.699Z","0.19.1-alpha.21":"2021-05-11T18:50:07.193Z","0.19.1-alpha.25":"2021-05-12T15:53:55.131Z","0.19.1-alpha.26":"2021-05-12T16:06:52.593Z","0.19.1-alpha.31":"2021-05-19T18:07:03.365Z","0.19.1-alpha.33":"2021-05-20T12:12:12.335Z","0.19.1-alpha.38":"2021-05-26T15:02:58.478Z","0.19.1-alpha.43":"2021-06-01T19:46:03.043Z","0.20.1-alpha.49":"2021-06-03T17:09:57.093Z","0.20.0":"2021-06-03T18:28:40.495Z","0.20.1-alpha.3":"2021-06-05T08:29:08.331Z","0.20.1-alpha.4":"2021-06-08T13:27:58.163Z","0.21.1-alpha.7":"2021-06-10T17:26:11.660Z","0.21.0":"2021-06-10T18:29:52.268Z","0.21.1-alpha.1":"2021-06-12T08:24:39.828Z","0.21.1-alpha.2":"2021-06-12T08:35:20.127Z","0.22.1-alpha.5":"2021-06-17T17:05:18.278Z","0.22.0":"2021-06-17T17:58:41.110Z","0.22.1-alpha.2":"2021-06-23T15:49:00.110Z","0.22.1-alpha.3":"2021-06-23T16:05:02.396Z","0.22.1-alpha.13":"2021-06-30T18:40:40.328Z","0.22.1-alpha.15":"2021-06-30T19:08:50.315Z","0.22.1-alpha.16":"2021-06-30T19:48:54.346Z","0.23.1-alpha.17":"2021-06-30T20:07:44.567Z","0.23.0":"2021-06-30T20:14:55.117Z","0.23.1-alpha.18":"2021-07-02T14:38:12.948Z","0.23.1-alpha.3":"2021-07-05T22:27:37.008Z","0.23.1-alpha.15":"2021-07-17T09:18:13.202Z","0.23.1-alpha.23":"2021-07-23T17:46:21.396Z","0.23.1-alpha.24":"2021-07-25T06:45:21.539Z","0.23.1-alpha.28":"2021-07-27T19:44:20.762Z","0.24.1-alpha.31":"2021-07-28T14:07:07.277Z","0.24.0":"2021-07-28T14:14:03.148Z","0.24.1-alpha.1":"2021-07-30T19:42:38.686Z"},"bugs":{"url":"https://github.com/open-telemetry/opentelemetry-js/issues"},"author":{"name":"OpenTelemetry Authors"},"license":"Apache-2.0","homepage":"https://github.com/open-telemetry/opentelemetry-js#readme","keywords":["opentelemetry","nodejs","metrics","stats","profiling"],"repository":{"url":"git+https://github.com/open-telemetry/opentelemetry-js.git","type":"git"},"description":"OpenTelemetry metrics SDK","maintainers":[{"email":"dyladan@gmail.com","name":"dyladan"},{"email":"marc.pichler@dynatrace.com","name":"pichlermarc"},{"email":"overbalancedev@proton.me","name":"overbalance"},{"email":"npmjs-account@opentelemetry.io","name":"npmjs-account"},{"email":"trentm@gmail.com","name":"trentm"},{"email":"martin@martinkuba.com","name":"martinkuba"}],"readme":"# OpenTelemetry Metrics SDK\n\n[![NPM Published Version][npm-img]][npm-url]\n[![dependencies][dependencies-image]][dependencies-url]\n[![devDependencies][devDependencies-image]][devDependencies-url]\n[![Apache License][license-image]][license-image]\n\nOpenTelemetry metrics allow a user to collect data and export it to a metrics backend like [Prometheus](https://prometheus.io/).\n\n## Installation\n\n```bash\nnpm install --save @opentelemetry/metrics\n```\n\n## Usage\n\n### Counter\n\nChoose this kind of metric when the value is a quantity, the sum is of primary interest, and the event count and value distribution are not of primary interest. It is restricted to non-negative increments.\nExample uses for Counter:\n\n- count the number of bytes received\n- count the number of requests completed\n- count the number of accounts created\n- count the number of checkpoints run\n- count the number of 5xx errors.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createCounter('metric_name', {\n  description: 'Example of a counter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(10);\n\n```\n\n### UpDownCounter\n\n`UpDownCounter` is similar to `Counter` except that it supports negative increments. It is generally useful for capturing changes in an amount of resources used, or any quantity that rises and falls during a request.\n\nExample uses for UpDownCounter:\n\n- count the number of active requests\n- count memory in use by instrumenting new and delete\n- count queue size by instrumenting enqueue and dequeue\n- count semaphore up and down operations\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\n// Initialize the Meter to capture measurements in various ways.\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\nconst counter = meter.createUpDownCounter('metric_name', {\n  description: 'Example of a UpDownCounter'\n});\n\nconst labels = { pid: process.pid };\n\n// Create a BoundInstrument associated with specified label values.\nconst boundCounter = counter.bind(labels);\nboundCounter.add(Math.random() > 0.5 ? 1 : -1);\n\n```\n\n### Value Observer\n\nChoose this kind of metric when only last value is important without worry about aggregation.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n\n// async callback - for operation that needs to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createValueObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n  observerResult.observe(getRandomValue(), { label: '2' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### UpDownSumObserver\n\nChoose this kind of metric when sum is important and you want to capture any value that starts at zero and rises or falls throughout the process lifetime.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback - for operation that needs to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of an async observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(()=> {\n      resolve(Math.random());\n    }, 100);\n  });\n}\n\n// sync callback in case you don't need to wait for value\nmeter.createUpDownSumObserver('your_metric_name', {\n  description: 'Example of a sync observer with callback',\n}, (observerResult) => {\n  observerResult.observe(getRandomValue(), { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n\n```\n\n### Sum Observer\n\nChoose this kind of metric when collecting a sum that never decreases.\nThe callback can be sync or async.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\n\nconst meter = new MeterProvider().getMeter('your-meter-name');\n\n// async callback in case you need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of an async sum observer with callback',\n}, async (observerResult) => {\n  const value = await getAsyncValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getAsyncValue() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(Math.random());\n    }, 100)\n  });\n}\n\n// sync callback in case you don't need to wait for values\nmeter.createSumObserver('example_metric', {\n  description: 'Example of a sync sum observer with callback',\n}, (observerResult) => {\n  const value = getRandomValue();\n  observerResult.observe(value, { label: '1' });\n});\n\nfunction getRandomValue() {\n  return Math.random();\n}\n```\n\n### Batch Observer\n\nChoose this kind of metric when you need to update multiple observers with the results of a single async calculation.\n\n```js\nconst { MeterProvider } = require('@opentelemetry/metrics');\nconst { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');\n\nconst exporter = new PrometheusExporter(\n  {\n    startServer: true,\n  },\n  () => {\n    console.log('prometheus scrape endpoint: http://localhost:9464/metrics');\n  },\n);\n\nconst meter = new MeterProvider({\n  exporter,\n  interval: 3000,\n}).getMeter('example-observer');\n\nconst cpuUsageMetric = meter.createValueObserver('cpu_usage_per_app', {\n  description: 'CPU',\n});\n\nconst MemUsageMetric = meter.createValueObserver('mem_usage_per_app', {\n  description: 'Memory',\n});\n\nmeter.createBatchObserver((observerBatchResult) => {\n  getSomeAsyncMetrics().then(metrics => {\n    observerBatchResult.observe({ app: 'myApp' }, [\n      cpuUsageMetric.observation(metrics.value1),\n      MemUsageMetric.observation(metrics.value2)\n    ]);\n  });\n});\n\nfunction getSomeAsyncMetrics() {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      resolve({\n        value1: Math.random(),\n        value2: Math.random(),\n      });\n    }, 100)\n  });\n}\n\n```\n\nSee [examples/prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/prometheus) for a short example.\n\n### Value Recorder\n\n`ValueRecorder` is a non-additive synchronous instrument useful for recording any non-additive number, positive or negative.\nValues captured by `ValueRecorder.record(value)` are treated as individual events belonging to a distribution that is being summarized.\n`ValueRecorder` should be chosen either when capturing measurements that do not contribute meaningfully to a sum, or when capturing numbers that are additive in nature, but where the distribution of individual increments is considered interesting.\n\n## Useful links\n\n- For more information on OpenTelemetry, visit: <https://opentelemetry.io/>\n- For more about OpenTelemetry JavaScript: <https://github.com/open-telemetry/opentelemetry-js>\n- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]\n\n## License\n\nApache 2.0 - See [LICENSE][license-url] for more information.\n\n[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions\n[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/main/LICENSE\n[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat\n[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics\n[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrsics\n[devDependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js.svg?path=packages%2Fopentelemetry-metrics&type=dev\n[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-metrics&type=dev\n[npm-url]: https://www.npmjs.com/package/@opentelemetry/metrics\n[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fmetrics.svg\n","readmeFilename":"README.md"}