Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not require appsec modules when disabling appsec if they have not been required before #4244

Merged
merged 9 commits into from
Apr 23, 2024

Conversation

iunanua
Copy link
Contributor

@iunanua iunanua commented Apr 17, 2024

What does this PR do?

Use LazyModules to handle how a module is loaded, enabled and disabled by the Tracer.
It takes into account ESM bundles keeping requires in place.
Also handles enablements/disablements via RC

Motivation

do not require a module to disable it if it hasn't enabled before

Plugin Checklist

Additional Notes

Copy link

github-actions bot commented Apr 17, 2024

Overall package size

Self size: 6.3 MB
Deduped: 60.79 MB
No deduping: 61.07 MB

Dependency sizes

name version self size total size
@datadog/native-iast-taint-tracking 1.7.0 16.71 MB 16.72 MB
@datadog/native-appsec 7.1.1 14.39 MB 14.4 MB
@datadog/pprof 5.2.0 8.84 MB 9.21 MB
protobufjs 7.2.5 2.77 MB 6.56 MB
@datadog/native-iast-rewriter 2.3.0 2.15 MB 2.24 MB
@opentelemetry/core 1.14.0 872.87 kB 1.47 MB
@datadog/native-metrics 2.0.0 898.77 kB 1.3 MB
@opentelemetry/api 1.4.1 780.32 kB 780.32 kB
import-in-the-middle 1.7.3 67.62 kB 731.01 kB
msgpack-lite 0.1.26 201.16 kB 281.59 kB
opentracing 0.14.7 194.81 kB 194.81 kB
semver 7.5.4 93.4 kB 123.8 kB
pprof-format 2.1.0 111.69 kB 111.69 kB
@datadog/sketches-js 2.1.0 109.9 kB 109.9 kB
lodash.sortby 4.7.0 75.76 kB 75.76 kB
lru-cache 7.14.0 74.95 kB 74.95 kB
ipaddr.js 2.1.0 60.23 kB 60.23 kB
ignore 5.2.4 51.22 kB 51.22 kB
int64-buffer 0.1.10 49.18 kB 49.18 kB
shell-quote 1.8.1 44.96 kB 44.96 kB
istanbul-lib-coverage 3.2.0 29.34 kB 29.34 kB
tlhunter-sorted-set 0.1.0 24.94 kB 24.94 kB
limiter 1.1.5 23.17 kB 23.17 kB
dc-polyfill 0.1.4 23.1 kB 23.1 kB
retry 0.13.1 18.85 kB 18.85 kB
node-abort-controller 3.1.1 16.89 kB 16.89 kB
jest-docblock 29.7.0 8.99 kB 12.76 kB
crypto-randomuuid 1.0.0 11.18 kB 11.18 kB
path-to-regexp 0.1.7 6.78 kB 6.78 kB
koalas 1.0.2 6.47 kB 6.47 kB
methods 1.1.2 5.29 kB 5.29 kB
module-details-from-path 1.0.3 4.47 kB 4.47 kB

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@pr-commenter
Copy link

pr-commenter bot commented Apr 17, 2024

Benchmarks

Benchmark execution time: 2024-04-18 15:25:33

Comparing candidate commit 043efb7 in PR branch igor/do-not-require-appsec-when-disabling with baseline commit c4c01e4 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 261 metrics, 5 unstable metrics.

@iunanua iunanua force-pushed the igor/do-not-require-appsec-when-disabling branch from 2a8f2a0 to aaf4bfa Compare April 17, 2024 10:09
@CarlesDD
Copy link
Contributor

We should take care of this point where appsec could be enabled via RC.

https://github.com/DataDog/dd-trace-js/blob/master/packages/dd-trace/src/appsec/remote_config/index.js#L55

Copy link

codecov bot commented Apr 17, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 69.19%. Comparing base (c4c01e4) to head (05590f5).
Report is 3 commits behind head on master.

❗ Current head 05590f5 differs from pull request most recent head 043efb7. Consider uploading reports for the commit 043efb7 to get more accurate results

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4244      +/-   ##
==========================================
- Coverage   73.16%   69.19%   -3.98%     
==========================================
  Files         245        1     -244     
  Lines       10442      198   -10244     
  Branches       33       33              
==========================================
- Hits         7640      137    -7503     
+ Misses       2802       61    -2741     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@@ -58,7 +79,7 @@ class Tracer extends NoopProxy {
}

if (config.remoteConfig.enabled && !config.isCiVisibility) {
const rc = remoteConfig.enable(config)
const rc = remoteConfig.enable(config, this)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

here we could pass to RC this._modules.appsec instead this. That way RC wouldn't need to know where to obtain the appsec module. It'd directly invoke enable or disable.

Copy link
Member

Choose a reason for hiding this comment

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

good point, but i feel like we have this habit of passing the tracer instance a bit everywhere, so, up to you 🤷

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ok, I'll leave it as it is

Copy link
Member

Choose a reason for hiding this comment

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

It's a habit we want to revert ASAP, so I'd use the boy scout rule here if possible.

@iunanua iunanua marked this pull request as ready for review April 18, 2024 08:54
@iunanua iunanua requested review from a team as code owners April 18, 2024 08:54
@iunanua iunanua changed the title Do not require appsec modules if they have not been required before Do not require appsec modules when disabling appsec if they have not been required before Apr 18, 2024
uurien
uurien previously approved these changes Apr 18, 2024
Copy link
Member

@simon-id simon-id left a comment

Choose a reason for hiding this comment

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

Is there anything in the CI that will ensure this works with bundlers ?

Co-authored-by: simon-id <simon.id@datadoghq.com>
@iunanua
Copy link
Contributor Author

iunanua commented Apr 18, 2024

there are some integration tests for es-build. Let me take a look

@iunanua
Copy link
Contributor Author

iunanua commented Apr 22, 2024

esbuild tests are working as expected 👍

@simon-id
Copy link
Member

@iunanua where are they running ? i can't find them in the CI

@iunanua
Copy link
Contributor Author

iunanua commented Apr 22, 2024

AFAIK they are not in the CI.
You can run them manually here integration-tests/esbuild.

Copy link
Member

@simon-id simon-id left a comment

Choose a reason for hiding this comment

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

code looks good, but if it's not tested in the CI, do I have to just trust you ?

@iunanua
Copy link
Contributor Author

iunanua commented Apr 23, 2024

Aha! spec and job

Actually, they are running!

An error is shown Error: connect ECONNREFUSED 127.0.0.1:8126 when the app tries to communicate with the agent in the 8126 port but i'd say it's something expected

sorry for the noise 😅

@iunanua iunanua merged commit 4425338 into master Apr 23, 2024
108 of 109 checks passed
@iunanua iunanua deleted the igor/do-not-require-appsec-when-disabling branch April 23, 2024 15:48
tlhunter pushed a commit that referenced this pull request Apr 25, 2024
…been required before (#4244)

* mark if a module has been required before

* Add esm bundler comment

* Rename TracerModule as LazyModule

* Handle appsec enablement/disablement via RC

* Test module.enable call arguments

* Check appsec and iast are not enabled by default

* Check appsec and iast are not enabled via RC when they are not enabled by default

* Update packages/dd-trace/src/proxy.js

Co-authored-by: simon-id <simon.id@datadoghq.com>

* Pass appsec module to RC instead of the tracer

---------

Co-authored-by: simon-id <simon.id@datadoghq.com>
tlhunter pushed a commit that referenced this pull request Apr 25, 2024
…been required before (#4244)

* mark if a module has been required before

* Add esm bundler comment

* Rename TracerModule as LazyModule

* Handle appsec enablement/disablement via RC

* Test module.enable call arguments

* Check appsec and iast are not enabled by default

* Check appsec and iast are not enabled via RC when they are not enabled by default

* Update packages/dd-trace/src/proxy.js

Co-authored-by: simon-id <simon.id@datadoghq.com>

* Pass appsec module to RC instead of the tracer

---------

Co-authored-by: simon-id <simon.id@datadoghq.com>
tlhunter pushed a commit that referenced this pull request Apr 25, 2024
…been required before (#4244)

* mark if a module has been required before

* Add esm bundler comment

* Rename TracerModule as LazyModule

* Handle appsec enablement/disablement via RC

* Test module.enable call arguments

* Check appsec and iast are not enabled by default

* Check appsec and iast are not enabled via RC when they are not enabled by default

* Update packages/dd-trace/src/proxy.js

Co-authored-by: simon-id <simon.id@datadoghq.com>

* Pass appsec module to RC instead of the tracer

---------

Co-authored-by: simon-id <simon.id@datadoghq.com>
This was referenced Apr 29, 2024
tlhunter pushed a commit that referenced this pull request Apr 29, 2024
…been required before (#4244)

* mark if a module has been required before

* Add esm bundler comment

* Rename TracerModule as LazyModule

* Handle appsec enablement/disablement via RC

* Test module.enable call arguments

* Check appsec and iast are not enabled by default

* Check appsec and iast are not enabled via RC when they are not enabled by default

* Update packages/dd-trace/src/proxy.js

Co-authored-by: simon-id <simon.id@datadoghq.com>

* Pass appsec module to RC instead of the tracer

---------

Co-authored-by: simon-id <simon.id@datadoghq.com>
tlhunter pushed a commit that referenced this pull request Apr 29, 2024
…been required before (#4244)

* mark if a module has been required before

* Add esm bundler comment

* Rename TracerModule as LazyModule

* Handle appsec enablement/disablement via RC

* Test module.enable call arguments

* Check appsec and iast are not enabled by default

* Check appsec and iast are not enabled via RC when they are not enabled by default

* Update packages/dd-trace/src/proxy.js

Co-authored-by: simon-id <simon.id@datadoghq.com>

* Pass appsec module to RC instead of the tracer

---------

Co-authored-by: simon-id <simon.id@datadoghq.com>
tlhunter pushed a commit that referenced this pull request Apr 29, 2024
…been required before (#4244)

* mark if a module has been required before

* Add esm bundler comment

* Rename TracerModule as LazyModule

* Handle appsec enablement/disablement via RC

* Test module.enable call arguments

* Check appsec and iast are not enabled by default

* Check appsec and iast are not enabled via RC when they are not enabled by default

* Update packages/dd-trace/src/proxy.js

Co-authored-by: simon-id <simon.id@datadoghq.com>

* Pass appsec module to RC instead of the tracer

---------

Co-authored-by: simon-id <simon.id@datadoghq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants