Skip to content

Conversation

@Mr0grog
Copy link
Collaborator

@Mr0grog Mr0grog commented Jan 2, 2025

This is a first pass, and is a bit speculative. This PR drops the official Datadog client as a runtime dependency since it is huge (15 MB!) and imposes a lot of runtime costs and some logging confusion (e.g. #133).

The implementation here basically swaps out @datadog/datadog-api-client for cross-fetch, which is what @datadog/datadog-api-client was using, so the potential issues should be pretty minimal here.

I was hoping to fix the punycode deprecation warning, but was not able to do so because the dependencies causing the issue require newer versions of Node.js than we currently do (Node.js 12.0). We can upgrade cross-fetch (requires Node.js 14.0) or switch directly to node-fetch (requires Node.js 12.20, but cuts off the tacit-but-not-guaranteed-compatibility we have with React Native and with Browsers). Either one of these is probably OK (Node.js maintenance only extends back to v18 these days anyway, and our biggest dependee, datadog-ci, only requires Node.js 14). Something to think through before landing this.

This drops our dependency on `@datadog/datadog-api-client` in favor of directly calling the API via HTTP. It requires a little more code on our side, but gets us a bit more flexibility and drops a 15 MB (!) dependency that we barely use.

Fixes #132.
Not strictly required for this PR, but these changes help make tests a safer and more consistent regardless of what env vars you have set.
get () { return false; },
set () {},
});
class HttpApi {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably want to either merge this into DatadogReporter or pull some more logic from it (e.g. base URL stuff) down into this class.

@jonathanstiansen
Copy link

Thanks for this, I appreciate the thought behind this!

@Mr0grog
Copy link
Collaborator Author

Mr0grog commented Apr 13, 2025

@jonathanstiansen do need support for Node.js < 12?

Would you be interested in testing a pre-release version of this?

@jonathanstiansen
Copy link

jonathanstiansen commented Apr 13, 2025 via email

@kroney
Copy link

kroney commented Jul 31, 2025

@dbader : can we merge this please?

@Mr0grog
Copy link
Collaborator Author

Mr0grog commented Aug 2, 2025

@kroney thanks for the ping here! I think I should have some time to return to this in the next week or so.

re: the original notes here, I think I will probably update the minimum required version of Node.js (since datadog-ci has also upgraded) so this can also resolve some the other warnings. That will make this a 0.13.0 release.

@kroney
Copy link

kroney commented Aug 27, 2025

@Mr0grog any updates?

@Mr0grog
Copy link
Collaborator Author

Mr0grog commented Aug 27, 2025

@kroney this is definitely still on my radar as a high priority, but I just haven’t had the time I thought I would.

Is this especially important for you? I could push out an alpha release this weekend with what’s here so far and none of the other cleanup.

Also, what’s the oldest Node.js release you are currently using this package with? Thinking about how far to move the minimum with this update.

@kroney
Copy link

kroney commented Aug 28, 2025

We have some issues with this package and memory in AWS lambda, that's why it would be nice to see if it works. We're running at least node 20 everywhere

@Mr0grog
Copy link
Collaborator Author

Mr0grog commented Sep 1, 2025

OK, this should be good to go as far as a pre-release (v0.13.0-pre.1), which I will publish shortly. It will be version 0.13.0-pre.1 on the next channel, so you can get it by depending on either of those in your package.json.

Things I want to make sure I cover before a final v0.13.0:

  • Make sure proxy support works.
  • Consider code organization between the DatadogReporter and Http classes.
  • Consider moving to newer Node.js than 14. (Current datadog-ci versions require v18+, v20 is the oldest maintained release.) I try to keep it conservative here, but we are currently still in ultra-conservative territory.
  • Consider switching to ESM. We probably want to require at least Node v16 for that, though.

@Mr0grog Mr0grog merged commit bae7265 into main Sep 1, 2025
9 checks passed
@Mr0grog Mr0grog deleted the 132-the-datadog-client-is-a-heavy-load branch September 1, 2025 05:02
@Mr0grog
Copy link
Collaborator Author

Mr0grog commented Sep 1, 2025

@kroney (and anyone else here interested), this is now available on NPM and you can install it by setting the datadog-metrics version in your package.json to either:

  • 0.13.0-pre.1
  • next

Please post issues if you run into problems! And sorry this has been so slow coming.

@Mr0grog
Copy link
Collaborator Author

Mr0grog commented Dec 8, 2025

@kroney did this change help your issues at all?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants