{"id":13527589,"url":"https://github.com/getndazn/pensieve","last_synced_at":"2026-02-03T12:49:21.261Z","repository":{"id":55023288,"uuid":"262084231","full_name":"getndazn/pensieve","owner":"getndazn","description":"\"The Pensieve is a magical object used to review memories\"","archived":false,"fork":false,"pushed_at":"2021-01-14T18:57:45.000Z","size":906,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":84,"default_branch":"main","last_synced_at":"2025-11-23T03:11:54.305Z","etag":null,"topics":["apm","datadog","harry-potter","metrics","monitoring","newrelic","statsd","wizarding-world"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/getndazn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2020-05-07T15:11:53.000Z","updated_at":"2023-06-26T23:31:25.000Z","dependencies_parsed_at":"2022-08-14T09:20:31.727Z","dependency_job_id":null,"html_url":"https://github.com/getndazn/pensieve","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/getndazn/pensieve","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getndazn%2Fpensieve","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getndazn%2Fpensieve/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getndazn%2Fpensieve/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getndazn%2Fpensieve/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/getndazn","download_url":"https://codeload.github.com/getndazn/pensieve/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getndazn%2Fpensieve/sbom","scorecard":{"id":424468,"data":{"date":"2025-08-11","repo":{"name":"github.com/getndazn/pensieve","commit":"aaab8e0a1b571b9ec42873433d5ff6eeadbe9f71"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 2/21 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/on-push.yml:1","Warn: no topLevel permission defined: .github/workflows/on-release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/on-push.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/getndazn/pensieve/on-push.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/on-push.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/getndazn/pensieve/on-push.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/on-release.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/getndazn/pensieve/on-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/on-release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/getndazn/pensieve/on-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/on-release.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/getndazn/pensieve/on-release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/on-release.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/getndazn/pensieve/on-release.yml/main?enable=pin","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   3 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"54 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-pp75-xfpw-37g9","Warn: Project is vulnerable to: GHSA-7v5v-9h63-cj86","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-cph5-m8f7-6c5x","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-897m-rjf5-jp39","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-44c6-4v22-4mhx","Warn: Project is vulnerable to: GHSA-4x5v-gmq8-25ch","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T01:57:11.774Z","repository_id":55023288,"created_at":"2025-08-19T01:57:11.774Z","updated_at":"2025-08-19T01:57:11.774Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29046488,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apm","datadog","harry-potter","metrics","monitoring","newrelic","statsd","wizarding-world"],"created_at":"2024-08-01T06:01:52.870Z","updated_at":"2026-02-03T12:49:21.240Z","avatar_url":"https://github.com/getndazn.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Pensieve\n\nPensieve is a **NPM package** to be used in Node.js runtime **applications running on EC2/ECS** integrated with a StatsD agent.\nIt provides **custom metrics** with useful context related to your application out of the box.\n\n## Table of contents\n* [Use cases](#use-cases)\n* [Terminology](#terminology)\n* [Usage](#usage)\n  + [Instantiate Pensieve](#instantiate-pensieve)\n  + [Instantiate the StatsD client](#instantiate-the-statsd-client)\n  + [Instantiate your metrics service](#instantiate-your-metrics-service)\n  + [Integration with Express.js](#integration-with-expressjs)\n    - [Usage in Express.js applications](#usage-in-expressjs-applications)\n    - [Example of Express.js integrations](#example-of-expressjs-integrations)\n    - [Express.js integration diagram](#expressjs-integration-diagram)\n  + [Submit your own custom metrics](#submit-your-own-custom-metrics)\n  + [ECS metadata](#ecs-metadata)\n* [Metric attributes](#metric-attributes)\n  + [Standard attributes](#standard-attributes)\n  + [HTTP request metric (inbound and outbound)](#http-request-metric-inbound-and-outbound)\n* [Changelog](#changelog)\n* [Roadmap](#roadmap)\n* [Contributors](#contributors)\n\n## Use cases\n- REST API's - Integrated with libraries like [Express.js](https://github.com/expressjs/express)\n- SQS long pollers - Integrated with libraries like [sqs-consumer](https://github.com/BBC/sqs-consumer)\n \n\u003e To see how to integrate Pensieve with other libraries, check the [examples](examples) folder.\n\n## Terminology\n\nCheck out the [Terminology](docs/terminology.md) section for explanations related to the terms used in this documentation and library.\n\n## Usage\n\nTo use Pensieve in your application, add it to your required npm libraries:\n\n```bash\n$ # cd projects/content-portability\n$ npm install @dazn/pensieve\n```\n\n### Instantiate Pensieve\n\n```typescript\nimport { Pensieve } from \"@dazn/pensieve\"\n\n// Information \u0026 context related to your application\n// Will be used in the attributes of custom metrics\nconst pensieveInstance = new Pensieve({\n    appName: \"content-portability\",\n    component: \"api\",\n    env: \"prod\",\n    awsRegion: \"eu-central-1\",\n    appVersion: \"v0.0.1\",\n    host: os.hostname(),\n    serviceType: \"ecs\",\n    commitHash: \"abcdefg12\"\n})\n\n```\n\nPensieve can \"auto-fill\" information related to your ECS service, such as AWS availability zone and ECS task ID.\nCheckout the section [ECS metadata](#ecs-metadata) for an explanation on how to do it.\n\n### Instantiate the StatsD client\n\n```typescript\n\nimport { StatsD } from \"hot-shots\"\n\nconst statsDClient = new StatsD({\n    host: process.env.STATSD_HOST || 'statsd.host.com',\n    port: Number(process.env.STATSD_PORT) || 8125,\n    maxBufferSize: 8192,\n    bufferFlushInterval: 1000\n})\n\n```\n**Note: while not strictly required, it is highly recommended you add the above environmental variables to your ECS container definition.**\n\nThe advantage is that if multiple StatsD agents are running in the same host, switching from one agent to another (for example Datadog to New Relic) does not require any Node.js code changes but only Terraform changes.\n\n### Instantiate your metrics service\n\n```typescript\nimport { StatsDService } from \"@dazn/pensieve\"\n\n// The service you can use to create your own custom metrics\nconst metricsService = new StatsDService(pensieveInstance, statsDClient)\n\n```\n\nDone!\n\n\n### Integration with Express.js\n\n1. [Usage](#usage-in-expressjs-applications)\n2. [Example](#example-of-expressjs-integrations)\n3. [Diagram](#expressjs-integration-diagram)\n\n#### Usage in Express.js applications\n\nTo monitor **inbound requests**, add this middleware to each route:\n\n```typescript\nimport { inboundRequest } from \"@dazn/pensieve/lib/middleware\"\n\n// Versioned API's\napp.get(\"/v1/items\", inboundRequest(metricsService, { path: \"get_items\", version: \"v1\" }), routeFn)\napp.get(\"/v2/items\", inboundRequest(metricsService, { path: \"get_items\", version: \"v2\" }), routeFn)\n\n// Unversioned API's\napp.get(\"/items\", inboundRequest(metricsService, { path: \"get_items\" }), routeFn)\n```\n\nTo monitor **outbound requests**, submit the outbound request after the action is performed (`metricsService` initialized as [described here](#instantiate-your-metrics-service).   ):\n\n```typescript\nlet statusCode;\nconst startAt = process.hrtime();\ntry {\n    const response: AxiosResponse = await axiosInstance.get( \"https://www.google.nl\" );\n    statusCode = response.status;\n} catch (err) {\n    console.log(err);\n} finally {\n    // Submit the outbound request\n    metricsService.submitOutboundRequestMetric({\n        httpResponseCode: statusCode,\n        target: \"google\",\n        httpMethod: \"GET\",\n        routePath: \"google_index_get\",\n        startAt\n    });\n}\n```\n\n#### Example of Express.js integrations\n\nTo see how to integrate Pensieve with an Express.js app, check the [examples](examples/api) folder.\n\n#### Express.js integration diagram\n\n![REST API's integration](docs/diagrams/rest-api-integration.png)  \n\n\u003csup\u003eHigh level diagram of Pensieve integrated in an Express.js app running on ECS\u003c/sup\u003e\n\n\n### Submit your own custom metrics\n\nYou can also submit your own custom metrics if you want!    \n\n`metricsService` initialized as [described here](#instantiate-your-metrics-service).    \n\n```typescript\n// Supported types: \n// IncrementMetric: increments a stat by 1\n// GaugeMetric: gauge a stat by a specified amount\n// HistogramMetric: send data for histogram stat (DataDog and Telegraf only)\n// TimingMetric: sends a timing command with the specified milliseconds (typical for latencies)\nimport { IncrementMetric } from \"@dazn/pensieve/lib/types\"\n\nconst myOwnIncrementMetric: IncrementMetric = {\n  kind: \"increment\",\n  key: \"somethingHappened\",\n  attributes: {\n    foo: \"bar\" // Your own extra custom attributes here\n  }\n}\n\nmetricsService.submit(myOwnIncrementMetric)\n\n```\n\n### ECS metadata\n\nPensieve also allows you to gather useful context related to the ECS task where the application is running, when applicable.  \nFor this functionality to work, make sure that your ECS container agent has the setting `ECS_ENABLE_CONTAINER_METADATA=true` enabled.  \n[Follow the AWS documentation to check how to enable it for your own cluster.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-metadata.html)\n\n```typescript\nconst pensieveInstance = new Pensieve(\n  {\n      appName: \"content-portability\",\n      component: \"api\",\n      env: \"prod\",\n      appVersion: \"v0.0.1\",\n      host: os.hostname(),\n      serviceType: \"ECS\",\n      commitHash: \"abcdefg12\"\n  },\n  true  // Enable ECS metadata context, disabled by default\n)\n\n// ECS metadata available for you:\nloggerInstance.info({\n  message: \"ECS metadata information for you!\",\n  private: { ECSMetadataContext: pensieveInstance.getECSMetadataContext() }\n})\n\n/**\n* Log output:\n* {\n*  message: 'ECS metadata information for you!',\n*  private: {\n*    ECSMetadataContext: {\n*      cluster: 'test-cluster',\n*      ecsTaskId: '2b88376d-aba3-4950-9ddf-bcb0f388a40c',\n*      containerName: 'test-container-name',\n*      containerInstanceArn: 'arn:aws:ecs:region:acc:container-instance/test-cluster/1f73d099-b914-411c-a9ff-81633b7741dd',\n*      ecsServiceName: 'simple-app-service-name',\n*      containerId: 'aec2557997f4eed9b280c2efd7afccdced',\n*      dockerContainerName: '/ecs-console-example-app-1-e4e8e495e8baa5de1a00',\n*      imageId: 'sha256:2ae34abc2ed0a22e280d17e13f',\n*      availabilityZone: 'us-east-1b'\n*    }\n*  }\n* }        \n**/\n\n```\n\n## Metric attributes\n\nAttributes provide context to each metric.\nAll the metrics generated by Pensieve have a set of defined attributes, that can be later be used in New Relic or Datadog to filter the queries necessary to create widgets in dashboards.\n\n### Standard attributes\n\n- **env** - The name of the current environment: for example \"prod\"\n- **appName** - The name of your application: for example \"content-portability\"\n- **awsRegion** - The name of the current aws region: for example \"eu-central-1\"\n- **awsAvailabilityZone** - The name of the current aws region: for example \"eu-central-1a\"\n- **component** - The name of the component: for example \"api\"\n- **source** - The source of the incoming data: for example \"geofencing\" service\n- **target** - The target of the outbound data (request or event): for example \"user-management\" service\n- **host** - The name of the current host: for example \"local.12345\"\n- **ecsTaskId** - The ID of the current ECS task (when applicable)\n- **ecsServiceName** - The name of the current ECS service (when applicable): for example \"content-portability-prod\"\n- **commitHash** - The current git commit hash: for example \"f0a305cace\"\n- **appVersion** - The current git release tag: for example \"0.3.6\"\n\n\n### HTTP request metric (inbound and outbound)\n\n- **routePath** - A normalized unique name for the route: for example \"get_content-portability-groups\"\n- **httpResponseCode** - The status returned by the HTTP response: for example \"200\"\n- **httpMethod** - The status group of the HTTP request/response: for example \"GET\"\n- **httpRequestDirection** - Indicates whether this metrics is about an \"inbound\" request or \"outbound\" request\n- **apiVersion** - The version of your route: for example \"v5\"\n\n\n## Changelog\n\nPlease see the [CHANGELOG](CHANGELOG.md) file for more information about what has changed recently.\n\n\n## Roadmap\n\n- Migration to [Lerna](https://github.com/lerna/lerna)\n- Add example of SQS long-polling integration\n\n## Contributors\n\n- [Sara Gerion](https://github.com/saragerion)\n- [Marcio Mansur Rabelo](https://github.com/marciomansur)\n- [Caio Quirino](https://github.com/caioquirino)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetndazn%2Fpensieve","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgetndazn%2Fpensieve","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetndazn%2Fpensieve/lists"}