mysql highcharts php rtg - PullRequest
       2

mysql highcharts php rtg

0 голосов
/ 06 марта 2012

Сначала я хочу сказать, что я посмотрел на форум stackoverflow и highcharts, но не смог найти ответ на свой вопрос, поэтому я надеюсь, что какая-то добрая душа сможет предоставить мне рабочий пример моей проблемы.

Я пытаюсь создать сплайн-диаграмму (не обновляемую автоматически) из данных в базе данных mysql, созданной rtg (rtg.sourceforge.net)

Я не программист, поэтому, пожалуйста, потерпите меня, для создания чистого / правильного кода (включая копирование / вставку из нескольких других источников).

Существует 3 таблицы id (INT), dtime (DATETIME) и счетчик (BIGINT) со следующим примером:

1   2012-03-05 17:49:06 16991
2   2012-03-05 17:50:06 3774
3   2012-03-05 17:50:06 1272

(1,2,3 - имена интерфейсов)

Я пытаюсь создать с помощью графика, который будет показывать трафик за последний час.

Этосодержимое моего data.php

<?php
$con = mysql_connect("localhost","root","XXXXXXXX");

if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("rtg", $con);

$result = mysql_query("SELECT * FROM ifInOctets_1 ORDER BY dtime DESC LIMIT 0,60");
     while($row = mysql_fetch_array($result)) {
  echo $row['dtime'] . "\t" . $row['counter']. "\n";
}

mysql_close($con);
?>

Выходные данные data.php имеют следующий формат:

2012-03-05 20:53:31 245891 2012-03-05 20:53:31  8530 2012-03-05 20:53:31    6424577

rtg опрашивает 3 раза в минуту, так что это приводит к 180Выведите «поля» из вышеуказанного SQL-запроса.

Этосодержимое моего index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 


<title>Chart 1 Hour</title>

<script type="text/javascript" src="js/jquery-1.7.1.min.js" ></script>
<script type="text/javascript" src="js/highcharts.js" ></script>
<script type="text/javascript" src="js/themes/gray.js"></script>

<script type="text/javascript">
        var chart;
                        $(document).ready(function() {
                                var options = {
                                        chart: {
                                                renderTo: 'container',
                                                defaultSeriesType: 'spline',
                                                marginRight: 130,
                                                marginBottom: 25
                                        },
                                        credits: {
                                           enabled: false
                                        },
                                        title: {
                                                text: 'Bits',
                                                x: -20 //center
                                        },
                                        subtitle: {
                                                text: '',
                                                x: -20
                                        },
                                        xAxis: {
                                                type: 'datetime',
                                                tickInterval: 3600 * 1000, // one hour
                                                tickWidth: 0,
                                                gridLineWidth: 1,
                                                labels: {
                                                        align: 'center',
                                                        x: -3,
                                                        y: 20,
                                                        formatter: function() {
                                                                return Highcharts.dateFormat('%Y%m%d%H%M%S', this.value);
                                                        }
                                                }
                                        },
                                        yAxis: {
                                                title: {
                                                        text: 'Bits'
                                                },
                                                plotLines: [{
                                                        value: 0,
                                                        width: 1,
                                                        color: '#808080'
                                                }]
                                        },
                                        tooltip: {
                                                formatter: function() {
                                                return Highcharts.dateFormat('%Y%m%d%H%M%S', this.x-(1000*3600)) +'-'+ Highcharts.dateFormat('%l%p', this.x) +': <b>'+ this.y + '</b>';
                                                }
                                        },
                                        legend: {
                                                layout: 'vertical',
                                                align: 'right',
                                                verticalAlign: 'top',
                                                x: -10,
                                                y: 100,
                                                borderWidth: 0
                                        },
                                        series: [{
                                                name: 'BlaBla'
                                        }]
                                }
                                // Load data asynchronously using jQuery. On success, add the data
                                // to the options and initiate the chart.
                                // This data is obtained by exporting a GA custom report to TSV.
                                // http://api.jquery.com/jQuery.get/
                                jQuery.get('data.php', null, function(tsv) {
                                        var lines = [];
                                        traffic = [];
                                        try {
                                                // split the data return into lines and parse them
                                                tsv = tsv.split(/\n/g);
                                                jQuery.each(tsv, function(i, line) {
                                                        line = line.split(/\t/);
                                                        date = Date.parse(line[0] +' UTC');
                                                        traffic.push([
                                                                date,
                                                                parseInt(line[1].replace(',', ''), 10)
                                                        ]);
                                                });
                                        } catch (e) {  }
                                        options.series[0].data = traffic;
                                        chart = new Highcharts.Chart(options);
                                });
                        });
</script>
</head>
<body>

<div id="container" style="width: 960px; height: 250px; margin: 0 auto"></div>

</body>
</html>

Когда я запускаю код, похоже, что все данные ограничены в левой части графика.(Извините, не удалось опубликовать снимок экрана, пользователь первый раз.)

Так как для highcharts требуется дата + время в миллисекундах, я попытался (среди нескольких других операторов sql select) изменить Highcharts.dateFormat, но без каких-либоудачи.

Заранее спасибо.

1 Ответ

0 голосов
/ 29 октября 2012

Вам необходимо преобразовать дату возврата в количество миллисекунд с начала эпохи.

То есть SELECT * FROM ifInOctets_1 ORDER BY dtime DESC LIMIT 0,60 станет:

`SELECT UNIX_TIMESTAMP (dtime) * 1000, счетчик FROM ifInOctets_1 ORDER BY dtime DESC LIMIT 0,60"

Таким образом, вы получите правильную временную метку в мс, которую ожидают старшие диаграммы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...