• Stars
    star
    225
  • Rank 177,187 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 12 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Track clicks and other client-side events on web pages

Li'l Brother

Li'l Brother tracks clicks on web pages, without blocking any interaction.

Client

Include the library:

<script type="text/javascript" src="http://server/lilbro.js"></script>

Listen for clicks on the body:

var lilBro = new LilBro({
  element: document.body,
  server: 'server:8000',
  ssl_server: 'server:8443',
  track_focus: true
});

LilBro Options

element

Reference to top-level container element to monitor for events.

server

Server to communicate with over HTTP calls.

server_ssl

Server to communicate with over HTTPS calls.

visit_id_cookie, visitor_id_cookie

Custom cookie names for visit and visitor cookies. Defaults to visit_id and visitor_id.

watch_focus

If set to true, will log focus/blur events that occur.

event_base

Optional base template object for events; useful for attatching extra metadata.

LilBro Methods

write({ event_type: ..., ... })

Write an event to the server. Parameters are merged in with the event on its way out. For example, to fire off a page load event:

lilBro.write({event_type: 'page_load'});
watch({ element: ..., callback: ... })

Listen for a specific event, and annotate the message with custom data. For example:

// register a click handler that snakes some data from the DOM and specifies the the event type.
// this wont bubble to the wrapper element being watched.
lilBro.watch({
  element: document.getElementById('search_button'),
  callback: function(e) {
    e.set('element_value', document.getElementById('search_term').value);
    e.set('event_type', 'search');
  }
});

Server

Start up the node listener and write events to a log file:

$ bin/lilbro --output-file events.log

Usage Options

$ bin/lilbro --help

Usage: node lilbro [options]

Options:
   --png-bug FILE                                path to the image file to return to clients
   --https-port PORT                             port to listen for https connections
   --https-key FILE                              path to the file containing the private key
   --https-cert FILE                             path to the file containing the secure certificate
   --http-port PORT                              port to listen on
   --devent-host HOST                            devent hostname
   --devent-port PORT                            devent port
   --devent-topic STRING                         devent topic to write events to when writing to devent
   --client-js-path DIR                          path to find client library sources
   --writer [file|devent-zmq|devent-forwarder]   method to use for writing events
   --output-file FILE                            path to log to when writing events to file

Devent

To write to Devent, use --writer devent-zmq or --writer devent-forwarder. See devent-router and devent-forwarder.

Event Context

Clicks

When a click happens, we gather what context we can and send that along with the event. If the target element has an id and/or a class, we note that. Otherwise, we traverse up the DOM until we find a parent’s id or class. We also grab the element tag name, X and Y mouse coordinates relative to the element and to the page, scroll positions, and input values if the element happened to be some sort of input field.

In addition to metadata around the event, we discover other attributes too: browser version, operating system, viewport width and height, request path, and some other bits.

Visits and Visitors

Of course clicks are part of larger hierarchy. There are users behind these clicks, and users browse in sessions. To tie events together, Lil Brother sets two cookies: a long-lived visitor cookie, and a short-lived visit cookie. We send the values of these cookies along so that we can string events together and aggregate later.

Event Schemas

To create the smallest request possible when writing events, Lil Brother de-couples the key-value pairs into a SOH-delimited list comprised of the values in the order specified in the schema's key_map. These values are sent to the server via an image request, which re-assembles the list back into key-value pairs and forwards the data to a backend writer. Both the client code and server code require access to a schema file which allows them to disassemble the data and re-assemble them in the correct order.

Lil Brother comes with a default schema which includes attributes for context around the click and context around the visit and visitor and their browser.

To create additional or multiple schemas, add them under client/src with the naming scheme LilBro.Schema.__VERSION__.js, and then load the client library with a query string parameter that refers to that version with ?v=__VERSION__.

Authors

This library was developed by Douglas Hunter, Dave Kozma and Eric Smiling at Shutterstock

License

MIT Β© 2012-2017 Shutterstock Images, LLC

More Repositories

1

rickshaw

JavaScript toolkit for creating interactive real-time graphs
JavaScript
6,531
star
2

node-common-errors

Common error classes and utility functions
JavaScript
285
star
3

changeDPI

Javascript library that allows you to change an image's DPI settings in the browser
JavaScript
218
star
4

ntf

Network Testing Framework
JavaScript
98
star
5

basecoat

A small, fast, static free micro framework that makes no assumptions and requires no conventions. It is well suited for migrating off legacy code, building services, or complex websites.
PHP
42
star
6

shutterstock-heatmap-toolkit

Shutterstock's interactive heatmap toolkit powered by heatmap.js and Solr
JavaScript
36
star
7

api-clients-examples

Shutterstock API Clients and Examples
33
star
8

armrest

A high-level HTTP / REST client for Node
JavaScript
29
star
9

gremlin-aws-sigv4

Extension for Apache's TinkerPop3 Gremlin JS driver compatible with IAM Database Authentication for Neptune
JavaScript
29
star
10

fnFlow

Pronounced "effin' flow" because it's so badass, fnFlow is a Javascript control flow library heavily influenced by Caolan McMahon's async that encourages a proper functional design pattern.
JavaScript
21
star
11

opentree

Generate an Org Chart from Workday
Java
19
star
12

postcss-copy-assets

PostCSS plugin to copy assets referenced by relative url()s into a build directory.
JavaScript
18
star
13

node-procedural-async

Write procedural style code that runs asynchronously. It may look synchronous, but it's not!
JavaScript
17
star
14

public-api-javascript-sdk

Simplify and speed up integration by using a JavaScript library to access our API.
JavaScript
17
star
15

UrlManager

Javascript class for getting and setting url parameters
JavaScript
15
star
16

tungsten-replicator

Shutterstock git mirror of Tungsten Replicator.
Java
14
star
17

juxtaposer

Screen shot capture and comparison tool for testing website changes.
JavaScript
14
star
18

kafkajs-async-retry

Provides a KafkaJS-compatible handler for processing messages that facilitates publishing to delayed-retry or dead-letter topics
TypeScript
14
star
19

terraform-aws-s3-squid-proxy-farm

AWS Terraform module to create an S3 Squid proxy farm on AWS
HCL
12
star
20

ntfserver

Network Testing Framework Server
JavaScript
11
star
21

task

Task-based git release management
Perl
10
star
22

node-shutterstock-api

⛔️ DEPRECATED - A client for the Shutterstock API written in Node
JavaScript
9
star
23

presto

PHP REST Orchestration
PHP
8
star
24

welcome

Welcome to the Shutterstock Community
7
star
25

ruby-shutterstock-api

⛔️ DEPRECATED - Ruby client for Shutterstock public API
Ruby
7
star
26

node-favicon-video

Videos in your favicon!
JavaScript
7
star
27

php-shutterstock-api

PHP Client to interact with the Shutterstock API
PHP
7
star
28

orc-metadata-reader

Python ORC metadata reader
C
7
star
29

Data-Partial-Google

Filter data structures for "partial responses," Google style
Perl
6
star
30

shutterstock-cli

A command-line utility that allows you to interact with the Shutterstock public API.
Python
6
star
31

devent-router

Route Devent messages by topic
C
5
star
32

oplog

An operations log
JavaScript
5
star
33

SVC

MVC for javascript with the observer pattern
JavaScript
5
star
34

node-timing-middleware

Expose request timing in express apps
JavaScript
5
star
35

public-api-sdk-generator

Mustache
4
star
36

shutterstock-oauth-sample

⛔️ DEPRECATED - Shutterstock Oauth Sample code, for interacting with the Shutterstock API
JavaScript
4
star
37

devent-forwarder

Forward Devent messages via HTTP, UDP or ZMQ
JavaScript
4
star
38

spark-phrases

phrase detection using Google's Word2phrase
Scala
4
star
39

php-shutterstock-api-example

Example PHP application that interfaces with Shutterstock API
PHP
3
star
40

node-icu-numformat

Node.JS bindings to libicu number formatting functions
C++
3
star
41

MogileFS-Plugin-Migrate

MogileFS plugin for moving files across domains
Perl
3
star
42

astore

Shared request aggregator and temp entity store
JavaScript
3
star
43

gitbook-plugin-related-links

Gitbook plugin that collects and shows related links
JavaScript
3
star
44

go-stockutil

A collection of various useful utility functions for Golang applications
Go
3
star
45

wordpress-plugin

PHP
2
star
46

Stemming-Exceptions

A collection of stemming exceptions for different languages.
2
star
47

perl-moosex-role-rest-consumer

Perl
2
star
48

Net-Statsd-Client

Perl
2
star
49

newrelic-console-logging

Forwards all logs emitted through console.log (and friends) to New Relic's application logging aggregation endpoint.
JavaScript
2
star
50

a-swig-service

A service that well, serves html from swig templates
JavaScript
2
star
51

ntfd

Network Testing Framework Daemon
JavaScript
2
star
52

Webdam-Wordpress-Asset-Chooser

Webdam Wordpress Asset Chooser Plugin
PHP
2
star
53

bigstock-php-client

⛔️ DEPRECATED - PHP Client for the Bigstock API
PHP
2
star
54

api-php-client

⛔️ DEPRECATED - Sample PHP client implementation of Shutterstock API
PHP
2
star
55

p-map-iterable

Performs a concurrent mapping with back pressure (won't iterate all source items if the consumer is not reading).
TypeScript
2
star
56

bigstock-ruby-client

⛔️ DEPRECATED - A Ruby client for Bigstock's API
Ruby
1
star
57

bristlecone

A set of test tools that perform useful services for measuring database and database cluster performance
Java
1
star
58

perl-devent-client

Perl client for writing Devent messages
Perl
1
star
59

chunker

Calls a callback when size would be exceeded or count is met
TypeScript
1
star
60

aws-embedded-metrics-flatten

Helper for aws-embedded-metrics npm module - Optionally disable emitting metrics and consolidate / flatten thousands of increments on Count metrics into a single line per run.
JavaScript
1
star
61

kinesis-helpers

Helpers for @aws-sdk/client-kinesis
TypeScript
1
star
62

homebrew-shutterstock

Homebrew tap for Shutterstock
Ruby
1
star
63

shutterstock-ui-wizard

HTML
1
star
64

shutterstock-js-cli

Shutterstock in your /usr/bin
JavaScript
1
star
65

http-close-channel

Express middleware for managing and closing HTTP channels
JavaScript
1
star
66

mold

JavaScript
1
star
67

node-debug-middleware

Log all middleware that is slow to respond
JavaScript
1
star
68

perl-webservice-swigclient

A fast client for swig.io
Perl
1
star
69

perl-db-transaction

feather-weight transaction management for your DBI handles
Perl
1
star
70

vertica-cli

Command-line Vertica client in Node.js
JavaScript
1
star
71

WebService-Shutterstock

⛔️ DEPRECATED - Easy access to Shutterstock's public API
Perl
1
star
72

bigstock-node-client

⛔️ DEPRECATED - A node.js client to use with Bigstock, an easy-to-use marketplace for stock images.
JavaScript
1
star
73

Tree-SEMETrie

Single-Edge-Multi-Edge Trie
Perl
1
star