Start graph on the right

I draw a real time graph with fleet graphs.

$(function () {

    var data = [];
    var dataset;
    var totalPoints = 100;
    var updateInterval = 1000;
    var now = new Date().getTime();    

    function GetData() {

        if (data.length > totalPoints) {
            data.shift();
        }    

        var y = Math.random() * 100;
        var temp = [now += updateInterval, y];

        data.push(temp);    
    }

    var options = {
        series: {
            lines: {
                show: true,
                lineWidth: 1.2,
                fill: true
            }
        },
        xaxis: {
            mode: "time",
            tickSize: [2, "second"],
            tickFormatter: function (v, axis) {
                var date = new Date(v);

                if (date.getSeconds() % 20 == 0) {
                    var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
                    var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
                    var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();

                    return hours + ":" + minutes + ":" + seconds;
                } else {
                    return "";
                }
            },
            axisLabel: "Time",
            axisLabelUseCanvas: true,
            axisLabelFontSizePixels: 12,
            axisLabelFontFamily: 'Verdana, Arial',
            axisLabelPadding: 10
        },
        yaxis: {
            min: 0,
            max: 100,
            tickSize: 5,
            tickFormatter: function (v, axis) {
                if (v % 10 == 0) {
                    return v + "%";
                } else {
                    return "";
                }
            },
            axisLabel: "CPU loading",
            axisLabelUseCanvas: true,
            axisLabelFontSizePixels: 12,
            axisLabelFontFamily: 'Verdana, Arial',
            axisLabelPadding: 6
        },
        legend: {
            labelBoxBorderColor: "#fff"
        },
        grid: {
            backgroundColor: "#000000",
            tickColor: "#008040"
        }
    };

    $(document).ready(function () {
        GetData();

        dataset = [{
            label: "CPU",
            data: data,
            color: "#00FF00"
        }];

        $.plot($("#placeholder"), dataset, options);

        function update() {
            GetData();    
            $.plot($("#placeholder"), dataset, options)
            setTimeout(update, updateInterval);
        }

        update();
    });    
});

I am updating the schedule of each interval. The problem is that the graph always starts to draw on the left. I want the chart to start drawing on the right and keep moving to the left as it updates every interval.

I tried passing data as [null, null], but it throws an exception on the console.

Any better ideas here?

Fiddle

+1
source share
1 answer

Your call time is too long (1,000,000 ms = 1,000 seconds = ~ 17 minutes):

setTimeout(update, 1000000);

, ( ), , :

for (var i = 0; i < totalPoints; i++) {
    data.push([now - (totalPoints - i) * updateInterval, null]);
}

, :

tickFormatter: function (v, axis) {
    var date = new Date(v);
    if (date.getTime() < startDate) {
        return "";
    } else ...

. fiddle, .

+3

Source: https://habr.com/ru/post/1543094/


All Articles