Skip to content

Commit

Permalink
enable collapse option by default in graphql plugin (#329)
Browse files Browse the repository at this point in the history
  • Loading branch information
rochdev committed Oct 24, 2018
1 parent 4f180d5 commit 3f68b4f
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 34 deletions.
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

0 comments on commit 3f68b4f

Please sign in to comment.