Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 1 addition & 30 deletions .tekton/tasks/test-groups/collector-27-postgres-task.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,6 @@ spec:
initialDelaySeconds: 3
periodSeconds: 2
timeoutSeconds: 10
- name: mysql
image: public.ecr.aws/docker/library/mysql:8.0.26
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: "500m"
memory: "1Gi"
args:
- "--default-authentication-plugin=mysql_native_password"
env:
- name: "MYSQL_ROOT_PASSWORD"
value: "nodepw"
- name: "MYSQL_DATABASE"
value: "nodedb"
- name: "MYSQL_USER"
value: "node"
- name: "MYSQL_PASSWORD"
value: "nodepw"
- name: "MYSQL_ROOT_HOST"
value: "0.0.0.0"
readinessProbe:
exec:
command:
- "sh"
- "-c"
- "mysql -h 0.0.0.0 -u node -p'nodepw' -e 'SELECT 1'"
initialDelaySeconds: 3
periodSeconds: 2
timeoutSeconds: 10
envFrom:
- configMapRef:
name: environment-properties
Expand Down Expand Up @@ -131,7 +102,7 @@ spec:
memory: "8Gi"
script: |
#!/bin/bash
AVAILABLE_SIDECARS="postgres,mysql"
AVAILABLE_SIDECARS="postgres"
SIDECAR_COUNTS="redis=20,redis-slave=20,redis-sentinel=20,zookeeper=6,kafka=6,kafka-topics=6,postgres=3,elasticsearch=2,mongodb=1,couchbase=1,rabbitmq=1,nats=1,nats-streaming=1,nats-streaming-2=1,mysql=1,localstack=1,memcached=1,oracledb=1"
ARTIFACTS_PATH="$(workspaces.output.path)"
cd $ARTIFACTS_PATH
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,6 @@ try {
const { PrismaPg } = require('@prisma/adapter-pg');
adapter = new PrismaPg({ connectionString: process.env.INSTANA_CONNECT_POSTGRES_PRISMA_URL });
log(`Initialized Prisma ${version} with PostgreSQL adapter`);
} else if (provider === 'mysql') {
const { PrismaMariaDb } = require('@prisma/adapter-mariadb');
adapter = new PrismaMariaDb({
host: process.env.INSTANA_CONNECT_MYSQL_HOST,
port: Number(process.env.INSTANA_CONNECT_MYSQL_PORT),
user: process.env.INSTANA_CONNECT_MYSQL_USER,
password: process.env.INSTANA_CONNECT_MYSQL_PW,
database: process.env.INSTANA_CONNECT_MYSQL_DB,
connectionLimit: 5
});
log(`Initialized Prisma ${version} with MariaDB adapter`);
} else {
const { PrismaBetterSqlite3 } = require('@prisma/adapter-better-sqlite3');
const dbPath = path.join(__dirname, 'dev.db');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,6 @@ try {
const { PrismaPg } = await import('@prisma/adapter-pg');
adapter = new PrismaPg({ connectionString: process.env.INSTANA_CONNECT_POSTGRES_PRISMA_URL });
console.log(`Initialized Prisma ${version} with PostgreSQL adapter`);
} else if (provider === 'mysql') {
const { PrismaMariaDb } = await import('@prisma/adapter-mariadb');
adapter = new PrismaMariaDb({
host: process.env.INSTANA_CONNECT_MYSQL_HOST,
port: Number(process.env.INSTANA_CONNECT_MYSQL_PORT),
user: process.env.INSTANA_CONNECT_MYSQL_USER,
password: process.env.INSTANA_CONNECT_MYSQL_PW,
database: process.env.INSTANA_CONNECT_MYSQL_DB,
connectionLimit: 5
});
console.log(`Initialized Prisma ${version} with MySQL adapter`);
} else {
const { PrismaBetterSqlite3 } = await import('@prisma/adapter-better-sqlite3');
const __dirname = path.dirname(fileURLToPath(import.meta.url));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
[
"sqlite",
"mysql",
"postgresql"
]
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
"dependencies": {
"@prisma/client": "{{CURRENCY_VERSION}}",
"@prisma/adapter-pg": "{{CURRENCY_VERSION}}",
"@prisma/adapter-mariadb": "{{CURRENCY_VERSION}}",
"@prisma/adapter-better-sqlite3": "{{CURRENCY_VERSION}}"
}
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,9 @@ const migrationsTargetDir = path.join(appDir, 'prisma', 'migrations');
module.exports = function (name, version, isLatest, mode) {
this.timeout(Math.max(config.getTestTimeout() * 3, 20000));

const provider = mode;
const provider = mode; // mode is either 'sqlite' or 'postgresql'
const majorVersion = parseInt(version, 10);
const isV7 = majorVersion >= 7;

if (provider === 'mysql' && !isV7) {
return;
}

// Getting the URL is not possible between Prisma 4.10 and 5.1 (getConfig was removed)
const urlUnavailable = semver.gte(version, '4.10.0') && semver.lt(version, '5.2.0');

Expand Down Expand Up @@ -203,17 +198,6 @@ module.exports = function (name, version, isLatest, mode) {
case 'postgresql':
expectedUrl = process.env.INSTANA_CONNECT_POSTGRES_PRISMA_URL.replace('nodepw', '_redacted_');
break;
case 'mysql': {
const {
INSTANA_CONNECT_MYSQL_HOST: host,
INSTANA_CONNECT_MYSQL_PORT: port,
INSTANA_CONNECT_MYSQL_USER: user,
INSTANA_CONNECT_MYSQL_DB: database
} = process.env;

expectedUrl = `mysql://${user}:_redacted_@${host}:${port}/${database}`;
break;
}
default:
throw new Error(`Unknown provider: ${provider}`);
}
Expand Down
56 changes: 1 addition & 55 deletions packages/core/src/tracing/instrumentation/databases/prisma.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,63 +13,13 @@ const cls = require('../../cls');
let logger;
let isActive = false;

// Maps database connection info to Prisma instances for span creation
// Key: engine instance (accessible during span creation via ctx._engine)
// Value: { provider: string, dataSourceUrl: string }
const providerAndDataSourceUriMap = new WeakMap();

// Temporary storage for MariaDB adapter connection URLs
// Key: adapter instance
// Value: { provider: string, dataSourceUrl: string }
// Why two maps? Adapter config is only accessible during construction, but spans only have access to the engine.
// Flow: 1) Adapter constructor captures URL → mariadbAdapterConfigMap
// 2) PrismaClient constructor transfers URL → providerAndDataSourceUriMap (keyed by engine)
// 3) Span creation retrieves URL using engine instance
const mariadbAdapterConfigMap = new WeakMap();

exports.init = function init(config) {
logger = config.logger;

hook.onModuleLoad('@prisma/adapter-mariadb', instrumentMariaDbAdapter);
hook.onModuleLoad('@prisma/client', instrumentPrismaClient);
};

function instrumentMariaDbAdapter(mariadbAdapterModule) {
const OriginalPrismaMariaDb = mariadbAdapterModule?.PrismaMariaDb;

if (typeof OriginalPrismaMariaDb !== 'function') {
return mariadbAdapterModule;
}

class InstanaPrismaMariaDb extends OriginalPrismaMariaDb {
constructor(...args) {
super(...args);
const [config] = args;
if (!config || typeof config !== 'object') {
return;
}
const { host = 'localhost', port = 3306, user = '', database = '' } = config;

if (!user || !database) {
return;
}

const sanitizedUrl = `mysql://${user}:_redacted_@${host}:${port}/${database}`;

mariadbAdapterConfigMap.set(this, {
// Prisma MariaDB adapter reports mysql as provider
provider: 'mysql',
url: sanitizedUrl
});
}
}

return {
...mariadbAdapterModule,
PrismaMariaDb: InstanaPrismaMariaDb
};
}

function instrumentPrismaClient(prismaClientModule) {
instrumentClientConstructor(prismaClientModule);
shimRequest(prismaClientModule);
Expand Down Expand Up @@ -136,11 +86,7 @@ function instrumentClientConstructor(prismaClientModule) {
if (this._engineConfig.adapter) {
const adapter = this._engineConfig.adapter;
try {
// Get URL captured during MariaDB adapter construction
const capturedConfig = mariadbAdapterConfigMap.get(adapter);
if (capturedConfig) {
dataSourceUrl = capturedConfig.url;
} else if (adapter?.config?.connectionString) {
if (adapter?.config?.connectionString) {
dataSourceUrl = redactPassword(provider, adapter.config.connectionString);
} else if (adapter?.externalPool?.options?.connectionString) {
dataSourceUrl = redactPassword(provider, adapter.externalPool.options.connectionString);
Expand Down