diff --git a/.changeset/famous-dragons-eat.md b/.changeset/famous-dragons-eat.md new file mode 100644 index 0000000000000..c2d6f96055239 --- /dev/null +++ b/.changeset/famous-dragons-eat.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/data-transport-layer': patch +--- + +add metrics to measure http endpoint latency diff --git a/packages/data-transport-layer/package.json b/packages/data-transport-layer/package.json index c360b4b37141c..1fcbadbfa448b 100644 --- a/packages/data-transport-layer/package.json +++ b/packages/data-transport-layer/package.json @@ -19,9 +19,9 @@ "build": "tsc -p tsconfig.build.json" }, "dependencies": { + "@eth-optimism/common-ts": "^0.0.1", "@eth-optimism/contracts": "^0.2.8", "@eth-optimism/core-utils": "^0.3.2", - "@eth-optimism/common-ts": "^0.0.1", "@ethersproject/providers": "^5.0.21", "@sentry/node": "^6.3.1", "@sentry/tracing": "^6.3.1", @@ -32,6 +32,7 @@ "dotenv": "^8.2.0", "ethers": "^5.0.26", "express": "^4.17.1", + "express-prom-bundle": "^6.3.6", "level": "^6.0.1", "levelup": "^4.4.0", "node-fetch": "^2.6.1" diff --git a/packages/data-transport-layer/src/services/server/service.ts b/packages/data-transport-layer/src/services/server/service.ts index f04d9b6f3a303..ba21bc6a22b2c 100644 --- a/packages/data-transport-layer/src/services/server/service.ts +++ b/packages/data-transport-layer/src/services/server/service.ts @@ -1,6 +1,7 @@ /* Imports: External */ import { BaseService } from '@eth-optimism/common-ts' import express, { Request, Response } from 'express' +import promBundle from 'express-prom-bundle' import cors from 'cors' import { BigNumber } from 'ethers' import { JsonRpcProvider } from '@ethersproject/providers' @@ -105,6 +106,7 @@ export class L1TransportServer extends BaseService { private _initializeApp() { // TODO: Maybe pass this in as a parameter instead of creating it here? this.state.app = express() + // Init Sentry options Sentry.init({ dsn: this.options.sentryDsn, release: `data-transport-layer@${process.env.npm_package_version}`, @@ -118,6 +120,12 @@ export class L1TransportServer extends BaseService { }) this.state.app.use(Sentry.Handlers.requestHandler()) this.state.app.use(Sentry.Handlers.tracingHandler()) + // Init metrics + const metricsMiddleware = promBundle({ + includeMethod: true, + includePath: true, + }) + this.state.app.use(metricsMiddleware) this.state.app.use(cors()) this._registerAllRoutes() this.state.app.use(Sentry.Handlers.errorHandler()) diff --git a/yarn.lock b/yarn.lock index a72f216d98347..004891bc3cc66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6068,6 +6068,14 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +express-prom-bundle@^6.3.6: + version "6.3.6" + resolved "https://registry.yarnpkg.com/express-prom-bundle/-/express-prom-bundle-6.3.6.tgz#c8da1c1024edfcc54953c365991aca57ffd0cfda" + integrity sha512-IRsTRCEKCVCHEriQlZ1FuutjEFc89KASsveXh+1HcGEnuZKiAC4LugxrsGEIdySqYvqOYSr2SWHJ6L8/BK2SHA== + dependencies: + on-finished "^2.3.0" + url-value-parser "^2.0.0" + express@^4.14.0, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -9933,7 +9941,7 @@ oboe@2.1.4: ethers "5.0.0" ganache-core "^2.12.1" -on-finished@~2.3.0: +on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= @@ -13082,6 +13090,11 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url-value-parser@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/url-value-parser/-/url-value-parser-2.0.3.tgz#cd4b8d6754e458d65e8125260c09718d926e6e21" + integrity sha512-FjIX+Q9lYmDM9uYIGdMYfQW0uLbWVwN2NrL2ayAI7BTOvEwzH+VoDdNquwB9h4dFAx+u6mb0ONLa3sHD5DvyvA== + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"