Skip to content
Merged
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
5,978 changes: 4,401 additions & 1,577 deletions nodejs/sqlcommenter-nodejs/packages/sqlcommenter-sequelize/package-lock.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
"test": "test"
},
"devDependencies": {
"@opencensus/nodejs": "^0.0.22",
"@opencensus/propagation-tracecontext": "^0.0.22",
"@opentelemetry/api": "^1.0.3",
"@opentelemetry/core": "^0.24.0",
"@opentelemetry/node": "^0.24.0",
Expand All @@ -22,8 +20,6 @@
"sinon-chai": "^3.5.0"
},
"peerDependencies": {
"@opencensus/nodejs": "^0.0.22",
"@opencensus/propagation-tracecontext": "^0.0.22",
"@opentelemetry/core": "^0.24.0"
},
"engines": {
Expand All @@ -38,4 +34,4 @@
},
"author": "Google, LLC.",
"license": "Apache-2.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,17 @@
// See the License for the specific language governing permissions and
// limitations under the License.

const OpenCensus = require('./opencensus');
const OpenTelemetry = require('./opentelemetry');

const providers = {
'opentelemetry': OpenTelemetry,
'opencensus': OpenCensus,
}

exports.attachComments = function attachComments(providerName, comments) {
// Verify we have a comments object to modify
if (!comments || typeof comments !== 'object') return;

// Lookup the provider by name, or use the default.
let provider = providers[String(providerName).toLowerCase()] || OpenCensus;
let provider = providers[String(providerName).toLowerCase()] || OpenTelemetry;
provider.addW3CTraceContext(comments);
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,14 @@ let sequelize_version = require('sequelize').version;
if (!sequelize_version)
sequelize_version = require('sequelize/package').version;

const {wrapSequelize} = require('../index');
const {fields} = require('../util');
const { wrapSequelize } = require('../index');
const chai = require("chai");
const expect = chai.expect;
const seq_version = require('sequelize').version;
const opencensus_tracing = require('@opencensus/nodejs');
const {context, trace} = require('@opentelemetry/api');
const {NodeTracerProvider} = require('@opentelemetry/node');
const {AsyncHooksContextManager} = require('@opentelemetry/context-async-hooks');
const {InMemorySpanExporter, SimpleSpanProcessor} = require('@opentelemetry/tracing');
const { context, trace } = require('@opentelemetry/api');
const { NodeTracerProvider } = require('@opentelemetry/node');
const { AsyncHooksContextManager } = require('@opentelemetry/context-async-hooks');
const { InMemorySpanExporter, SimpleSpanProcessor } = require('@opentelemetry/tracing');

const createFakeSequelize = () => {
return {
Expand All @@ -42,11 +40,11 @@ const createFakeSequelize = () => {
config: {
database: 'fake', client: 'fakesql',
},
options: {
databaseVersion: 'fakesql-server:0.0.X',
dialect: 'fakesql',
timezone: '+00:00',
},
options: {
databaseVersion: 'fakesql-server:0.0.X',
dialect: 'fakesql',
timezone: '+00:00',
},
},
},
},
Expand All @@ -59,17 +57,16 @@ describe("Comments for Sequelize", () => {
const fakeSequelize = createFakeSequelize();

before(() => {
wrapSequelize(fakeSequelize, {client_timezone:true, db_driver:true});
wrapSequelize(fakeSequelize, { client_timezone: true, db_driver: true });
});

after(() => {
opencensus_tracing.stop();
});

describe("Cases", () => {

it("should add comment to generated sql", (done) => {

const want = `SELECT * FROM foo /*client_timezone='%2B00%3A00',db_driver='sequelize%3A${seq_version}'*/`;
const query = 'SELECT * FROM foo';

Expand All @@ -81,7 +78,7 @@ describe("Comments for Sequelize", () => {
});

it("should NOT affix comments to statements with existing comments", (done) => {

const q = [
'SELECT * FROM people /* existing */',
'SELECT * FROM people -- existing'
Expand Down Expand Up @@ -120,9 +117,9 @@ describe("Comments for Sequelize", () => {
});

it("chaining and repeated calls should NOT indefinitely chain SQL", (done) => {

const want = `SELECT * FROM foo /*client_timezone='%2B00%3A00',db_driver='sequelize%3A${seq_version}'*/`;

const sql = 'SELECT * FROM foo';

fakeSequelize.dialect.Query.prototype.run(sql)
Expand All @@ -142,20 +139,19 @@ describe("Excluding all variables", () => {
const fakeSequelize = createFakeSequelize();

before(() => {
wrapSequelize(fakeSequelize, {non_existent: true});
wrapSequelize(fakeSequelize, { non_existent: true });
});

after(() => {
opencensus_tracing.stop();
});

it("when all variables are excluded, no comment should be generated", (done) => {
// Allow a re-wrap.
fakeSequelize.___alreadySQLCommenterWrapped___ = false;
wrapSequelize(fakeSequelize, {foo:true});
wrapSequelize(fakeSequelize, { foo: true });

const want = `SELECT * FROM foo`;
const sql = `SELECT * FROM foo`;
const sql = `SELECT * FROM foo`;

fakeSequelize.dialect.Query.prototype.run(sql).then((got) => {
expect(got).equals(want);
Expand All @@ -164,41 +160,6 @@ describe("Excluding all variables", () => {
});
});

describe("With OpenCensus tracing", () => {

const fakeSequelize = createFakeSequelize();

before(() => {
wrapSequelize(fakeSequelize, {traceparent: true, tracestate: true}, {TraceProvider: "OpenCensus"});
});

after(() => {
opencensus_tracing.stop();
});

it('Starting an OpenCensus trace should produce `traceparent`', (done) => {
// TODO: Follow-up with https://github.com/census-instrumentation/opencensus-node/issues/580
// and get a proper guide or file bugs against the project to get the proper
// way to retrieve spans. For now let's skip this test.
// Remember: https://github.com/census-instrumentation/opencensus-node/issues/580

const traceOptions = {
samplingRate: 1, // Always sample
};
const tracer = opencensus_tracing.start(traceOptions).tracer;

tracer.startRootSpan({ name: 'with-tracing' }, rootSpan => {
const sql = 'SELECT * FROM foo';
fakeSequelize.dialect.Query.prototype.run(sql).then((augmentedSQL) => {
const wantSQL = `SELECT * FROM foo /*traceparent='00-${rootSpan.traceId}-${rootSpan.id}-01'*/`;
expect(augmentedSQL).equals(wantSQL);
opencensus_tracing.tracer.stop();
done();
});
});
});
});

describe("With OpenTelemetry tracing", () => {

const fakeSequelize = createFakeSequelize();
Expand All @@ -215,7 +176,7 @@ describe("With OpenTelemetry tracing", () => {
before(() => {
contextManager = new AsyncHooksContextManager();
context.setGlobalContextManager(contextManager.enable());
wrapSequelize(fakeSequelize, {traceparent: true, tracestate: true}, {TraceProvider: "OpenTelemetry"});
wrapSequelize(fakeSequelize, { traceparent: true, tracestate: true }, { TraceProvider: "OpenTelemetry" });
});

after(() => {
Expand All @@ -226,7 +187,7 @@ describe("With OpenTelemetry tracing", () => {
it('Starting an OpenTelemetry trace should produce `traceparent`', (done) => {
const rootSpan = tracer.startSpan('rootSpan');

context.with(trace.setSpan(context.active(), rootSpan), async () => {
context.with(trace.setSpan(context.active(), rootSpan), async () => {
const sql = 'SELECT * FROM foo';
let augmentedSQL = await fakeSequelize.dialect.Query.prototype.run(sql);
const wantSQL = `SELECT * FROM foo /*traceparent='00-${rootSpan.spanContext().traceId}-${rootSpan.spanContext().spanId}-01'*/`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,17 @@ const rewiremock = require('../rewiremock');
chai.use(sinonChai);

// Mock the trace provider implementations
const openCensusMock = sinon.spy();
const openTelemetryMock = sinon.spy();

// Mock the dependencies of provider to make use of faked methods for adding trace context
rewiremock('../../provider/opencensus').with({addW3CTraceContext: openCensusMock});
rewiremock('../../provider/opentelemetry').with({addW3CTraceContext: openTelemetryMock});
rewiremock('../../provider/opentelemetry').with({ addW3CTraceContext: openTelemetryMock });

// Load the provider module with the appropriate mocks
rewiremock.enable();
const provider = require('../../provider');

// A helper method to test which provider was called
const verifyProviderUsed = function(traceProvider, spy, used) {
const verifyProviderUsed = function (traceProvider, spy, used) {
provider.attachComments(traceProvider, {});
expect(spy.called).to.equal(used);
};
Expand All @@ -43,42 +41,26 @@ describe("Provider", () => {
describe("attachComment", () => {

beforeEach(() => {
openCensusMock.resetHistory();
openTelemetryMock.resetHistory();
})

it("should default to OpenCensus when no options are provided", () => {
verifyProviderUsed(undefined, openCensusMock, true);
verifyProviderUsed(undefined, openTelemetryMock, false);
it("should default to OpenTelemetry when no options are provided", () => {
verifyProviderUsed(undefined, openTelemetryMock, true);
});

it("should default to OpenCensus when null is provided", () => {
verifyProviderUsed(null, openCensusMock, true);
verifyProviderUsed(null, openTelemetryMock, false);
it("should default to OpenTelemetry when null is provided", () => {
verifyProviderUsed(null, openTelemetryMock, true);
});

it("should default to OpenCensus when invalid options are provided", () => {
verifyProviderUsed("bad trace library name", openCensusMock, true);
verifyProviderUsed("bad trace library name", openTelemetryMock, false);
});

it("should use OpenCensus when the name is provided", () => {
verifyProviderUsed("opencensus", openCensusMock, true);
verifyProviderUsed("opencensus", openTelemetryMock, false);
});

it("should accept an arbitrary capitalization of OpenCensus", () => {
verifyProviderUsed("oPeNceNSus", openCensusMock, true);
verifyProviderUsed("oPeNceNSus", openTelemetryMock, false);
it("should default to OpenTelemetry when invalid options are provided", () => {
verifyProviderUsed("bad trace library name", openTelemetryMock, true);
});

it("should use OpenTelemetry when the name is provided", () => {
verifyProviderUsed("opentelemetry", openCensusMock, false);
verifyProviderUsed("opentelemetry", openTelemetryMock, true);
});

it("should accept an arbitrary capitalization of OpenTelemetry", () => {
verifyProviderUsed("OpenTeleMetRY", openCensusMock, false);
verifyProviderUsed("OpenTeleMetRY", openTelemetryMock, true);
});

Expand Down
Loading