Skip to content

Commit

Permalink
Remove opencenus from nodejs sequelize (#153)
Browse files Browse the repository at this point in the history
* Removed opencensus from package.json
* Removed opencensus functionalities from nodejs squelize
  • Loading branch information
Thiyagu55 authored Aug 30, 2022
1 parent 2290ef4 commit be98183
Show file tree
Hide file tree
Showing 8 changed files with 4,438 additions and 1,794 deletions.
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

0 comments on commit be98183

Please sign in to comment.