FusionCharts for Flex > Creating Widgets > Real-time support

The gauges in FusionWidgets suite are real time gauges that can continuously request new data from the server and display the same, without involving any page refreshes. You can specify the URL of the data provider and the time interval (in seconds), after which the gauge will look for new data.

The data provider page should be a page at your server side, which when invoked by linear gauge would output the new data in the format explained below.

 
Real-time data format

The real-time data format for gauges depends on:

  • Value to be passed
  • Whether you're using Message Logger for the chart?
  • Commands for the chart - like stop update etc.

Let's quickly go through the examples meant for each of them.

 
Data value update

In the simplest form, to update the value of a gauge, you need to output the data in the following format:

&value=34

Here, we're just outputting the value 34. So, when FusionWidgets read this value, it updates the chart by setting its value to 34 (if the data is within range).

 
Stopping real-time updates from server

To stop the chart from polling the server for any real-time updates, send the following command from server to perform the task:

&stopUpdate=1

After stopping the update, it can be restarted either using user interaction (right click context menu) or using client side JavaScript.

 
Sending messages pertinent to Message logger
The gauge can display message logger like data streaming charts. There are various parameters, which you can specify for message logger. All of them have been explained in the section "Message Logger".
 
Creating the real-time gauge

To create any real-time gauge, you need to assimilate the following things:

  1. Chart SWF file and FusionCharts JavaScript class
  2. XML file that initializes the chart and tells it where to pull the real time data from
  3. Real time data provider page that provides updated data to chart in real-time data format

We're already familiar with XML for the chart. The new attributes that need to be added for real-time update are as follows:

Attribute Name Type / Range Description
dataStreamURL URL This parameter sets the path of the page, which is supposed to relay real-time data to the chart. If you've special characters as a part of your data stream URL, like ? or &, you need the URL to encode the entire dataStreamURL

This page needs to be on the same sub-domain on which the chart is hosted and invoked from. Otherwise, the Flash sandbox security would restrict it from accessing the data and hence the real-time feature won't work.
Example: dataStreamURL='liveQuote.aspx?name=xyz'
refreshInterval Number For this parameter, you can specify the number of seconds after which the chart will look for new data. This process will occur continuously - i.e., if you specify 5 seconds here, the chart will look for new data after every 5 seconds.
dataStamp String This parameter constantly change the data stamp that can be added to real time data URL, so as to maintain a state. Please see the "Real time capabilities > Adding data-stamp" section.

Shown below is an example chart XML:

<chart lowerLimit='0' upperLimit='100' lowerLimitDisplay='Bad' upperLimitDisplay='Good' palette='1' numberSuffix='%' chartRightMargin='20' decimals='0' dataStreamURL='RealTimeData.asp' refreshInterval='3'>
   <colorRange>
      <color minValue='0' maxValue='75' code='FF654F' label='Bad'/>
      <color minValue='75' maxValue='90' code='F6BD0F' label='Moderate'/>
      <color minValue='90' maxValue='100' code='8BBA00' label='Good'/>
   </colorRange>
   <value>43</value>
   <styles>
      <definition>
         <style type='font' name='myValueFont' bgColor='F1f1f1' borderColor='999999' />
      </definition>
      <application>
         <apply toObject='Value' styles='myValueFont' />
      </application>
   </styles>
</chart>

Here, we've set dataStreamURL='RealTimeData.asp' refreshInterval='3', which notify the chart to poll new data from RealTimeData.asp in every 3 seconds.

For the sake of demo, RealTimeData.asp returns random value within 100% in the format:

&value=84

When this value is read by the gauge, it updates its display to reflect the updated value.

 
Troubleshooting
If the chart renders initially, but doesn't update in real time, check the following:
  • Switch on the debug mode of chart. It will provide you with a lot of valuable information when debugging.
  • Check if path of dataStreamURL provided in XML is correct.
  • Check if you've specified a valid value for refreshInterval in your XML document.
  • Check if dataStreamURL is returning proper data. To test this, just open your browser and run this page. It should return the data in text format.
  • Make sure the output data doesn't contain any carriage returns or HTML elements. In many scripting languages, these are automatically added. You need to remove them.
  • Make sure that the page that provides the incremental update data to FusionCharts must be hosted on the same sub-domain in which the chart .swf is hosted. Otherwise, FusionWidgets owing to Flash Sandbox security model won't be able to receive the updated data. Due to Flash sandbox security restrictions, you are allowed to retrieve data only from the same sub-domain in which the flash movie is residing. Data can only be loaded from a domain that is an exact match to the location of the SWF, including sub-domains. For this reason a SWF residing at server1.mydomain.com cannot access data from a SWF at mydomain.com.

    If you wish to load data from a different domain, you can set up a proxy page at the same sub-domain which would actually request data from the distant domain and then relay it to FusionWidgets. You must be able to upload and run a server-side script on a server in the same domain as the Flash movie. In this method, the Flash movie accesses the script, which loads the information, retrieves it, and returns the information back to the Flash movie. This method is best if the server hosting the data is not under your control (for example, a public source or a web service).