Created
June 13, 2012 14:17
-
-
Save leucos/2924341 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # FNordmetric helper | |
| # | |
| # Define :fnord_redis_url trait in class where helper is used | |
| # e.g. : trait :fnord_redis_url => "redis://redis.example.com:6332" | |
| # | |
| require 'fnordmetric' | |
| module Ramaze | |
| module Helper | |
| module FnordmetricHelper | |
| @@fnord = nil | |
| def _connect | |
| begin | |
| url = ancestral_trait[:fnord_redis_url] | |
| rescue | |
| url = "redis://localhost:6379" | |
| ensure | |
| @@fnord = FnordMetric::API.new(:redis_url => url) | |
| Ramaze::Log.info("Connected to FnordMetric") | |
| end | |
| end | |
| def event(evt, *args) | |
| evt = { :_type => evt.to_s, :_session => session.sid } | |
| args.each do |a| | |
| evt.merge!(a) | |
| end | |
| _connect unless @@fnord | |
| Ramaze::Log.debug("Logging FM event %s" % evt.inspect) | |
| @@fnord.event(evt) | |
| end | |
| def set_name(name) | |
| event(:_set_name, :name => name) | |
| end | |
| def set_picture(url) | |
| url = url.to_s if url.class.to_s == 'URI::HTTP' | |
| event(:_set_picture, :url => url) | |
| end | |
| end | |
| end | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Controller < Ramaze::Controller | |
| layout :default | |
| helper :xhtml, :flash, :user, :fnordmetric | |
| engine :etanni | |
| trait :fnord_redis_url => "redis://redis.example.com:6379" | |
| # This overrides Ramaze's default 404 handler | |
| def self.action_missing(path) | |
| return if path == '/error_404' | |
| try_resolve('/error_404') | |
| end | |
| def error_404 | |
| flash[:error] = "Sorry, this page doesn't exist" | |
| event(:status_404) | |
| render_file("#{Ramaze.options.views[0]}/error_404.xhtml") | |
| end | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env ruby | |
| # Usage : ruby bin/metrics.rb run | |
| require 'fnordmetric' | |
| FnordMetric.namespace :myapp do | |
| # Logins | |
| # numeric (delta) gauge, 1-day tick | |
| gauge :logins_per_day, :tick => 1.day.to_i, :title => "Daily logins" | |
| gauge :logins_per_hour, :tick => 1.hour.to_i, :title => "Hourly logins" | |
| event(:login) do | |
| incr :logins_per_day | |
| incr :logins_per_hour | |
| end | |
| # Logins failed | |
| # numeric (delta) gauge, 1-day tick | |
| gauge :logins_failed_per_day, :tick => 1.day.to_i, :title => "Daily failed logins" | |
| gauge :logins_failed_per_hour, :tick => 1.hour.to_i, :title => "Hourly failed logins" | |
| event(:login_failed) do | |
| incr :logins_failed_per_day | |
| incr :logins_failed_per_hour | |
| end | |
| # Logouts | |
| # numeric (delta) gauge, 1-day tick | |
| gauge :logouts_per_day, :tick => 1.day.to_i, :title => "Daily logouts" | |
| gauge :logouts_per_hour, :tick => 1.hour.to_i, :title => "Hourly logouts" | |
| event(:logout) do | |
| incr :logouts_per_day | |
| incr :logouts_per_hour | |
| end | |
| # 404 sent | |
| # numeric (delta) gauge, 1-day/hour tick | |
| gauge :status_404_per_day, :tick => 1.day.to_i, :title => "Daily 404s" | |
| gauge :status_404_per_hour, :tick => 1.hour.to_i, :title => "Hourly 404s" | |
| event(:status_404) do | |
| incr :status_404_per_day | |
| incr :status_404_per_hour | |
| end | |
| # All events | |
| # numeric (progressive) gauge, 1-day tick | |
| gauge :events_total, :tick => 1.day.to_i, :progressive => true, :title => "Daily Events (total)" | |
| # on _every_ event | |
| event :"*" do | |
| incr :events_total | |
| end | |
| # Unique pageviews | |
| # numeric (delta) gauge, increments uniquely by session_key | |
| gauge :pageviews_daily_unique, :tick => 1.day.to_i, :unique => true, :title => "Unique Visits (Daily)" | |
| # three-dimensional (delta) gauge (time->key->value) | |
| gauge :pageviews_per_url_daily, :tick => 1.day.to_i, :title => "Daily Pageviews per URL", :three_dimensional => true | |
| event :_pageview do | |
| # increment the daily_uniques gauge by 1 if session_key hasn't been seen | |
| # in this tick yet | |
| incr :pageviews_daily_unique | |
| # increment the pageviews_per_url_daily gauge by 1 where key = 'page2' | |
| incr_field :pageviews_per_url_daily, data[:url] | |
| end | |
| # | |
| # WIDGETS | |
| # | |
| widget 'Overview', { | |
| :title => "Events per day", | |
| :type => :timeline, | |
| :plot_style => :areaspline, | |
| :gauges => :events_total, | |
| :include_current => true, | |
| :autoupdate => 10 | |
| } | |
| widget 'Overview', { | |
| :title => "Visits per day", | |
| :type => :timeline, | |
| :plot_style => :areaspline, | |
| :gauges => :pageviews_daily_unique, | |
| :include_current => true, | |
| :autoupdate => 10 | |
| } | |
| widget 'Users', { | |
| :title => "Connection activity per day", | |
| :type => :timeline, | |
| :plot_style => :areaspline, | |
| :gauges => [ :logins_per_day, :logins_failed_per_day, :logouts_per_day ], | |
| :include_current => true, | |
| :autoupdate => 2 | |
| } | |
| widget 'Users', { | |
| :title => "Connection activity per hour", | |
| :type => :timeline, | |
| :plot_style => :areaspline, | |
| :gauges => [ :logins_per_hour, :logins_failed_per_hour, :logouts_per_hour ], | |
| :include_current => true, | |
| :autoupdate => 2 | |
| } | |
| widget 'Pages', { | |
| :title => "Top Pages", | |
| :type => :toplist, | |
| :autoupdate => 20, | |
| :gauges => [ :pageviews_per_url_daily ] | |
| } | |
| widget 'Pages', { | |
| :title => "404 per hour", | |
| :type => :timeline, | |
| :plot_style => :areaspline, | |
| :autoupdate => 20, | |
| :include_current => true, | |
| :gauges => :status_404_per_hour | |
| } | |
| widget 'Pages', { | |
| :title => "404 per day", | |
| :type => :timeline, | |
| :plot_style => :areaspline, | |
| :autoupdate => 20, | |
| :include_current => true, | |
| :gauges => :status_404_per_day | |
| } | |
| end | |
| FnordMetric.standalone |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Users < Controller | |
| helper :form_helper, :user, :gravatar, :fnordmetric | |
| def index | |
| redirect r(:login) | |
| end | |
| def create | |
| @title = 'Inscription' | |
| @subtitle = 'S\'inscrire' | |
| end | |
| def login | |
| Ramaze::Log.debug("In User#login") | |
| @title = "Connexion" | |
| redirect_referer if logged_in? | |
| return unless request.post? | |
| user_login(request.subset(:email, :password)) | |
| if logged_in? | |
| set_name(user.email) | |
| set_picture(gravatar(user.email)) | |
| event(:login) | |
| else | |
| # Login failed | |
| Ramaze::Log.debug("OMG login failed") | |
| event(:login_failed) | |
| redirect r(:login) | |
| end | |
| redirect Profiles.r(:index) | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment