README.md in influxer-1.2.0 vs README.md in influxer-1.2.1
- old
+ new
@@ -1,50 +1,109 @@
-[](https://rubygems.org/gems/influxer) [](https://travis-ci.org/palkan/influxer) [](https://dependencyci.com/github/palkan/influxer)
-## Influxer
+
-**NOTE**: Version 0.3.x supports InfluxDB >= 0.9.0. For InfluxDB 0.8.x use [version 0.2.5](https://github.com/palkan/influxer/tree/0.2.5).
+# Influxer
-**NOTE**: Influxer is Rails 4+ compatible! (Rails 3.2 support is still included but no longer required to pass all the tests).
-
Influxer provides an ActiveRecord-style way to work with [InfluxDB](https://influxdb.com/) with many useful features, such as:
-- Familar query language (use `select`, `where`, `not`, `group` etc).
-- Support for Regex conditions: `where(page_id: /^home\/.*/) #=> select * ... where page_id=~/^home\/.*/`.
-- Special query methods for InfluxDB:
- - `time` - group by time (e.g. `Metrics.time(:hour) => # select * ... group by time(1h)`);
- - `past` - get only points for last hour/minute/whatever (e.g. `Metrics.past(:day) => # select * ... where time > now() - 1d`);
- - `since` - get only points since date (e.g. `Metrics.since(Time.utc(2014,12,31)) => # select * ... where time > 1419984000s`);
- - `merge` - merge series.
-- Scopes support
- ```ruby
+
+## Installation
+
+Adding to a gem:
+
+```ruby
+# my-cool-gem.gemspec
+Gem::Specification.new do |spec|
+ # ...
+ spec.add_dependency "influxer", ">= 1.2.0"
+ # ...
+end
+```
+
+Or adding to your project:
+
+```ruby
+# Gemfile
+gem "influxer", "~> 1.2"
+```
+
+## Usage
+
+### Metrics classes
+
+To query InfluxDB or write to it, you should define a metrics class first. Each metrics class represents a measurement/series (or multiple related measurements):
+
+```ruby
+class VisitsMetrics < Influxer::Metrics
+ # Define tags...
+ tags :account_id, :page_id
+ # ...and attributes
+ attributes :user_id, :browser
+end
+```
+
+### Querying
+
+Now you can use your metrics classes in a similar way to Active Record models to build queries. For example:
+
+```ruby
+VisitsMetrics.select(:account_id, :user_id).where(page_id: /^home\/.*/)
+```
+
+Influxer provides special query methods for dealing with time series:
+
+- Group by time: `Metrics.time(:hour) => # select * ... group by time(1h)`.
+- Select only points for the last hour/minute/whatever: `Metrics.past(:day) => # select * ... where time > now() - 1d`.
+- Select only points since the specified time: `Metrics.since(Time.utc(2014,12,31)) => # select * ... where time > 1419984000s`.
+- and more.
+
+See [our Wiki](https://github.com/palkan/influxer/wiki/Query-methods) for more.
+
+### Scopes support
+
+You can define scopes to re-use query conditions:
+
+```ruby
class Metrics < Influxer::Metrics
- default_scope -> { time(:hour).limit(1000) }
tags :account_id
attributes :value
+
+ default_scope -> { time(:hour).limit(1000) }
+
scope :unlimited, -> { limit(nil) }
scope :by_account, ->(id) { where(account_id: id) if id.present? }
end
Metrics.by_account(1)
- # => select * from "metrics" group by time(1h) where account_id=1 limit 1000
+# => select * from "metrics" group by time(1h) where account_id=1 limit 1000
Metrics.unlimited.by_account(1).time(:week)
- # => select * from "metrics" group by time(1w) where account_id=1
+# => select * from "metrics" group by time(1w) where account_id=1
+```
- ```
-- Integrate with your model:
- ```ruby
+### Active Record integration
+
+You can association metrics with Active Record models:
+
+```ruby
class UserVisits < Influxer::Metrics
end
class User < ActiveRecord::Base
has_metrics :visits
end
user = User.find(1)
user.visits.write(page_id: "home")
- #=> < creates point {user_id: 1, page_id: 'home'} in 'user_visits' series >
+#=> < creates point {user_id: 1, page_id: 'home'} in 'user_visits' series >
user.visits.where(page_id: "home")
- #=> select * from user_visits where page_id='home'
- ```
+#=> select * from user_visits where page_id='home'
+```
-Find more on [Wiki](https://github.com/palkan/influxer/wiki).
+Find more on [Wiki](https://github.com/palkan/influxer/wiki/ActiveRecord-integration).
+
+## Contributing
+
+Bug reports and pull requests are welcome on GitHub at [https://github.com/palkan/influxer](https://github.com/palkan/influxer).
+
+## License
+
+The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).