diff --git a/.tekton/assets/sidecars.json b/.tekton/assets/sidecars.json index 4d146885d4..c762c2988d 100644 --- a/.tekton/assets/sidecars.json +++ b/.tekton/assets/sidecars.json @@ -105,7 +105,7 @@ "command": ["/bin/bash"], "args": [ "-lc", - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" ] }, { diff --git a/.tekton/tasks/test-groups/collector-tracing-messaging-split-2-task.yaml b/.tekton/tasks/test-groups/collector-tracing-messaging-split-2-task.yaml index 8066cfc34a..8eb64137a8 100644 --- a/.tekton/tasks/test-groups/collector-tracing-messaging-split-2-task.yaml +++ b/.tekton/tasks/test-groups/collector-tracing-messaging-split-2-task.yaml @@ -45,7 +45,7 @@ spec: imagePullPolicy: IfNotPresent args: - "-lc" - - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" command: - "/bin/bash" - name: schema-registry diff --git a/.tekton/tasks/test-groups/collector-tracing-messaging-split-3-task.yaml b/.tekton/tasks/test-groups/collector-tracing-messaging-split-3-task.yaml index 5e62aad41c..05d7eb1cd4 100644 --- a/.tekton/tasks/test-groups/collector-tracing-messaging-split-3-task.yaml +++ b/.tekton/tasks/test-groups/collector-tracing-messaging-split-3-task.yaml @@ -45,7 +45,7 @@ spec: imagePullPolicy: IfNotPresent args: - "-lc" - - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" command: - "/bin/bash" - name: schema-registry diff --git a/.tekton/tasks/test-groups/collector-tracing-messaging-split-4-task.yaml b/.tekton/tasks/test-groups/collector-tracing-messaging-split-4-task.yaml index 15534e5264..f1513b5799 100644 --- a/.tekton/tasks/test-groups/collector-tracing-messaging-split-4-task.yaml +++ b/.tekton/tasks/test-groups/collector-tracing-messaging-split-4-task.yaml @@ -45,7 +45,7 @@ spec: imagePullPolicy: IfNotPresent args: - "-lc" - - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" command: - "/bin/bash" - name: schema-registry diff --git a/.tekton/tasks/test-groups/collector-tracing-messaging-split-5-task.yaml b/.tekton/tasks/test-groups/collector-tracing-messaging-split-5-task.yaml index da93d6b734..1c4dbaaac4 100644 --- a/.tekton/tasks/test-groups/collector-tracing-messaging-split-5-task.yaml +++ b/.tekton/tasks/test-groups/collector-tracing-messaging-split-5-task.yaml @@ -45,7 +45,7 @@ spec: imagePullPolicy: IfNotPresent args: - "-lc" - - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" command: - "/bin/bash" - name: schema-registry diff --git a/.tekton/tasks/test-groups/collector-tracing-messaging-split-6-task.yaml b/.tekton/tasks/test-groups/collector-tracing-messaging-split-6-task.yaml index 33d8c5c507..14484c1857 100644 --- a/.tekton/tasks/test-groups/collector-tracing-messaging-split-6-task.yaml +++ b/.tekton/tasks/test-groups/collector-tracing-messaging-split-6-task.yaml @@ -45,7 +45,7 @@ spec: imagePullPolicy: IfNotPresent args: - "-lc" - - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" command: - "/bin/bash" - name: schema-registry diff --git a/.tekton/tasks/test-groups/collector-tracing-messaging-task.yaml b/.tekton/tasks/test-groups/collector-tracing-messaging-task.yaml index fdf50b4bbb..01475502a6 100644 --- a/.tekton/tasks/test-groups/collector-tracing-messaging-task.yaml +++ b/.tekton/tasks/test-groups/collector-tracing-messaging-task.yaml @@ -45,7 +45,7 @@ spec: imagePullPolicy: IfNotPresent args: - "-lc" - - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic kafka-avro-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" + - "kafka_server=\"0.0.0.0:9092\"; kafka_topics=\"test test-topic test-batch-topic rdkafka-topic\"; until kafka-topics --bootstrap-server \"$kafka_server\" --list >/dev/null 2>&1; do echo 'waiting for Kafka...'; sleep 2; done; for t in $kafka_topics; do kafka-topics --bootstrap-server \"$kafka_server\" --create --if-not-exists --topic \"$t\"; done; echo 'All topics created.'" command: - "/bin/bash" - name: schema-registry diff --git a/bin/dependencies/utils.js b/bin/dependencies/utils.js index ced7d28065..de3378d241 100644 --- a/bin/dependencies/utils.js +++ b/bin/dependencies/utils.js @@ -128,7 +128,7 @@ exports.getLatestVersion = ({ pkgName, installedVersion, isBeta, fromInstalledMa } } - // e.g. kafka-avro released a wrong order of versions + // some packages released a wrong order of versions if (installedVersion && semver.lt(latestVersion, installedVersion)) { return installedVersion; } diff --git a/currencies.json b/currencies.json index 0af9c3cde4..7cdab99d28 100644 --- a/currencies.json +++ b/currencies.json @@ -747,17 +747,6 @@ "note": "", "core": false }, - { - "name": "kafka-avro", - "policy": "Deprecated", - "lastSupportedVersion": "", - "latestVersion": "", - "cloudNative": false, - "isBeta": false, - "ignoreUpdates": false, - "note": "", - "core": false - }, { "name": "node-rdkafka", "policy": "45-days", diff --git a/docker-compose-base.yaml b/docker-compose-base.yaml index e0f4bcad33..56b045f441 100644 --- a/docker-compose-base.yaml +++ b/docker-compose-base.yaml @@ -122,7 +122,7 @@ services: set -euo pipefail kafka_server="kafka:29092" - kafka_topics="test test-topic test-batch-topic rdkafka-topic kafka-avro-topic" + kafka_topics="test test-topic test-batch-topic rdkafka-topic" echo "Waiting for Kafka to be ready on $$kafka_server..." diff --git a/package-lock.json b/package-lock.json index 64a46ee5de..2ae8b90b1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -194,7 +194,6 @@ "couchbase": "4.6.0", "couchbase-v4.4.3": "npm:couchbase@4.4.3", "ibm_db": "3.3.4", - "kafka-avro": "3.2.0", "node-rdkafka": "3.6.0", "pg-native": "3.5.2", "prisma": "6.19.0" @@ -18750,13 +18749,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansicolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "integrity": "sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w==", - "license": "MIT", - "optional": true - }, "node_modules/ansis": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", @@ -18767,13 +18759,6 @@ "node": ">=14" } }, - "node_modules/ansistyles": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", - "integrity": "sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g==", - "license": "MIT", - "optional": true - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -19359,16 +19344,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/avsc": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", - "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.11" - } - }, "node_modules/avvio": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.0.0.tgz", @@ -19468,7 +19443,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -19679,7 +19654,7 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "devOptional": true + "dev": true }, "node_modules/bn.js": { "version": "5.2.1", @@ -19868,7 +19843,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -20451,7 +20426,7 @@ "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "devOptional": true, + "dev": true, "engines": [ "node >=0.10.0" ], @@ -20465,18 +20440,6 @@ "safe-json-stringify": "~1" } }, - "node_modules/bunyan-format": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/bunyan-format/-/bunyan-format-0.2.1.tgz", - "integrity": "sha512-xQs2LwWskjQdv7bVkMNwvMi7HnvDQoX4587H90nDGQGPPwHrmxsihBOIYHMVwjLMMOokITKPyFcbFneblvMEjQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "ansicolors": "~0.2.1", - "ansistyles": "~0.1.1", - "xtend": "~2.1.1" - } - }, "node_modules/byte-counter": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/byte-counter/-/byte-counter-0.1.0.tgz", @@ -21158,12 +21121,6 @@ "node": ">=8" } }, - "node_modules/cip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cip/-/cip-1.0.1.tgz", - "integrity": "sha512-awEFlzS8T2JXAZ4G7cUP2hWyrdjCo/O2AXQ+nM/R5sCN0/uz+dNfFT0FCBjGnuwMMN9jDP2MaQmDtdEHnjHYKQ==", - "optional": true - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -22099,7 +22056,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true + "dev": true }, "node_modules/concat-stream": { "version": "2.0.0", @@ -24084,6 +24041,7 @@ "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { @@ -29548,7 +29506,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "devOptional": true, + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -31037,50 +30995,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/kafka-avro": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/kafka-avro/-/kafka-avro-3.2.0.tgz", - "integrity": "sha512-p5jsb73FbOLLBSLimV0OJMnqu/gJbEgyz9qr+jTTXvlSsDr4JtoZKB91ha0Qab7g+ys9q+hUi8DLYAoLZRZKvw==", - "license": "MIT", - "optional": true, - "dependencies": { - "avsc": "^5.2.3", - "axios": "^0.20.0", - "bluebird": "^3.4.6", - "bunyan": "^1.8.5", - "bunyan-format": "^0.2.1", - "cip": "^1.0.0", - "node-rdkafka": "~2.9.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/kafka-avro/node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "license": "MIT", - "optional": true, - "dependencies": { - "follow-redirects": "^1.10.0" - } - }, - "node_modules/kafka-avro/node_modules/node-rdkafka": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/node-rdkafka/-/node-rdkafka-2.9.1.tgz", - "integrity": "sha512-C5EVDZlDG+5D8KXiz2zKwEiLWIGW5Z1mkVFRzp13T4mrbXz+ESyjrDSLIj7aoUIi5+T10H9p1wwLZJBh9ivjLg==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bindings": "^1.3.1", - "nan": "^2.14.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/kafka-node": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/kafka-node/-/kafka-node-5.0.0.tgz", @@ -32794,7 +32708,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -33444,7 +33358,7 @@ "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "devOptional": true, + "dev": true, "engines": { "node": "*" } @@ -34677,6 +34591,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -34691,6 +34606,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dev": true, "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -34707,6 +34623,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "optional": true, "dependencies": { "minimist": "^1.2.6" @@ -34719,6 +34636,7 @@ "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dev": true, "optional": true, "dependencies": { "glob": "^6.0.1" @@ -34977,6 +34895,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, "optional": true, "bin": { "ncp": "bin/ncp" @@ -37312,7 +37231,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -40598,6 +40517,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, "optional": true }, "node_modules/safe-push-apply": { @@ -45087,25 +45007,6 @@ "node": ">=0.4.0" } }, - "node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", - "optional": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/xtend/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", - "license": "MIT", - "optional": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index f1b4f5b7f0..d03218e608 100644 --- a/package.json +++ b/package.json @@ -258,15 +258,11 @@ "couchbase": "4.6.0", "couchbase-v4.4.3": "npm:couchbase@4.4.3", "ibm_db": "3.3.4", - "kafka-avro": "3.2.0", "node-rdkafka": "3.6.0", "pg-native": "3.5.2", "prisma": "6.19.0" }, "overrides": { - "kafka-avro": { - "axios": "v0.21.1" - }, "kafka-node": { "uuid": "7.0.3" }, diff --git a/packages/aws-lambda/test/integration_test/test_definition.js b/packages/aws-lambda/test/integration_test/test_definition.js index 673bc27ff5..a4bdec7081 100644 --- a/packages/aws-lambda/test/integration_test/test_definition.js +++ b/packages/aws-lambda/test/integration_test/test_definition.js @@ -1039,42 +1039,6 @@ function registerTests(handlerDefinitionPath, reduced) { }); }); - describeOrSkipIfReduced()('when deprecated INSTANA_DISABLE_TRACING is set', function () { - // - INSTANA_ENDPOINT_URL is missing - // - lambda function ends with success - const env = prelude.bind(this)({ - handlerDefinitionPath, - instanaAgentKey, - instanaTracingDisabled: true - }); - - let control; - - before(async () => { - control = new Control({ - faasRuntimePath: path.join(__dirname, '../runtime_mock'), - handlerDefinitionPath, - startBackend: true, - env - }); - - await control.start(); - }); - - beforeEach(async () => { - await control.reset(); - await control.resetBackendSpansAndMetrics(); - }); - - after(async () => { - await control.stop(); - }); - - it('expect no tracing data', () => { - return verify(control, { error: false, expectMetrics: false, expectSpans: false }); - }); - }); - describeOrSkipIfReduced()('when INSTANA_TRACING_DISABLE is set', function () { // - INSTANA_ENDPOINT_URL is missing // - lambda function ends with success diff --git a/packages/collector/test/tracing/messaging/kafka-avro/consumer.js b/packages/collector/test/tracing/messaging/kafka-avro/consumer.js deleted file mode 100644 index 4566218951..0000000000 --- a/packages/collector/test/tracing/messaging/kafka-avro/consumer.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2022 - */ - -'use strict'; - -// NOTE: c8 bug https://github.com/bcoe/c8/issues/166 -process.on('SIGTERM', () => { - process.disconnect(); - process.exit(0); -}); - -const instana = require('../../../..')(); - -// eslint-disable-next-line import/no-extraneous-dependencies -const KafkaAvro = require('kafka-avro'); - -const fetch = require('node-fetch-v2'); -const delay = require('../../../../../core/test/test_util/delay'); -const agentPort = process.env.INSTANA_AGENT_PORT; -const { sendToParent } = require('@instana/core/test/test_util'); -const logPrefix = `Kafka Avro Consumer (${process.pid}):\t`; -const log = require('@instana/core/test/test_util/log').getLogger(logPrefix); -const express = require('express'); -const port = require('../../../test_util/app-port')(); - -const kafkaAvro = new KafkaAvro({ - kafkaBroker: process.env.KAFKA, - schemaRegistry: process.env.SCHEMA_REGISTRY -}); - -let isReady = false; - -const topicName = 'kafka-avro-topic'; - -(async () => { - await kafkaAvro.init(); - - const consumer = await kafkaAvro.getConsumer({ - // Keep this value low (default is 5000ms) to be sure that messages won't survive between tests. - 'auto.commit.interval.ms': 500, - 'group.id': 'librd-test', - 'socket.keepalive.enable': true, - 'enable.auto.commit': true - }); - - await new Promise((resolve, reject) => { - consumer.on('ready', () => { - isReady = true; - resolve(consumer); - }); - - consumer.connect({}, err => { - if (err) { - reject(err); - return; - } - resolve(consumer); // depend on Promises' single resolve contract. - }); - }); - - // Subscribe and consume. - consumer.subscribe([topicName]); - - consumer.on('data', async rawData => { - const span = instana.currentSpan(); - span.disableAutoEnd(); - sendToParent(rawData.value); - log('Got message'); - - await delay(200); - await fetch(`http://127.0.0.1:${agentPort}`); - span.end(); - }); - - consumer.consume(); -})(); - -const app = express(); - -app.get('/', (_req, res) => { - if (isReady) { - res.send('ok'); - } else { - res.status(500).send('Kafka Avro Consumer is not ready yet.'); - } -}); - -app.listen(port, () => log(`Kafka Avro Consumer app listening on port ${port}`)); diff --git a/packages/collector/test/tracing/messaging/kafka-avro/producer.js b/packages/collector/test/tracing/messaging/kafka-avro/producer.js deleted file mode 100644 index f3b66c8e14..0000000000 --- a/packages/collector/test/tracing/messaging/kafka-avro/producer.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2022 - */ - -'use strict'; - -// NOTE: c8 bug https://github.com/bcoe/c8/issues/166 -process.on('SIGTERM', () => { - process.disconnect(); - process.exit(0); -}); - -require('../../../..')({}); - -// eslint-disable-next-line import/no-extraneous-dependencies -const KafkaAvro = require('kafka-avro'); - -const fetch = require('node-fetch-v2'); -const agentPort = process.env.INSTANA_AGENT_PORT; -const logPrefix = `Kafka Avro Producer (${process.pid}):\t`; -const log = require('@instana/core/test/test_util/log').getLogger(logPrefix); -const express = require('express'); -const port = require('../../../test_util/app-port')(); - -const app = express(); - -const kafkaAvro = new KafkaAvro({ - kafkaBroker: process.env.KAFKA, - schemaRegistry: process.env.SCHEMA_REGISTRY -}); - -let isReady = false; -// Query the Schema Registry for all topic-schema's -// fetch them and evaluate them. -kafkaAvro.init().then(() => { - isReady = true; - log('Ready to use'); -}); - -let messageCounter = 0; -const topicName = 'kafka-avro-topic'; - -app.get('/produce', async (req, res) => { - ++messageCounter; - const producer = await kafkaAvro.getProducer({}); - - producer.on('disconnected', arg => { - log(`producer disconnected. ${JSON.stringify(arg)}`); - }); - - const value = { name: 'John', messageCounter }; - const key = 'key'; - - // if partition is set to -1, librdkafka will use the default partitioner - const partition = -1; - producer.produce(topicName, partition, value, key); - log('Sent message'); - - setTimeout(async () => { - await fetch(`http://127.0.0.1:${agentPort}`); - - res.send({ - topicName, - partition, - key, - value - }); - }, 100); -}); - -app.get('/', (_req, res) => { - if (isReady) { - res.send('ok'); - } else { - res.status(500).send('Kafka Avro Producer is not ready yet.'); - } -}); - -app.listen(port, () => { - log(`Kafka Avro Producer app listening on port ${port}`); -}); diff --git a/packages/collector/test/tracing/messaging/kafka-avro/test.js b/packages/collector/test/tracing/messaging/kafka-avro/test.js deleted file mode 100644 index 6b43b48f09..0000000000 --- a/packages/collector/test/tracing/messaging/kafka-avro/test.js +++ /dev/null @@ -1,326 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2022 - */ - -'use strict'; - -/** - * Important notes - * --------------- - * - * - Kafka Avro is instrumented through node-rdkafka, which is the API underneath Kafka Avro - * - Kafka Avro currently works only in Node 14 and below, as it depends on an older version of node-rdkafka with - * native modules. - * - The Producer as a stream can only have trace correlation if the objectMode option is set to true on the - * writable stream. Otherwise, there is no way to append the Instana headers to it. - * - The Producer, as stream or standard API cannot propagate trace correlation headers in format 'binary' and will - * always use 'string'. More info here: https://github.com/Blizzard/node-rdkafka/pull/968. - * - If the option dr_cb is not set to true, we cannot guarantee that a message was sent, but a span with a successful - * sent message will be created. - */ - -const path = require('path'); -const { expect } = require('chai'); -const { fail } = expect; -const { - tracing: { constants } -} = require('@instana/core'); - -const config = require('../../../../../core/test/config'); -const { expectExactlyOneMatching, retry, delay, stringifyItems } = require('../../../../../core/test/test_util'); -const ProcessControls = require('../../../test_util/ProcessControls'); -const globalAgent = require('../../../globalAgent'); -const { verifyHttpRootEntry, verifyHttpExit } = require('@instana/core/test/test_util/common_verifications'); - -/** - * See https://github.com/waldophotos/kafka-avro/issues/113 - * - * Installing kafka-avro via optionalDependencies throws an error, - * see https://github.com/instana/nodejs/pull/486#discussion_r818509109 - */ -const retryTime = 1000; -const topic = 'kafka-avro-topic'; - -// NOTE: flaky on CI -// NOTE: kafka-avro is unmaintained. Only works for Node < 16. -// https://github.com/waldophotos/kafka-avro - -// node bin/start-test-containers.js --zookeeper --kafka --schema-registry --kafka-topics -describe.skip('tracing/messaging/kafka-avro', function () { - this.timeout(1000 * 180); - - globalAgent.setUpCleanUpHooks(); - const agentControls = globalAgent.instance; - - describe('tracing enabled, no suppression', function () { - let producerControls; - - before(async () => { - producerControls = new ProcessControls({ - appPath: path.join(__dirname, 'producer'), - useGlobalAgent: true - }); - - await producerControls.startAndWaitForAgentConnection(); - }); - - beforeEach(async () => { - await agentControls.clearReceivedTraceData(); - }); - - after(async () => { - await producerControls.stop(); - }); - - afterEach(async () => { - await producerControls.clearIpcMessages(); - }); - - describe('consuming message', () => { - let consumerControls; - - before(async () => { - consumerControls = new ProcessControls({ - appPath: path.join(__dirname, 'consumer'), - useGlobalAgent: true - }); - - await consumerControls.startAndWaitForAgentConnection(); - }); - - beforeEach(async () => { - await agentControls.clearReceivedTraceData(); - }); - - after(async () => { - await consumerControls.stop(); - }); - - afterEach(async () => { - await consumerControls.clearIpcMessages(); - }); - - const apiPath = '/produce'; - - it('produces and consumes a message', async () => { - const response = await producerControls.sendRequest({ - method: 'GET', - path: apiPath - }); - - return verify(consumerControls, producerControls, response, apiPath); - }); - }); - }); - - function verify(_producerControls, _consumerControls, response, apiPath) { - return retry(() => { - verifyResponseAndMessage(response, _producerControls); - - return agentControls.getSpans().then(spans => verifySpans(_producerControls, _consumerControls, spans, apiPath)); - }, retryTime); - } - - function verifySpans(receiverControls, _senderControls, spans, apiPath) { - const httpEntry = verifyHttpRootEntry({ spans, apiPath, pid: String(_senderControls.getPid()) }); - const kafkaExit = verifyKafkaAvroExit(_senderControls, spans, httpEntry); - verifyHttpExit({ spans, parent: httpEntry, pid: String(_senderControls.getPid()) }); - const kafkaEntry = verifyKafkaAvroEntry(receiverControls, spans, kafkaExit); - verifyHttpExit({ spans, parent: kafkaEntry, pid: String(receiverControls.getPid()) }); - } - - function verifyKafkaAvroEntry(receiverControls, spans, parent) { - const operation = expectExactlyOneMatching; - - return operation(spans, [ - span => expect(span.n).to.equal('kafka'), - span => expect(span.k).to.equal(constants.ENTRY), - span => expect(span.t).to.equal(parent.t), - span => expect(span.p).to.equal(parent.s), - span => expect(span.f.e).to.equal(String(receiverControls.getPid())), - span => expect(span.f.h).to.equal('agent-stub-uuid'), - span => expect(span.data.kafka.error).to.not.exist, - span => expect(span.ec).to.equal(0), - span => expect(span.async).to.not.exist, - span => expect(span.data).to.exist, - span => expect(span.data.kafka).to.be.an('object'), - span => expect(span.data.kafka.service).to.equal(topic), - span => expect(span.data.kafka.access).to.equal('consume') - ]); - } - - function verifyKafkaAvroExit(_senderControls, spans, parent) { - return expectExactlyOneMatching(spans, [ - span => expect(span.n).to.equal('kafka'), - span => expect(span.k).to.equal(constants.EXIT), - span => expect(span.t).to.equal(parent.t), - span => expect(span.p).to.equal(parent.s), - span => expect(span.f.e).to.equal(String(_senderControls.getPid())), - span => expect(span.f.h).to.equal('agent-stub-uuid'), - span => expect(span.error).to.not.exist, - span => expect(span.ec).to.equal(0), - span => expect(span.async).to.not.exist, - span => expect(span.data).to.exist, - span => expect(span.data.kafka).to.be.an('object'), - span => expect(span.data.kafka.service).to.equal(topic), - span => expect(span.data.kafka.access).to.equal('send') - ]); - } - - describe('tracing disabled', () => { - this.timeout(config.getTestTimeout() * 2); - - let producerControls; - - before(async () => { - producerControls = new ProcessControls({ - appPath: path.join(__dirname, 'producer'), - useGlobalAgent: true, - tracingEnabled: false - }); - - await producerControls.startAndWaitForAgentConnection(); - }); - - beforeEach(async () => { - await agentControls.clearReceivedTraceData(); - }); - - after(async () => { - await producerControls.stop(); - }); - - afterEach(async () => { - await producerControls.clearIpcMessages(); - }); - - describe('producing and consuming', () => { - let consumerControls; - - before(async () => { - consumerControls = new ProcessControls({ - appPath: path.join(__dirname, 'consumer'), - useGlobalAgent: true, - tracingEnabled: false - }); - - await consumerControls.startAndWaitForAgentConnection(); - }); - - beforeEach(async () => { - await agentControls.clearReceivedTraceData(); - }); - - after(async () => { - await consumerControls.stop(); - }); - - afterEach(async () => { - await consumerControls.clearIpcMessages(); - }); - - it('should not trace for producing / consuming messages', async () => { - const response = await producerControls.sendRequest({ - method: 'GET', - path: '/produce' - }); - - return retry(() => verifyResponseAndMessage(response, consumerControls), retryTime) - .then(() => delay(1000)) - .then(() => agentControls.getSpans()) - .then(spans => { - if (spans.length > 0) { - fail(`Unexpected spans (kafka-avro suppressed: ${stringifyItems(spans)}`); - } - }); - }); - }); - }); - - describe('tracing enabled but suppressed', () => { - let producerControls; - - before(async () => { - producerControls = new ProcessControls({ - appPath: path.join(__dirname, 'producer'), - useGlobalAgent: true - }); - - await producerControls.startAndWaitForAgentConnection(); - }); - - beforeEach(async () => { - await agentControls.clearReceivedTraceData(); - }); - - after(async () => { - await producerControls.stop(); - }); - - afterEach(async () => { - await producerControls.clearIpcMessages(); - }); - - describe('tracing suppressed', () => { - let receiverControls; - - before(async () => { - receiverControls = new ProcessControls({ - appPath: path.join(__dirname, 'consumer'), - useGlobalAgent: true - }); - - await receiverControls.startAndWaitForAgentConnection(); - }); - - beforeEach(async () => { - await agentControls.clearReceivedTraceData(); - }); - - after(async () => { - await receiverControls.stop(); - }); - - afterEach(async () => { - await receiverControls.clearIpcMessages(); - }); - - it("doesn't trace when producing / consuming messages", async () => { - const response = await producerControls.sendRequest({ - method: 'GET', - path: '/produce', - suppressTracing: true - }); - - return retry(() => { - verifyResponseAndMessage(response, receiverControls); - }, retryTime) - .then(() => delay(1000)) - .then(() => agentControls.getSpans()) - .then(spans => { - if (spans.length > 0) { - fail(`Unexpected spans (kafka avro suppressed: ${stringifyItems(spans)}`); - } - }); - }); - }); - }); -}); - -function verifyResponseAndMessage(response, consumerControls) { - expect(response).to.be.an('object'); - const receivedMessages = consumerControls.getIpcMessages(); - expect(receivedMessages).to.be.an('array'); - expect(receivedMessages).to.have.lengthOf.at.least(1); - - /** - * Each message is an object in the following format: {type: 'Buffer', data: number[]} - */ - const message = receivedMessages - .map(({ data }) => JSON.parse(Buffer.from(data).toString())) - .filter(data => data.messageCounter === response.value.messageCounter)[0]; - - expect(message).to.exist; - expect(message.name).to.equal('John'); - return message; -} diff --git a/packages/core/src/config/configNormalizers/disable.js b/packages/core/src/config/configNormalizers/disable.js index 432ea57cc0..0c3477f2b2 100644 --- a/packages/core/src/config/configNormalizers/disable.js +++ b/packages/core/src/config/configNormalizers/disable.js @@ -16,12 +16,11 @@ exports.init = function init(_config) { }; /** - * Handles deprecated properties, environment variables, and array inputs. + * Handles environment variables, and array inputs. * * Precedence order (highest to lowest): * 1. `tracing.disable` - * 2. `tracing.disabledTracers` (deprecated) - * 3. Environment variables (`INSTANA_TRACING_DISABLE*`) + * 2. Environment variables (`INSTANA_TRACING_DISABLE*`) * * @param {import('../../config').InstanaConfig} config */ @@ -40,17 +39,6 @@ exports.normalize = function normalize(config) { `Tracing selectively disabled as per "tracing.disable" configuration: ${JSON.stringify(config.tracing.disable)}` ); } - // Handle deprecated `disabledTracers` config - if (config.tracing.disabledTracers) { - logger?.warn( - 'The configuration property "tracing.disabledTracers" is deprecated and will be removed in the next ' + - 'major release. Please use "tracing.disable" instead.' - ); - if (!hasDisableConfig) { - config.tracing.disable = { instrumentations: config.tracing.disabledTracers }; - } - delete config.tracing.disabledTracers; - } // Fallback to environment variables if `disable` is not explicitly configured const disableConfig = isDisableConfigNonEmpty(config) ? config.tracing.disable : getDisableFromEnv(); @@ -102,22 +90,12 @@ exports.normalizeExternalConfig = function normalizeExternalConfig(config) { * 1. INSTANA_TRACING_DISABLE=true/false * 2. INSTANA_TRACING_DISABLE_INSTRUMENTATIONS / INSTANA_TRACING_DISABLE_GROUPS * 3. INSTANA_TRACING_DISABLE=list - * 4. INSTANA_DISABLED_TRACERS (deprecated) * * @returns {import('../../config/types').Disable} */ function getDisableFromEnv() { const disable = {}; - // @deprecated - if (process.env.INSTANA_DISABLED_TRACERS) { - logger?.warn( - 'The environment variable "INSTANA_DISABLED_TRACERS" is deprecated and will be removed in the next ' + - 'major release. Use "INSTANA_TRACING_DISABLE" instead.' - ); - disable.instrumentations = parseEnvVar(process.env.INSTANA_DISABLED_TRACERS); - } - // This env var may contains true/false and also both groups and instrumentations if (process.env.INSTANA_TRACING_DISABLE) { const envVarValue = process.env.INSTANA_TRACING_DISABLE; diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index cd14d3a68a..a436d2d1b7 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -24,7 +24,6 @@ const deepMerge = require('../util/deepMerge'); * @property {number} [stackTraceLength] * @property {HTTPTracingOptions} [http] * @property {import('../config/types').Disable} [disable] - * @property {Array} [disabledTracers] * @property {boolean} [spanBatchingEnabled] * @property {boolean} [disableW3cTraceCorrelation] * @property {KafkaTracingOptions} [kafka] @@ -250,17 +249,6 @@ function normalizeTracingEnabled(config) { return; } - // @deprecated - if (process.env['INSTANA_DISABLE_TRACING'] === 'true') { - logger.info('Not enabling tracing as it is explicitly disabled via environment variable INSTANA_DISABLE_TRACING.'); - logger.warn( - 'The environment variable INSTANA_DISABLE_TRACING is deprecated and will be removed in the next major release. ' + - 'Please use INSTANA_TRACING_DISABLE="true" instead.' - ); - config.tracing.enabled = false; - return; - } - config.tracing.enabled = defaults.tracing.enabled; } diff --git a/packages/core/src/metrics/index.js b/packages/core/src/metrics/index.js index 0aeb48b659..1ea09a9368 100644 --- a/packages/core/src/metrics/index.js +++ b/packages/core/src/metrics/index.js @@ -23,7 +23,7 @@ exports.init = _config => { /** * Depending on what kind of data the metric or snapshot attributes represents, a number of different payloads are * valid. Ultimately, it depends on what the backend understands. - * @typedef {string|Object.|Array.} SnapshotOrMetricsPayload + * @typedef {Number|string|Object.|Array.} SnapshotOrMetricsPayload */ /** diff --git a/packages/core/src/tracing/instrumentation/messaging/rdkafka.js b/packages/core/src/tracing/instrumentation/messaging/rdkafka.js index d756c6f4f1..d41a88d1c6 100644 --- a/packages/core/src/tracing/instrumentation/messaging/rdkafka.js +++ b/packages/core/src/tracing/instrumentation/messaging/rdkafka.js @@ -14,17 +14,13 @@ const shimmer = require('../../shimmer'); const { getFunctionArguments } = require('../../../util/function_arguments'); let traceCorrelationEnabled = constants.kafkaTraceCorrelationDefault; -let logger; let isActive = false; exports.init = function init(config) { - logger = config.logger; - hook.onFileLoad(/\/node-rdkafka\/lib\/producer\.js/, instrumentProducer); hook.onFileLoad(/\/node-rdkafka\/lib\/kafka-consumer-stream\.js/, instrumentConsumerAsStream); hook.onModuleLoad('node-rdkafka', instrumentConsumer); - hook.onModuleLoad('kafka-avro', logDeprecationKafkaAvroMessage); traceCorrelationEnabled = config.tracing.kafka.traceCorrelation; }; @@ -384,12 +380,6 @@ function findInstanaHeaderValues(instanaHeadersAsObject) { return { level, traceId, longTraceId, parentSpanId }; } -function logDeprecationKafkaAvroMessage() { - logger.warn( - // eslint-disable-next-line max-len - '[Deprecation Warning] The support for kafka-avro library is deprecated and might be removed in the next major release. See https://github.com/waldophotos/kafka-avro/issues/120' - ); -} function setTraceHeaders({ headers, span }) { if (span.shouldSuppressDownstream) { // Suppress trace propagation to downstream services. diff --git a/packages/core/test/config/configNormalizers/disable_test.js b/packages/core/test/config/configNormalizers/disable_test.js index 500272ad61..eaf3c68114 100644 --- a/packages/core/test/config/configNormalizers/disable_test.js +++ b/packages/core/test/config/configNormalizers/disable_test.js @@ -10,7 +10,6 @@ const { expect } = require('chai'); const { normalize, normalizeExternalConfig } = require('../../../src/config/configNormalizers/disable'); function resetEnv() { - delete process.env.INSTANA_DISABLED_TRACERS; delete process.env.INSTANA_TRACING_DISABLE; delete process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS; delete process.env.INSTANA_TRACING_DISABLE_GROUPS; @@ -34,35 +33,6 @@ describe('util.configNormalizers.disable', () => { expect(config.tracing).to.exist; }); - it('should handle deprecated "disabledTracers" to "disable.instrumentations"', () => { - const config = { - tracing: { - disabledTracers: ['AWS-SDK', 'mongodb'] - } - }; - - const result = normalize(config); - - expect(result).to.deep.equal({ - instrumentations: ['aws-sdk', 'mongodb'] - }); - expect(config.tracing.disabledTracers).to.be.undefined; - }); - - it('should prioritize "disable" when both "disabledTracers" and "disable" are defined', () => { - const config = { - tracing: { - disabledTracers: ['AWS-SDK'], - disable: { - instrumentations: ['redis'] - } - } - }; - - const result = normalize(config); - expect(result.instrumentations).to.deep.equal(['redis']); - }); - it('should normalize instrumentation names: lowercase and trim whitespace', () => { const config = { tracing: { @@ -245,25 +215,6 @@ describe('util.configNormalizers.disable', () => { expect(result.groups).to.deep.equal(['logging', 'databases']); }); - it('should fallback to deprected "INSTANA_DISABLED_TRACERS"', () => { - process.env.INSTANA_DISABLED_TRACERS = 'redis, mysql'; - - const config = {}; - const result = normalize(config); - - expect(result.instrumentations).to.deep.equal(['redis', 'mysql']); - }); - - it('should prioritize "INSTANA_TRACING_DISABLE_INSTRUMENTATIONS" over "INSTANA_DISABLED_TRACERS"', () => { - process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS = 'aws-sdk'; - process.env.INSTANA_DISABLED_TRACERS = 'redis'; - - const config = {}; - const result = normalize(config); - - expect(result.instrumentations).to.deep.equal(['aws-sdk']); - }); - it('should support semicolon-separated values in environment variable', () => { process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS = 'aws-sdk;mongodb;postgres'; diff --git a/packages/core/test/config/normalizeConfig_test.js b/packages/core/test/config/normalizeConfig_test.js index 00e5fc916e..bf51b40cd0 100644 --- a/packages/core/test/config/normalizeConfig_test.js +++ b/packages/core/test/config/normalizeConfig_test.js @@ -20,10 +20,6 @@ describe('config.normalizeConfig', () => { afterEach(resetEnv); function resetEnv() { - // deprecated - delete process.env.INSTANA_DISABLED_TRACERS; - delete process.env.INSTANA_DISABLE_TRACING; - delete process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS; delete process.env.INSTANA_TRACING_DISABLE_GROUPS; delete process.env.INSTANA_TRACING_DISABLE_EOL_EVENTS; @@ -112,13 +108,6 @@ describe('config.normalizeConfig', () => { expect(config.tracing.automaticTracingEnabled).to.be.false; }); - it('should disable tracing via deprecated INSTANA_DISABLE_TRACING', () => { - process.env.INSTANA_DISABLE_TRACING = true; - const config = coreConfig.normalize(); - expect(config.tracing.enabled).to.be.false; - expect(config.tracing.automaticTracingEnabled).to.be.false; - }); - it('should disable automatic tracing', () => { const config = coreConfig.normalize({ tracing: { automaticTracingEnabled: false } }); expect(config.tracing.enabled).to.be.true; @@ -275,34 +264,6 @@ describe('config.normalizeConfig', () => { expect(config.tracing.disable).to.deep.equal({}); }); - it('should disable individual instrumentations via config', () => { - const config = coreConfig.normalize({ - tracing: { - disabledTracers: ['graphQL', 'GRPC'] - } - }); - // values will be normalized to lower case - expect(config.tracing.disable.instrumentations).to.deep.equal(['graphql', 'grpc']); - }); - - it('should disable individual instrumentations via env var', () => { - process.env.INSTANA_DISABLED_TRACERS = 'graphQL , GRPC'; - const config = coreConfig.normalize(); - // values will be normalized to lower case - expect(config.tracing.disable.instrumentations).to.deep.equal(['graphql', 'grpc']); - }); - - it('config should take precedence over env vars when disabling individual tracers', () => { - process.env.INSTANA_DISABLED_TRACERS = 'foo, bar'; - const config = coreConfig.normalize({ - tracing: { - disabledTracers: ['baz', 'fizz'] - } - }); - // values will be normalized to lower case - expect(config.tracing.disable.instrumentations).to.deep.equal(['baz', 'fizz']); - }); - it('should disable individual instrumentations via disable config', () => { const config = coreConfig.normalize({ tracing: { @@ -349,13 +310,6 @@ describe('config.normalizeConfig', () => { expect(config.tracing.disable.instrumentations).to.deep.equal(['graphql', 'grpc']); }); - it('should prefer INSTANA_TRACING_DISABLE_INSTRUMENTATIONS over INSTANA_DISABLED_TRACERS', () => { - process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS = 'redis'; - process.env.INSTANA_DISABLED_TRACERS = 'postgres'; - const config = coreConfig.normalize(); - expect(config.tracing.disable.instrumentations).to.deep.equal(['redis']); - }); - it('should disable individual groups via disable config', () => { const config = coreConfig.normalize({ tracing: { diff --git a/packages/core/test/tracing/index_test.js b/packages/core/test/tracing/index_test.js index b895feef3f..cc77f9988c 100644 --- a/packages/core/test/tracing/index_test.js +++ b/packages/core/test/tracing/index_test.js @@ -76,9 +76,6 @@ mochaSuiteFn('[UNIT] tracing/index', function () { initAwsSdkv2.reset(); initAwsSdkv3.reset(); - // @deprecated - delete process.env.INSTANA_DISABLED_TRACERS; - delete process.env.INSTANA_TRACING_DISABLE; delete process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS; delete process.env.INSTANA_TRACING_DISABLE_GROUPS; @@ -271,89 +268,6 @@ mochaSuiteFn('[UNIT] tracing/index', function () { expect(activateAwsSdkv2).to.have.been.called; }); }); - - describe('[deprecated] when using disabledTracers config', () => { - it('should deactivate tracers as specified', () => { - initAndActivate({ tracing: { disabledTracers: ['grpc', 'kafkajs', 'aws-sdk/v2'] } }); - - // grpcJs instrumentation has not been disabled, make sure its init and activate are called - expect(initStubGrpcJs).to.have.been.called; - expect(activateStubGrpcJs).to.have.been.called; - - // kafkajs has been disabled... - expect(initStubKafkaJs).to.not.have.been.called; - expect(activateStubKafkaJs).to.not.have.been.called; - - // ...but rdkafka has not been disabled - expect(initStubRdKafka).to.have.been.called; - expect(activateStubRdKafka).to.have.been.called; - - // aws-sdk/v2 has been disabled (via aws-sdk/v2) - expect(initAwsSdkv2).not.to.have.been.called; - expect(activateAwsSdkv2).not.to.have.been.called; - - // aws-sdk/v3 has not been disabled - expect(initAwsSdkv3).to.have.been.called; - expect(activateAwsSdkv3).to.have.been.called; - }); - - it('should respect INSTANA_DISABLED_TRACERS environment variable', () => { - process.env.INSTANA_DISABLED_TRACERS = 'kafkajs'; - initAndActivate({}); - - expect(initStubKafkaJs).not.to.have.been.called; - expect(activateStubKafkaJs).not.to.have.been.called; - }); - - it('should handle empty disabledTracers array', () => { - initAndActivate({ tracing: { disabledTracers: [] } }); - - expect(initStubGrpcJs).to.have.been.called; - expect(initStubKafkaJs).to.have.been.called; - expect(initStubRdKafka).to.have.been.called; - }); - - it('should trim whitespace in environment variable values', () => { - process.env.INSTANA_DISABLED_TRACERS = ' grpc , kafkajs '; - initAndActivate({}); - - expect(initStubGrpcJs).to.have.been.called; - expect(activateStubGrpcJs).to.have.been.called; - - expect(initStubKafkaJs).not.to.have.been.called; - expect(activateStubKafkaJs).not.to.have.been.called; - }); - - it('should prefer disable over disabledTracers when both exist', () => { - initAndActivate({ - tracing: { - disabledTracers: ['grpc', 'kafkajs'], - disable: { instrumentations: ['aws-sdk/v2'] } - } - }); - - expect(initAwsSdkv2).not.to.have.been.called; - expect(activateAwsSdkv2).not.to.have.been.called; - - expect(initStubGrpcJs).to.have.been.called; - expect(activateStubGrpcJs).to.have.been.called; - - expect(initStubKafkaJs).to.have.been.called; - expect(activateStubKafkaJs).to.have.been.called; - }); - - it('should prefer INSTANA_TRACING_DISABLE_INSTRUMENTATIONS over INSTANA_DISABLED_TRACERS', () => { - process.env.INSTANA_TRACING_DISABLE_INSTRUMENTATIONS = 'aws-sdk/v2'; - process.env.INSTANA_DISABLED_TRACERS = 'kafkajs'; - initAndActivate({}); - - expect(initAwsSdkv2).not.to.have.been.called; - expect(activateAwsSdkv2).not.to.have.been.called; - - expect(initStubKafkaJs).to.have.been.called; - expect(activateStubKafkaJs).to.have.been.called; - }); - }); }); function initAndActivate(initConfig, extraConfigForActivate) { diff --git a/packages/shared-metrics/src/activeHandles.js b/packages/shared-metrics/src/activeHandles.js deleted file mode 100644 index a7fdf591de..0000000000 --- a/packages/shared-metrics/src/activeHandles.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2021 - * (c) Copyright Instana Inc. and contributors 2016 - */ - -'use strict'; - -exports.payloadPrefix = 'activeHandles'; - -Object.defineProperty(exports, 'currentPayload', { - get: function () { - // TODO: _getActiveHandles is deprecated. Replace with getActiveResourcesInfo. - // https://nodejs.org/api/deprecations.html#dep0161-process_getactiverequests-and-process_getactivehandles - // Added in v16. Replace in major release. - // @ts-ignore - return process._getActiveHandles().length; - } -}); diff --git a/packages/shared-metrics/src/activeRequests.js b/packages/shared-metrics/src/activeResources.js similarity index 63% rename from packages/shared-metrics/src/activeRequests.js rename to packages/shared-metrics/src/activeResources.js index 89aa97aa34..693c2e69e1 100644 --- a/packages/shared-metrics/src/activeRequests.js +++ b/packages/shared-metrics/src/activeResources.js @@ -5,11 +5,10 @@ 'use strict'; -exports.payloadPrefix = 'activeRequests'; +exports.payloadPrefix = 'activeResources'; Object.defineProperty(exports, 'currentPayload', { get: function () { - // @ts-ignore - return process._getActiveRequests().length; + return process.getActiveResourcesInfo().length; } }); diff --git a/packages/shared-metrics/src/index.js b/packages/shared-metrics/src/index.js index 54fbcb6913..7722cb602f 100644 --- a/packages/shared-metrics/src/index.js +++ b/packages/shared-metrics/src/index.js @@ -5,8 +5,7 @@ 'use strict'; -const activeHandles = require('./activeHandles'); -const activeRequests = require('./activeRequests'); +const activeResources = require('./activeResources'); const args = require('./args'); const dependencies = require('./dependencies'); const directDependencies = require('./directDependencies'); @@ -25,8 +24,7 @@ const util = require('./util'); /** @type {Array.} */ const allMetrics = [ - activeHandles, - activeRequests, + activeResources, args, dependencies, directDependencies, diff --git a/packages/shared-metrics/test/activeRequests_test.js b/packages/shared-metrics/test/activeRequests_test.js deleted file mode 100644 index 7068087cc1..0000000000 --- a/packages/shared-metrics/test/activeRequests_test.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2021 - * (c) Copyright Instana Inc. and contributors 2019 - */ - -'use strict'; - -const expect = require('chai').expect; -const { uninstrumentedFs: fs } = require('@instana/core'); - -const activeRequests = require('../src/activeRequests'); - -describe('metrics.activeRequests', () => { - it('should export active requests count', () => { - // @ts-ignore - expect(activeRequests.currentPayload).to.equal(process._getActiveRequests().length); - }); - - it('should update requests count for a fs.open', () => { - const activeRequestBefore = activeRequests.currentPayload; - for (let i = 0; i < 13; i++) { - fs.open(__filename, 'r', () => {}); - } - expect(activeRequests.currentPayload).to.equal(activeRequestBefore + 13); - }); -}); diff --git a/packages/shared-metrics/test/activeHandles_test.js b/packages/shared-metrics/test/activeResources_test.js similarity index 50% rename from packages/shared-metrics/test/activeHandles_test.js rename to packages/shared-metrics/test/activeResources_test.js index 9d46d39633..dd0345ad54 100644 --- a/packages/shared-metrics/test/activeHandles_test.js +++ b/packages/shared-metrics/test/activeResources_test.js @@ -7,37 +7,40 @@ const expect = require('chai').expect; const net = require('net'); +const fs = require('fs'); const config = require('@instana/core/test/config'); const testUtils = require('@instana/core/test/test_util'); -const activeHandles = require('../src/activeHandles'); +const activeResources = require('../src/activeResources'); -describe('metrics.activeHandles', function () { +describe('metrics.activeResources', function () { this.timeout(config.getTestTimeout()); - it('should export active handle count', () => { - // @ts-ignore - expect(activeHandles.currentPayload).to.equal(process._getActiveHandles().length); + it('should export active resource count', () => { + // [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'PipeWrap', 'ProcessWrap' ] + // Teletypewriter = stdin, stdout, stderr + // PipeWrap = internal pipe for process communication (test -> app) + // ProcessWrap = the child process itself + expect(activeResources.currentPayload).to.equal(5); }); - // This test is only compatible with Node.js versions lower than 11. - // The failure is due to changes introduced in commit: - // https://github.com/nodejs/node/commit/ccc3bb73db. - // We can reintroduce the test once we switch from the deprecated - // _getActiveHandles flag to getActiveResourcesInfo, which is more reliable. - // More details: https://nodejs.org/api/process.html#processgetactiveresourcesinfo - // For additional context, see: https://github.com/instana/nodejs/pull/1387 - - it.skip('should update handle count for a setTimeout', () => { - const previousCount = activeHandles.currentPayload; + it('should update resource count for a setTimeout', () => { const timeoutHandle = setTimeout(() => {}, 100); - // TODO: getActiveResourcesInfo returns the correct value, but `_getActiveHandles` does not - // for v23. - expect(activeHandles.currentPayload).to.equal(previousCount + 1); + // [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'PipeWrap', 'ProcessWrap', 'Timeout' ] + expect(activeResources.currentPayload).to.equal(6); clearTimeout(timeoutHandle); }); + it('should update requests count for a fs.open', () => { + const initialCount = activeResources.currentPayload; + const count = 13; + for (let i = 0; i < count; i++) { + fs.open(__filename, 'r', () => {}); + } + expect(activeResources.currentPayload).to.equal(initialCount + count); + }); + describe('with net client/server', () => { /* eslint-disable max-len */ // Inspired by @@ -50,11 +53,10 @@ describe('metrics.activeHandles', function () { const connections = []; /** @type {Array.<*>} */ const clients = []; - /** @type {*} */ - let activeHandlesBefore; + let initialActiveResources = 0; - beforeEach(() => { - activeHandlesBefore = activeHandles.currentPayload; + before(() => { + initialActiveResources = activeResources.currentPayload; server = net .createServer(function listener(c) { connections.push(c); @@ -62,7 +64,7 @@ describe('metrics.activeHandles', function () { .listen(0, makeConnection); }); - afterEach(() => { + after(() => { clients.forEach(client => { client.destroy(); }); @@ -77,12 +79,11 @@ describe('metrics.activeHandles', function () { () => new Promise((resolve, reject) => { if (clients.length >= maxClients) { - // At least one handle should exist per client and one per connection, that's why we expect - // (2 * maxClients) more handles than we had initially. However, other things are happening in the Node.js - // runtime as well while this test is running, so it might actually happen that some of the unrelated - // handles that existed initially have since been removed, which is why we allow for a little wiggle room - // (-4 at the end). Without this wiggle room, this test is flaky. - expect(activeHandles.currentPayload).to.be.at.least(activeHandlesBefore + 2 * maxClients - 4); + // Initially is 5 with the test setup. + // 1 TCPServerWrap because of the server + // Max Clients is 8 (each 2 TCPSocketWrap because of client and server side) + // 1 timeoutWrap because of the makeConnection timeout + expect(activeResources.currentPayload).to.be.at.least(initialActiveResources + 1 * (maxClients * 2) + 1); resolve(); } else { reject(new Error('Still waiting for more clients to connect.'));