Graphite 0.9.10

Milestone information

Michael Leinartas
Release registered:
Yes. Drivers can target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
1 Daniel Lawrence, 8 Michael Leinartas, 3 Nicholas Leskiw, 2 chrismd
No blueprints are targeted to this milestone.
1 Won't Fix, 64 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon graphite-web-0.9.10.tar.gz (md5) Graphite webapp 479,736
last downloaded 2 days ago
download icon carbon-0.9.10.tar.gz (md5) Carbon backend 635,019
last downloaded 2 days ago
download icon whisper-0.9.10.tar.gz (md5) Whisper database library 434,752
last downloaded 2 days ago
download icon (md5) Graphite dependency verification script 18,196
last downloaded 2 days ago
Total downloads: 1,567,703

Release notes 

Graphite 0.9.10 has been released and is now available. The packages for Whisper, Carbon, and Graphite-web are available via several sources:
* Pypi (and by extension, pip)
* Github
* Launchpad

This release contains a fabulous amount of incremental improvement over 0.9.9. Some highlights include:
* Fixes to several annoying Composer and Dashboard UI bugs
* Import of Saved Graphs into Dashboards
* Fixes to cache-full behavior for carbon-cache and carbon senders (relay and aggregator)
* Many new useful render functions and graph options
* Improvements to the rendering engine and fixes to many rendering bugs
* Support for rendering graphs as annotated SVG
* Better organized and more flexible Graphite-web config layout (

Upgrading from 0.9.9 should be as simple as updating the packages. It is recommended but not necessary that be recreated based on the newly shipped as it includes many newly exposed settings and an improved organization and comments. Carbon's config files also have a few new settings as well to check out.

The Graphite project is also in the midst of some project changes. For those who have not yet noticed, the Graphite codebase has been moved to Github ( and split into individual components (Graphite-web, Carbon, Whisper, and soon Ceres). The Launchpad project remains active in supporting the project with its Answers ( and Bugs ( functionality.

Development going forward will focus on preparing what will become Graphite 0.10.0 which will include support for the Ceres database format as well as a major refactor of the Carbon daemon (nicknamed "Megacarbon"). The master branches of the project should be considered to be in an 'alpha' state for the time being and subject to backwards-incompatible changes. Fixes to the current version will be maintained in the 0.9.x project branches but no 0.9.11 version is planned for the time being.

A big thanks goes out to all those who have helped the project in contributions of time and energy in the form of code contributions, testing, discussion, and helping each other out with support questions. Additional thanks are due to Aman Gupta (tmm1) for all of his great work on the rendering engine and other fixes, Sidnei Da Silva for his work migrating the project to Github and his fixes, and everyone who's taken the time to answer questions on the Answers site and on IRC.

As always, if you need any assistance please [ ask a question] or join us on IRC in #graphite on Freenode.


View the full changelog

The following is a summary of changes since the last release:
**New features**
* Whisper
 * Allocate Whisper files in chunks by default (jordansissel)
 * Allow Whisper files to be allocated sparsely (jordansissel)
 * Add whisper-merge command to copy data from one file to another (sidnei)
 * Add whisper-dump utility (amosshapira)

* Graphite Dashboard
 * New button to retrieve Graph URL (octplane)
 * Add button to send email of rendered graph as attachment (bkjones)
 * Allow relative ‘until’ time to be set in dashboard (daniellawrence)
 * Add ability to import Graphs into dashboards from URL or Saved Graphs

* Rendering Engine:
 * New minorY option to configure minor gridlines (whd)
 * New alpha() function to set individual color alpha values (tmm1)
 * Allow areaAlpha to set alpha values for all styles of stacked graphs (tmm1)
 * New minimumAbove() function: draw only series whose min is above n (tmm1)
 * New areaBetween() function: draw the area between two graph lines (tmm1)
 * New holtWintersConfidenceArea() function: display area between Holt-Winters confidence bands (tmm1)
 * New SVG output format with embedded graph metadata (tmm1)
 * New metric whitelist/blacklist functionality using pattern files
 * New filterBelowPercentile() function: remove data below n percentile from a series (tmm1)
 * New removeAbovePercentile() and removeAboveValue() functions to remove outliers (tmm1)
 * New removeBelowPercentile() and removeBelowValue() functions to match above counterparts
 * New aliasSub() function: perform a regex search/replace on metric names (tmm1)
 * New rangeOfSeries() function: reduces multiple series into the value range of each point (saysjonathan)
 * New movingMedian() function: moving median, similar to movingAverage (recursify)
 * New multiplySeries() function: combine series by multiplying them
 * New hideYAxis option (mdeeks)
 * New percentileOfSeries() function: Combines series into the value at n percentile for each point
 * New tranformNull() function: transforms None values to specified (cbrinley)
 * New scaleToSeconds() function: scales values based on series step (redbaron)
 * New aliasByMetric() function: trims all but the last element of metric name in legend (obfuscurity)
 * New uniqueLegend option to filter duplicate metric names in legend (mdeeks)
 * New vtitleRight option to label 2nd Y-axis

* Carbon
 * Allow flock() mode to be configured for Whisper
 * Allow flushing of rrdcached before rrd data fetches (shufgy)
 * Add ability to configure carbon metric prefix (jblaine)

**Bug fixes**
* Whisper
 * Record only the last value when duplicate timestamps are sent (knyar)
 * Fix script to work with newer python-rrdtool api

* Carbon
 * Fix full drain of queue after cache-full event when flow-control is enabled in both client and carbon-cache
 * Fix unnecessary drop of a single metric point when cache is full
 * Fix instrumentation of carbon-relay (darrellb)

* Webapp
 * Fix reading of Gzip’d whisper files and remote reading of RRDs
 * Fix registration of Event model in admin site
 * Fix events() to work with timezone aware dates
 * Fix Event model to use tagging properly and fix compatibility with MySQL (hellvinz)
 * Fix compatibility of built-in json module in events and graphlot
 * Fix loading of saved graphs where a target has a ‘%’ in the name

* Rendering Engine
 * Fix removal of whitespace above stacked graphs with yMax setting (tmm1)
 * Use powers of 2 when calculating yStep and yUnitSystem=binary (tmm1)
 * Force 100% usage of vertical space when yMax=max
 * Compact memcached keys to keep size under 250 after Django processing (Kevin Clark)
 * Fix alignFromTrue functionality in summarize() (tmm1)
 * Fix cases of mismatched units in holt-winters bootstraps (lapsu,tmm1)
 * Force integer in moving average window parameter (lapsu)
 * Fix incorrect cache fetch when storage dir is symlinked (mk-fraggod)
 * Fix infinite loop in Y-axis render when series range is very-very small
 * Fix “Undo Function” button when braces expressions are present in the target
 * Fix legend column calculation (darrellb)
 * Fix broken aliasByNode() (darrellb)
 * Fix rendering failures when infinite values are present in series
 * Fix legend text overlap with dual Y-axis mode (nleskiw)
 * Fix missing hunk of graph on right side with Dual Y-axis
 * Fix cactiStyle() handling of None values
 * Fix rendering breakage during DST time switch
 * Allow multiple named stacks of metrics (aleh)
 * Fix incorrect/misaligned graphs when series with unaligned steps are mixed in a graph
 * Properly shift over series that have a later start time than the graph start

* Composer
 * Fix JS error on IE due to tailing list commas (reed-r-lance)
 * Fix usage of + instead of %20 for spaces in URL encoding in composer view
 * Fix display of a broken image rather than “No Data” when last target is removed
 * Fix the loss of multiple targets when loading a saved graph with new params (vilkaspilkas)
 * Fix unremovable duplicate metrics

* Dashboard
 * Fix automatic edit field selection on click (octplane)
 * Fix usage of browser cache-busting uniq parameter to be filtered from memcache key (sidnei)
 * Fix inability to remove Graphs with duplicate target lists

**Other improvements**
* Carbon
 * Match time units used in storage-schemas.conf with those in the webapp (ohlol)
 * Only log Carbon queue fullness once (sidnei)
 * Only log Carbon queue space free if it was once full (sidnei)
 * Log a message with the affected filename when a Whisper update fails (bmhatfield)
 * Move carbon instance logs to their own own directory to prevent clobbering
 * Prevent carbon-aggregator from clobbering aggregated values when aggregating to same-name
 * Add SSL option to amqp publisher (sidnei)
 * Remove duplicate dot metric path filtering for performance (drawks)
 * Refactor of schema validation to give more informative errors
 * Add reloading of rewrite-rules and aggregation-schemas for consistency

* Webapp
 * Refactor to allow more complete configuration in
 * Make Graphite compatible with Django 1.4
 * Add jsonp support for /browser endpoint
 * Make it harder to break metric browsing with a bad DATA_DIRS entry

* Rendering Engine:
 * Make asPercent() much more flexible and useful
 * stddev() function made more robust
 * Allow metrics to begin with a braces-wildcard
 * Prevent drawAsInfinite() lines from affecting Y axis height (bmhatfield)
 * Pass through time with secondly rather than minutely resolution to rrdfetch (tmm1)
 * Tree branches should display above all leaves (mdeeks)
 * Add alignToInterval to hitcount() function similar to summarize() (jwoschitz)
 * Fix PieGraph missing function
 * Allow timeShift() to shift forward as well as backward

* Composer
 * Don’t reorder targets when applying functions
 * Refactor of Graph Options menu

* Dashboard
 * Explicitly size img tags to keep scroll position intact during reloads
 * Default the navBar as collapsed when loading an existing dashboard view
 * Show wildcards in top nav browsing view
 * Allow dashboards to have any character in title (octplane)
 * Make “Remove All Graphs” and “Change Size” dialogs modal (dannyla)
 * Make the new “north” navbar the default

0 blueprints and 65 bugs targeted

Bug report Importance Assignee Status
522873 #522873 debian packaging 3 High   4 Won't Fix
1004195 #1004195 NameError: name 'dirname' is not defined in 0.9.10pre3 tarballs 2 Critical   10 Fix Released
913682 #913682 webapp queries carbon-cache for incorrect metric name if "base_fs_path" ( contains symlinks 3 High Michael Leinartas  10 Fix Released
936739 #936739 2nd Y axis obscures part of graph 3 High Michael Leinartas  10 Fix Released
952053 #952053 InvalidTimeInterval exception during DST switch (graphite 0.99) 3 High   10 Fix Released
963684 #963684 Graphite need to be made compatible with Django 1.4 3 High   10 Fix Released
963801 #963801 rule router default behavior is not behaving as expected 3 High   10 Fix Released
847895 #847895 Target definitions beginning with curly-braced clauses aren't expanded 4 Medium   10 Fix Released
850513 #850513 save graphs in composer, add them to dashboard 4 Medium   10 Fix Released
860833 #860833 composer allows creation of graphs with un-removable metrics 4 Medium Michael Leinartas  10 Fix Released
862598 #862598 [feature request] Would like JSONP support for xdomain api usage 4 Medium   10 Fix Released
892376 #892376 should give details on the reason for validation failure 4 Medium   10 Fix Released
905427 #905427 Graphite UI should support relative 'until' time as well as 'from' 4 Medium   10 Fix Released
907586 #907586 UnboundLocalError: local variable 'sumOfSquares' referenced before assignment 4 Medium   10 Fix Released
925635 #925635 y axis log scale can't hangle zero values 4 Medium   10 Fix Released
929936 #929936 Deprecate 'months' as a time specifier for relative dates in webapp 4 Medium chrismd  10 Fix Released
932537 #932537 Pre-loading graphs into the composer using a query string breaks if spaces are in any of the targets 4 Medium   10 Fix Released
1003073 #1003073 Admin module cannot load in 0.9.10-pre2 4 Medium   10 Fix Released
870078 #870078 graphite is missing a dependency on tagging package 5 Low   10 Fix Released
901583 #901583 Add option to label the 2nd y-axis 5 Low   10 Fix Released
903675 #903675 timeShift forward in time 5 Low   10 Fix Released
905718 #905718 "Right Y Maximum" option in the is broken in webapp js 5 Low   10 Fix Released
907803 #907803 request: multiplySeries() 5 Low   10 Fix Released
911334 #911334 Threshold function breaks graph rendering 5 Low   10 Fix Released
915042 #915042 PieGraph on 0.9.9 fails on AttributeError 'encodeHeader' of class PieGraph 5 Low   10 Fix Released
931840 #931840 Legend text overlaps while using Second Y-axis 5 Low Nicholas Leskiw  10 Fix Released
935949 #935949 Removing function with 'Undo Function' on a target with braces breaks the metric 5 Low   10 Fix Released
937184 #937184 Multiple targets lost when accessing a graph by /render/~username/graphName/?arg 5 Low Michael Leinartas  10 Fix Released
937744 #937744 new scaleToSeconds render function 5 Low Michael Leinartas  10 Fix Released
948565 #948565 Add ability to compress legend down to unique names 5 Low   10 Fix Released
949046 #949046 function cactiStyle can't handle noneType 5 Low Michael Leinartas  10 Fix Released
961374 #961374 equivalent of drawNullAsZero flag required for raw data 5 Low Michael Leinartas  10 Fix Released
977939 #977939 "from" date is not correct 5 Low   10 Fix Released
986737 #986737, checks django.VERSION major against major,minor 5 Low   10 Fix Released
992979 #992979 Documentation - tools 5 Low   10 Fix Released
993625 #993625 events do not work with mysql 5 Low Michael Leinartas  10 Fix Released
1003944 #1003944 rrd2whisper traceback - KeyError: 'rra' 5 Low   10 Fix Released
784414 #784414 Saving a MyGraph with a % in the title/vtitle does not work 1 Undecided   10 Fix Released
871995 #871995 Removing the last target from the graph data window in the composer causes a broken render. 1 Undecided   10 Fix Released
876991 #876991 bdist creates broken packages on pythons < 2.7 1 Undecided   10 Fix Released
878674 #878674 carbon-relay exception in 1 Undecided   10 Fix Released
885136 #885136 webapp wrong variable name, causes float/None error 1 Undecided Nicholas Leskiw  10 Fix Released
885495 #885495 Add ability to hide the Y axis on graphs 1 Undecided   10 Fix Released
885944 #885944 carbon/whisper performing 800mb writes 1 Undecided   10 Fix Released
888230 #888230 legend column wrapping broken 1 Undecided   10 Fix Released
888327 #888327 allow asPercent to operate on a 2-element seriesList 1 Undecided   10 Fix Released
890214 #890214 KeyError: u'sumSeriesWithWildcard' 1 Undecided   10 Fix Released
890743 #890743 Extra commas in composer_widgets.js breaks use of IE 1 Undecided   10 Fix Released
891301 #891301 500 error when graph has no data and 2 Y axes 1 Undecided   10 Fix Released
891396 #891396 carbon-relay.conf examples and documentation specify 'servers' parameter when 'destinations' is required 1 Undecided   10 Fix Released
891888 #891888 should verify twisted.__version__ is >= 8.2 1 Undecided   10 Fix Released
893159 #893159 Share Window in Dashboard does not focus URL correctly 1 Undecided   10 Fix Released
893160 #893160 Reloading the dashboard loses the context 1 Undecided   10 Fix Released
893762 #893762 Script to test aggregation rules 1 Undecided   10 Fix Released
902311 #902311 Rendering fails when infinite values are present 1 Undecided   10 Fix Released
917223 #917223 Third party pytz always chosen 1 Undecided   10 Fix Released
917418 #917418 LICENSE doesn't include Copyright owner or years 1 Undecided   10 Fix Released
917929 #917929 dashboard ui bug with alias function. 1 Undecided Daniel Lawrence  10 Fix Released
919428 #919428 license issue 1 Undecided chrismd  10 Fix Released
922728 #922728 do not work on solaris 11 1 Undecided   10 Fix Released
922731 #922731 /render always return error 500 on solaris 1 Undecided   10 Fix Released
930362 #930362 Tree branches should sort above leafs 1 Undecided   10 Fix Released
931401 #931401 Able to open multiple "Remove All Graphs" and "Change Graph Size" windows in dashboard 1 Undecided Nicholas Leskiw  10 Fix Released
988702 #988702 Summarize incorrectly scales X-axis hence invalidating other series' X-axis alignment 1 Undecided   10 Fix Released
1003072 #1003072 pip install graphite-web - installs pre-release version 1 Undecided   10 Fix Released
This milestone contains Public information
Everyone can see this information.