You have an installation of Graphite, a desire to learn more Ruby, and some festive spirit – what emerges?
An xmas tree drawn using proper metrics via the Ruby graphite gem, of course!
The magic happens with the Graphite::Logger class, because we can log metrics at specific points in time:
logger.log(when,{"Branches1" => 3})
I calculated the points to plot on paper, and found decent Graphite rendering settings by experimentation:
The code is on Github here: https://github.com/matthewskelton/GraphiteGreetings – fork away!
| require 'Graphite' | |
| require 'Logger' | |
| # Change these as needed for your environment | |
| server = "my.graphite.server.url" | |
| log = Logger.new(STDOUT) | |
| prefix = "Test.Me.XmasTree." | |
| # Create the logger to send stats to Graphite with specific timings | |
| logger = Graphite::Logger.new(server,log) | |
| # Define the offsets | |
| # | |
| # Use Now as a starting point, | |
| # or set a specific time e.g. Time.utc(2012,12,22,19,10,30) | |
| # We need a 20-minute window to plot | |
| t = Time.now | |
| t0 = Time.at(t.to_i - (20 * 60)) # 20 mins ago | |
| t1 = Time.at(t0.to_i + (60 * 1)) # Left base of tree | |
| t2 = Time.at(t0.to_i + (60 * 3)) # Lower tinsel2 | |
| # etc. | |
| # Inject the stats - the order is determined by the default Graphite colours | |
| logger.log(t21,{prefix + "Tinsel1" => 3}) | |
| logger.log(t18,{prefix + "Tinsel1" => 6}) | |
| # etc. |
I’d love to hear or see any suggestions for improvements to the script. Candles? Snowflakes? Reindeer?! Also, as my Ruby-fu is limited, if there are better ways of interacting with Graphite, I’d love the hear about them (I tried and failed to get activesupport to work on my machine, for example).

