Ori.livneh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/192252

Change subject: Add liuggio/statsd-php-client
......................................................................

Add liuggio/statsd-php-client

Task: T90409
Change-Id: Icbf571bff615463348ea164820599abfa7c95cce
---
M composer.json
M composer.lock
M composer/ClassLoader.php
M composer/autoload_classmap.php
M composer/autoload_namespaces.php
M composer/installed.json
A liuggio/statsd-php-client/.gitignore
A liuggio/statsd-php-client/.travis.yml
A liuggio/statsd-php-client/LICENSE
A liuggio/statsd-php-client/Readme.md
A liuggio/statsd-php-client/composer.json
A liuggio/statsd-php-client/phpunit.xml.dist
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php
A 
liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php
A 
liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php
A 
liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php
A 
liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php
A 
liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php
A 
liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php
A liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php
A liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php
A 
liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php
A 
liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php
A liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php
A liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php
A liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php
A liuggio/statsd-php-client/tests/bootstrap.php
32 files changed, 2,040 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vendor 
refs/changes/52/192252/1

diff --git a/composer.json b/composer.json
index c4bdd20..25681eb 100644
--- a/composer.json
+++ b/composer.json
@@ -6,6 +6,7 @@
        "require": {
                "cssjanus/cssjanus": "1.1.1",
                "leafo/lessphp": "0.5.0",
+               "liuggio/statsd-php-client": "1.0.12",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "monolog/monolog": "1.12.0",
diff --git a/composer.lock b/composer.lock
index b79bf57..c5c21b8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at 
http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file";,
         "This file is @generated automatically"
     ],
-    "hash": "6188811094b69e07d37639aa9419dcf1",
+    "hash": "f7287ec03fc40a50a316539fdbe02111",
     "packages": [
         {
             "name": "cssjanus/cssjanus",
@@ -81,6 +81,55 @@
             "description": "lessphp is a compiler for LESS written in PHP.",
             "homepage": "http://leafo.net/lessphp/";,
             "time": "2014-11-24 18:39:20"
+        },
+        {
+            "name": "liuggio/statsd-php-client",
+            "version": "v1.0.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/liuggio/statsd-php-client.git";,
+                "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": 
"https://api.github.com/repos/liuggio/statsd-php-client/zipball/a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7";,
+                "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2"
+            },
+            "require-dev": {
+                "monolog/monolog": ">=1.2.0"
+            },
+            "suggest": {
+                "monolog/monolog": "Monolog, in order to do generate statistic 
from log >=1.2.0)"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Liuggio": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/";,
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Giulio De Donato",
+                    "email": "[email protected]"
+                }
+            ],
+            "description": "Statsd (Object Oriented) client library for PHP",
+            "homepage": "https://github.com/liuggio/statsd-php-client/";,
+            "keywords": [
+                "etsy",
+                "monitoring",
+                "php",
+                "statsd"
+            ],
+            "time": "2014-09-17 21:37:49"
         },
         {
             "name": "monolog/monolog",
@@ -419,7 +468,6 @@
     "minimum-stability": "stable",
     "stability-flags": [],
     "prefer-stable": true,
-    "prefer-lowest": false,
     "platform": {
         "php": ">=5.3.3"
     },
diff --git a/composer/ClassLoader.php b/composer/ClassLoader.php
index 5e1469e..70d78bc 100644
--- a/composer/ClassLoader.php
+++ b/composer/ClassLoader.php
@@ -54,8 +54,6 @@
     private $useIncludePath = false;
     private $classMap = array();
 
-    private $classMapAuthoritative = false;
-
     public function getPrefixes()
     {
         if (!empty($this->prefixesPsr0)) {
@@ -251,27 +249,6 @@
     }
 
     /**
-     * Turns off searching the prefix and fallback directories for classes
-     * that have not been registered with the class map.
-     *
-     * @param bool $classMapAuthoritative
-     */
-    public function setClassMapAuthoritative($classMapAuthoritative)
-    {
-        $this->classMapAuthoritative = $classMapAuthoritative;
-    }
-
-    /**
-     * Should class lookup fail if not found in the current class map?
-     *
-     * @return bool
-     */
-    public function isClassMapAuthoritative()
-    {
-        return $this->classMapAuthoritative;
-    }
-
-    /**
      * Registers this instance as an autoloader.
      *
      * @param bool $prepend Whether to prepend the autoloader or not
@@ -321,9 +298,6 @@
         // class map lookup
         if (isset($this->classMap[$class])) {
             return $this->classMap[$class];
-        }
-        if ($this->classMapAuthoritative) {
-            return false;
         }
 
         $file = $this->findFileWithExtension($class, '.php');
diff --git a/composer/autoload_classmap.php b/composer/autoload_classmap.php
index 2d7fd26..b4ee8bf 100644
--- a/composer/autoload_classmap.php
+++ b/composer/autoload_classmap.php
@@ -195,6 +195,19 @@
     'Elastica\\Util' => $vendorDir . '/ruflin/elastica/lib/Elastica/Util.php',
     'LCRun3' => $vendorDir . '/zordius/lightncandy/src/lightncandy.php',
     'LightnCandy' => $vendorDir . '/zordius/lightncandy/src/lightncandy.php',
+    'Liuggio\\StatsdClient\\Entity\\StatsdData' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php',
+    'Liuggio\\StatsdClient\\Entity\\StatsdDataInterface' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php',
+    'Liuggio\\StatsdClient\\Exception\\InvalidArgumentException' => $vendorDir 
. 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php',
+    'Liuggio\\StatsdClient\\Factory\\StatsdDataFactory' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php',
+    'Liuggio\\StatsdClient\\Factory\\StatsdDataFactoryInterface' => $vendorDir 
. 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php',
+    'Liuggio\\StatsdClient\\Monolog\\Formatter\\StatsDFormatter' => $vendorDir 
. 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php',
+    'Liuggio\\StatsdClient\\Monolog\\Handler\\StatsDHandler' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php',
+    'Liuggio\\StatsdClient\\Sender\\EchoSender' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php',
+    'Liuggio\\StatsdClient\\Sender\\SenderInterface' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php',
+    'Liuggio\\StatsdClient\\Sender\\SocketSender' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php',
+    'Liuggio\\StatsdClient\\Sender\\SysLogSender' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php',
+    'Liuggio\\StatsdClient\\StatsdClient' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php',
+    'Liuggio\\StatsdClient\\StatsdClientInterface' => $vendorDir . 
'/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php',
     'Monolog\\ErrorHandler' => $vendorDir . 
'/monolog/monolog/src/Monolog/ErrorHandler.php',
     'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . 
'/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php',
     'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . 
'/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php',
diff --git a/composer/autoload_namespaces.php b/composer/autoload_namespaces.php
index 02adf07..fd316bf 100644
--- a/composer/autoload_namespaces.php
+++ b/composer/autoload_namespaces.php
@@ -7,6 +7,7 @@
 
 return array(
     'Psr\\Log\\' => array($vendorDir . '/psr/log'),
+    'Liuggio' => array($vendorDir . '/liuggio/statsd-php-client/src'),
     'Elastica\\Test' => array($vendorDir . '/ruflin/elastica/test/lib'),
     'Elastica' => array($vendorDir . '/ruflin/elastica/lib'),
     '' => array($vendorDir . '/cssjanus/cssjanus/src'),
diff --git a/composer/installed.json b/composer/installed.json
index b3ac2a7..bd6f763 100644
--- a/composer/installed.json
+++ b/composer/installed.json
@@ -423,5 +423,56 @@
             "MIT"
         ],
         "description": "Composer plugin to merge multiple composer.json files"
+    },
+    {
+        "name": "liuggio/statsd-php-client",
+        "version": "v1.0.12",
+        "version_normalized": "1.0.12.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/liuggio/statsd-php-client.git";,
+            "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7"
+        },
+        "dist": {
+            "type": "zip",
+            "url": 
"https://api.github.com/repos/liuggio/statsd-php-client/zipball/a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7";,
+            "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.2"
+        },
+        "require-dev": {
+            "monolog/monolog": ">=1.2.0"
+        },
+        "suggest": {
+            "monolog/monolog": "Monolog, in order to do generate statistic 
from log >=1.2.0)"
+        },
+        "time": "2014-09-17 21:37:49",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Liuggio": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/";,
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Giulio De Donato",
+                "email": "[email protected]"
+            }
+        ],
+        "description": "Statsd (Object Oriented) client library for PHP",
+        "homepage": "https://github.com/liuggio/statsd-php-client/";,
+        "keywords": [
+            "etsy",
+            "monitoring",
+            "php",
+            "statsd"
+        ]
     }
 ]
diff --git a/liuggio/statsd-php-client/.gitignore 
b/liuggio/statsd-php-client/.gitignore
new file mode 100644
index 0000000..9e35c65
--- /dev/null
+++ b/liuggio/statsd-php-client/.gitignore
@@ -0,0 +1,3 @@
+.idea
+vendor
+*.orig
diff --git a/liuggio/statsd-php-client/.travis.yml 
b/liuggio/statsd-php-client/.travis.yml
new file mode 100644
index 0000000..37f8ab1
--- /dev/null
+++ b/liuggio/statsd-php-client/.travis.yml
@@ -0,0 +1,18 @@
+language: php
+
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+before_script:
+  - wget -nc http://getcomposer.org/composer.phar
+  - php composer.phar install --dev
+
+script: phpunit
+
+notifications:
+  email:
+    - [email protected]
diff --git a/liuggio/statsd-php-client/LICENSE 
b/liuggio/statsd-php-client/LICENSE
new file mode 100644
index 0000000..3af4747
--- /dev/null
+++ b/liuggio/statsd-php-client/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) Giulio De Donato
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/liuggio/statsd-php-client/Readme.md 
b/liuggio/statsd-php-client/Readme.md
new file mode 100644
index 0000000..81083e0
--- /dev/null
+++ b/liuggio/statsd-php-client/Readme.md
@@ -0,0 +1,149 @@
+## statsd-php-client
+
+Be careful, see the [Upgrading section](Readme.md#upgrade) for <= v1.0.4, 
there's a BC.
+
+[![Build 
Status](https://secure.travis-ci.org/liuggio/statsd-php-client.png)](http://travis-ci.org/liuggio/statsd-php-client)
 [![Latest Stable 
Version](https://poser.pugx.org/liuggio/statsd-php-client/v/stable.png)](https://packagist.org/packages/liuggio/statsd-php-client)
 [![Total 
Downloads](https://poser.pugx.org/liuggio/statsd-php-client/downloads.png)](https://packagist.org/packages/liuggio/statsd-php-client)
+
+`statsd-php-client` is an Open Source, and **Object Oriented** Client for 
**etsy/statsd** written in php
+
+- `StatsdDataFactory` creates the 
`Liuggio\StatsdClient\Entity\StatsdDataInterface` Objects
+
+- `Sender` just sends data over the network (there are many sender)
+
+- `StatsdClient` sends the created objects via the `Sender` to the server
+
+## Why use this library instead the 
[statsd/php-example](https://github.com/etsy/statsd/blob/master/examples/php-example.php)?
+
+- You are wise.
+
+- You could also use monolog to redirect data to statsd
+
+- This library is tested.
+
+- This library optimizes the messages to send, compressing multiple messages 
in individual UDP packets.
+
+- This library pays attention to the maximum length of the UDP.
+
+- This library is made by Objects not array, but it also accepts array.
+
+- You do want to debug the packets, and using `SysLogSender` the packets will 
be logged in your `syslog` log (on debian-like distro: `tail -f 
/var/log/syslog`)
+
+
+## Example
+
+1. create the Sender
+
+2. create the Client
+
+3. create the Factory
+
+4. the Factory will help you to create data
+
+5. the Client will send the data
+
+### Standard Usage
+
+```php
+use Liuggio\StatsdClient\StatsdClient,
+    Liuggio\StatsdClient\Factory\StatsdDataFactory,
+    Liuggio\StatsdClient\Sender\SocketSender;
+// use Liuggio\StatsdClient\Sender\SysLogSender;
+
+$sender = new SocketSender(/*'localhost', 8126, 'udp'*/);
+// $sender = new SysLogSender(); // enabling this, the packet will not send 
over the socket
+
+$client = new StatsdClient($sender);
+$factory = new StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData');
+
+// create the data with the factory
+$data[] = $factory->timing('usageTime', 100);
+$data[] = $factory->increment('visitor');
+$data[] = $factory->decrement('click');
+$data[] = $factory->gauge('gaugor', 333);
+$data[] = $factory->set('uniques', 765);
+
+// send the data as array or directly as object
+$client->send($data);
+```
+
+### Usage with Monolog
+
+```php
+use Liuggio\StatsdClient\StatsdClient,
+    Liuggio\StatsdClient\Factory\StatsdDataFactory,
+    Liuggio\StatsdClient\Sender\SocketSender;
+// use Liuggio\StatsdClient\Sender\SysLogSender;
+
+use Monolog\Logger;
+use Liuggio\StatsdClient\Monolog\Handler\StatsDHandler;
+
+$sender = new SocketSender(/*'localhost', 8126, 'udp'*/);
+// $sender = new SysLogSender(); // enabling this, the packet will not send 
over the socket
+$client = new StatsdClient($sender);
+$factory = new StatsdDataFactory();
+
+$logger = new Logger('my_logger');
+$logger->pushHandler(new StatsDHandler($client, $factory, 'prefix', 
Logger::DEBUG));
+
+$logger->addInfo('My logger is now ready');
+```
+
+the output will be:  `prefix.my_logger.INFO.My-logger:1|c" 36 Bytes`
+
+
+
+
+## Short Theory
+
+### Easily Install StatSD and Graphite
+
+In order to try this application monitor you have to install etsy/statsd and 
Graphite
+
+see this blog post to install it with vagrant [Easy install statsd 
graphite](http://welcometothebundle.com/easily-install-statsd-and-graphite-with-vagrant/).
+
+#### [StatsD](https://github.com/etsy/statsd)
+
+StatsD is a simple daemon for easy stats aggregation
+
+#### [Graphite](http://graphite.wikidot.com/)
+
+Graphite is a Scalable Realtime Graphing
+
+#### The Client sends data with UDP (faster)
+
+https://www.google.com/search?q=tcp+vs+udp
+
+## Contribution
+
+Active contribution and patches are very welcome.
+To keep things in shape we have quite a bunch of unit tests. If you're 
submitting pull requests please
+make sure that they are still passing and if you add functionality please
+take a look at the coverage as well it should be pretty high :)
+
+- First fork or clone the repository
+
+```
+git clone git://github.com/liuggio/statsd-php-client.git
+cd statsd-php-client
+```
+
+- Install vendors:
+
+``` bash
+composer.phar install
+```
+
+- This will give you proper results:
+
+``` bash
+phpunit --coverage-html reports
+```
+
+## Upgrade
+
+BC from the v1.0.4 version, [see Sender and Client 
differences](https://github.com/liuggio/statsd-php-client/pull/5/files).
+
+
+## TODO
+
+example with monolog
diff --git a/liuggio/statsd-php-client/composer.json 
b/liuggio/statsd-php-client/composer.json
new file mode 100644
index 0000000..705dbdf
--- /dev/null
+++ b/liuggio/statsd-php-client/composer.json
@@ -0,0 +1,26 @@
+{
+    "name": "liuggio/statsd-php-client",
+    "description": "Statsd (Object Oriented) client library for PHP",
+    "keywords": ["statsd", "monitoring", "etsy", "php"],
+    "homepage": "https://github.com/liuggio/statsd-php-client/";,
+    "type": "library",
+    "license": "MIT",
+    "require": {
+        "php": ">=5.2"
+    },
+    "authors": [
+        {
+            "name": "Giulio De Donato",
+            "email": "[email protected]"
+        }
+    ],
+    "autoload": {
+        "psr-0": {"Liuggio": "src/"}
+    },
+    "require-dev": {
+        "monolog/monolog": ">=1.2.0"
+    },
+    "suggest": {
+        "monolog/monolog": "Monolog, in order to do generate statistic from 
log >=1.2.0)"
+    }
+}
diff --git a/liuggio/statsd-php-client/phpunit.xml.dist 
b/liuggio/statsd-php-client/phpunit.xml.dist
new file mode 100644
index 0000000..621efd7
--- /dev/null
+++ b/liuggio/statsd-php-client/phpunit.xml.dist
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit bootstrap="tests/bootstrap.php" colors="true">
+    <testsuites>
+        <testsuite name="Statsd-Service Test Suite">
+            <directory>tests/Liuggio/StatsdClient</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist>
+            <directory suffix=".php">src/Liuggio/</directory>
+        </whitelist>
+    </filter>
+</phpunit>
\ No newline at end of file
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php
new file mode 100755
index 0000000..9c6203d
--- /dev/null
+++ b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Liuggio\StatsdClient\Entity;
+
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+class StatsdData implements StatsdDataInterface
+{
+
+    private $key;
+    private $value;
+    private $metric;
+
+    /**
+     * @param string $key
+     */
+    public function setKey($key)
+    {
+        $this->key = $key;
+    }
+
+    /**
+     * @return string
+     */
+    public function getKey()
+    {
+        return $this->key;
+    }
+
+    /**
+     * @param int $value
+     */
+    public function setValue($value)
+    {
+        $this->value = $value;
+    }
+
+    /**
+     * @return int
+     */
+    public function getValue()
+    {
+        return $this->value;
+    }
+
+
+    public function setMetric($metric)
+    {
+        $this->metric = $metric;
+    }
+
+    public function getMetric()
+    {
+        return $this->metric;
+    }
+
+    /**
+     * @param bool $withMetric
+     *
+     * @return string
+     */
+    public function getMessage($withMetric = true)
+    {
+        if (!$withMetric) {
+            return sprintf('%s:%s', $this->getKey(), $this->getValue());
+        } else {
+            return sprintf('%s:%s|%s', $this->getKey(), $this->getValue(), 
$this->getMetric());
+        }
+    }
+
+    /**
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->getMessage();
+    }
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php
 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php
new file mode 100755
index 0000000..846bc7c
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Liuggio\StatsdClient\Entity;
+
+interface StatsdDataInterface
+{
+    CONST STATSD_METRIC_TIMING = 'ms';
+    CONST STATSD_METRIC_GAUGE  = 'g';
+    CONST STATSD_METRIC_SET    = 's';
+    CONST STATSD_METRIC_COUNT  = 'c';
+
+    /**
+     * @abstract
+     * @return string
+     */
+    function getKey();
+
+    /**
+     * @abstract
+     * @return mixed
+     */
+    function getValue();
+
+    /**
+     * @abstract
+     * @return string
+     */
+    function getMetric();
+
+    /**
+     * @abstract
+     * @return string
+     */
+    function getMessage();
+
+    /**
+     * @abstract
+     * @return string
+     */
+    function __toString();
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php
 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000..3f39d35
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Liuggio\StatsdClient\Exception;
+
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php
 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php
new file mode 100644
index 0000000..7ec1a19
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace Liuggio\StatsdClient\Factory;
+
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+class StatsdDataFactory implements StatsdDataFactoryInterface
+{
+    /**
+     * @var StatsdDataInterface
+     */
+    private $entityClass;
+
+    public function __construct($entity_class = 
'\Liuggio\StatsdClient\Entity\StatsdData')
+    {
+        $this->setEntityClass($entity_class);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function timing($key, $time)
+    {
+        return $this->produceStatsdData($key, $time, 
StatsdDataInterface::STATSD_METRIC_TIMING);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function gauge($key, $value)
+    {
+        return $this->produceStatsdData($key, $value, 
StatsdDataInterface::STATSD_METRIC_GAUGE);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function set($key, $value)
+    {
+        return $this->produceStatsdData($key, $value, 
StatsdDataInterface::STATSD_METRIC_SET);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function increment($key)
+    {
+        return $this->produceStatsdData($key, 1, 
StatsdDataInterface::STATSD_METRIC_COUNT);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function decrement($key)
+    {
+        return $this->produceStatsdData($key, -1, 
StatsdDataInterface::STATSD_METRIC_COUNT);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function updateCount($key, $delta)
+    {
+        return $this->produceStatsdData($key, $delta, 
StatsdDataInterface::STATSD_METRIC_COUNT);
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function produceStatsdData($key, $value = 1, $metric = 
StatsdDataInterface::STATSD_METRIC_COUNT)
+    {
+        $statsdData = $this->produceStatsdDataEntity();
+
+        if (null !== $key) {
+            $statsdData->setKey($key);
+        }
+
+        if (null !== $value) {
+            $statsdData->setValue($value);
+        }
+
+        if (null !== $metric) {
+            $statsdData->setMetric($metric);
+        }
+
+        return $statsdData;
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function produceStatsdDataEntity()
+    {
+        $statsdData = $this->getEntityClass();
+
+        return new $statsdData();
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function setFailSilently($failSilently)
+    {
+        $this->failSilently = $failSilently;
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function getFailSilently()
+    {
+        return $this->failSilently;
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function setEntityClass($entityClass)
+    {
+        $this->entityClass = $entityClass;
+    }
+
+    /**
+     * {@inheritDoc}
+     **/
+    public function getEntityClass()
+    {
+        return $this->entityClass;
+    }
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php
 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php
new file mode 100644
index 0000000..4d58833
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Liuggio\StatsdClient\Factory;
+
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+Interface StatsdDataFactoryInterface
+{
+
+    /**
+     * This function creates a 'timing' StatsdData.
+     *
+     * @abstract
+     *
+     * @param string|array $key  The metric(s) to set.
+     * @param float        $time The elapsed time (ms) to log
+     **/
+    function timing($key, $time);
+
+    /**
+     * This function creates a 'gauge' StatsdData.
+     *
+     * @abstract
+     *
+     * @param string|array $key   The metric(s) to set.
+     * @param float        $value The value for the stats.
+     **/
+    function gauge($key, $value);
+
+    /**
+     * This function creates a 'set' StatsdData object
+     * A "Set" is a count of unique events.
+     * This data type acts like a counter, but supports counting
+     * of unique occurrences of values between flushes. The backend
+     * receives the number of unique events that happened since
+     * the last flush.
+     *
+     * The reference use case involved tracking the number of active
+     * and logged in users by sending the current userId of a user
+     * with each request with a key of "uniques" (or similar).
+     *
+     * @abstract
+     *
+     * @param  string|array $key   The metric(s) to set.
+     * @param  float        $value The value for the stats.
+     *
+     * @return array
+     **/
+    function set($key, $value);
+
+    /**
+     * This function creates a 'increment' StatsdData object.
+     *
+     * @abstract
+     *
+     * @param string|array $key        The metric(s) to increment.
+     * @param float|1      $sampleRate The rate (0-1) for sampling.
+     *
+     * @return array
+     **/
+    function increment($key);
+
+    /**
+     * This function creates a 'decrement' StatsdData object.
+     *
+     * @abstract
+     *
+     * @param string|array $key        The metric(s) to decrement.
+     * @param float|1      $sampleRate The rate (0-1) for sampling.
+     *
+     * @return mixed
+     **/
+    function decrement($key);
+
+    /**
+     * This function creates a 'updateCount' StatsdData object.
+     *
+     * @abstract
+     *
+     * @param string|array $key        The metric(s) to decrement.
+     * @param integer      $delta      The delta to add to the each metric
+     *
+     * @return mixed
+     **/
+    function updateCount($key, $delta);
+
+    /**
+     * Produce a StatsdDataInterface Object.
+     *
+     * @abstract
+     *
+     * @param string $key    The key of the metric
+     * @param int    $value  The amount to increment/decrement each metric by.
+     * @param string $metric The metric type ("c" for count, "ms" for timing, 
"g" for gauge, "s" for set)
+     *
+     * @return StatsdDataInterface
+     **/
+    function produceStatsdData($key, $value = 1, $metric = 
StatsdDataInterface::STATSD_METRIC_COUNT);
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php
 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php
new file mode 100644
index 0000000..6311112
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Liuggio\StatsdClient\Monolog\Formatter;
+
+use Monolog\Formatter\LineFormatter;
+
+/**
+ * Formats incoming records in order to be a perfect StatsD key.
+ *
+ * This is especially useful for logging to files
+ *
+ * @author Jordi Boggiano <[email protected]>
+ * @author Christophe Coevoet <[email protected]>
+ * @author Giulio De Donato <[email protected]>
+ */
+class StatsDFormatter extends LineFormatter
+{
+    const SIMPLE_FORMAT = "%channel%.%level_name%.%short_message%";
+
+    protected $numberOfWords;
+    protected $logContext;
+    protected $logExtra;
+
+    /**
+     * @param string $format The format of the message
+     * @param Boolean $logContext If true add multiple rows containing Context 
information
+     * @param Boolean $logExtra If true add multiple rows containing Extra 
information
+     * @param integer $numberOfWords The number of words to show.
+     */
+    public function __construct($format = null, $logContext = true, $logExtra 
= true, $numberOfWords = 2)
+    {
+        $this->format = $format ? : static::SIMPLE_FORMAT;
+        $this->numberOfWords = $numberOfWords;
+        $this->logContext = $logContext;
+        $this->logExtra = $logExtra;
+        parent::__construct();
+    }
+
+    /**
+     * This function converts a long message into a string with the first 
N-words.
+     * eg. from: "Notified event "kernel.request" to listener 
"Symfony\Component\HttpKernel\EventListener"
+     * to: "Notified event"
+     *
+     * @param string $message The message to shortify.
+     *
+     * @return string
+     */
+    public function getFirstWords($message)
+    {
+        $glue = '-';
+        $pieces = explode(' ', $message);
+        array_splice($pieces, $this->numberOfWords);
+        $shortMessage = preg_replace("/[^A-Za-z0-9?![:space:]]/", "-", 
implode($glue, $pieces));
+
+        return $shortMessage;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function format(array $record)
+    {
+        $vars = $this->normalize($record);
+
+        $firstRow = $this->format;
+        $output = array();
+
+        $vars['short_message'] = $this->getFirstWords($vars['message']);
+        foreach ($vars as $var => $val) {
+            $firstRow = str_replace('%' . $var . '%', 
$this->convertToString($val), $firstRow);
+        }
+        $output[] = $firstRow;
+        // creating more rows for context content
+        if ($this->logContext && isset($vars['context'])) {
+            foreach ($vars['context'] as $key => $parameter) {
+                $output[] = sprintf("%s.context.%s.%s", $firstRow, $key, 
$parameter);
+            }
+        }
+        // creating more rows for extra content
+        if ($this->logExtra && isset($vars['extra'])) {
+            foreach ($vars['extra'] as $key => $parameter) {
+                $output[] = sprintf("%s.extra.%s.%s", $firstRow, $key, 
$parameter);
+            }
+        }
+
+        return $output;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function formatBatch(array $records)
+    {
+        $output = array();
+        foreach ($records as $record) {
+            $output = array_merge($output, $this->format($record));
+        }
+
+        return $output;
+    }
+}
\ No newline at end of file
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php
 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php
new file mode 100644
index 0000000..86c6d39
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php
@@ -0,0 +1,120 @@
+<?php
+
+namespace Liuggio\StatsdClient\Monolog\Handler;
+
+use Monolog\Logger;
+use Monolog\Handler\AbstractProcessingHandler;
+use Monolog\Formatter\FormatterInterface;
+
+use Liuggio\StatsdClient\Monolog\Formatter\StatsDFormatter;
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+use Liuggio\StatsdClient\StatsdClientInterface;
+
+/**
+ * A processing handler for StatsD.
+ *
+ * @author Giulio De Donato <[email protected]>
+ */
+class StatsDHandler extends AbstractProcessingHandler
+{
+    /**
+     * @var array
+     */
+    protected $buffer = array();
+
+    /**
+     * @var string
+     */
+    protected $prefix;
+
+    /**
+     * @var statsDService
+     */
+    protected $statsDService;
+
+    /**
+     * @var statsDFactory
+     */
+    protected $statsDFactory;
+
+    /**
+     * @param StatsdClientInterface $statsDService The Service sends the packet
+     * @param StatsdDataFactoryInterface $statsDFactory The Factory creates 
the StatsDPacket
+     * @param string $prefix Statsd key prefix
+     * @param integer $level The minimum logging level at which this handler 
will be triggered
+     * @param Boolean $bubble Whether the messages that are handled can bubble 
up the stack or not
+     */
+    public function __construct(StatsdClientInterface $statsDService, 
StatsdDataFactoryInterface $statsDFactory = null, $prefix, $level = 
Logger::DEBUG, $bubble = true)
+    {
+        parent::__construct($level, $bubble);
+
+        $this->statsDService = $statsDService;
+        $this->statsDFactory = $statsDFactory ? $statsDFactory : new 
StatsdDataFactory();
+        $this->prefix = $prefix;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function close()
+    {
+        $this->statsDService->send($this->buffer);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function write(array $record)
+    {
+        $records = is_array($record['formatted']) ? $record['formatted'] : 
array($record['formatted']);
+
+        foreach ($records as $record) {
+            if (!empty($record)) {
+                $this->buffer[] = 
$this->statsDFactory->increment(sprintf('%s.%s', $this->getPrefix(), $record));
+            }
+        }
+    }
+
+    /**
+     * Gets the default formatter.
+     *
+     * @return FormatterInterface
+     */
+    protected function getDefaultFormatter()
+    {
+        return new StatsDFormatter();
+    }
+
+    /**
+     * @param string $prefix
+     */
+    public function setPrefix($prefix)
+    {
+        $this->prefix = $prefix;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrefix()
+    {
+        return $this->prefix;
+    }
+
+    /**
+     * @param StatsdClientInterface $statsDService
+     */
+    public function setStatsDService(StatsdClientInterface $statsDService)
+    {
+        $this->statsDService = $statsDService;
+    }
+
+    /**
+     * @param StatsdDataFactoryInterface $statsDFactory
+     */
+    public function setStatsDFactory(StatsdDataFactoryInterface $statsDFactory)
+    {
+        $this->statsDFactory = $statsDFactory;
+    }
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php
new file mode 100644
index 0000000..1015ca9
--- /dev/null
+++ b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+
+Class EchoSender implements SenderInterface
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function open()
+    {
+        echo "[open]";
+
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    function write($handle, $message, $length = null)
+    {
+        echo "[$message]";
+
+        return strlen($message);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    function close($handle)
+    {
+        echo "[closed]";
+    }
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php
new file mode 100644
index 0000000..8dc8fd3
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+Interface SenderInterface
+{
+    /**
+     * @abstract
+     * @return mixed
+     */
+    function open();
+
+    /**
+     * @abstract
+     *
+     * @param        $handle
+     * @param string $string
+     * @param null   $length
+     *
+     * @return mixed
+     */
+    function write($handle, $string, $length = null);
+
+    /**
+     * @abstract
+     *
+     * @param $handle
+     *
+     * @return mixed
+     */
+    function close($handle);
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php
new file mode 100644
index 0000000..c319f07
--- /dev/null
+++ b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+use Liuggio\StatsdClient\Exception\InvalidArgumentException;
+
+Class SocketSender implements SenderInterface
+{
+    private $port;
+    private $host;
+    private $protocol;
+
+    public function __construct($hostname = 'localhost', $port = 8126, 
$protocol = 'udp')
+    {
+        $this->host = $hostname;
+        $this->port = $port;
+
+        switch ($protocol) {
+            case 'udp':
+                $this->protocol = SOL_UDP;
+                break;
+            case 'tcp':
+                $this->protocol = SOL_TCP;
+                break;
+            default:
+                throw new InvalidArgumentException(sprintf('Use udp or tcp as 
protocol given %s', $protocol));
+                break;
+        }
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function open()
+    {
+        $fp = socket_create(AF_INET, SOCK_DGRAM, $this->getProtocol());
+
+        return $fp;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function write($handle, $message, $length = null)
+    {
+        return socket_sendto($handle, $message, strlen($message), 0, 
$this->getHost(), $this->getPort());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function close($handle)
+    {
+        socket_close($handle);
+    }
+
+
+    protected function setHost($host)
+    {
+        $this->host = $host;
+    }
+
+    protected function getHost()
+    {
+        return $this->host;
+    }
+
+    protected function setPort($port)
+    {
+        $this->port = $port;
+    }
+
+    protected function getPort()
+    {
+        return $this->port;
+    }
+
+    protected function setProtocol($protocol)
+    {
+        $this->protocol = $protocol;
+    }
+
+    protected function getProtocol()
+    {
+        return $this->protocol;
+    }
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php
new file mode 100644
index 0000000..537ead3
--- /dev/null
+++ b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+
+Class SysLogSender implements SenderInterface
+{
+    private $priority;
+
+    public function __construct($priority = LOG_INFO)
+    {
+        $this->priority = $priority;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function open()
+    {
+        syslog($this->priority, "statsd-client-open");
+
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    function write($handle, $message, $length = null)
+    {
+        syslog($this->priority, sprintf("statsd-client-write \"%s\" %d Bytes", 
$message, strlen($message)));
+
+        return strlen($message);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    function close($handle)
+    {
+        syslog($this->priority, "statsd-client-close");
+    }
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php
new file mode 100644
index 0000000..a1d232a
--- /dev/null
+++ b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php
@@ -0,0 +1,211 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\Sender\SenderInterface;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+use Liuggio\StatsdClient\Exception\InvalidArgumentException;
+
+class StatsdClient implements StatsdClientInterface
+{
+    /**
+     * @var boolean
+     */
+    private $failSilently;
+
+    /**
+     * @var \Liuggio\StatsdClient\Sender\SenderInterface
+     */
+    private $sender;
+
+    /**
+     * @var boolean
+     */
+    private $reducePacket;
+
+    /**
+     * Constructor.
+     *
+     * @param \Liuggio\StatsdClient\Sender\SenderInterface $sender
+     * @param Boolean                                      $reducePacket
+     * @param Boolean                                      $fail_silently
+     */
+    public function __construct(SenderInterface $sender, $reducePacket = true, 
$fail_silently = true)
+    {
+        $this->sender       = $sender;
+        $this->reducePacket = $reducePacket;
+        $this->failSilently = $fail_silently;
+    }
+
+    /**
+     * Throws an exc only if failSilently if  getFailSilently is false.
+     *
+     * @param \Exception $exception
+     *
+     * @throws \Exception
+     */
+    private function throwException(\Exception $exception)
+    {
+        if (!$this->getFailSilently()) {
+            throw $exception;
+        }
+    }
+
+    /**
+     * This function reduces the number of packets,the reduced has the maximum 
dimension of self::MAX_UDP_SIZE_STR
+     * Reference:
+     * https://github.com/etsy/statsd/blob/master/README.md
+     * All metrics can also be batch send in a single UDP packet, separated by 
a newline character.
+     *
+     * @param array $reducedMetrics
+     * @param array $metric
+     *
+     * @return array
+     */
+    private static function doReduce($reducedMetrics, $metric)
+    {
+        $metricLength = strlen($metric);
+        $lastReducedMetric = count($reducedMetrics) > 0 ? end($reducedMetrics) 
: null;
+
+        if ($metricLength >= self::MAX_UDP_SIZE_STR
+            || null === $lastReducedMetric
+            || strlen($newMetric = $lastReducedMetric . "\n" . $metric) > 
self::MAX_UDP_SIZE_STR
+        ) {
+            $reducedMetrics[] = $metric;
+        } else {
+            array_pop($reducedMetrics);
+            $reducedMetrics[] = $newMetric;
+        }
+
+        return $reducedMetrics;
+    }
+
+
+    /**
+     * this function reduce the amount of data that should be send
+     *
+     * @param mixed $arrayData
+     *
+     * @return mixed $arrayData
+     */
+    public function reduceCount($arrayData)
+    {
+        if (is_array($arrayData)) {
+            $arrayData = array_reduce($arrayData, "self::doReduce", array());
+        }
+
+        return $arrayData;
+    }
+
+    /**
+     *  Reference: https://github.com/etsy/statsd/blob/master/README.md
+     *  Sampling 0.1
+     *  Tells StatsD that this counter is being sent sampled every 1/10th of 
the time.
+     *
+     * @param mixed $data
+     * @param int   $sampleRate
+     *
+     * @return mixed $data
+     */
+    public function appendSampleRate($data, $sampleRate = 1)
+    {
+        $sampledData = array();
+        if ($sampleRate < 1) {
+            foreach ($data as $key => $message) {
+                $sampledData[$key] = sprintf('%s|@%s', $message, $sampleRate);
+            }
+            $data = $sampledData;
+        }
+
+        return $data;
+    }
+
+    /*
+     * Send the metrics over UDP
+     *
+     * {@inheritDoc}
+     */
+    public function send($data, $sampleRate = 1)
+    {
+        // check format
+        if ($data instanceof StatsdDataInterface || is_string($data)) {
+            $data = array($data);
+        }
+        if (!is_array($data) || empty($data)) {
+            return;
+        }
+        // add sampling
+        if ($sampleRate < 1) {
+            $data = $this->appendSampleRate($data, $sampleRate);
+        }
+        // reduce number of packets
+        if ($this->getReducePacket()) {
+            $data = $this->reduceCount($data);
+        }
+        //failures in any of this should be silently ignored if ..
+        try {
+            $fp = $this->getSender()->open();
+            if (!$fp) {
+                return;
+            }
+            $written = 0;
+            foreach ($data as $key => $message) {
+                $written += $this->getSender()->write($fp, $message);
+            }
+            $this->getSender()->close($fp);
+        } catch (\Exception $e) {
+            $this->throwException($e);
+        }
+
+        return $written;
+    }
+
+    /**
+     * @param boolean $failSilently
+     */
+    public function setFailSilently($failSilently)
+    {
+        $this->failSilently = $failSilently;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function getFailSilently()
+    {
+        return $this->failSilently;
+    }
+
+    /**
+     * @param \Liuggio\StatsdClient\Sender\SenderInterface $sender
+     */
+    public function setSender(SenderInterface $sender)
+    {
+        $this->sender = $sender;
+    }
+
+    /**
+     * @return \Liuggio\StatsdClient\Sender\SenderInterface
+     */
+    public function getSender()
+    {
+        return $this->sender;
+    }
+
+    /**
+     * @param boolean $reducePacket
+     */
+    public function setReducePacket($reducePacket)
+    {
+        $this->reducePacket = $reducePacket;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function getReducePacket()
+    {
+        return $this->reducePacket;
+    }
+
+}
diff --git 
a/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php
new file mode 100644
index 0000000..e2c75cd
--- /dev/null
+++ 
b/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\Sender\SenderInterface;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+use Liuggio\StatsdClient\Exception\InvalidArgumentException;
+
+Interface StatsdClientInterface
+{
+    const MAX_UDP_SIZE_STR = 512;
+
+    /*
+     * Send the metrics over UDP
+     *
+     * @abstract
+     * @param array|string|StatsdDataInterface  $data message(s) to sent
+     * @param int $sampleRate Tells StatsD that this counter is being sent 
sampled every Xth of the time.
+     *
+     * @return integer the data sent in bytes
+     */
+    function send($data, $sampleRate = 1);
+}
diff --git 
a/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php
 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php
new file mode 100755
index 0000000..fad9175
--- /dev/null
+++ 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Liuggio\StatsdClient\Entity;
+
+use Liuggio\StatsdClient\Entity\StatsdData;
+
+
+class StatsdDataTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetMessage()
+    {
+        $statsdData = new  StatsdData();
+        $statsdData->setKey('key');
+        $statsdData->setValue('value');
+        $statsdData->setMetric('c');
+
+        $this->assertEquals($statsdData->getMessage(), 'key:value|c');
+
+        $statsdData = new  StatsdData();
+        $statsdData->setKey('key');
+        $statsdData->setValue(-1);
+        $statsdData->setMetric('c');
+
+        $this->assertEquals($statsdData->getMessage(), 'key:-1|c');
+
+    }
+}
diff --git 
a/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php
 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php
new file mode 100644
index 0000000..daf899a
--- /dev/null
+++ 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php
@@ -0,0 +1,169 @@
+<?php
+
+namespace Liuggio\StatsdClient\Tests\Monolog\Formatter;
+
+use Monolog\Logger;
+use Liuggio\StatsdClient\Monolog\Formatter\StatsDFormatter;
+
+/**
+ * @covers Liuggio\StatsdClient\Monolog\Formatter\StatsDFormatter
+ */
+class StatsDFormatterTest extends \PHPUnit_Framework_TestCase
+{
+    public function testBatchFormat()
+    {
+        $formatter = new StatsDFormatter(null, 2);
+        $message = $formatter->formatBatch(array(
+            array(
+                'level_name' => 'CRITICAL',
+                'channel' => 'test',
+                'message' => 'bar',
+                'context' => array(),
+                'datetime' => new \DateTime,
+                'extra' => array(),
+            ),
+            array(
+                'level_name' => 'WARNING',
+                'channel' => 'log',
+                'message' => 'foo',
+                'context' => array(),
+                'datetime' => new \DateTime,
+                'extra' => array(),
+            ),
+        ));
+
+        $this->assertEquals(array('test.CRITICAL.bar', 'log.WARNING.foo'), 
$message);
+    }
+
+    public function testDefFormatWithString()
+    {
+        $formatter = new StatsDFormatter(StatsDFormatter::SIMPLE_FORMAT);
+        $message = $formatter->format(array(
+            'level_name' => 'WARNING',
+            'channel' => 'log',
+            'context' => array(),
+            'message' => 'foo',
+            'datetime' => new \DateTime,
+            'extra' => array(),
+        ));
+        $this->assertEquals(array('log.WARNING.foo'), $message);
+    }
+
+    public function testDefFormatWithArrayContext()
+    {
+        $formatter = new StatsDFormatter();
+        $message = $formatter->format(array(
+            'level_name' => 'ERROR',
+            'channel' => 'meh',
+            'message' => 'foo',
+            'datetime' => new \DateTime,
+            'extra' => array(),
+            'context' => array(
+                'foo' => 'bar',
+                'baz' => 'qux',
+            )
+        ));
+
+        $assert = array('meh.ERROR.foo',
+            'meh.ERROR.foo.context.foo.bar',
+            'meh.ERROR.foo.context.baz.qux');
+
+        $this->assertEquals($assert, $message);
+    }
+
+    public function testDefFormatWithArrayContextAndExtra()
+    {
+        $formatter = new StatsDFormatter();
+        $message = $formatter->format(array(
+            'level_name' => 'ERROR',
+            'channel' => 'meh',
+            'message' => 'foo',
+            'datetime' => new \DateTime,
+            'extra' => array('extra'=>'woow'),
+            'context' => array(
+                'foo' => 'bar',
+                'baz' => 'qux',
+            )
+        ));
+
+        $assert = array('meh.ERROR.foo',
+            'meh.ERROR.foo.context.foo.bar',
+            'meh.ERROR.foo.context.baz.qux',
+            'meh.ERROR.foo.extra.extra.woow');
+
+        $this->assertEquals($assert, $message);
+
+    }
+
+    public function testDefLongFormat()
+    {
+        $formatter = new StatsDFormatter();
+        $message = $formatter->format(array(
+            'level_name' => 'DEBUG',
+            'channel' => 'doctrine',
+            'message' => 'INSERT INTO viaggio_calendar (enable, viaggio_id, 
calendar_id) VALUES (?, ?, ?)',
+            'datetime' => new \DateTime,
+            'extra' => array(),
+            'context' => array(
+                'foo' => 'bar',
+                'baz' => 'qux',
+            )
+        ));
+        $this->assertEquals(array("doctrine.DEBUG.INSERT-INTO",
+            "doctrine.DEBUG.INSERT-INTO.context.foo.bar",
+            "doctrine.DEBUG.INSERT-INTO.context.baz.qux"), $message);
+    }
+
+    public function testDefLongFormatWith3WordsNoContextAndNoExtra()
+    {
+        $formatter = new StatsDFormatter(null, false, false, 3);
+        $message = $formatter->format(array(
+            'level_name' => 'DEBUG',
+            'channel' => 'doctrine',
+            'message' => 'INSERT INTO viaggio_calendar (enable, viaggio_id, 
calendar_id) VALUES (?, ?, ?)',
+            'datetime' => new \DateTime,
+            'extra' => array(),
+            'context' => array(
+                'foo' => 'bar',
+                'baz' => 'qux',
+            )
+        ));
+        
$this->assertEquals(array("doctrine.DEBUG.INSERT-INTO-viaggio-calendar"), 
$message);
+    }
+    public function testDefRouteException()
+    {
+        $formatter = new StatsDFormatter();
+        $message = $formatter->format(array(
+            'level_name' => 'DEBUG',
+            'channel' => 'doctrine',
+            'message' => 
'Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found 
for "GET /ddd" (uncaught exception) at /xxxx/classes.php line 5062',
+            'datetime' => new \DateTime,
+            'extra' => array(),
+        ));
+        
$this->assertEquals(array('doctrine.DEBUG.Symfony-Component-HttpKernel-Exception-NotFoundHttpException--No'),
 $message);
+    }
+
+    public function testDefKernelException()
+    {
+        $formatter = new StatsDFormatter();
+        $message = $formatter->format(array(
+            'level_name' => 'DEBUG',
+            'channel' => 'doctrine',
+            'message' => 'Notified event "kernel.exception" to listener 
"Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException"',
+            'datetime' => new \DateTime,
+            'extra' => array(),
+            'context' => array(
+                'foo' => 'bar',
+                'baz' => 'qux',
+            )
+        ));
+
+        $assert = array('doctrine.DEBUG.Notified-event',
+            'doctrine.DEBUG.Notified-event.context.foo.bar',
+            'doctrine.DEBUG.Notified-event.context.baz.qux');
+
+        $this->assertEquals($assert, $message);
+
+
+    }
+}
diff --git 
a/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php
 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php
new file mode 100644
index 0000000..c1b8eb4
--- /dev/null
+++ 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace Liuggio\StatsdClient\Tests\Monolog\Handler;
+
+use Monolog\Logger;
+use Liuggio\StatsdClient\Monolog\Handler\StatsDHandler;
+
+
+class StatsDHandlerTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @return array Record
+     */
+    protected function getRecord($level = Logger::WARNING, $message = 'test', 
$context = array())
+    {
+        return array(
+            'message' => $message,
+            'context' => $context,
+            'level' => $level,
+            'level_name' => Logger::getLevelName($level),
+            'channel' => 'test',
+            'datetime' => \DateTime::createFromFormat('U.u', sprintf('%.6F', 
microtime(true))),
+            'extra' => array(),
+        );
+    }
+
+    /**
+     * @return array
+     */
+    protected function getMultipleRecords()
+    {
+        return array(
+            $this->getRecord(Logger::DEBUG, 'debug message 1'),
+            $this->getRecord(Logger::DEBUG, 'debug message 2'),
+            $this->getRecord(Logger::INFO, 'information'),
+            $this->getRecord(Logger::WARNING, 'warning'),
+            $this->getRecord(Logger::ERROR, 'error')
+        );
+    }
+
+    /**
+     * @return Monolog\Formatter\FormatterInterface
+     */
+    protected function getIdentityFormatter()
+    {
+        $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface');
+        $formatter->expects($this->any())
+            ->method('format')
+            ->will($this->returnCallback(function($record) { return 
$record['message']; }));
+
+        return $formatter;
+    }
+
+
+    protected function setup()
+    {
+        if (!interface_exists('Liuggio\StatsdClient\StatsdClientInterface')) {
+            $this->markTestSkipped('The "liuggio/statsd-php-client" package is 
not installed');
+        }
+    }
+
+    public function testHandle()
+    {
+        $client = $this->getMock('Liuggio\StatsdClient\StatsdClientInterface');
+        $factory = 
$this->getMock('Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface');
+
+        $factory->expects($this->any())
+            ->method('increment')
+            ->will($this->returnCallback(function ($input){
+                return sprintf('%s|c|1', $input);
+            }));
+
+        $prefixToAssert = 'prefix';
+        $messageToAssert = 'test-msg';
+
+        $record = $this->getRecord(Logger::WARNING, $messageToAssert, 
array('data' => new \stdClass, 'foo' => 34));
+
+        $assert = array(sprintf('%s.test.WARNING.%s|c|1',$prefixToAssert, 
$messageToAssert),
+            sprintf('%s.test.WARNING.%s.context.data.[object] (stdClass: 
{})|c|1',$prefixToAssert, $messageToAssert),
+            sprintf('%s.test.WARNING.%s.context.foo.34|c|1',$prefixToAssert, 
$messageToAssert));
+
+        $client->expects($this->once())
+            ->method('send')
+            ->with($assert);
+
+        $handler = new StatsDHandler($client, $factory, $prefixToAssert);
+        $handler->handle($record);
+    }
+}
\ No newline at end of file
diff --git 
a/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php
new file mode 100644
index 0000000..4608a60
--- /dev/null
+++ b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+//use Liuggio\StatsdClient\Sender\SocketSender;
+
+
+class ReadmeTest extends \PHPUnit_Framework_TestCase
+{
+    public function testFullUsageWithObject() {
+
+        $sender = $this->mockSender();
+        // $sender = new Sender();
+
+        // StatsdClient(SenderInterface $sender, $host = 'udp://localhost', 
$port = 8126, $reducePacket = true, $fail_silently = true)
+        $client = new StatsdClient($sender);
+        $factory = new 
StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData');
+
+        // create the data with the factory
+        $data[] = $factory->timing('usageTime', 100);
+        $data[] = $factory->increment('visitor');
+        $data[] = $factory->decrement('click');
+        $data[] = $factory->gauge('gaugor', 333);
+        $data[] = $factory->set('uniques', 765);
+
+        // send the data as array or directly as object
+        $client->send($data);
+    }
+
+
+
+    public function testFullUsageArray() {
+        
+        $sender = $this->mockSender();
+        // $sender = new Sender();
+
+        // StatsdClient(SenderInterface $sender, $host = 'localhost', $port = 
8126, $protocol='udp', $reducePacket = true, $fail_silently = true)
+        $client = new StatsdClient($sender, $host = 'localhost', $port = 8126, 
'udp', $reducePacket = true, $fail_silently = true);
+ 
+        $data[] ="increment:1|c";
+        $data[] ="set:value|s";
+        $data[] ="gauge:value|g";
+        $data[] = "timing:10|ms";
+        $data[] = "decrement:-1|c";
+        $data[] ="key:1|c";         
+
+        // send the data as array or directly as object
+        $client->send($data);
+    }
+
+
+    private function mockSender() {
+        $sender =  
$this->getMock('\Liuggio\StatsdClient\Sender\SenderInterface', array('open', 
'write', 'close'));
+        $sender->expects($this->once())
+            ->method('open')
+            ->will($this->returnValue(true));
+
+        $sender->expects($this->any())  //If you set the reduce = true into 
the StatsdClient the write will be called once
+            ->method('write')
+            ->will($this->returnCallBack(function($fp, $message) {
+             //  echo PHP_EOL . "- " . $message;
+        }));
+
+        $sender->expects($this->once())
+            ->method('close')
+            ->will($this->returnValue(true));
+
+        return $sender;
+    }
+}
\ No newline at end of file
diff --git 
a/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php
new file mode 100644
index 0000000..865f1b2
--- /dev/null
+++ b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php
@@ -0,0 +1,228 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Entity\StatsdData;
+
+class StatsdClientTest extends \PHPUnit_Framework_TestCase
+{
+
+    public function mockSenderWithAssertionOnWrite($messageToAssert=null) {
+
+        $mock = 
$this->getMockBuilder('\Liuggio\StatsdClient\Sender\SocketSender') 
->disableOriginalConstructor() ->getMock();
+
+        $phpUnit = $this;
+        $mock->expects($this->any())
+            ->method('open')
+            ->will($this->returnValue(true));
+        // if the input is an array expects a call foreach item
+        if (is_array($messageToAssert)) {
+            $index = 0;
+            foreach ($messageToAssert as $oneMessage) {
+                $index++;
+                $mock->expects($this->at($index))
+                    ->method('write')
+                    ->will($this->returnCallBack(function($fp, $message) use 
($phpUnit, $oneMessage) {
+                      $phpUnit->assertEquals($message, $oneMessage);
+                }));
+            }
+        } else if (null !== $messageToAssert){
+            // if the input is a string expects only once
+            $mock->expects($this->once())
+                ->method('write')
+                ->will($this->returnCallBack(function($fp, $message) use 
($phpUnit, $messageToAssert) {
+                 $phpUnit->assertEquals($message, $messageToAssert);
+            }));
+        }
+        return $mock;
+    }
+
+    public function mockStatsdClientWithAssertionOnWrite($messageToAssert) {
+
+        $mockSender = $this->mockSenderWithAssertionOnWrite($messageToAssert);
+
+        return new StatsdClient($mockSender, false, false);
+    }
+
+    public function mockFactory() {
+
+        $mock =  
$this->getMock('\Liuggio\StatsdClient\Factory\StatsdDataFactory', 
array('timing'));
+
+        $statsData = new StatsdData();
+        $statsData->setKey('key');
+        $statsData->setValue('1');
+        $statsData->setMetric('ms');
+
+        $phpUnit = $this;
+        $mock->expects($this->any())
+            ->method('timing')
+            ->will($this->returnValue($statsData));
+
+        return $mock;
+    }
+
+    public static function provider()
+    {
+        /**
+         * First
+         */
+        $statsData0 = new StatsdData();
+        $statsData0->setKey('keyTiming');
+        $statsData0->setValue('1');
+        $statsData0->setMetric('ms');
+        /**
+         * Second
+         */
+        $stats1 = array();
+        $statsData1 = new StatsdData();
+        $statsData1->setKey('keyTiming');
+        $statsData1->setValue('1');
+        $statsData1->setMetric('ms');
+        $stats1[] = $statsData1;
+
+        $statsData1 = new StatsdData();
+        $statsData1->setKey('keyIncrement');
+        $statsData1->setValue('1');
+        $statsData1->setMetric('c');
+        $stats1[] = $statsData1;
+
+        return array(
+            array($statsData0, "keyTiming:1|ms"),
+            array($stats1, array("keyTiming:1|ms", "keyIncrement:1|c")),
+        );
+    }
+    public static function providerSend()
+    {
+        return array(
+            array(array('gauge:value|g'), 'gauge:value|g'),
+            array(array("keyTiming:1|ms", "keyIncrement:1|c"), 
array("keyTiming:1|ms", "keyIncrement:1|c")),
+        );
+    }
+
+    /**
+     * @dataProvider provider
+     */
+    public function testPrepareAndSend($statsdInput, $assertion) {
+
+        $statsdMock = $this->mockStatsdClientWithAssertionOnWrite($assertion);
+        $statsdMock->send($statsdInput);
+    }
+
+    /**
+     * @dataProvider providerSend
+     */
+    public function testSend($array, $assertion) {
+
+        $statsdMock = $this->mockStatsdClientWithAssertionOnWrite($assertion);
+        $statsdMock->send($array);
+    }
+
+    public function testReduceCount()
+    {
+        $statsd = $this->mockStatsdClientWithAssertionOnWrite(null);
+
+        $entity0 = new StatsdData();
+        $entity0->setKey('key1');
+        $entity0->setValue('1');
+        $entity0->setMetric('c');
+        $array0[] = $entity0;
+
+        $entity0 = new StatsdData();
+        $entity0->setKey('key2');
+        $entity0->setValue('2');
+        $entity0->setMetric('ms');
+        $array0[] = $entity0;
+
+        $reducedMessage = array('key1:1|c' . PHP_EOL . 'key2:2|ms');
+
+        $this->assertEquals($statsd->reduceCount($array0), $reducedMessage);
+
+    }
+
+    public function testReduceWithString()
+    {
+        $statsd = $this->mockStatsdClientWithAssertionOnWrite(null);
+
+        $msg = 'A3456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789:';
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789|c';
+        $array0[] = $msg;
+
+        $msg = 'B3456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789:';
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789|c';
+        $array0[] = $msg;
+        $reduced = $statsd->reduceCount($array0);
+        $combined = $array0[0] . PHP_EOL . $array0[1];
+        $this->assertEquals($combined, $reduced[0]);
+    }
+
+
+    public function testReduceWithMaxUdpPacketSplitInTwoPacket()
+    {
+        $statsd = $this->mockStatsdClientWithAssertionOnWrite(null);
+
+        $msg = 'A3456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789';    //1
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789 '; //2
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789 '; //3
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789 '; //4
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789|c'; //500
+        $array0[] = $msg;
+
+        $msg = 'Bkey:';
+        $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789|c';
+        $array0[] = $msg;
+
+        $reduced = $statsd->reduceCount($array0);
+
+        $this->assertEquals($array0[0], $reduced[0]);
+        $this->assertEquals($array0[1], $reduced[1]);
+    }
+
+
+
+    public function testMultiplePacketsWithReducing()
+    {
+
+        $msg = 'A23456789 123456789 123456789 123456789 123456789 123456789 
123456789 123456789 123456789 123456789';
+        $array0[] = $msg;
+        $array0[] = $msg;
+        $array0[] = $msg;
+        $array0[] = $msg;
+        $array0[] = $msg;
+        $array0[] = $msg;
+        $array0[] = $msg;
+        $array0[] = $msg;
+
+        $total = count($array0) * strlen($msg);
+
+        $reducedPacketsAssertion = (int) ceil($total / 
StatsdClientInterface::MAX_UDP_SIZE_STR);
+
+
+        $mockSender = $this->mockSenderWithAssertionOnWrite();
+        $statsd = new  StatsdClient($mockSender, true, false);
+        $reduced = $statsd->reduceCount($array0);
+
+        $this->assertEquals($reducedPacketsAssertion, count($reduced));
+    }
+
+    public function testSampleRate()
+    {
+        $senderMock = 
$this->getMock('Liuggio\StatsdClient\Sender\SenderInterface');
+        $senderMock
+            ->expects($this->once())
+            ->method('open')
+            ->will($this->returnValue(true))
+        ;
+        $senderMock
+            ->expects($this->once())
+            ->method('write')
+            ->with($this->anything(), 'foo|@0.2')
+        ;
+        $client = new StatsdClient($senderMock, false, false);
+
+        $client->send(
+            'foo',
+            0.2
+        );
+    }
+}
diff --git 
a/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php
 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php
new file mode 100755
index 0000000..144f629
--- /dev/null
+++ 
b/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace Liuggio\StatsdClient\Factory;
+
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+
+class StatsDataFactoryTest extends \PHPUnit_Framework_TestCase
+{
+    private $statsDataFactory;
+
+    public function setUp()
+    {
+        $this->statsDataFactory = new 
StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData');
+    }
+
+    public function testProduceStatsdData()
+    {
+        $key = 'key';
+        $value='val';
+
+        $obj = $this->statsDataFactory->produceStatsdData($key, $value);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertEquals($value, $obj->getValue());
+    }
+
+    public function testTiming()
+    {
+        $key = 'key';
+        $value = microtime();
+        $valueFloat = (string) floatval($value);
+
+        $obj = $this->statsDataFactory->timing($key, $value);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertContains($valueFloat, $obj->getValue());
+        $this->assertContains('ms', $obj->getMetric());
+    }
+
+    public function testProduceStatsdDataDecrement()
+    {
+        $key = 'key';
+        $value = -1;
+        $stringValue = intval($value);
+
+        $obj = $this->statsDataFactory->produceStatsdData($key, $value);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertEquals($stringValue, $obj->getValue());
+        $this->assertEquals('c', $obj->getMetric());
+    }
+
+    public function testGauge()
+    {
+        $key = 'key';
+        $value = 1000;
+        $stringValue = (string) intval($value);
+
+        $obj = $this->statsDataFactory->gauge($key, $value);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertEquals($stringValue, $obj->getValue());
+        $this->assertEquals('g', $obj->getMetric());
+    }
+
+    public function testDecrement()
+    {
+        $key = 'key';
+        $value = -1;
+        $stringValue = intval($value);
+
+        $obj = $this->statsDataFactory->decrement($key);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertEquals($stringValue, $obj->getValue());
+        $this->assertEquals('c', $obj->getMetric());
+    }
+
+    public function testcreateStatsdDataIncrement()
+    {
+        $key = 'key';
+        $value = 1;
+        $stringValue = intval($value);
+
+        $obj = $this->statsDataFactory->increment($key);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertEquals($stringValue, $obj->getValue());
+        $this->assertEquals('c', $obj->getMetric());
+    }
+
+    public function testCreateStatsdDataUpdateCount()
+    {
+        $key = 'key';
+        $value = 10;
+        $stringValue = intval($value);
+
+        $obj = $this->statsDataFactory->updateCount($key, 10);
+        $this->assertEquals($key, $obj->getKey());
+        $this->assertEquals($stringValue, $obj->getValue());
+        $this->assertEquals('c', $obj->getMetric());
+    }
+}
diff --git a/liuggio/statsd-php-client/tests/bootstrap.php 
b/liuggio/statsd-php-client/tests/bootstrap.php
new file mode 100644
index 0000000..0594a46
--- /dev/null
+++ b/liuggio/statsd-php-client/tests/bootstrap.php
@@ -0,0 +1,5 @@
+<?php
+
+
+$loader = require_once __DIR__ . "/../vendor/autoload.php";
+$loader->add('Liuggio\\', __DIR__);
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/192252
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icbf571bff615463348ea164820599abfa7c95cce
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vendor
Gerrit-Branch: master
Gerrit-Owner: Ori.livneh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to