# Nutcracker
This library wraps Twitter's [Nutcracker](https://github.com/twitter/twemproxy) in a gem package and provides a simple ruby API to the `nutcracker` executable.
### Disclaimer
this project is still in its early stages so things could be a little bit buggy, if you find one feel free to [report](https://github.com/kontera-technologies/nutcracker/issues) it.
## Motivation
The main motivation here is to take the advantages of working with Bundler's dependencies management and to be able to embed Twitter's [Nutcracker](https://github.com/twitter/twemproxy) as a dependency to any Ruby project, this allow you to create small-configuration-only-apps tied to specific version of Nutcracker as I show in the example bellow.
## Plugins
- [nutcracker-graphite](https://github.com/kontera-technologies/nutcracker-graphite) - Send cluster stats to Graphite
- [nutcracker-web](https://github.com/kontera-technologies/nutcracker-web) - Web interface
### Installation
Add this line to your application's Gemfile:
```
gem 'nutcracker'
```
And then execute:
```
$ bundle install
```
after the gem was successfully installed, the `nutcracker` executable should be available
```
[root@somewhere ~]# nutcracker --help
This is nutcracker-0.2.3
Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, --help : this help
-V, --version : show version and exit
-t, --test-conf : test configuration for syntax errors and exit
-d, --daemonize : run as a daemon
-D, --describe-stats : print stats description and exit
-v, --verbosity=N : set logging level (default: 5, min: 0, max: 11)
-o, --output=S : set logging file (default: stderr)
-c, --conf-file=S : set configuration file (default: conf/nutcracker.yml)
-s, --stats-port=N : set stats monitoring port (default: 22222)
-a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0)
-i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
-p, --pid-file=S : set pid file (default: off)
-m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)
```
### Ruby Wrapper
a simple ruby wrapper is also included
```ruby
require 'nutcracker'
nutcracker = Nutcracker.start(config_file: 'cluster.yaml')
nutcracker.running? # => true
nutcracker.stats # => {"source"=>"local", "version"=>"0.2.4", "uptime"=>6...}
nutcracker.stop
nutcracker.running? # => false
nutcracker.start
nutcracker.join # wait for server to exit
```
you can also attach to a running instance of nutcracker
```ruby
Nutcracker.attach(config_file: 'cluster.yaml', stats_port: 22222)
```
### Building new gems
* Set the version @ `lib/nutcracker/version.rb` ( [Available Versions](https://code.google.com/p/twemproxy/downloads/list) )
* run the `rake build` command
* look for `nutcracker-X.Y.Z` gem under the pkg folder
### Warranty
This software is provided “as is” and without any express or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose.
> for more details like licensing etc, please look @ [Nutcracker](https://github.com/twitter/twemproxy)