Skip to content

Commit

Permalink
Replace two JavaCC lexers with a single JFlex one (#2113)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mateusz Rzeszutek authored Jan 26, 2021
1 parent 8d6ee17 commit 20dadc1
Show file tree
Hide file tree
Showing 14 changed files with 484 additions and 763 deletions.
4 changes: 2 additions & 2 deletions gradle/enforcement/checkstyle.xml
Original file line number Diff line number Diff line change
Expand Up @@ -372,10 +372,10 @@
</module>
<!-- this enables @SuppressWarnings("checkstyle:...") annotations -->
<module name="SuppressWarningsFilter"/>
<!-- skip javacc generated files -->
<!-- skip jflex generated files -->
<module name="SuppressionSingleFilter">
<property name="checks" value=".*"/>
<property name="files" value="javaagent-api[/\\]build[/\\]generated[/\\]javacc"/>
<property name="files" value="javaagent-api[/\\]build[/\\]generated[/\\]jflex"/>
</module>
<module name="SuppressionSingleFilter">
<property name="checks" value="MethodName"/>
Expand Down
6 changes: 0 additions & 6 deletions gradle/spotbugs-exclude.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@
<Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
</Match>

<Match>
<!-- ignore default encoding for auto-genned class -->
<Class name="io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SimpleCharStream"/>
<Bug pattern="DM_DEFAULT_ENCODING"/>
</Match>

<Match>
<!-- forced GC only used in testing -->
<Class name="io.opentelemetry.instrumentation.util.gc.GcUtils"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,17 @@

import static io.opentelemetry.javaagent.instrumentation.api.db.QueryNormalizationConfig.isQueryNormalizationEnabled;

import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.ParseException;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SqlSanitizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.opentelemetry.javaagent.instrumentation.api.db.SqlSanitizer;

public final class CassandraQueryNormalizer {
private static final Logger log = LoggerFactory.getLogger(CassandraQueryNormalizer.class);
private static final boolean NORMALIZATION_ENABLED =
isQueryNormalizationEnabled("cassandra", "cassandra-3.0");

public static String normalize(String query) {
if (!NORMALIZATION_ENABLED) {
return query;
}
try {
return SqlSanitizer.sanitize(query);
} catch (ParseException e) {
log.debug("Could not normalize Cassandra query", e);
return null;
}
return SqlSanitizer.sanitize(query).getFullStatement();
}

private CassandraQueryNormalizer() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@

import static io.opentelemetry.javaagent.instrumentation.api.db.QueryNormalizationConfig.isQueryNormalizationEnabled;

import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.ParseException;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SqlSanitizer;
import io.opentelemetry.javaagent.instrumentation.api.db.SqlSanitizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -21,12 +20,7 @@ public static String normalize(String query) {
if (!NORMALIZATION_ENABLED) {
return query;
}
try {
return SqlSanitizer.sanitize(query);
} catch (ParseException e) {
log.debug("Could not normalize Cassandra query", e);
return null;
}
return SqlSanitizer.sanitize(query).getFullStatement();
}

private CassandraQueryNormalizer() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,12 @@

import static io.opentelemetry.javaagent.instrumentation.api.db.QueryNormalizationConfig.isQueryNormalizationEnabled;

import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.ParseException;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SqlSanitizer;
import io.opentelemetry.javaagent.instrumentation.api.db.SqlSanitizer;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class CouchbaseQueryNormalizer {
private static final Logger log = LoggerFactory.getLogger(CouchbaseQueryNormalizer.class);
private static final boolean NORMALIZATION_ENABLED =
isQueryNormalizationEnabled("couchbase", "couchbase-2.0");

Expand Down Expand Up @@ -125,12 +121,7 @@ private static String normalizeString(String query) {
if (!NORMALIZATION_ENABLED || query == null) {
return query;
}
try {
return SqlSanitizer.sanitize(query);
} catch (ParseException e) {
log.debug("Could not normalize Couchbase query", e);
return null;
}
return SqlSanitizer.sanitize(query).getFullStatement();
}

private CouchbaseQueryNormalizer() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,17 @@

import static io.opentelemetry.javaagent.instrumentation.api.db.QueryNormalizationConfig.isQueryNormalizationEnabled;

import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.ParseException;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SqlSanitizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.opentelemetry.javaagent.instrumentation.api.db.SqlSanitizer;

public final class GeodeQueryNormalizer {
private static final Logger log = LoggerFactory.getLogger(GeodeQueryNormalizer.class);
private static final boolean NORMALIZATION_ENABLED =
isQueryNormalizationEnabled("geode", "geode-1.4");

public static String normalize(String query) {
if (!NORMALIZATION_ENABLED || query == null) {
return query;
}
try {
return SqlSanitizer.sanitize(query);
} catch (ParseException e) {
log.debug("Could not normalize Geode query", e);
return null;
}
return SqlSanitizer.sanitize(query).getFullStatement();
}

private GeodeQueryNormalizer() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@

import static io.opentelemetry.javaagent.instrumentation.api.db.QueryNormalizationConfig.isQueryNormalizationEnabled;

import io.opentelemetry.javaagent.instrumentation.api.db.SqlSanitizer;
import io.opentelemetry.javaagent.instrumentation.api.db.SqlStatementInfo;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.ParseException;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SqlSanitizer;
import io.opentelemetry.javaagent.instrumentation.api.db.sanitizer.SqlStatementInfoExtractor;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.Statement;
Expand Down Expand Up @@ -69,25 +67,10 @@ public static Connection connectionFromStatement(Statement statement) {
return connection;
}

/** Returns null if the sql could not be sanitized for any reason. */
public static String sanitizeSql(String sql) {
if (!NORMALIZATION_ENABLED) {
return sql;
}
try {
return SqlSanitizer.sanitize(sql);
} catch (Exception e) {
log.debug("Could not sanitize sql", e);
return null;
}
}

public static SqlStatementInfo sanitizeAndExtractInfo(String sql) {
try {
return SqlStatementInfoExtractor.extract(sanitizeSql(sql));
} catch (ParseException e) {
log.debug("Could not extract sql info", e);
return new SqlStatementInfo(null, null, null);
if (!NORMALIZATION_ENABLED) {
return new SqlStatementInfo(sql, null, null);
}
return SqlSanitizer.sanitize(sql);
}
}
23 changes: 9 additions & 14 deletions javaagent-api/javaagent-api.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'com.intershop.gradle.javacc' version '4.0.0'
id 'org.xbib.gradle.plugin.jflex' version '1.5.0'
}

group = 'io.opentelemetry.javaagent'
Expand All @@ -10,20 +10,15 @@ apply from: "$rootDir/gradle/publish.gradle"
project.ext.minimumBranchCoverage = 0.0
project.ext.minimumInstructionCoverage = 0.0

javacc {
configs {
sanitizer {
inputFile = file('src/main/javacc/SqlSanitizer.jj')
packageName = 'io.opentelemetry.javaagent.instrumentation.api.db.sanitizer'
outputDir = file("${project.buildDir}/generated/javacc/sql")
}
statmentInfoExtractor {
inputFile = file('src/main/javacc/SqlStatementInfoExtractor.jj')
packageName = 'io.opentelemetry.javaagent.instrumentation.api.db.sanitizer'
outputDir = file("${project.buildDir}/generated/javacc/sql")
}
}
def jflexTargetDir = file"${project.buildDir}/generated/jflex/sql"
def jflexTask = tasks.create("sqlSanitizerJflex", org.xbib.gradle.plugin.JFlexTask) {
group = 'jflex'
description = 'Generate SqlSanitizer'
source = [file("${project.projectDir}/src/main/jflex/SqlSanitizer.flex")]
target = jflexTargetDir
}
tasks.compileJava.dependsOn(jflexTask)
sourceSets.main.java.srcDirs += jflexTargetDir

dependencies {
api deps.opentelemetryApi
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.javaagent.instrumentation.api.db;

public final class SqlSanitizer {

public static SqlStatementInfo sanitize(String statement) {
if (statement == null) {
return new SqlStatementInfo(null, null, null);
}
return AutoSqlSanitizer.sanitize(statement);
}

private SqlSanitizer() {}
}
Loading

0 comments on commit 20dadc1

Please sign in to comment.