Skip to content

Commit

Permalink
Server traffic chart dynamic update implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
SilverFire committed Feb 25, 2016
1 parent 1e1b697 commit b61bdb0
Show file tree
Hide file tree
Showing 8 changed files with 156 additions and 72 deletions.
28 changes: 21 additions & 7 deletions src/controllers/ServerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@
use hipanel\base\CrudController;
use hipanel\models\Ref;
use hipanel\modules\finance\models\Tariff;
use hipanel\modules\server\helpers\ServerHelper;
use hipanel\modules\server\models\ConsumptionForm;
use hipanel\modules\server\models\Osimage;
use hipanel\modules\server\models\Server;
use hipanel\modules\server\models\ServerSearch;
use hipanel\modules\server\models\ServerUseSearch;
use Yii;
use yii\base\Event;
use yii\helpers\ArrayHelper;
Expand Down Expand Up @@ -102,9 +104,8 @@ public function actions()
}

$blockReasons = $controller->getBlockReasons();
$consumptionFormModel = new ConsumptionForm();

return compact(['model', 'osimages', 'osimageslivecd', 'grouped_osimages', 'panels', 'blockReasons', 'consumptionFormModel']);
return compact(['model', 'osimages', 'osimageslivecd', 'grouped_osimages', 'panels', 'blockReasons']);
},
],
'requests-state' => [
Expand Down Expand Up @@ -256,15 +257,28 @@ public function getVNCInfo($model, $enable = false)
return $vnc;
}

public function actionDrawUsage($id, $type, $from, $to, $groupBy)
public function actionDrawChart()
{
if (!in_array($type, ['traffic', 'bandwidth'])) {
$post = Yii::$app->request->post();
if (!in_array($post['type'], ['traffic', 'bandwidth'])) {
throw new NotFoundHttpException();
}

$model = ServerSearch::find();

return $this->renderPartial('_' . $type . '_consumption', ['model' => $model]);
$searchModel = new ServerUseSearch();
$dataProvider = $searchModel->search([]);
$dataProvider->pagination = false;
$dataProvider->query->options = ['scenario' => 'get-uses'];
$dataProvider->query->index = 'servers';
$dataProvider->query->type = 'server';
$dataProvider->query->andWhere($post);
$models = $dataProvider->getModels();

list ($labels, $data) = ServerHelper::groupUsesForChart($models);

return $this->renderAjax('_' . $post['type'] . '_consumption', [
'labels' => $labels,
'data' => $data
]);
}

/**
Expand Down
29 changes: 29 additions & 0 deletions src/helpers/ServerHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace hipanel\modules\server\helpers;

use hipanel\modules\server\models\ServerUse;
use yii\helpers\ArrayHelper;

class ServerHelper
{
public static function groupUsesForChart($uses)
{
$labels = [];
$data = [];

ArrayHelper::multisort($uses, 'date');

foreach ($uses as $use) {
/** @var ServerUse $use */
$labels[$use->date] = $use;
$data[$use->type][] = $use->getDisplayAmount();
}

foreach ($labels as $date => $use) {
$labels[$date] = $use->getDisplayDate();
}

return [$labels, $data];
}
}
20 changes: 0 additions & 20 deletions src/models/ConsumptionForm.php

This file was deleted.

21 changes: 2 additions & 19 deletions src/models/Server.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@

namespace hipanel\modules\server\models;

use hipanel\modules\finance\models\RUse;
use hipanel\modules\server\helpers\ServerHelper;
use hipanel\validators\EidValidator;
use hipanel\validators\RefValidator;
use Yii;
use yii\base\NotSupportedException;
use yii\helpers\ArrayHelper;

class Server extends \hipanel\base\Model
{
Expand Down Expand Up @@ -188,23 +187,7 @@ public function canFullRefuse()

public function groupUsesForCharts()
{
$labels = [];
$data = [];

$uses = $this->uses;
ArrayHelper::multisort($uses, 'date');

foreach ($uses as $use) {
/** @var ServerUse $use */
$labels[$use->date] = $use;
$data[$use->type][] = $use->getDisplayAmount();
}

foreach ($labels as $date => $use) {
$labels[$date] = $use->getDisplayDate();
}

return [$labels, $data];
return ServerHelper::groupUsesForChart($this->uses);
}

public function getUses()
Expand Down
32 changes: 32 additions & 0 deletions src/models/ServerUseSearch.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php
/**
* @link http://hiqdev.com/hipanel-module-server
* @license http://hiqdev.com/hipanel-module-server/license
* @copyright Copyright (c) 2015 HiQDev
*/

namespace hipanel\modules\server\models;

use hipanel\modules\finance\models\RUse;
use Yii;
use yii\base\InvalidParamException;

class ServerUseSearch extends ServerUse
{
use \hipanel\base\SearchModelTrait;

public function formName()
{
return 'ServerUse';
}

public static function index()
{
return 'Servers';
}

public static function type()
{
return 'Server';
}
}
5 changes: 4 additions & 1 deletion src/views/server/_bandwidth_consumption.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
use hipanel\widgets\ChartJs;
use yii\helpers\Html;

list($labels, $data) = $model->groupUsesForCharts();
/**
* @var array $labels
* @var array $data
*/

?>

Expand Down
11 changes: 7 additions & 4 deletions src/views/server/_traffic_consumption.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,21 @@
use hipanel\widgets\ChartJs;
use yii\helpers\Html;

list($labels, $data) = $model->groupUsesForCharts();
/**
* @var array $labels
* @var array $data
*/

?>

<div class="row traffic-consumption">
<div class="row traffic-consumption-chart-wrapper">
<div class="col-md-12">
<?php
if ($data === []) {
echo Yii::t('hipanel/server', 'Traffic consumption history is not available for this server');
} else {
echo Html::tag('div', ChartJs::widget([
'id' => 'traffic_consumption_chart',
'type' => 'Line',
'legend' => true,
'data' => [
Expand Down Expand Up @@ -42,9 +46,8 @@
'responsive' => true,
'maintainAspectRatio' => true,
]
]), ['class' => 'traffic-chart-wrapper']);
]));
}

?>
</div>
</div>
82 changes: 61 additions & 21 deletions src/views/server/view.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use hipanel\widgets\Pjax;
use hipanel\widgets\ClientSellerLink;
use yii\bootstrap\Html;
use yii\helpers\FormatConverter;
use yii\web\JsExpression;

/**
Expand Down Expand Up @@ -186,8 +185,13 @@
$box = Box::begin(['renderBody' => false]);
$box->beginHeader();
echo $box->renderTitle(Yii::t('hipanel/server', 'Traffic consumption'));
$box->beginTools(); ?>
<div class="form-inline">
$box->beginTools();
echo Html::beginForm(['draw-chart'], 'post', ['class' => 'form-inline traffic-consumption']);
echo Html::hiddenInput('id', $model->id);
echo Html::hiddenInput('type', 'traffic');
echo Html::hiddenInput('from');
echo Html::hiddenInput('till'); ?>

<div class="form-group">
<button type="button" class="btn btn-sm" id="traffic-consumption-period-btn">
<i class="fa fa-calendar"></i>
Expand All @@ -197,32 +201,45 @@
<i class="fa fa-caret-down"></i>
</button>

<?= Html::dropDownList('afs', 'monthly', [
'daily' => Yii::t('hipanel/server', 'Daily'),
'weekly' => Yii::t('hipanel/server', 'Weekly'),
'monthly' => Yii::t('hipanel/server', 'Monthly'),
<?= Html::dropDownList('aggregation', 'month', [
'day' => Yii::t('hipanel/server', 'Daily'),
'week' => Yii::t('hipanel/server', 'Weekly'),
'month' => Yii::t('hipanel/server', 'Monthly'),
], ['class' => 'form-control input-sm']) ?>
</div>
</div>

<?php
echo \omnilight\widgets\DateRangePicker::widget([
'model' => $consumptionFormModel,
'attribute' => 'range',
'name' => false,
'options' => [
'tag' => false,
'id' => 'traffic-consumption-period-btn'
],
'clientEvents' => [
'apply.daterangepicker' => new JsExpression("function (event, picker) {
var span = $('#traffic-consumption-period-btn span');
span.text(picker.startDate.format('ll') + ' - ' + picker.endDate.format('ll'));
span.data({start: picker.startDate.format(), end: picker.endDate.format()});
}"),
'cancel.daterangepicker' => new JsExpression("function (event, picker) {
var span = $('#traffic-consumption-period-btn span');
span.text(span.data('prompt')).data({start: null, end: null});
}"),
'apply.daterangepicker' => new JsExpression(/** @lang JavaScript */"
function (event, picker) {
var form = $(picker.element[0]).closest('form');
var span = form.find('#traffic-consumption-period-btn span');
span.text(picker.startDate.format('ll') + ' - ' + picker.endDate.format('ll'));
form.find('input[name=from]').val(picker.startDate.format());
form.find('input[name=till]').val(picker.endDate.format());
form.trigger('change.updateChart');
}
"),
'cancel.daterangepicker' => new JsExpression(/** @lang JavaScript */"
function (event, picker) {
var form = $(event.element[0]).closest('form');
var span = form.find('#traffic-consumption-period-btn span');
span.text(span.data('prompt'));
form.find('input[name=from]').val('');
form.find('input[name=till]').val('');
form.trigger('change.updateChart');
}
"),
],
'clientOptions' => [
'ranges' => [
Expand All @@ -232,10 +249,32 @@
]
]
]);

$this->registerJs(/** @lang JavaScript */"
$('.traffic-consumption').on('change.updateChart', function (event) {
var defaultOptions = {
url: $(this).attr('action'),
data: $(this).serializeArray(),
type: 'post',
beforeSend: function () {
$('.traffic-consumption').closest('.box').append($('<div>').addClass('overlay').html($('<i>').addClass('fa fa-refresh fa-spin')));
},
success: function (html) {
$('.traffic-consumption').closest('.box').find('.overlay').remove();
$('.traffic-consumption-chart-wrapper').replaceWith(html);
}
};
event.preventDefault();
$.ajax(defaultOptions);
});
"); ?>
<?php
echo Html::endForm();
$box->endTools();
$box->endHeader();
$box->beginBody();
echo $this->render('_traffic_consumption', ['model' => $model]);
list($labels, $data) = $model->groupUsesForCharts();
echo $this->render('_traffic_consumption', ['labels' => $labels, 'data' => $data]);
$box->endBody();
$box->end();
?>
Expand All @@ -249,7 +288,8 @@
echo $box->renderTitle(Yii::t('hipanel/server', 'Bandwidth consumption'));
$box->endHeader();
$box->beginBody();
echo $this->render('_bandwidth_consumption', ['model' => $model]);
list($labels, $data) = $model->groupUsesForCharts();
echo $this->render('_bandwidth_consumption', ['labels' => $labels, 'data' => $data]);
$box->endBody();
$box->end();
?>
Expand Down

0 comments on commit b61bdb0

Please sign in to comment.