mare06xa / geckoboard
Geckoboard - Laravel 桥接器。
dev-master
2019-10-10 07:42 UTC
Requires
- guzzlehttp/guzzle: ^6.3
- illuminate/support: ~5
- symfony/yaml: ^4.2
This package is auto-updated.
Last update: 2024-09-19 22:04:35 UTC
README
目前支持Widgets PUSH API,Widgets POLLING API和Datasets API。
安装
使用 composer 安装此包。
composer require mare06xa/geckoboard
在Laravel 5.5及以上版本中,该包将自动注册服务提供者。在Laravel 5.4中,您必须安装此服务提供者。
// config/app.php 'providers' => [ ... Mare06xa\Geckoboard\GeckoboardServiceProvider::class, ... ];
在Laravel 5.5及以上版本中,该包将自动注册外观。在Laravel 5.4中,您必须手动安装外观。
// config/app.php 'aliases' => [ ... 'Geckoboard' => Mare06xa\Geckoboard\GeckoboardFacade::class, ... ];
创建配置文件。
php artisan vendor:publish
如有提示,请选择 Mare06xa\Geckoboard\GeckoboardServiceProvider
。
配置
您需要从Geckoboard获取API令牌。
- 前往 https://www.geckoboard.com/,注册并确认您的账户
- 前往您的个人资料设置并复制您的API令牌
将此行添加到您的 .env
配置文件中
GECKO_TOKEN={Insert your token here}
设置到Datasets配置YAML文件的路径
// config/geckoboard.php return [ ... 'datasets_config' => base_path('resources/configs/datasets.yaml') ... ];
Widgets Polling API
基本用法
首先在Geckoboard上设置您的widget。
- 方法:轮询
- 数据源URL:{您的应用程序URL,包含正确的端点,返回JSON数据}
- 数据源格式:JSON
Route::get('test', function () { $geckoMeter = Geckoboard::pollingAPI()->geckoMeter(); $geckoMeter->value(23) ->min(0) ->max(100); return $geckoMeter->toJSON(); });
Dataset API
基本用法
use Mare06xa\Geckoboard\Geckoboard; class SomeClass { public function foo() { $dataset = Geckoboard::datasetAPI()->createDataset('testing.id'); $dataset->schema() ->addNumber() ->setKey('amount') ->setName('Amount') ->addData([819, 409, 164, 180]); $dataset->schema() ->addDatetime() ->setKey('timestamp') ->setName('Date') ->addData(["2018-01-01T12:00:00Z", "2018-01-02T12:00:00Z", "2018-01-03T12:00:00Z"]) ->isUnique(); $apiResponse1 = $dataset->applySchema(); $apiResponse2 = $dataset->appendData(); } }
与数据库的基本用法
use Mare06xa\Geckoboard\Geckoboard; class SomeClass { public function foo() { $sqlDataset = Geckoboard::datasetAPI() ->withDB() ->createDataset('testing.id'); $sqlDataset->schema() ->addNumber() ->setKey('amount') ->setName('Amount'); $sqlDataset->schema() ->addNumber() ->setKey('amount2') ->setName('Amount 2'); $sqlDataset->schema() ->addString() ->setKey('desc') ->setName('Description'); // Set DB connection driver (optional) $sqlDataset->setDB('mysql'); // Use dataset method for query building $dbData = $sqlDataset ->dbQuery() ->table('test_table') ->get(['col1', 'col2', 'col3']); // Or acquire data directly with Laravel query builder $dbData = DB::table('test_table')->get(['col1', 'col2', 'col3']); $sqlDataset->setData($dbData); $apiResponse1 = $sqlDataset->applySchema(); $apiResponse2 = $sqlDataset->replaceData(); } }
从YAML文件加载数据集(将模式应用到数据集)
示例YAML文件
dataset.testid2: type: sql schema: amount: type: number name: Amount amount2: type: number name: Amount2 optional: true desc: type: string name: Description unique: true dataset.testid: type: standard schema: amount: type: number name: Amount timestamp: type: datetime name: Date unique: true
代码
$configPath = config('geckoboard.datasets_config'); $datasetID = "testing.id"; $sqlDataset = Geckoboard::datasetAPI()->loadDatasetFromFile($configPath, $datasetID); $dbData = $sqlDataset ->dbQuery() ->table('test_table') ->get(['col1', 'col2', 'col3']); $sqlDataset->setData($dbData); $apiResponse = $sqlDataset->replaceData();
Widgets Push API
基本用法
use Mare06xa\Geckoboard\Geckoboard; class SomeClass { public function foo() { // Widget ID is obtained on Geckoboard by clicking "Edit" in the widget options... $widget = Geckoboard::pushAPI()->widgetClass($widgetID); // Optionally you can set different API Token if you are working with multiple accounts... $widget->setApiToken($apiToken); $widget->firstMethod() ->secondMethod(); $apiResponse = $widget->push(); } }
柱状图
$barChart = Geckoboard::pushAPI()->barChart($widgetID); // ... set data $apiResponse = $barChart->push();
X轴
// Standard format $barChart->xAxis() ->setLabels("January", "February", "March"); // Datetime format $barChart->xAxis() ->setFormat(Format::DATETIME_ISO_8601) ->setLabels("2019-01-01", "2019-01-02"); // Also accepts date in format "Y-m" => "2019-12" ->addLabel("2019-01-03")
Y轴
// Decimal format $barChart->yAxis() ->addData($numberArray, "Data Label 1"); // Currency format $barChart->yAxis() ->addData($numberArray, "Data Label 1") ->addData($numberArray2, "Data Label 2") ->setFormat(Format::CURRENCY) ->setCurrency("USD"); // Percentage format $barChart->yAxis() ->addData($numberArray, "Data Label 1") ->setFormat(Format::PERCENT);
子弹图
$bulletGraph = Geckoboard::pushAPI()->bulletGraph($widgetID); $bulletGraph->setOrientation(Orientation::HORIZONTAL); $itemNo1 = new BulletGraphItem(); $itemNo1->setLabel("Revenue 2014 YTD") ->setAxisData([0, 200, 400, 600, 800, 1000]); $itemNo1->range() ->red(0, 400) ->amber(401, 700) ->green(701, 1000); $itemNo1->measure() ->current(0, 400) ->projected(100, 900); $itemNo1->setComparative(600); $bulletGraph->items() ->add($itemNo1); $apiResponse = $bulletGraph->push();
漏斗图
$funnel = Geckoboard::pushAPI()->funnel($widgetID); $funnel->items() ->add(87809, "Step 1") ->add(70022, "Step 2") ->add(63232, "Step 3") ->add(53232, "Step 4") ->add(32123, "Step 5") ->add(23232, "Step 6") ->add(12232, "Step 7") ->add(10001, "Step 8"); $apiResponse = $funnel->push();
Geck-o-Meter
$geckoMeter = Geckoboard::pushAPI()->geckoMeter($widgetID); $geckoMeter->value(23) ->min(0) ->max(100); $apiResponse = $geckoMeter->push();
排行榜
$leaderBoard = Geckoboard::pushAPI()->leaderBoard($widgetID); $leaderBoard->items()->setFormat(Format::PERCENT); for ($i = 0; $i < 25; $i++) { $value = $faker->randomFloat(4, 0.01, 0.09); $label = ucfirst($faker->word); $prevRank = $faker->numberBetween(0, 25); if ($faker->boolean(50)) { $leaderBoard->items()->add($value, $label); } else { $leaderBoard->items()->add($value, $label, $prevRank); } } $leaderBoard->items() // Sort by value in descending order... ->sort(); // To sort in ascending order, pass argument SORT_ASC... $apiResponse = $leaderBoard->push();
折线图
$lineChart = Geckoboard::pushAPI()->lineChart($widgetID); $lineChart->xAxis() ->setFormat(Format::DATETIME_ISO_8601); $lineChart->yAxis() ->setFormat(Format::CURRENCY) ->setCurrency("EUR") ->addLine([1, 2, 3, 4, 5], 'Profit [€]', Carbon::now()->addDay()->format('Y-m-d')) ->addLine([2, 3, 4, 5, 6], 'Expenses [€]', Carbon::now()->addDay()->format('Y-m-d')); $apiResponse = $lineChart->push();
列表
$list = Geckoboard::pushAPI()->list($widgetID); $list->items() ->add("Chrome", "40327 visits", "New!") ->add("Safari", "11577 visits", "New!", "#00FF00") ->add("Firefox", "10295 visits") ->add("MS Edge", "3578 visits") ->add("Opera", "499 visits"); $apiResponse = $list->push();
地图
$map = Geckoboard::pushAPI()->map($widgetID); $map->points() ->prepareCity("London", "GB") ->setSize(10) ->add(); $map->points() ->prepareCity("San Francisco", "US") ->add(); $map->points() ->prepareLatitudeLongitude("22.2670", "114.1880") ->setColor("#D8F709") ->add(); $map->points() ->prepareLatitudeLongitude("-33.94336", "18.896484") ->setSize(5) ->add(); $map->points() ->prepareHost("geckoboard.com") ->setColor("#77DD77") ->setSize(6) ->add(); $map->points() ->prepareIP("178.125.193.227") ->add(); $apiResponse = $map->push();
监控
$monitoring = Geckoboard::pushAPI()->monitoring($widgetID); $monitoring->status(MonitoringStatus::UP) ->downTime("9 days ago") ->msResponseTime(593); $apiResponse = $monitoring->push();
数字和次要统计
$numberStat = Geckoboard::pushAPI()->numberSecondaryStat($widgetID); $numberStat->items() ->add(700000, "", "€"); $apiResponse = $numberStat->push();
饼图
$pieChart = Geckoboard::pushAPI()->pieChart($widgetID); $pieChart->items() ->add(100, "May", "#13699C") ->add(160, "June", "#198ACD") ->add(300, "July", "#60B8EC") ->add(140, "August", "#A4D7F4"); $apiResponse = $pieChart->push();
RAG
$RAG = Geckoboard::pushAPI()->RAG($widgetID); $RAG->items() ->first(16, "Long past due") ->second(64, "Overdue") ->third(32, "Due") ->reverse() ->setPrefix("€"); $apiResponse = $RAG->push();
文本
$text = Geckoboard::pushAPI()->text($widgetID); $text->items() ->add("Unfortunately, as you probably already know, people") ->add("As you might know, I am a full time Internet", TextType::ALERT); $apiResponse = $text->push();