Awesome
CarlosIO\Geckoboard
A PHP library for pushing data into Geckoboard custom widgets (http://www.geckoboard.com/developers/custom-widgets/widget-types)
Installation
The best way to install the library is by using Composer. Add the following to composer.json
in the root of your project:
{
"require": {
"carlosio/geckoboard": "1.*"
}
}
Then, on the command line:
curl -s http://getcomposer.org/installer | php
php composer.phar install
Use the generated vendor/autoload.php
file to autoload the library classes.
Usage
require __DIR__ . '/vendor/autoload.php';
use CarlosIO\Geckoboard\Widgets\NumberAndSecondaryStat;
use CarlosIO\Geckoboard\Client;
$widget = new NumberAndSecondaryStat();
$widget->setId('<your widget id>');
$widget->setMainValue(123);
$widget->setSecondaryValue(238);
$widget->setMainPrefix('EUR');
$geckoboardClient = new Client();
$geckoboardClient->setApiKey('<your token>');
$geckoboardClient->push($widget);
Widget: Number and optional secondary stat
use CarlosIO\Geckoboard\Widgets\NumberAndSecondaryStat;
use CarlosIO\Geckoboard\Client;
$widget = new NumberAndSecondaryStat();
$widget->setId('<your widget id>');
$widget->setMainValue(123);
$widget->setSecondaryValue(238);
$widget->setMainPrefix('EUR');
$geckoboardClient = new Client();
$geckoboardClient->setApiKey('<your token>');
$geckoboardClient->push($widget);
Widget: RAG numbers only
use CarlosIO\Geckoboard\Data\Entry;
use CarlosIO\Geckoboard\Widgets\RagNumbers;
use CarlosIO\Geckoboard\Client;
$widget = new RagNumbers();
$widget->setId('<your widget id>');
$redData = new Entry();
$redData->setValue(132)->setText('This is the red description');
$widget->setRedData($redData);
$amberData = new Entry();
$amberData->setValue(134)->setText('This is the amber description');
$widget->setAmberData($amberData);
$greenData = new Entry();
$greenData->setValue(34)->setText('This is the green description');
$widget->setGreenData($greenData);
$geckoboardClient->push($widget);
Widget: RAG column and numbers
use CarlosIO\Geckoboard\Data\Entry;
use CarlosIO\Geckoboard\Widgets\RagColumnAndNumbers;
use CarlosIO\Geckoboard\Client;
$widget = new RagColumnAndNumbers();
$widget->setId('<your widget id>');
$redData = new Entry();
$redData->setValue(132)->setText('This is the red description');
$widget->setRedData($redData);
$amberData = new Entry();
$amberData->setValue(13)->setText('This is the amber description');
$widget->setAmberData($amberData);
$greenData = new Entry();
$greenData->setValue(3)->setText('This is the green description');
$widget->setGreenData($greenData);
$geckoboardClient->push($widget);
Widget: Text
use CarlosIO\Geckoboard\Widgets\Text;
use CarlosIO\Geckoboard\Data\Text\Item;
use CarlosIO\Geckoboard\Client;
$widget = new Text();
$widget->setId('<your widget id>');
$firstItem = new Item();
$secondItem = new Item();
$firstItem->setText('Test message 1');
$secondItem->setText('Test message 2');
$secondItem->setType(Item::TYPE_ALERT);
$widget->addItem($firstItem);
$widget->addItem($secondItem);
$geckoboardClient->push($widget);
Widget: Funnel
use CarlosIO\Geckoboard\Data\Funnel\Entry;
use CarlosIO\Geckoboard\Widgets\Funnel;
$widget = new Funnel();
$widget->setId('<your widget id>');
$widget->setType('reversed');
$widget->setShowPercentage(false);
$error = new Entry();
$error->setLabel('Step 1')->setValue(87809);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 2')->setValue(70022);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 3')->setValue(63232);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 4')->setValue(53232);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 5')->setValue(32123);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 6')->setValue(23232);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 7')->setValue(12232);
$widget->addEntry($error);
$error = new Entry();
$error->setLabel('Step 8')->setValue(2323);
$widget->addEntry($error);
$geckoboardClient->push($widget);
Widget: PieChart
use CarlosIO\Geckoboard\Data\PieChart\Entry;
use CarlosIO\Geckoboard\Widgets\PieChart;
$widget = new PieChart();
$widget->setId('<your widget id>');
$entry = new Entry();
$entry->setLabel('May')->setValue(100)->setColor('ffff10');
$widget->addEntry($entry);
$entry = new Entry();
$entry->setLabel('June')->setValue(160)->setColor('ffaa0a');
$widget->addEntry($entry);
$entry = new Entry();
$entry->setLabel('July')->setValue(300)->setColor('ff5505');
$widget->addEntry($entry);
$entry = new Entry();
$entry->setLabel('August')->setValue(140)->setColor('ff0000');
$widget->addEntry($entry);
$geckoboardClient->push($widget);
Widget: Geck-o-Meter
use CarlosIO\Geckoboard\Data\Entry;
use CarlosIO\Geckoboard\Widgets\GeckoMeter;
$widget = new GeckoMeter();
$widget->setId('<your widget id>');
$widget->setMinData((new Entry())->setValue(0));
$widget->setMaxData((new Entry())->setValue(100));
$widget->setValue($data);
$geckoboardClient->push($widget);
Widget: Map
use CarlosIO\Geckoboard\Data\Point;
use CarlosIO\Geckoboard\Widgets\Map;
$widget = new Map();
$widget->setId('<your widget id>');
$point = new Point();
$point->setSize(10)->setColor('FF0000')->setLatitude('40.416775')->setLongitude('-3.70379');
$widget->addPoint($point);
$geckoboardClient->push($widget);
Widget: LineChart
use CarlosIO\Geckoboard\Widgets\LineChart;
$widget = new LineChart();
$widget->setId('<your widget id>');
$widget->setItems(array(1, 1.23));
$widget->setColour("ff0000");
$widget->setAxis(LineChart::DIMENSION_X, array("min", "max"));
$widget->setAxis(LineChart::DIMENSION_Y, array("bottom", "top"));
$geckoboardClient->push($widget);
Widget: List
use CarlosIO\Geckoboard\Data\ItemList\Label;
use CarlosIO\Geckoboard\Data\ItemList\Title;
use CarlosIO\Geckoboard\Widgets\ItemList;
$widget = new ItemList();
$widget->setId('<your widget id>');
$title = new Title();
$title->setText("Title text");
$title->setHighlight(true);
$title2 = new Title();
$title2->setText("Title2 text");
$title2->setHighlight(false);
$label = new Label();
$label->setName("Label name");
$label->setColor("red");
$label2 = new Label();
$label2->setName("Label2 name");
$label2->setColor("blue");
$widget->addItem($title, $label, 'description1');
$widget->addItem($title2, $label2, 'description2');
$geckoboardClient->push($widget);
Widget: Monitoring
$widget = (new Monitoring())
->setId('<your widget id>')
->setStatus('Up')
->setDownTime('3 days ago')
->setResponseTime('100 ms');
$geckoboardClient()->push($widget);
Widget: LeaderBoard
$widget = new LeaderBoard();
$widget->setId('<your widget id>')
$item = new Item();
$item->setLabel("Title text")
->setValue(10)
->setPreviousRank(2);
$widget->addItem($item);
$item = new Item();
$item->setLabel("Title text 2")
->setValue(7)
->setPreviousRank(1);
$widget->addItem($item);
$geckoboardClient()->push($widget);
Push more than one widget at the same time
$widgets = array();
$widget = new LineChart();
// Fill your line chart...
$widgets[] = $widget;
$widget = new Map();
// Fill your map...
$widgets[] = $widget;
$geckoboardClient->push($widgets);
Set timeout for pushing widgets
Use setGuzzleConfig()
to pass config options directly to Guzzle.
$geckoboardClient = new Client();
$geckoboardClient->setApiKey('<your token>');
$geckoboardClient->setGuzzleConfig(array('timeout' => 30, 'connect_timeout' => 3));
$geckoboardClient->push($widget);
Testing
In order to run the test, install all dependencies: php composer.phar install
$ bin/phpunit --coverage-text