2013-08-02 5 views
0

Моя задача - динамически добавлять серии и постоянно обновлять свои данные, которые получаются вызовами ajax. Я знаю, что серия может быть добавлена ​​динамически, объявив глобальный funciton global. и используя функцию series.addseries(), а также данные можно обновить, используя запрос настройки для ajax вызова и обновления точек с помощью функции series.addpoint().Как динамически добавлять несколько рядов и динамически обновлять свои данные

Я сделал обе работы отдельно. но когда я совмещаю оба метода, данные не добавляются в highchart. Я провел много исследований по этому вопросу, и я не нахожу причины не добавлять данные. infact скрипт висит в браузере. Я проверил объект серии, в котором обрабатываются x-данные и y-данные. Единственное различие, которое я нахожу, - это поле с грязным полем и isDirtydata, равно true. не знаю причину. вот полный код

var serverUrl = 'http://'+window.location.hostname+':8000' 
Highcharts.setOptions({ 
    global: { 
     useUTC: false 
    } 
}); 
data={} 
$(document).ready(function(){ 

    $(function() { 
     console.log("highcharts") 
     $('#first').highcharts({ 
       chart: { 
        type: 'spline', 
        //marginRight: 150, 
        marginBottom: 5, 
        events: { 
         load: requestData(data) 
          } 
       }, 
       title: { 
        text: 'Server Monitroting Tool' 
       }, 
       subtitle: { 
        text: 'Cpu usage, Memory Usage,Disk Usage,Mongo Usage' 
       }, 
       xAxis: { 
       type: 'datetime', 
       categories: ['TIME'], 
        dateTimeLabelFormats : { 
        hour: '%I %p', 
        minute: '%I:%M %p' 
       } 
       }, 
       yAxis:{ 
        showEmpty:false 
       }, 

        legend: 
        { 
        backgroundColor: '#F5F5F5', 
        layout: 'horizontal', 
        floating: true, 
        align: 'left', 
        verticalAlign: 'bottom', 
        x: 60, 
        y: 9, 
        shadow: false, 
        border: 0, 
        borderRadius: 0, 
        borderWidth: 0 
       }, 
       series: {} 
      }); 
      }); 
    from_date=new Date().getTime()-60000; 

    function requestData(data) 
    { 
     if(!data) 
     { 
      console.log("default ") 
     } 
     else 
     { 
     console.log("requesting") 
     $.ajax({ 
      url:serverUrl+'/api/fetch_params/', 
      type:'GET', 
      data:data, 
      success:function(response) 
      { 
      console.log("in success") 
      //data = {'type':TypeOfParameter,'hostname':hostname,'sub-type':sub_type,'param':sub_type_parameter,'from-date':from_date} 
      var id=data['sub-type']+data['param'] 
      var series = chart.get(id) 
      shift = series.data.length > 100; // shift if the series is longer than 300 (drop oldest point) 

      response= $.parseJSON(response) 
      var x=data['sub-type'] 
      all_data=response.response.data[x] 

    //    console.log(new Date(from_date),'latest timestamp') 
       console.log(series) 
      console.log("data",all_data) 

      from_date=all_data[all_data.length-1][0] 
//   console.log(from_date) 
//    series.isDirty=false 
//    series.isDirtyData=false 
      for (var i = 0; i < all_data.length; i++) 
      { 
       series.addPoint({ x: all_data[i][0],y: all_data[i][1],id: i},false,shift); 
      } 
      console.log("series object",series) 
    //     chart.redraw(); 
       console.log(" parameter",data) 
       data['from-date']=from_date 

      console.log("data",series.data) 
    //    console.log(chart) 
      setTimeout(requestData(data), 10000); 
      console.log("out of success") 
      }, 

      cache:false, 
      error:function() 
      { 
       console.log("err") 

      } 
     }); 
     } 

    } 

    $.ajax({ 
     url:serverUrl+'/api/fetch_all_servers/', 
     type:'GET', 
     success:function(response){ 
      response = $.parseJSON(response) 
      sd = response.response.all_servers 
      $('input[name=select_menue]').optionTree(sd) 
     }, 
     error:function(){ 
      console.log('error') 
     } 
    }); 

    $('.param-button').live('click',function(e){ 
     e.stopPropagation() 
    }) 

    $('param-select').live('hover',function(){ 
     $(this).find('.type-select').show() 
    }); 

    $('.final_value').live('change',function(){ 
     select_name = 'select_menue_' 
     param_list = [] 
     var param=$('select[name="'+select_name+'"] option:selected').attr('value') 
     while(param){ 
      param_list.push(param) 
      select_name += '_' 
      var param=$('select[name="'+select_name+'"] option:selected').attr('value') 
     } 
     console.log(param_list,"param_list") 
     from_date=new Date().getTime()-300000 //5 minute data 
     hostname=param_list[0] 
     TypeOfParameter= param_list[1] 
     sub_type_parameter=param_list[param_list.length-1] 
     data = {'type':TypeOfParameter,'hostname':hostname,'param':sub_type_parameter,'from-date':from_date} 
     var sub_type; 
     if(param_list.length==4){ 
      sub_type=param_list[2] 
      data['sub-type'] = sub_type 
     } 
     else 
     { 
      sub_type=sub_type_parameter 
     } 
//  console.log(hostname,TypeOfParameter,sub_type,sub_type_parameter) 

     data = {'type':TypeOfParameter,'hostname':hostname,'sub-type':sub_type,'param':sub_type_parameter,'from-date':from_date} 
     requestData(data) 

     $('#loadingmessage').show(); // show the loading message. 


     chart = $('#first').highcharts(); 

     if(TypeOfParameter=='cpu') 
     { 
      console.log("adding axis") 
      chart.addAxis({ // Primary yAxis 


          id:'Cpu_axis'+sub_type_parameter, 
          labels: { 
           formatter: function() { 
            return this.value; 
           }, 
           style: { 
            color: '#89A54E' 
            } 
          }, 
          title: { 
           text: "core "+ sub_type+ " "+sub_type_parameter, 
           style: { 
            color: '#89A54E' 
           } 
          }, 

      lineWidth: 1, 
      lineColor: '#08F' 

         }); 



     console.log("adding series") 
     chart.addSeries({ 
      id:sub_type+sub_type_parameter, 
      name: "core "+sub_type+" "+sub_type_parameter, 
      data :[], 

      tooltip : { 
       valueSuffix: ' %' 
        }, 
       yAxis:'Cpu_axis'+sub_type_parameter 
       }) 
      console.log("series out") 


     } 
     if(TypeOfParameter=='memory') 
     { 
      chart.addAxis ({ 
      id:'memory'+sub_type_parameter, 
      labels:{ 
        formatter: function() { 
            return this.value +'%'; 
           }, 
         style: { 
          color: '#89C54F' 
          } 
        }, 

      title: { 
       text:sub_type+" "+sub_type_parameter 
      }, 
      lineWidth: .5, 
      lineColor: '#08F', 
      opposite: true 
     }); 
     chart.addSeries({ 
      id:sub_type+sub_type_parameter, 
      name: sub_type+'memory usage', 
      data: [], 
      tooltip: { 
     valueSuffix: '%' 
       }, 
      yAxis:'memory'+sub_type_parameter 
     }); 
     } 

    if(TypeOfParameter=='disk') 
     { 
      chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'second', 
       defaultSeriesType: 'spline', 
       events: { 
        load: requestData 
       } 
      }, 
      title: { 

       text: 'disk Usage' 
      }, 
      xAxis: { 
       type: 'datetime', 
       tickPixelInterval: 150, 
       maxZoom: 20 * 1000 
      }, 
      yAxis: { 
       minPadding: 0.2, 
       maxPadding: 0.2, 
       title: { 
        text: 'disk', 
        margin: 80 
       } 
      }, 
      series: [{ 
       id:sub_type+sub_type_parameter, 
       name: 'disk', 
       data: [] 
      }] 
}); 
     } 
    if(TypeOfParameter=='db') 
     { 
      chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'second', 
       defaultSeriesType: 'spline', 
       events: { 
        load: requestData 
       } 
      }, 
      title: { 
       text: 'mongo Usage' 
      }, 
      xAxis: { 
       type: 'datetime', 
       tickPixelInterval: 150, 
       maxZoom: 20 * 1000 
      }, 
      yAxis: { 
       minPadding: 0.2, 
       maxPadding: 0.2, 
       title: { 
        text: 'mmongo', 
        margin: 80 
       } 
      }, 
      series: [{ 
       id:sub_type+sub_type_parameter, 
       name: 'mongo', 
       data: [] 
      }] 
}); 
     } 
    if(TypeOfParameter=='redis') 
     { 
      chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'second', 
       defaultSeriesType: 'spline', 
       events: { 
        load: requestData 
       } 
      }, 
      title: { 
       text: 'redis Usage' 
      }, 
      xAxis: { 
       type: 'datetime', 
       tickPixelInterval: 150, 
       maxZoom: 20 * 1000 
      }, 
      yAxis: { 
       minPadding: 0.2, 
       maxPadding: 0.2, 
       title: { 
        text: 'redis', 
        margin: 80 
       } 
      }, 
      series: [{ 
       id:sub_type+sub_type_parameter, 
       name: 'redis', 
       data: [] 
      }] 
    }); 
        } 
       $('#loadingmessage').hide(); // hide the loading message 




     } 
      ) 
      }); 

я застрял на эту проблему довольно долгое время. и все еще не в состоянии определить решение. вот полный код link кто-то пожалуйста, пожалуйста, помогите. чувство разочарования .. :-(

+0

Это: 'series: {}' должно быть: 'series: []'. Кроме того, я вижу, у вас есть две диаграммы, назначенные одной переменной ..? Обе диаграммы используют одну и ту же функцию requestData()? Я советую начать с одного графика, ane заставить его работать, а затем начать работать с двумя диаграммами. –

+0

hey @ PawełFus серии: {} работал для меня, чтобы добавить несколько серий dyncamilly. также requestData работает с одной серией для меня. теперь я объявил highchart объект глобально, чтобы добавить все серии в один highchart. дайте мне знать, что я делаю неправильно? – jugadengg

+1

Для меня неправильная реклама для серий. Извините, но не увидела и не отладила эту «живую». Я не смогу вам помочь. –

ответ

0

Как вы знаете, метод addPoint опасен при работе с довольно многочисленными точками. Рекомендуется отключать перерисовку за точку при работе со многими новыми точками - больше информации http://api.highcharts.com/highcharts#Series.addPoint(), я замечаю, что вы сделав это уже в инструкции цикла, но почему вы забыли прокомментировать, попробовали ли вы снова включить. Убедитесь, что функция chart.redraw работает, добавив новое событие диаграммы перерисовывания и установив предупреждение или консольный журнал.

Также вы можете попробуйте использовать ниже, как часть ajax, вместо кеша: false. У меня были некоторые проблемы в прошлом. заголовки: {'Cache-Control': 'no-cache'}

Cheers

Смежные вопросы