Permalink
Browse files

Merge remote-tracking branch 'upstream/master'

  • Loading branch information...
2 parents 1be6863 + 09c0277 commit 7b0cc2d477560e1431cae6f997bd6b6b3f4635ed @captsens captsens committed Mar 21, 2013
View
@@ -53,6 +53,9 @@ Diamond
capable of collecting cpu, memory, network, I/O, load and disk metrics. Additionally, it features
an API for implementing custom collectors for gathering metrics from almost any source.
+Evenflow
+--------
+`Evenflow`_ is a simple service for submitting sFlow datagrams to Graphite. It accepts sFlow datagrams from multiple network devices and proxies the data to a Carbon listener. Currently only Generic Interface Counters are supported. All other message types are discarded.
Ganglia
-------
@@ -168,6 +171,11 @@ It is requires very little configuration and is capable of sending metric data t
backend applications, including Graphite.
+Ledbetter
+---------
+`Ledbetter`_ is a simple script for gathering Nagios problem statistics and submitting them to Graphite. It focuses on summary (overall, servicegroup and hostgroup) statistics and writes them to the nagios.problems metrics namespace within Graphite.
+
+
Logster
-------
`Logster`_ is a utility for reading log files and generating metrics in Graphite or Ganglia.
@@ -212,6 +220,11 @@ statsd
A list of forks and alternative implementations can be found at <http://joemiller.me/2011/09/21/list-of-statsd-server-implementations/>
+Structured Metrics
+------------------
+`structured_metrics`_ is a lightweight python library that uses plugins to read in
+Graphite's list of metric names and convert it into a multi-dimensional tag space of clear, sanitized targets.
+
Tasseo
------
`Tasseo`_ is a lightweight, easily configurable, real-time dashboard for Graphite metrics.
@@ -226,47 +239,50 @@ TimeseriesWidget
focuses on high interactivity and modern features (realtime zooming, datapoint inspection,
annotated events, etc). Supports Graphite, flot, rickshaw and anthracite.
-.. _Diamond: http://opensource.brightcove.com/project/Diamond/
-.. _jmxtrans: http://code.google.com/p/jmxtrans/
-.. _statsd: https://github.com/etsy/statsd
-.. _Ganglia: http://ganglia.info/
-.. _graphitius: https://github.com/erezmazor/graphitus
.. _Backbone.js: http://documentcloud.github.com/backbone/
+.. _Backstop: https://github.com/obfuscurity/backstop
+.. _Bucky: http://pypi.python.org/pypi/bucky
+.. _Charcoal: https://github.com/cebailey59/charcoal
.. _collectd: http://collectd.org/
-.. _collectd-to-graphite: https://github.com/loggly/collectd-to-graphite
.. _collectd-carbon: https://github.com/indygreg/collectd-carbon
.. _collectd-graphite: https://github.com/joemiller/collectd-graphite
+.. _collectd-to-graphite: https://github.com/loggly/collectd-to-graphite
.. _Collectl: http://collectl.sourceforge.net/
.. _D3.js: http://mbostock.github.com/d3/
-.. _Logster: https://github.com/etsy/logster
-.. _RabbitMQ: http://www.rabbitmq.com/
+.. _Descartes: https://github.com/obfuscurity/descartes
+.. _Diamond: http://opensource.brightcove.com/project/Diamond/
.. _Esper: http://esper.codehaus.org/
-.. _Rocksteady: http://code.google.com/p/rocksteady/
-.. _Bucky: http://pypi.python.org/pypi/bucky
-.. _Graphite-Tattle: https://github.com/wayfair/Graphite-Tattle
+.. _Evenflow: https://github.com/github/evenflow
+.. _Ganglia: http://ganglia.info/
.. _Gdash: https://github.com/ripienaar/gdash.git
-.. _Pencil: https://github.com/fetep/pencil
+.. _Giraffe: http://kenhub.github.com/giraffe/
+.. _Graph-Explorer: https://github.com/Dieterbe/graph-explorer
.. _Graphene: http://jondot.github.com/graphene/
-.. _Graphite-relay: https://github.com/markchadwick/graphite-relay
-.. _Graphiti: https://github.com/paperlesspost/graphiti
.. _Graphios: https://github.com/shawn-sterling/graphios
-.. _Charcoal: https://github.com/cebailey59/charcoal
-.. _Graph-Explorer: https://github.com/Dieterbe/graph-explorer
+.. _Graphite-Tattle: https://github.com/wayfair/Graphite-Tattle
+.. _Graphite-relay: https://github.com/markchadwick/graphite-relay
.. _Graphitejs: https://github.com/prestontimmons/graphitejs
-.. _Grockets: https://github.com/disqus/grockets
-.. _Host sFlow: http://host-sflow.sourceforge.net/
+.. _Graphiti: https://github.com/paperlesspost/graphiti
+.. _graphitius: https://github.com/erezmazor/graphitus
.. _Graphitoid: https://market.android.com/details?id=com.tnc.android.graphite
+.. _Graphsky: https://github.com/hyves-org/graphsky
+.. _Grockets: https://github.com/disqus/grockets
.. _HoardD: https://github.com/coredump/hoardd
+.. _Host sFlow: http://host-sflow.sourceforge.net/
.. _Hubot: https://github.com/github/hubot
.. _hubot-scripts: https://github.com/github/hubot-scripts
-.. _Tasseo: https://github.com/obfuscurity/tasseo
-.. _Shinken: http://www.shinken-monitoring.org/
-.. _Descartes: https://github.com/obfuscurity/descartes
-.. _Backstop: https://github.com/obfuscurity/backstop
+.. _jmxtrans: http://code.google.com/p/jmxtrans/
+.. _Ledbetter: https://github.com/github/ledbetter
+.. _Logster: https://github.com/etsy/logster
+.. _Pencil: https://github.com/fetep/pencil
+.. _RabbitMQ: http://www.rabbitmq.com/
+.. _Rickshaw: http://code.shutterstock.com/rickshaw/
+.. _Rocksteady: http://code.google.com/p/rocksteady/
.. _Seyren: https://github.com/scobal/seyren
-.. _write-graphite: http://collectd.org/wiki/index.php/Plugin:Write_Graphite
+.. _Shinken: http://www.shinken-monitoring.org/
+.. _statsd: https://github.com/etsy/statsd
+.. _structured_metrics: https://github.com/Dieterbe/graph-explorer/tree/master/structured_metrics
+.. _Tasseo: https://github.com/obfuscurity/tasseo
.. _Therry: https://github.com/obfuscurity/therry
.. _TimeseriesWidget: https://github.com/Dieterbe/timeserieswidget
-.. _Graphsky: https://github.com/hyves-org/graphsky
-.. _Giraffe: http://kenhub.github.com/giraffe/
-.. _Rickshaw: http://code.shutterstock.com/rickshaw/
+.. _write-graphite: http://collectd.org/wiki/index.php/Plugin:Write_Graphite
View
@@ -37,6 +37,6 @@ simplejson==2.1.6
django-tagging==0.3.1
gunicorn
pytz
-pyparsing
+pyparsing==1.5.7
http://cairographics.org/releases/py2cairo-1.8.10.tar.gz
git+git://github.com/graphite-project/whisper.git#egg=whisper
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -160,7 +160,7 @@ def expand_view(request):
results[query] = set()
for node in STORE.find(query, local=local_only):
if node.is_leaf or not leaves_only:
- results[query].add( node.metric_path )
+ results[query].add( node.path )
# Convert our results to sorted lists because sets aren't json-friendly
if group_by_expr:
@@ -28,6 +28,8 @@ def parseATTime(s, tzinfo=None):
pass #Fall back because its not a timestamp, its YYYYMMDD form
else:
return datetime.fromtimestamp(int(s),tzinfo)
+ elif ':' in s:
+ return datetime.strptime(s,'%H:%M%Y%m%d')
if '+' in s:
ref,offset = s.split('+',1)
offset = '+' + offset
@@ -2587,8 +2587,8 @@ def timeFunction(requestContext, name):
when += delta
series = TimeSeries(name,
- time.mktime(requestContext["startTime"].timetuple()),
- time.mktime(requestContext["endTime"].timetuple()),
+ int(time.mktime(requestContext["startTime"].timetuple())),
+ int(time.mktime(requestContext["endTime"].timetuple())),
step, values)
series.pathExpression = name
@@ -2619,8 +2619,8 @@ def sinFunction(requestContext, name, amplitude=1):
when += delta
return [TimeSeries(name,
- time.mktime(requestContext["startTime"].timetuple()),
- time.mktime(requestContext["endTime"].timetuple()),
+ int(time.mktime(requestContext["startTime"].timetuple())),
+ int(time.mktime(requestContext["endTime"].timetuple())),
step, values)]
def randomWalkFunction(requestContext, name):
@@ -2650,8 +2650,8 @@ def randomWalkFunction(requestContext, name):
when += delta
return [TimeSeries(name,
- time.mktime(requestContext["startTime"].timetuple()),
- time.mktime(requestContext["endTime"].timetuple()),
+ int(time.mktime(requestContext["startTime"].timetuple())),
+ int(time.mktime(requestContext["endTime"].timetuple())),
step, values)]
def events(requestContext, *tags):
@@ -95,7 +95,7 @@
dict(seconds=30, minorGridUnit=MIN, minorGridStep=10, majorGridUnit=HOUR, majorGridStep=1, labelUnit=HOUR, labelStep=1, format="%H:%M", maxInterval=2*DAY),
dict(seconds=60, minorGridUnit=MIN, minorGridStep=30, majorGridUnit=HOUR, majorGridStep=2, labelUnit=HOUR, labelStep=2, format="%H:%M", maxInterval=2*DAY),
dict(seconds=100, minorGridUnit=HOUR, minorGridStep=2, majorGridUnit=HOUR, majorGridStep=4, labelUnit=HOUR, labelStep=4, format=percent_l_supported and "%a %l%p" or "%a %I%p", maxInterval=6*DAY),
- dict(seconds=255, minorGridUnit=HOUR, minorGridStep=6, majorGridUnit=HOUR, majorGridStep=12, labelUnit=HOUR, labelStep=12, format=percent_l_supported and "%m/%d %l%p" or "%m/%d %I%p"),
+ dict(seconds=255, minorGridUnit=HOUR, minorGridStep=6, majorGridUnit=HOUR, majorGridStep=12, labelUnit=HOUR, labelStep=12, format=percent_l_supported and "%m/%d %l%p" or "%m/%d %I%p", maxInterval=10*DAY),
dict(seconds=600, minorGridUnit=HOUR, minorGridStep=6, majorGridUnit=DAY, majorGridStep=1, labelUnit=DAY, labelStep=1, format="%m/%d", maxInterval=14*DAY),
dict(seconds=600, minorGridUnit=HOUR, minorGridStep=12, majorGridUnit=DAY, majorGridStep=1, labelUnit=DAY, labelStep=1, format="%m/%d", maxInterval=365*DAY),
dict(seconds=2000, minorGridUnit=DAY, minorGridStep=1, majorGridUnit=DAY, majorGridStep=2, labelUnit=DAY, labelStep=2, format="%m/%d", maxInterval=365*DAY),
@@ -767,31 +767,33 @@ def drawLines(self, width=None, dash=None, linecap='butt', linejoin='miter'):
'bevel' : cairo.LINE_JOIN_BEVEL,
}[linejoin])
+ # check whether there is an stacked metric
+ singleStacked = False
+ for series in self.data:
+ if 'stacked' in series.options:
+ singleStacked = True
+ if singleStacked:
+ self.data = sort_stacked(self.data)
+
# stack the values
if self.areaMode == 'stacked' and not self.secondYAxis: #TODO Allow stacked area mode with secondYAxis
total = []
for series in self.data:
+ if 'drawAsInfinite' in series.options:
+ continue
+
+ series.options['stacked'] = True
for i in range(len(series)):
if len(total) <= i: total.append(0)
if series[i] is not None:
original = series[i]
series[i] += total[i]
total[i] += original
-
- # check whether there is an stacked metric
- singleStacked = False
- for series in self.data:
- if 'stacked' in series.options:
- singleStacked = True
- if singleStacked:
- self.data = sort_stacked(self.data)
-
- # apply stacked setting on series based on areaMode
- if self.areaMode == 'first':
+ elif self.areaMode == 'first':
self.data[0].options['stacked'] = True
- elif self.areaMode != 'none':
- for series in self.data:
+ elif self.areaMode == 'all':
+ if 'drawAsInfinite' not in series.options:
series.options['stacked'] = True
# apply alpha channel and create separate stroke series
@@ -927,7 +929,10 @@ def drawLines(self, width=None, dash=None, linecap='butt', linejoin='miter'):
consecutiveNones = 0
if 'stacked' in series.options:
- self.fillAreaAndClip(x-series.xStep, y, startX)
+ if self.lineMode == 'staircase':
+ self.fillAreaAndClip(x, y, startX)
+ else:
+ self.fillAreaAndClip(x-series.xStep, y, startX)
else:
self.ctx.stroke()
@@ -20,7 +20,7 @@
</head>
-<frameset rows="80,*" frameborder="1" border="1">
+<frameset rows="60,*" frameborder="1" border="1">
<frame src="/browser/header/" name="Header" id='header' scrolling="no" noresize="true" />
{% if target %}
<frame src="/composer/?showTarget={{target}}&{{queryString}}" name="content" id="composerFrame"/>
@@ -16,41 +16,66 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Graphite Browser Header</title>
<style>
- img {
- border: 0;
+ body {
+ background-color: #000;
+ background: url('/content/img/carbon-fiber.png');
+ background: url('/content/img/carbon-fiber.png'), -webkit-linear-gradient(top, #000 55%, #333);
+ background: url('/content/img/carbon-fiber.png'), -moz-linear-gradient(top, #000, #000);
+ background: url('/content/img/carbon-fiber.png'), -ms-linear-gradient(top, #000 55%, #333);
+ background: url('/content/img/carbon-fiber.png'), -o-linear-gradient(top, #000 55%, #333);
+ background: url('/content/img/carbon-fiber.png'), linear-gradient(top, #000 55%, #333);
}
- #nav {
- position: absolute;
- margin: 10px 10px 0 0;
- top: 0;
- right: 0;
+ div.header {
+ margin-top: 13px;
}
- #nav ul {
- text-align: right;
+ .header span.title {
+ font-family: "HelveticaNeue-UltraLight", "Helvetica Neue", "Helvetica";
+ font-size: 1.6em;
+ font-weight: 100;
+ margin-left: 50px;
+ color: #fff;
+ }
+ .header div.nav {
+ float: right;
+ }
+ .header .nav * {
+ font: 12px Helvetica, Arial, Tahoma, sans-serif;
+ color: rgb(173, 173, 173);
+ }
+ .header .nav ul {
+ margin-top: 10px;
list-style: none;
- font: 12px Arial, Tahoma, Helvetica, sans-serif;
+ }
+ .header .nav ul li {
+ float: left;
+ margin-right: 15px;
+ }
+ .header .nav ul li a {
+ text-decoration: none;
+ }
+ .header .nav ul li a:hover {
+ color: #fff;
}
</style>
</head>
<body>
- <!-- Left side -->
- <div id="logo">
- <img src="/content/img/graphite_short.png" alt="Graphite" align="top" />
- </div>
-
- <!-- Right side -->
- <div id="nav">
- <ul>
- {% if user.is_authenticated %}
- <li>Logged in as <b>{{ user.username }}</b>, <a href="/account/logout/" target="_top">logout</a> (<a href="/account/edit/" target="_top">edit profile</a>)</li>
- {% else %}
- <li><a href="{{login_url}}" target="_top">Login</a></li>
- {% endif %}
- {% if documentation_url %}
- <li><a href="{{documentation_url}}" target="_newWindow">Documentation</a></li>
- {% endif %}
- <li>User Interface: <a href="/dashboard/" target="_top">Dashboard</a> | <a href="/graphlot/" target="_top">flot (experimental)</a> | <a href="/events/" target="_top">events (experimental)</a></li>
- </ul>
+ <div class="header">
+ <span class="title">Graphite</span>
+ <div class="nav">
+ <ul>
+ {% if user.is_authenticated %}
+ <li>Logged in as <b>{{ user.username }}</b>, <a href="/account/logout/" target="_top">logout</a> (<a href="/account/edit/" target="_top">edit profile</a>)</li>
+ {% else %}
+ <li><a href="{{login_url}}" target="_top">Login</a></li>
+ {% endif %}
+ {% if documentation_url %}
+ <li><a href="{{documentation_url}}" target="_newWindow">Documentation</a></li>
+ {% endif %}
+ <li><a href="/dashboard/" target="_top">Dashboard</a></li>
+ <li><a href="/graphlot/" target="_top">flot</a></li>
+ <li><a href="/events/" target="_top">events</a></li>
+ </ul>
+ </div>
</div>
</body>
</html>

0 comments on commit 7b0cc2d

Please sign in to comment.