simple_metrics 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +53 -16
 - data/Rakefile +0 -17
 - data/bin/populate +13 -26
 - data/bin/simple_metrics_client +64 -0
 - data/bin/simple_metrics_server +3 -4
 - data/lib/simple_metrics.rb +76 -17
 - data/lib/simple_metrics/bucket.rb +106 -43
 - data/lib/simple_metrics/client.rb +83 -0
 - data/lib/simple_metrics/data_point.rb +137 -45
 - data/lib/simple_metrics/functions.rb +5 -5
 - data/lib/simple_metrics/graph.rb +32 -69
 - data/lib/simple_metrics/mongo.rb +48 -0
 - data/lib/simple_metrics/server.rb +66 -0
 - data/lib/simple_metrics/version.rb +1 -1
 - data/simple_metrics.gemspec +0 -6
 - data/spec/bucket_spec.rb +152 -17
 - data/spec/data_point_spec.rb +64 -14
 - data/spec/graph_spec.rb +19 -30
 - data/spec/spec_helper.rb +3 -3
 - metadata +24 -139
 - data/.travis.yml +0 -3
 - data/bin/simple_metrics_web +0 -11
 - data/config.ru +0 -6
 - data/default_config.yml +0 -34
 - data/lib/simple_metrics/app.rb +0 -52
 - data/lib/simple_metrics/configuration.rb +0 -97
 - data/lib/simple_metrics/data_point/base.rb +0 -59
 - data/lib/simple_metrics/data_point/counter.rb +0 -20
 - data/lib/simple_metrics/data_point/event.rb +0 -16
 - data/lib/simple_metrics/data_point/gauge.rb +0 -19
 - data/lib/simple_metrics/data_point/timing.rb +0 -15
 - data/lib/simple_metrics/data_point_repository.rb +0 -114
 - data/lib/simple_metrics/importer.rb +0 -64
 - data/lib/simple_metrics/metric.rb +0 -29
 - data/lib/simple_metrics/metric_repository.rb +0 -54
 - data/lib/simple_metrics/public/css/bootstrap-responsive.min.css +0 -12
 - data/lib/simple_metrics/public/css/bootstrap.min.css +0 -689
 - data/lib/simple_metrics/public/css/graph.css +0 -45
 - data/lib/simple_metrics/public/css/rickshaw.min.css +0 -1
 - data/lib/simple_metrics/public/img/glyphicons-halflings-white.png +0 -0
 - data/lib/simple_metrics/public/img/glyphicons-halflings.png +0 -0
 - data/lib/simple_metrics/public/js/app.js +0 -20
 - data/lib/simple_metrics/public/js/collections/graph.js +0 -16
 - data/lib/simple_metrics/public/js/collections/metric.js +0 -9
 - data/lib/simple_metrics/public/js/helpers.js +0 -23
 - data/lib/simple_metrics/public/js/lib/backbone-0.9.2.min.js +0 -38
 - data/lib/simple_metrics/public/js/lib/bootstrap.min.js +0 -6
 - data/lib/simple_metrics/public/js/lib/d3.v2.min.js +0 -4
 - data/lib/simple_metrics/public/js/lib/handlebars-1.0.0.beta.6.js +0 -1550
 - data/lib/simple_metrics/public/js/lib/jquery-1.7.1.min.js +0 -4
 - data/lib/simple_metrics/public/js/lib/moment.min.js +0 -6
 - data/lib/simple_metrics/public/js/lib/rickshaw.min.js +0 -1
 - data/lib/simple_metrics/public/js/lib/underscore-1.3.1.min.js +0 -31
 - data/lib/simple_metrics/public/js/models/graph.js +0 -6
 - data/lib/simple_metrics/public/js/models/metric.js +0 -7
 - data/lib/simple_metrics/public/js/router.js +0 -42
 - data/lib/simple_metrics/public/js/views/app.js +0 -18
 - data/lib/simple_metrics/public/js/views/dashboard.js +0 -10
 - data/lib/simple_metrics/public/js/views/graph.js +0 -101
 - data/lib/simple_metrics/public/js/views/metric.js +0 -82
 - data/lib/simple_metrics/public/js/views/metrics.js +0 -10
 - data/lib/simple_metrics/repository.rb +0 -34
 - data/lib/simple_metrics/udp_server.rb +0 -81
 - data/lib/simple_metrics/views/graph.erb +0 -93
 - data/lib/simple_metrics/views/index.erb +0 -0
 - data/lib/simple_metrics/views/layout.erb +0 -138
 - data/lib/simple_metrics/views/show.erb +0 -31
 - data/spec/data_point_repository_spec.rb +0 -77
 - data/spec/importer_spec.rb +0 -126
 - data/spec/metric_repository_spec.rb +0 -53
 
| 
         @@ -1,93 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            <h3><%= graph_title params[:time] %></h3><br>
         
     | 
| 
       2 
     | 
    
         
            -
            <div class="graph" id="graph-<%= params[:time] %>"/>
         
     | 
| 
       3 
     | 
    
         
            -
            <div class="y-axis" id="y-axis-<%= params[:time] %>"/>
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            <script>
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              var data = <%= JSON.generate(@series) %>;
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              var pastel = [
         
     | 
| 
       10 
     | 
    
         
            -
                '#239928',
         
     | 
| 
       11 
     | 
    
         
            -
                '#6CCC70',
         
     | 
| 
       12 
     | 
    
         
            -
                '#DEFFA1',
         
     | 
| 
       13 
     | 
    
         
            -
                '#DEFFA1',
         
     | 
| 
       14 
     | 
    
         
            -
                '#DEFFA1',
         
     | 
| 
       15 
     | 
    
         
            -
                '#362F2B',
         
     | 
| 
       16 
     | 
    
         
            -
                '#BFD657',
         
     | 
| 
       17 
     | 
    
         
            -
                '#FF6131',
         
     | 
| 
       18 
     | 
    
         
            -
                '#FFFF9D',
         
     | 
| 
       19 
     | 
    
         
            -
                '#BEEB9F',
         
     | 
| 
       20 
     | 
    
         
            -
                '#79BD8F',
         
     | 
| 
       21 
     | 
    
         
            -
                '#00A388'
         
     | 
| 
       22 
     | 
    
         
            -
              ].reverse();
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              var customPalette = new Rickshaw.Color.Palette( { scheme: pastel } );
         
     | 
| 
       25 
     | 
    
         
            -
              var spectrum14Palette = new Rickshaw.Color.Palette( { scheme: "spectrum14" } );
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              function addColorToSeries(data, palette) {
         
     | 
| 
       28 
     | 
    
         
            -
                var result = [];
         
     | 
| 
       29 
     | 
    
         
            -
                $.each(data, function(k, v){
         
     | 
| 
       30 
     | 
    
         
            -
                  v.color = palette.color();
         
     | 
| 
       31 
     | 
    
         
            -
                  result.push(v);
         
     | 
| 
       32 
     | 
    
         
            -
                });
         
     | 
| 
       33 
     | 
    
         
            -
                return result;
         
     | 
| 
       34 
     | 
    
         
            -
              };
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              graph = new Rickshaw.Graph( {
         
     | 
| 
       37 
     | 
    
         
            -
                element: document.getElementById("graph-<%= params[:time] %>"),
         
     | 
| 
       38 
     | 
    
         
            -
                // width: 320,
         
     | 
| 
       39 
     | 
    
         
            -
                // height: 200,
         
     | 
| 
       40 
     | 
    
         
            -
                renderer: 'line',
         
     | 
| 
       41 
     | 
    
         
            -
                series: addColorToSeries(data, spectrum14Palette)
         
     | 
| 
       42 
     | 
    
         
            -
              } );
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
              function timeUnit(time) {
         
     | 
| 
       45 
     | 
    
         
            -
                var timeFixture = new Rickshaw.Fixtures.Time();
         
     | 
| 
       46 
     | 
    
         
            -
                var minuteCustom = {
         
     | 
| 
       47 
     | 
    
         
            -
                  name: 'minute',
         
     | 
| 
       48 
     | 
    
         
            -
                  seconds: 60,
         
     | 
| 
       49 
     | 
    
         
            -
                  formatter: function(d) { return d.getUTCHours()+':'+d.getUTCMinutes()+'h'}
         
     | 
| 
       50 
     | 
    
         
            -
                };
         
     | 
| 
       51 
     | 
    
         
            -
                var hourCustom = {
         
     | 
| 
       52 
     | 
    
         
            -
                  name: 'hour',
         
     | 
| 
       53 
     | 
    
         
            -
                  seconds: 60*15,
         
     | 
| 
       54 
     | 
    
         
            -
                  formatter: function(d) { return d.getUTCHours()+':'+d.getUTCMinutes()+'h'}
         
     | 
| 
       55 
     | 
    
         
            -
                };
         
     | 
| 
       56 
     | 
    
         
            -
                var dayCustom = {
         
     | 
| 
       57 
     | 
    
         
            -
                  name: 'day',
         
     | 
| 
       58 
     | 
    
         
            -
                  seconds: 60*60*2,
         
     | 
| 
       59 
     | 
    
         
            -
                  formatter: function(d) { return d.getUTCHours()+'h'}
         
     | 
| 
       60 
     | 
    
         
            -
                };
         
     | 
| 
       61 
     | 
    
         
            -
                var weekCustom = {
         
     | 
| 
       62 
     | 
    
         
            -
                  name: 'week',
         
     | 
| 
       63 
     | 
    
         
            -
                  seconds: 60*60*2*7*2,
         
     | 
| 
       64 
     | 
    
         
            -
                  formatter: function(d) { return d.getUTCDate()+'. '+d.getUTCMonth()+'.'}
         
     | 
| 
       65 
     | 
    
         
            -
                  };
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                switch(time){
         
     | 
| 
       68 
     | 
    
         
            -
                  case 'minute': return minuteCustom; break;
         
     | 
| 
       69 
     | 
    
         
            -
                  case 'hour': return hourCustom; break;
         
     | 
| 
       70 
     | 
    
         
            -
                  case 'day': return dayCustom; break;
         
     | 
| 
       71 
     | 
    
         
            -
                  case 'week': return weekCustom; break;
         
     | 
| 
       72 
     | 
    
         
            -
                };
         
     | 
| 
       73 
     | 
    
         
            -
              };
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
              var x_axis = new Rickshaw.Graph.Axis.Time( { 
         
     | 
| 
       76 
     | 
    
         
            -
                graph: graph,
         
     | 
| 
       77 
     | 
    
         
            -
                timeUnit: timeUnit("<%= params[:time] %>")
         
     | 
| 
       78 
     | 
    
         
            -
              } );
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
              var y_axis = new Rickshaw.Graph.Axis.Y( {
         
     | 
| 
       81 
     | 
    
         
            -
                graph: graph,
         
     | 
| 
       82 
     | 
    
         
            -
                orientation: 'left',
         
     | 
| 
       83 
     | 
    
         
            -
                tickFormat: Rickshaw.Fixtures.Number.formatKMBT,
         
     | 
| 
       84 
     | 
    
         
            -
                element: document.getElementById('y-axis-<%= params[:time] %>'),
         
     | 
| 
       85 
     | 
    
         
            -
              } );
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
              graph.render();
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
              var hoverDetail = new Rickshaw.Graph.HoverDetail( {
         
     | 
| 
       90 
     | 
    
         
            -
                graph: graph
         
     | 
| 
       91 
     | 
    
         
            -
              } );
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
            </script>
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -1,138 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            <html lang="en">
         
     | 
| 
       2 
     | 
    
         
            -
            <head>
         
     | 
| 
       3 
     | 
    
         
            -
              <meta charset="utf-8">
         
     | 
| 
       4 
     | 
    
         
            -
              <title>SimpleMetrics</title>
         
     | 
| 
       5 
     | 
    
         
            -
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
         
     | 
| 
       6 
     | 
    
         
            -
              <meta name="description" content="">
         
     | 
| 
       7 
     | 
    
         
            -
              <meta name="author" content="">
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              <link rel='stylesheet' href='/css/bootstrap.min.css' type='text/css' media="screen, projection">
         
     | 
| 
       10 
     | 
    
         
            -
              <link rel='stylesheet' href='/css/bootstrap-responsive.min.css' type='text/css' media="screen, projection">
         
     | 
| 
       11 
     | 
    
         
            -
              <link rel='stylesheet' href='/css/rickshaw.min.css' type='text/css' media="screen, projection">
         
     | 
| 
       12 
     | 
    
         
            -
              <link rel='stylesheet' href='/css/graph.css' type='text/css' media="screen, projection">
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
         
     | 
| 
       15 
     | 
    
         
            -
              <!--[if lt IE 9]>
         
     | 
| 
       16 
     | 
    
         
            -
                <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
         
     | 
| 
       17 
     | 
    
         
            -
              <![endif]-->
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
              <style type="text/css">
         
     | 
| 
       20 
     | 
    
         
            -
                 body {
         
     | 
| 
       21 
     | 
    
         
            -
                    padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
         
     | 
| 
       22 
     | 
    
         
            -
                  }
         
     | 
| 
       23 
     | 
    
         
            -
              </style>
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              <script id="graph" type="text/x-handlebars.template">
         
     | 
| 
       26 
     | 
    
         
            -
                <h3>{{time}}</h3></br>
         
     | 
| 
       27 
     | 
    
         
            -
                <div class="graph"/>
         
     | 
| 
       28 
     | 
    
         
            -
                <div class="y-axis"/>
         
     | 
| 
       29 
     | 
    
         
            -
              </script>
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
              <script id="metric-list" type="text/x-handlebars-template">
         
     | 
| 
       32 
     | 
    
         
            -
                <ul class="breadcrumb">
         
     | 
| 
       33 
     | 
    
         
            -
                  <li>
         
     | 
| 
       34 
     | 
    
         
            -
                    <a href="#metrics">Metrics</a> <span class="divider">/</span>
         
     | 
| 
       35 
     | 
    
         
            -
                  </li>
         
     | 
| 
       36 
     | 
    
         
            -
                  <li class="active">{{name}}</li>
         
     | 
| 
       37 
     | 
    
         
            -
                </ul>
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                <table class="table table-striped" style="font-size: 13px">
         
     | 
| 
       40 
     | 
    
         
            -
                  <thead>
         
     | 
| 
       41 
     | 
    
         
            -
                    <tr>
         
     | 
| 
       42 
     | 
    
         
            -
                      <th>Name</th>
         
     | 
| 
       43 
     | 
    
         
            -
                      <th>Total</th>
         
     | 
| 
       44 
     | 
    
         
            -
                      <th>Last Modified</th>
         
     | 
| 
       45 
     | 
    
         
            -
                      <th>Created At</th>
         
     | 
| 
       46 
     | 
    
         
            -
                    </tr>
         
     | 
| 
       47 
     | 
    
         
            -
                  </thead>
         
     | 
| 
       48 
     | 
    
         
            -
                  <tbody>
         
     | 
| 
       49 
     | 
    
         
            -
                    {{#each metrics}}
         
     | 
| 
       50 
     | 
    
         
            -
                      <tr>
         
     | 
| 
       51 
     | 
    
         
            -
                        <td><a href="#metrics/{{name}}">{{name}}</a></td>
         
     | 
| 
       52 
     | 
    
         
            -
                        <td>{{total}}</td>
         
     | 
| 
       53 
     | 
    
         
            -
                        <td>{{dateFormat updated_at}}</td>
         
     | 
| 
       54 
     | 
    
         
            -
                        <td>{{dateFormat created_at}}</td>
         
     | 
| 
       55 
     | 
    
         
            -
                      </tr>
         
     | 
| 
       56 
     | 
    
         
            -
                    {{/each}}
         
     | 
| 
       57 
     | 
    
         
            -
                  </tbody>
         
     | 
| 
       58 
     | 
    
         
            -
                </table>
         
     | 
| 
       59 
     | 
    
         
            -
              </script>
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
              <script id="metric-details" type="text/x-handlebars-template">
         
     | 
| 
       62 
     | 
    
         
            -
                {{#with metric}}
         
     | 
| 
       63 
     | 
    
         
            -
                  <ul class="breadcrumb">
         
     | 
| 
       64 
     | 
    
         
            -
                    <li>
         
     | 
| 
       65 
     | 
    
         
            -
                      <a href="#metrics">Metrics</a> <span class="divider">/</span>
         
     | 
| 
       66 
     | 
    
         
            -
                    </li>
         
     | 
| 
       67 
     | 
    
         
            -
                    <li class="active">{{name}}</li>
         
     | 
| 
       68 
     | 
    
         
            -
                  </ul>
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                  <div class="row-fluid">
         
     | 
| 
       71 
     | 
    
         
            -
                    <div class="span12">
         
     | 
| 
       72 
     | 
    
         
            -
                      <div style="margin-bottom:2em" class="row-fluid">
         
     | 
| 
       73 
     | 
    
         
            -
                        <div id="graph-container-minute" class="span6"></div>
         
     | 
| 
       74 
     | 
    
         
            -
                        <div id="graph-container-hour" class="span6"></div>
         
     | 
| 
       75 
     | 
    
         
            -
                      </div>
         
     | 
| 
       76 
     | 
    
         
            -
                      <div class="row-fluid">
         
     | 
| 
       77 
     | 
    
         
            -
                        <div id="graph-container-day" class="span6"></div>
         
     | 
| 
       78 
     | 
    
         
            -
                        <div id="graph-container-week" class="span6"></div>
         
     | 
| 
       79 
     | 
    
         
            -
                      </div>
         
     | 
| 
       80 
     | 
    
         
            -
                    </div>
         
     | 
| 
       81 
     | 
    
         
            -
                  </div>
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                {{/with}}
         
     | 
| 
       84 
     | 
    
         
            -
              </script>
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
            </head>
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
            <body>
         
     | 
| 
       89 
     | 
    
         
            -
              <div class="navbar navbar-fixed-top">
         
     | 
| 
       90 
     | 
    
         
            -
               <div class="navbar-inner">
         
     | 
| 
       91 
     | 
    
         
            -
                 <div class="container">
         
     | 
| 
       92 
     | 
    
         
            -
                   <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
         
     | 
| 
       93 
     | 
    
         
            -
                     <span class="icon-bar"></span>
         
     | 
| 
       94 
     | 
    
         
            -
                     <span class="icon-bar"></span>
         
     | 
| 
       95 
     | 
    
         
            -
                     <span class="icon-bar"></span>
         
     | 
| 
       96 
     | 
    
         
            -
                   </a>
         
     | 
| 
       97 
     | 
    
         
            -
                   <a class="brand" href="/">SimpleMetrics</a>
         
     | 
| 
       98 
     | 
    
         
            -
                   <div class="nav-collapse">
         
     | 
| 
       99 
     | 
    
         
            -
                     <ul class="nav">
         
     | 
| 
       100 
     | 
    
         
            -
                       <li class="active"><a href="/">Metrics</a></li>
         
     | 
| 
       101 
     | 
    
         
            -
                       <li><a href="/dashboard">Dashboards</a></li>
         
     | 
| 
       102 
     | 
    
         
            -
                       <li><a href="/about">About</a></li>
         
     | 
| 
       103 
     | 
    
         
            -
                     </ul>
         
     | 
| 
       104 
     | 
    
         
            -
                   </div><!--/.nav-collapse -->
         
     | 
| 
       105 
     | 
    
         
            -
                 </div>
         
     | 
| 
       106 
     | 
    
         
            -
               </div>
         
     | 
| 
       107 
     | 
    
         
            -
             </div>
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
              <div class="container">
         
     | 
| 
       110 
     | 
    
         
            -
                <div id="main"></div>
         
     | 
| 
       111 
     | 
    
         
            -
              </div> <!-- /container -->
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
              <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
         
     | 
| 
       114 
     | 
    
         
            -
              <script src="js/lib/bootstrap.min.js" type="text/javascript"></script>
         
     | 
| 
       115 
     | 
    
         
            -
              <script src="js/lib/underscore-1.3.1.min.js" type="text/javascript"></script>
         
     | 
| 
       116 
     | 
    
         
            -
              <script src="js/lib/backbone-0.9.2.min.js" type="text/javascript"></script>
         
     | 
| 
       117 
     | 
    
         
            -
              <script src="js/lib/handlebars-1.0.0.beta.6.js" type="text/javascript"></script>
         
     | 
| 
       118 
     | 
    
         
            -
              <script src="js/lib/d3.v2.min.js" type="text/javascript"></script>
         
     | 
| 
       119 
     | 
    
         
            -
              <script src="js/lib/rickshaw.min.js" type="text/javascript"></script>
         
     | 
| 
       120 
     | 
    
         
            -
              <script src="js/lib/moment.min.js" type="text/javascript"></script>
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
              <script src="js/app.js" type="text/javascript"></script>
         
     | 
| 
       123 
     | 
    
         
            -
              <script src="js/router.js" type="text/javascript"></script>
         
     | 
| 
       124 
     | 
    
         
            -
              <script src="js/helpers.js" type="text/javascript"></script>
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
              <script src="js/models/metric.js" type="text/javascript"></script>
         
     | 
| 
       127 
     | 
    
         
            -
              <script src="js/models/graph.js" type="text/javascript"></script>
         
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
              <script src="js/collections/metric.js" type="text/javascript"></script>
         
     | 
| 
       130 
     | 
    
         
            -
              <script src="js/collections/graph.js" type="text/javascript"></script>
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
              <script src="js/views/app.js" type="text/javascript"></script>
         
     | 
| 
       133 
     | 
    
         
            -
              <script src="js/views/metric.js" type="text/javascript"></script>
         
     | 
| 
       134 
     | 
    
         
            -
              <script src="js/views/metrics.js" type="text/javascript"></script>
         
     | 
| 
       135 
     | 
    
         
            -
              <script src="js/views/graph.js" type="text/javascript"></script>
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
            </body>
         
     | 
| 
       138 
     | 
    
         
            -
            </html>
         
     | 
| 
         @@ -1,31 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
            <ul class="breadcrumb">
         
     | 
| 
       3 
     | 
    
         
            -
              <li>
         
     | 
| 
       4 
     | 
    
         
            -
                <a href="/">Available Metrics</a> <span class="divider">/</span>
         
     | 
| 
       5 
     | 
    
         
            -
              </li>
         
     | 
| 
       6 
     | 
    
         
            -
              <li class="active"><%= params[:target].join(', ') %></li>
         
     | 
| 
       7 
     | 
    
         
            -
            </ul>
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            <div class="row-fluid">
         
     | 
| 
       10 
     | 
    
         
            -
              <div class="span12">
         
     | 
| 
       11 
     | 
    
         
            -
                <div style="margin-bottom:2em" class="row-fluid">
         
     | 
| 
       12 
     | 
    
         
            -
                  <div id="graph-container-minute" class="span6"></div>
         
     | 
| 
       13 
     | 
    
         
            -
                  <div id="graph-container-hour" class="span6"></div>
         
     | 
| 
       14 
     | 
    
         
            -
                </div>
         
     | 
| 
       15 
     | 
    
         
            -
                <div class="row-fluid">
         
     | 
| 
       16 
     | 
    
         
            -
                  <div id="graph-container-day" class="span6"></div>
         
     | 
| 
       17 
     | 
    
         
            -
                  <div id="graph-container-week" class="span6"></div>
         
     | 
| 
       18 
     | 
    
         
            -
                </div>
         
     | 
| 
       19 
     | 
    
         
            -
              </div>
         
     | 
| 
       20 
     | 
    
         
            -
            </div>
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            <script>
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              $(function() {
         
     | 
| 
       25 
     | 
    
         
            -
                $("#graph-container-minute").load("/graph?target[]=<%= params[:target].first %>&time=minute");
         
     | 
| 
       26 
     | 
    
         
            -
                $("#graph-container-hour").load("/graph?target[]=<%= params[:target].first %>&time=hour");
         
     | 
| 
       27 
     | 
    
         
            -
                $("#graph-container-day").load("/graph?target[]=<%= params[:target].first %>&time=day");
         
     | 
| 
       28 
     | 
    
         
            -
                $("#graph-container-week").load("/graph?target[]=<%= params[:target].first %>&time=week");
         
     | 
| 
       29 
     | 
    
         
            -
              });
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
            </script>
         
     | 
| 
         @@ -1,77 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
            require "spec_helper"
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            module SimpleMetrics
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              describe DataPointRepository do
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                before do
         
     | 
| 
       9 
     | 
    
         
            -
                  DataPointRepository.truncate_collections
         
     | 
| 
       10 
     | 
    
         
            -
                  DataPointRepository.ensure_collections_exist
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                let(:ts) do
         
     | 
| 
       14 
     | 
    
         
            -
                  Time.now.utc.to_i
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                let(:repository) do
         
     | 
| 
       18 
     | 
    
         
            -
                  DataPointRepository.for_retention('stats_per_10s')
         
     | 
| 
       19 
     | 
    
         
            -
                end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                describe "#save" do
         
     | 
| 
       22 
     | 
    
         
            -
                  it "saves data point correctly" do
         
     | 
| 
       23 
     | 
    
         
            -
                    dp = DataPoint::Counter.new(:name => "key", :ts => ts)
         
     | 
| 
       24 
     | 
    
         
            -
                    repository.save(dp)
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                    results = repository.find_all_at_ts(ts)
         
     | 
| 
       27 
     | 
    
         
            -
                    results.should have(1).data_point
         
     | 
| 
       28 
     | 
    
         
            -
                  end
         
     | 
| 
       29 
     | 
    
         
            -
                end    
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                describe "#find_all_at_ts" do
         
     | 
| 
       32 
     | 
    
         
            -
                  it "returns all data points at given time stamp" do
         
     | 
| 
       33 
     | 
    
         
            -
                    dp1 = DataPoint::Counter.new(:name => "key1", :ts => ts)
         
     | 
| 
       34 
     | 
    
         
            -
                    dp2 = DataPoint::Counter.new(:name => "key1", :ts => ts + 10)
         
     | 
| 
       35 
     | 
    
         
            -
                    repository.save(dp1)
         
     | 
| 
       36 
     | 
    
         
            -
                    repository.save(dp2)
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                    results = repository.find_all_at_ts(ts)
         
     | 
| 
       39 
     | 
    
         
            -
                    results.should have(1).data_point
         
     | 
| 
       40 
     | 
    
         
            -
                    results.first.name.should == "key1"
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
                end    
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                describe "#find_all_in_ts_range_by_name" do
         
     | 
| 
       45 
     | 
    
         
            -
                  it "returns all data points in given time stamp range by name" do
         
     | 
| 
       46 
     | 
    
         
            -
                    dp1 = DataPoint::Counter.new(:name => "key1", :ts => ts)
         
     | 
| 
       47 
     | 
    
         
            -
                    dp2 = DataPoint::Counter.new(:name => "key2", :ts => ts + 10)
         
     | 
| 
       48 
     | 
    
         
            -
                    dp3 = DataPoint::Counter.new(:name => "key3", :ts => ts + 20)
         
     | 
| 
       49 
     | 
    
         
            -
                    repository.save(dp1)
         
     | 
| 
       50 
     | 
    
         
            -
                    repository.save(dp2)
         
     | 
| 
       51 
     | 
    
         
            -
                    repository.save(dp3)
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                    results = repository.find_all_in_ts_range_by_name(ts, ts+10, "key1")
         
     | 
| 
       54 
     | 
    
         
            -
                    results.should have(1).data_point
         
     | 
| 
       55 
     | 
    
         
            -
                    results.first.name.should == "key1"
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
                end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                describe "#find_all_in_ts_range_by_wildcard" do
         
     | 
| 
       60 
     | 
    
         
            -
                  it "returns all data points in given time stamp range by wildcard" do
         
     | 
| 
       61 
     | 
    
         
            -
                    dp1 = DataPoint::Counter.new(:name => "test.key1", :ts => ts)
         
     | 
| 
       62 
     | 
    
         
            -
                    dp2 = DataPoint::Counter.new(:name => "test.key2", :ts => ts + 10)
         
     | 
| 
       63 
     | 
    
         
            -
                    dp3 = DataPoint::Counter.new(:name => "test.key3", :ts => ts + 20)
         
     | 
| 
       64 
     | 
    
         
            -
                    repository.save(dp1)
         
     | 
| 
       65 
     | 
    
         
            -
                    repository.save(dp2)
         
     | 
| 
       66 
     | 
    
         
            -
                    repository.save(dp3)
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                    results = repository.find_all_in_ts_range_by_wildcard(ts, ts+10, "test.*")
         
     | 
| 
       69 
     | 
    
         
            -
                    results.should have(2).data_point2
         
     | 
| 
       70 
     | 
    
         
            -
                    results.first.name.should == "test.key1"
         
     | 
| 
       71 
     | 
    
         
            -
                    results.last.name.should == "test.key2"
         
     | 
| 
       72 
     | 
    
         
            -
                  end
         
     | 
| 
       73 
     | 
    
         
            -
                end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
              end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
            end
         
     | 
    
        data/spec/importer_spec.rb
    DELETED
    
    | 
         @@ -1,126 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
            require "spec_helper"
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            module SimpleMetrics
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              describe Importer do
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                let(:bucket) do
         
     | 
| 
       9 
     | 
    
         
            -
                  Bucket.first
         
     | 
| 
       10 
     | 
    
         
            -
                end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                let(:ts) do
         
     | 
| 
       13 
     | 
    
         
            -
                  Time.now.utc.to_i
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                describe "#aggregate_coarse_buckets" do
         
     | 
| 
       17 
     | 
    
         
            -
                  before do
         
     | 
| 
       18 
     | 
    
         
            -
                    DataPointRepository.truncate_collections
         
     | 
| 
       19 
     | 
    
         
            -
                    DataPointRepository.ensure_collections_exist
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  it "aggregates all counter data points" do
         
     | 
| 
       23 
     | 
    
         
            -
                    stats1a  =  DataPoint::Counter.new(:name => "key1", :value => 5)
         
     | 
| 
       24 
     | 
    
         
            -
                    stats1b  =  DataPoint::Counter.new(:name => "key1", :value => 7)
         
     | 
| 
       25 
     | 
    
         
            -
                    stats2   =  DataPoint::Counter.new(:name => "key2", :value => 3)
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                    bucket2 = Bucket[1]
         
     | 
| 
       28 
     | 
    
         
            -
                    ts_at_insert = bucket2.previous_ts_bucket(ts)
         
     | 
| 
       29 
     | 
    
         
            -
                    bucket.save(stats1a, ts_at_insert)
         
     | 
| 
       30 
     | 
    
         
            -
                    Importer.aggregate_coarse_buckets(stats1a)
         
     | 
| 
       31 
     | 
    
         
            -
                    bucket.save(stats1b, ts_at_insert)
         
     | 
| 
       32 
     | 
    
         
            -
                    Importer.aggregate_coarse_buckets(stats1b)
         
     | 
| 
       33 
     | 
    
         
            -
                    bucket.save(stats2, ts_at_insert)
         
     | 
| 
       34 
     | 
    
         
            -
                    Importer.aggregate_coarse_buckets(stats2)
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                    results = bucket2.find_all_at_ts(ts_at_insert)
         
     | 
| 
       37 
     | 
    
         
            -
                    results.should have(2).items
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    key1_result = results.find {|stat| stat.name == "key1"}
         
     | 
| 
       40 
     | 
    
         
            -
                    key1_result.value.should == 12
         
     | 
| 
       41 
     | 
    
         
            -
                    key1_result.should be_counter
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                    key2_result = results.find {|stat| stat.name == "key2"}
         
     | 
| 
       44 
     | 
    
         
            -
                    key2_result.value.should == 3
         
     | 
| 
       45 
     | 
    
         
            -
                    key2_result.should be_counter
         
     | 
| 
       46 
     | 
    
         
            -
                  end
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                  it "aggregates all gauge data points" do
         
     | 
| 
       49 
     | 
    
         
            -
                    stats1a  =  DataPoint::Gauge.new(:name => "key1", :value => 5)
         
     | 
| 
       50 
     | 
    
         
            -
                    stats1b  =  DataPoint::Gauge.new(:name => "key1", :value => 7)
         
     | 
| 
       51 
     | 
    
         
            -
                    stats2   =  DataPoint::Gauge.new(:name => "key2", :value => 3)
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                    bucket2 = Bucket[1]
         
     | 
| 
       54 
     | 
    
         
            -
                    ts_at_insert = bucket2.previous_ts_bucket(ts)
         
     | 
| 
       55 
     | 
    
         
            -
                    bucket.save(stats1a, ts_at_insert)
         
     | 
| 
       56 
     | 
    
         
            -
                    Importer.aggregate_coarse_buckets(stats1a)
         
     | 
| 
       57 
     | 
    
         
            -
                    bucket.save(stats1b, ts_at_insert)
         
     | 
| 
       58 
     | 
    
         
            -
                    Importer.aggregate_coarse_buckets(stats1b)
         
     | 
| 
       59 
     | 
    
         
            -
                    bucket.save(stats2, ts_at_insert)
         
     | 
| 
       60 
     | 
    
         
            -
                    Importer.aggregate_coarse_buckets(stats2)
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                    results = bucket2.find_all_at_ts(ts_at_insert)
         
     | 
| 
       63 
     | 
    
         
            -
                    results.should have(2).items
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                    key1_result = results.find {|stat| stat.name == "key1"}
         
     | 
| 
       66 
     | 
    
         
            -
                    key1_result.value.should == 6
         
     | 
| 
       67 
     | 
    
         
            -
                    key1_result.should be_gauge
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                    key2_result = results.find {|stat| stat.name == "key2"}
         
     | 
| 
       70 
     | 
    
         
            -
                    key2_result.value.should == 3
         
     | 
| 
       71 
     | 
    
         
            -
                    key2_result.should be_gauge
         
     | 
| 
       72 
     | 
    
         
            -
                  end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                end # describe "#aggregate_all"
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                describe "#flush_data_points" do
         
     | 
| 
       77 
     | 
    
         
            -
                  before do
         
     | 
| 
       78 
     | 
    
         
            -
                    DataPointRepository.truncate_collections
         
     | 
| 
       79 
     | 
    
         
            -
                    DataPointRepository.ensure_collections_exist
         
     | 
| 
       80 
     | 
    
         
            -
                    MetricRepository.truncate_collections
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                    stats1 = DataPoint::Counter.new(:name => "key1", :value => 5)
         
     | 
| 
       83 
     | 
    
         
            -
                    stats2 = DataPoint::Counter.new(:name => "key1", :value => 7)
         
     | 
| 
       84 
     | 
    
         
            -
                    stats3 = DataPoint::Counter.new(:name => "key2", :value => 3)
         
     | 
| 
       85 
     | 
    
         
            -
                    @stats = [stats1, stats2, stats3]
         
     | 
| 
       86 
     | 
    
         
            -
                  end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                  it "saves all stats in finest/first bucket" do
         
     | 
| 
       89 
     | 
    
         
            -
                    Importer.flush_data_points(@stats)
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                    results = bucket.find_all_at_ts(ts)
         
     | 
| 
       92 
     | 
    
         
            -
                    results.should have(2).items
         
     | 
| 
       93 
     | 
    
         
            -
                  end
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                  it "saves all stats and aggregate if duplicates found" do
         
     | 
| 
       96 
     | 
    
         
            -
                    Importer.flush_data_points(@stats)
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                    results = bucket.find_all_at_ts(ts)
         
     | 
| 
       99 
     | 
    
         
            -
                    results.should have(2).items
         
     | 
| 
       100 
     | 
    
         
            -
                    results.first.name.should == "key1"
         
     | 
| 
       101 
     | 
    
         
            -
                    results.last.name.should == "key2"
         
     | 
| 
       102 
     | 
    
         
            -
                    results.first.value == 12
         
     | 
| 
       103 
     | 
    
         
            -
                    results.last.value == 3
         
     | 
| 
       104 
     | 
    
         
            -
                  end
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                  it "raises error if name matches but type does not" do
         
     | 
| 
       107 
     | 
    
         
            -
                    stats4 = DataPoint::Gauge.new(:name => "key1", :value => 3)
         
     | 
| 
       108 
     | 
    
         
            -
                    input = @stats + [stats4]
         
     | 
| 
       109 
     | 
    
         
            -
                    expect { Importer.flush_data_points(input) }.to raise_error(SimpleMetrics::DataPoint::NonMatchingTypesError)
         
     | 
| 
       110 
     | 
    
         
            -
                  end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                  it "increments metrics counter" do
         
     | 
| 
       113 
     | 
    
         
            -
                    Importer.flush_data_points(@stats)
         
     | 
| 
       114 
     | 
    
         
            -
                    key1 = MetricRepository.find_one_by_name("key1")
         
     | 
| 
       115 
     | 
    
         
            -
                    key1.name.should == "key1"
         
     | 
| 
       116 
     | 
    
         
            -
                    key1.total.should == 2
         
     | 
| 
       117 
     | 
    
         
            -
                    key2 = MetricRepository.find_one_by_name("key2")
         
     | 
| 
       118 
     | 
    
         
            -
                    key2.name.should == "key2"
         
     | 
| 
       119 
     | 
    
         
            -
                    key2.total.should == 1
         
     | 
| 
       120 
     | 
    
         
            -
                  end
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                end # describe "#flush_data_points"
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
              end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
            end
         
     |