Giter VIP home page Giter VIP logo

sixpack-js's Introduction

sixpack-client

Node / browser client library for SeatGeek's Sixpack A/B testing framework.

Installation

Include the "sixpack.js" script. The sixpack object will be added to your environment. In the browser do the following:

<script src='sixpack.js'></script>

If you're using sixpack-client with node.js start by installing it with npm:

npm install sixpack-client

then require the "sixpack-client" module:

var sixpack = require('sixpack-client');

Usage

Check out the examples in the examples directory for some quick examples for how to use the library. Here's a very basic example in node:

var sixpack = require('sixpack-client');

var session = new sixpack.Session();
session.participate('test-exp', ['alt-one', 'alt-two'], function (err, res) {
  if (err) throw err;
  alt = res.alternative.name
  if (alt == 'alt-one') {
    console.log('default: ' + alt);
  } else {
    console.log(alt);
  }
});

When instantiating the session object you can pass optional params client_id, base_url, ip_address, user_agent

var sixpack = new sixpack.Session({
    client_id: 12345,
    base_url: 'http://google.com/sixpack',
    ip_address: '1.2.2.1',
    user_agent: 'ChromeBot'
});

Client ID is a previously generated client id that you've previously stored. IP Address and User Agent are used for bot detection.

Options

A number of options can be passed to a sixpack session. A few are highlighted below.

  • base_url. Base URL of the sixpack-server.
  • client_id. ID of the specific client.
  • ignore_alternates_warning. Allow sixpack-js to send a participate request which contains no alternates.
  • timeout. Number of milliseconds to wait for a response from sixpack-server before returning a timeout response.

Forcing an Alternative

For debugging / design work it can be useful to force a page to load using a specific alternative. To force an alternative use the force parameter to participate(). If you're using sixpack.js in the browser you can also just include a query parameter, e.g. /your-page?sixpack-force-EXPERIMENT_NAME=ALTERNATIVE_NAME.

Tests

A number of end-to-end tests are located in ./test/sixpack-test.js. They use mocha as the testing framework and chai as the assertion library, and require a running sixpack-server.

Run the tests with:

npm run test

Sixpack server location

The tests assume the sixpack-server server is running and located at http://localhost:5000. To use a different location, e.g. for a Docker container, run tests with the following pattern:

SIXPACK_BASE_URL=http://docker:5000 npm run test

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Write and run tests with npm test (see Tests above for more information)
  4. Commit your changes (git commit -am 'Added some feature')
  5. Push to the branch (git push -u origin my-new-feature)
  6. Create new pull request

sixpack-js's People

Contributors

apeckham avatar coldlamper avatar dependabot-preview[bot] avatar garetht avatar heyhugo avatar jack7890 avatar martin-didomenico-olx avatar mdirolf avatar pallaskatze avatar zackkitzmiller avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sixpack-js's Issues

Sixpack not handling non-500 errors

In certain cases, web servers can return 5XX errors that are not specifically 500. In our case, we're seeing 502 errors come through if the server becomes unavailable. With these errors, nginx servers return plain HTML documents.

Because sixpack checks strictly for 500 error codes, and then JSON parses the response body if status !== 500, 502 and 502 responses can cause an exception to be thrown, and the process thread to die.

The PR at #24 checks for all 5XX errors when receiving results, and try/catches the JSON parse, in case a non-son response is returned, making the library significantly more fault tolerant.

npm version lags behind master

there have been significant changes since Aug 19, 2013 but the version on npm doesn't include any of the updates and doesn't match the documentation.

Can you please bump the package version so users can get the latest?

Passing options to `sixpack.Session()` does not work in node v4

Stack is Node v4

var session = new sixpack.Session({client_id: req.user ? req.user._id : sixpack.generate_client_id(), base_url: 'http://XXX:8080'});

console.log(session)

{ client_id: { client_id: [Function], base_url: 'http://XXX:8080' },
  base_url: 'http://localhost:5000',
  ip_address: null,
  user_agent: null }

The options object seems to only be injected into client_id. I've tried just setting base_url too. This seems to work fine in the browser, with a quick jsfiddle here: http://jsfiddle.net/qpfac336/

Errors show up as timeouts

Because this project uses JSONP to receive HTTP responses, it can't receive any responses sent with HTTP 400/500 because the browser won't try to load them as actual scripts. To reproduce this, try converting a client ID that isn't a part of an experiment: you'll get a request timed out error because the callback is never executed, which is because the browser is not evaluating the response body that would look like sixpack.callback1({ "status": "failed", "message": "not in experiment" }) or something similar.

One way to fix this is to not use HTTP status codes and always return 200. Another solution is to avoid JSONP and use CORS and standard HTTP requests.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.