Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

enable collapse option by default #329

Merged
merged 1 commit into from Oct 24, 2018
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/API.md
Expand Up @@ -180,7 +180,7 @@ query HelloWorld {
| service | *Service name of the app suffixed with -graphql* | The service name for this integration. |
| variables | `undefined` | A callback to enable recording of variables. By default, no variables are recorded. For example, using `variables => variables` would record all variables. |
| depth | -1 | The maximum depth of fields/resolvers to instrument. Set to `0` to only instrument the operation or to -1 to instrument all fields/resolvers. |
| collapse | false | Whether to collapse list items into a single element. (i.e. single `users.*.name` span instead of `users.0.name`, `users.1.name`, etc) |
| collapse | true | Whether to collapse list items into a single element. (i.e. single `users.*.name` span instead of `users.0.name`, `users.1.name`, etc) |

<h3 id="hapi">hapi</h3>

Expand Down
3 changes: 2 additions & 1 deletion src/plugins/graphql.js
Expand Up @@ -386,7 +386,8 @@ function addError (span, error) {
function validateConfig (config) {
return Object.assign({}, config, {
depth: getDepth(config),
variables: getVariablesFilter(config)
variables: getVariablesFilter(config),
collapse: config.collapse === undefined || !!config.collapse
})
}

Expand Down
64 changes: 32 additions & 32 deletions test/plugins/graphql.spec.js
Expand Up @@ -391,15 +391,13 @@ describe('Plugin', () => {
.use(traces => {
const spans = sort(traces[0])

expect(spans).to.have.length(10)
expect(spans).to.have.length(8)

const execute = spans[3]
const friendsField = spans[4]
const friendsResolve = spans[5]
const friend0NameField = spans[6]
const friend0NameResolve = spans[7]
const friend1NameField = spans[8]
const friend1NameResolve = spans[9]
const friendNameField = spans[6]
const friendNameResolve = spans[7]

expect(execute).to.have.property('name', 'graphql.execute')

Expand All @@ -411,21 +409,13 @@ describe('Plugin', () => {
expect(friendsResolve).to.have.property('resource', 'friends')
expect(friendsResolve.parent_id.toString()).to.equal(friendsField.span_id.toString())

expect(friend0NameField).to.have.property('name', 'graphql.field')
expect(friend0NameField).to.have.property('resource', 'friends.0.name')
expect(friend0NameField.parent_id.toString()).to.equal(friendsField.span_id.toString())

expect(friend0NameResolve).to.have.property('name', 'graphql.resolve')
expect(friend0NameResolve).to.have.property('resource', 'friends.0.name')
expect(friend0NameResolve.parent_id.toString()).to.equal(friend0NameField.span_id.toString())

expect(friend1NameField).to.have.property('name', 'graphql.field')
expect(friend1NameField).to.have.property('resource', 'friends.1.name')
expect(friend1NameField.parent_id.toString()).to.equal(friendsField.span_id.toString())
expect(friendNameField).to.have.property('name', 'graphql.field')
expect(friendNameField).to.have.property('resource', 'friends.*.name')
expect(friendNameField.parent_id.toString()).to.equal(friendsField.span_id.toString())

expect(friend1NameResolve).to.have.property('name', 'graphql.resolve')
expect(friend1NameResolve).to.have.property('resource', 'friends.1.name')
expect(friend1NameResolve.parent_id.toString()).to.equal(friend1NameField.span_id.toString())
expect(friendNameResolve).to.have.property('name', 'graphql.resolve')
expect(friendNameResolve).to.have.property('resource', 'friends.*.name')
expect(friendNameResolve.parent_id.toString()).to.equal(friendNameField.span_id.toString())
})
.then(done)
.catch(done)
Expand Down Expand Up @@ -937,7 +927,7 @@ describe('Plugin', () => {
].indexOf(span.resource) !== -1
})

expect(spans).to.have.length(16)
expect(spans).to.have.length(12)
expect(ignored).to.have.length(0)
})
.then(done)
Expand All @@ -947,11 +937,11 @@ describe('Plugin', () => {
})
})

describe('with collapsing enabled', () => {
describe('with collapsing disabled', () => {
before(() => {
tracer = require('../..')

return agent.load(plugin, 'graphql', { collapse: true })
return agent.load(plugin, 'graphql', { collapse: false })
})

after(() => {
Expand All @@ -963,20 +953,22 @@ describe('Plugin', () => {
buildSchema()
})

it('should collapse list field resolvers', done => {
it('should not collapse list field resolvers', done => {
const source = `{ friends { name } }`

agent
.use(traces => {
const spans = sort(traces[0])

expect(spans).to.have.length(8)
expect(spans).to.have.length(10)

const execute = spans[3]
const friendsField = spans[4]
const friendsResolve = spans[5]
const friendNameField = spans[6]
const friendNameResolve = spans[7]
const friend0NameField = spans[6]
const friend0NameResolve = spans[7]
const friend1NameField = spans[8]
const friend1NameResolve = spans[9]

expect(execute).to.have.property('name', 'graphql.execute')

Expand All @@ -988,13 +980,21 @@ describe('Plugin', () => {
expect(friendsResolve).to.have.property('resource', 'friends')
expect(friendsResolve.parent_id.toString()).to.equal(friendsField.span_id.toString())

expect(friendNameField).to.have.property('name', 'graphql.field')
expect(friendNameField).to.have.property('resource', 'friends.*.name')
expect(friendNameField.parent_id.toString()).to.equal(friendsField.span_id.toString())
expect(friend0NameField).to.have.property('name', 'graphql.field')
expect(friend0NameField).to.have.property('resource', 'friends.0.name')
expect(friend0NameField.parent_id.toString()).to.equal(friendsField.span_id.toString())

expect(friendNameResolve).to.have.property('name', 'graphql.resolve')
expect(friendNameResolve).to.have.property('resource', 'friends.*.name')
expect(friendNameResolve.parent_id.toString()).to.equal(friendNameField.span_id.toString())
expect(friend0NameResolve).to.have.property('name', 'graphql.resolve')
expect(friend0NameResolve).to.have.property('resource', 'friends.0.name')
expect(friend0NameResolve.parent_id.toString()).to.equal(friend0NameField.span_id.toString())

expect(friend1NameField).to.have.property('name', 'graphql.field')
expect(friend1NameField).to.have.property('resource', 'friends.1.name')
expect(friend1NameField.parent_id.toString()).to.equal(friendsField.span_id.toString())

expect(friend1NameResolve).to.have.property('name', 'graphql.resolve')
expect(friend1NameResolve).to.have.property('resource', 'friends.1.name')
expect(friend1NameResolve.parent_id.toString()).to.equal(friend1NameField.span_id.toString())
})
.then(done)
.catch(done)
Expand Down