Skip to content
This repository has been archived by the owner on Apr 3, 2019. It is now read-only.

Commit

Permalink
fix(logging): not all activity events are flow events (#1416) r=vladi…
Browse files Browse the repository at this point in the history
…koff
  • Loading branch information
philbooth authored and vladikoff committed Aug 15, 2016
1 parent 4085c78 commit 1a6c3af
Show file tree
Hide file tree
Showing 3 changed files with 232 additions and 105 deletions.
38 changes: 17 additions & 21 deletions docs/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,27 +92,23 @@ if that header is set to `1`.

#### Flow event structure

Flow events are JSON data.
Some fields are common to all events,
others are event-specific.
Some fields are optional depending on context,
others are mandatory.

|Event|Mandatory fields|Optional fields|
|-----|----------------|---------------|
|`account.created`|`event`, `flow_id`, `flow_time`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.verified`|`event`, `flow_id`, `flow_time`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.login`|`event`, `flow_id`, `flow_time`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.confirmed`|`event`, `flow_id`, `flow_time`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.keyfetch`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `flow_id`, `flow_time`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.signed`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `flow_id`, `flow_time`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.reset`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.reminder`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`account.deleted`|`event`, `time`, `userAgent`|`context`, `entrypoint` `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`device.created`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `flow_id`, `flow_time`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`device.updated`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `flow_id`, `flow_time`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`device.deleted`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
|`customs.blocked`|`event`, `time`, `userAgent`|`context`, `entrypoint`, `flow_id`, `flow_time`, `migration`, `service`, `utm_campaign`, `utm_content`, `utm_medium`, `utm_source`, `utm_term`|
Flow events are JSON data
containg the following fields:

* `event`
* `flow_id`
* `flow_time`
* `time`
* `userAgent`
* `context` (optional)
* `entrypoint` (optional)
* `migration` (optional)
* `service` (optional)
* `utm_campaign` (optional)
* `utm_content` (optional)
* `utm_medium` (optional)
* `utm_source` (optional)
* `utm_term` (optional)

##### Example event

Expand Down
33 changes: 30 additions & 3 deletions lib/log.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,25 @@ var logConfig = config.get('log')
var P = require('./promise')
var StatsDCollector = require('./metrics/statsd')

var ALWAYS_ACTIVITY_FLOW_EVENTS = {
// These activity events are always flow events
'account.confirmed': true,
'account.created': true,
'account.login': true,
'account.verified': true
}

var ACTIVITY_FLOW_EVENTS = Object.keys(ALWAYS_ACTIVITY_FLOW_EVENTS)
.reduce(function (events, event) {
events[event] = true
return events
}, {
// These activity events are flow events when there is a flowId
'account.keyfetch': true,
'account.signed': true,
'device.created': true
})

function unbuffer(object) {
var keys = Object.keys(object)
for (var i = 0; i < keys.length; i++) {
Expand Down Expand Up @@ -195,6 +214,10 @@ Lug.prototype.activityEvent = function (event, request, data) {
this.logger.info('activityEvent', info)
this.statsd.write(info)

if (! ACTIVITY_FLOW_EVENTS[event]) {
return P.resolve()
}

// log a flowEvent for all activityEvents
return this.flowEvent(event, request)
}
Expand All @@ -220,10 +243,14 @@ Lug.prototype.flowEvent = function (event, request) {
userAgent: request.headers['user-agent']
}, request, event).then(
function (info) {
info.event = event
optionallySetService(info, request)
if (info.flow_id) {
info.event = event
optionallySetService(info, request)

self.logger.info('flowEvent', info)
self.logger.info('flowEvent', info)
} else if (ALWAYS_ACTIVITY_FLOW_EVENTS[event]) {
self.error({ op: 'log.flowEvent', event: event, missingFlowId: true })
}
}
)
}
Expand Down
Loading

0 comments on commit 1a6c3af

Please sign in to comment.