Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Commits on Apr 23, 2012
  1. @mbostock

    Update copyright year.

    mbostock authored
  2. @mbostock

    Remove defunct schema.

    mbostock authored
  3. @mbostock

    Add default dashboards.

    mbostock authored
  4. @mbostock

    Simplified README.

    mbostock authored
Commits on Apr 22, 2012
  1. @mbostock

    Update README.

    mbostock authored
  2. @mbostock

    Add UDP support for posting events.

    mbostock authored
    This commit also changes the emitter client so that you can easily switch
    between websockets and UDP as desired. UDP is faster, but does not detect when
    events are not sent successfully.
Commits on Apr 20, 2012
  1. @mbostock
  2. @RISCfuture

    Add node-static dependency

    RISCfuture authored
  3. @mbostock
  4. @mbostock

    Remove the DJI emitter.

    mbostock authored
  5. @mbostock

    Fix a bug with metric invalidation.

    mbostock authored
    This reverts @76a7527. That change introduced a bug because I forgot {multi:
    true}, so the collector was only invalidating the first matching first metric
    for a given event, rather than all of them.
    
    Also, by delaying metric invalidation, the evaluator is less likely to encounter
    the race condition where a new event is collected between the evaluator reading
    the events and saving the computed metric. Still, this solution is not perfect.
  6. @mbostock
  7. @mbostock

    Fix a bug in emitter closing.

    mbostock authored
    If you close the emitter before it opens, it now closes correctly.
Commits on Apr 18, 2012
  1. @mbostock
Commits on Apr 17, 2012
  1. @mbostock
  2. @mbostock

    Shared polling for event streams.

    mbostock authored
    If multiple clients are listening to the same event stream, share a polling
    loop. This is much more efficient than every client polling for itself!
  3. @mbostock

    Fix a bug with ZOMBIE QUERIES! :skull:

    mbostock authored
    The streaming event get endpoint wasn't correctly terminating the query callback
    when the connection is closed, so it would continue polling forever.
  4. @mbostock
Commits on Apr 16, 2012
  1. @mbostock

    Enforce event limit on query side.

    mbostock authored
    This is much faster than enforcing the limit in the callback. Derp!
  2. @mbostock

    Remove d3 dependency.

    mbostock authored
  3. @mbostock

    Fix a bug in expression.source.

    mbostock authored
    And add more tests for the source on compound expressions.
  4. @mbostock

    Add /types endpoint.

    mbostock authored
  5. @mbostock

    Upgrade node-mongodb-native to 0.9.9-8.

    mbostock authored
    Fixes Object.CALL_NON_FUNCTION error on retry.
  6. @mbostock

    Better storage for collectd events.

    mbostock authored
    Rather than coalesce events when there are multiple plugin or type instances,
    Cube now stores the events separately, as they are received. This simplifies
    collection and also allows greater flexibility in combining metrics from
    multiple instances (say, summing usage across network interfaces). It also deals
    well with instance names that are not valid Cube properties (such as "14-0").
    
    A side-effect of this change is that all collectd events are stored in a single
    collection, rather than storing multiple collections for each collectd plugin.
  7. @mbostock

    Don't allow leading $ in field names.

    mbostock authored
    Not allowed by MongoDB.
  8. @mbostock

    Replace Cube front-end with node-static.

    mbostock authored
    The Cube front-end is now just a static file server (in addition to the /event
    and /metric endpoints that power the collector and evaluator). This removes the
    visualization component from Cube, so that it can focus on data collection and
    metric computation. To make visualizations, you now simply write a bit of HTML
    and JavaScript to fetch and display metrics. This commit will followup with some
    examples that demonstrate the technique.
    
    Also, add a 1-minute tier, and remove the week and year tiers. The highest tier
    is now the 1-day tier. We could still use the old tiers, but there's a little
    bit of overhead to invalidate every tier for every event; perhaps in the future,
    we'll want to configure tiers on a per-event basis.
Commits on Apr 15, 2012
  1. @mbostock

    Allow event stream delay to be overridden.

    mbostock authored
    By default there is a five-second delay when event streaming, to give events
    time to arrive before they are skipped by listeners. You can now change the
    stream delay as part of the /event/get request. This is useful if there is a lag
    for incoming events (say because of polling a primary data source), or if you
    want a time-shifted stream of old events (say, those from yesterday).
  2. @mbostock

    Provide default start & stop; custom limits.

    mbostock authored
    Now you can request the most recent event as a simple GET request:
    
      /1.0/event?expression=random&limit=1
    
    Or, get the value and apply a filter:
    
      /1.0/event?expression=random(random).gt(random,0)&limit=1
    
    Likewise you can get the most recent metric for a given expression:
    
      /1.0/metric?expression=sum(random)&step=1e4&limit=1
    
    This is convenient if you want to generate alerts based on recent events.
  3. @mbostock
  4. @mbostock

    Use Cube for logging server requests.

    mbostock authored
    Rather than use util.log, we now record server requests as cube_request events,
    similar to the cube_compute events added in @8177510. This records the time,
    method, path and remote IP address of each request, and allows you to query Cube
    to see usage. (For example, you can use the /event endpoint to watch Cube
    requests in realtime, or use the /metric endpoint to build a dashboard that
    monitors Cube.) I elected not to record every message sent to the WebSocket
    endpoints, as this would duplicate every event PUT to /event.
  5. @mbostock

    Enforce limit on the number of values to get.

    mbostock authored
    Previously, you could crash the server quite easily by requesting all events via
    a GET /event request, or requesting millions of metrics by GET /metric. Now the
    evaluator has a hard limit of 10,000 results; if you request more than this
    amount, only the most recent values will be returned.
  6. @mbostock

    Meta events to record metric computation!

    mbostock authored
    Cube now automatically populates cube_compute events whenever unary metrics are
    computed. You can use these events to see how many requests Cube is receiving,
    and how quickly Cube is able to compute metrics. This replaces the previously-
    added /info endpoint with much more detailed information.
  7. @mbostock

    Allow HTTP GET for events.

    mbostock authored
    You can now issue a simple HTTP GET to retrieve events from Cube synchronously,
    rather than fetching events asynchronously via WebSockets. The parameters are
    identical to the WebSockets API. So,
    
        {
          "expression": "random(random)",
          "start": "2012-01-09T01:23:00Z",
          "stop": "2012-01-10T04:56:00Z"
        }
    
    Is equivalent to:
    
       http://localhost:1081/1.0/event
         ?expression=random(random)
         &start=2012-01-09T01:23:00Z
         &stop=2012-01-10T04:56:00Z
    
    The results are returned as a JSON array in chronological order. If an error
    occurs, Cube now responds with a single JSON object containing the error
    message. I've also fixed the event and metric expression grammars so that they
    validate event types (which are more restrictive than properties).
    
    Fixes #24. See also @6796e23.
  8. @mbostock

    Remove dead code.

    mbostock authored
  9. @mbostock

    Minor tweak.

    mbostock authored
Something went wrong with that request. Please try again.