src/it/ht/rcs/console/system/view/frontend/healthCheck/HealthCheckWindow.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="480" close="PopUpManager.removePopUp(this)" creationComplete="init()"
title="{R.get('HEALTH_CHECK')}">
<s:layout>
<s:VerticalLayout horizontalAlign="center" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10"/>
</s:layout>
<fx:Script>
<![CDATA[
import locale.R;
import mx.collections.ArrayCollection;
import mx.managers.PopUpManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.mxml.HTTPService;
[Bindable]
public var nodes:ArrayCollection;
private function init():void
{
var entries:ArrayCollection = new ArrayCollection();
for each (var o:Object in nodes)
entries.addItem(new HealthCheckEntry(o));
grid.dataProvider = entries;
start();
}
private var currentIndex:int;
private var currentEntry:HealthCheckEntry;
private function start():void
{
currentIndex = -1;
if (grid.dataProvider.length > 0) {
for each (var entry:HealthCheckEntry in grid.dataProvider)
entry.status = HealthCheckEntry.IDLE;
checkNext();
}
}
private function checkNext():void
{
currentIndex++;
if (grid.dataProvider.length > currentIndex)
check(currentIndex);
}
private function check(index:int):void
{
var entry:HealthCheckEntry = grid.dataProvider.getItemAt(index) as HealthCheckEntry;
currentEntry = entry;
currentEntry.status = HealthCheckEntry.CHECKING;
if (entry.ip == null || entry.ip == '') {
manageInvalid();
return;
}
var http:HTTPService = new HTTPService();
http.url = 'http://'+entry.ip+':80';
http.method = 'GET';
http.resultFormat = 'text';
http.requestTimeout = 3;
http.addEventListener(ResultEvent.RESULT, manageResult);
http.addEventListener(FaultEvent.FAULT, manageFault);
http.send();
}
private function manageResult(e:ResultEvent):void
{
currentEntry.status = HealthCheckEntry.OK;
grid.invalidateDisplayList();
checkNext();
}
private function manageFault(e:FaultEvent):void
{
if(e.statusCode==404 || e.statusCode==400 || e.statusCode==403 || e.statusCode==302)
{
currentEntry.status = HealthCheckEntry.OK;
}
else
{
currentEntry.status = HealthCheckEntry.KO;
}
grid.invalidateDisplayList();
checkNext();
}
private function manageInvalid():void
{
currentEntry.status = HealthCheckEntry.INVALID;
grid.invalidateDisplayList();
checkNext();
}
]]>
</fx:Script>
<s:DataGrid id="grid" width="100%" height="207">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="name" headerText="{R.get('NAME')}"/>
<s:GridColumn dataField="ip" headerText="{R.get('ADDRESS')}"/>
<s:GridColumn dataField="status" headerText="{R.get('STATUS')}"
itemRenderer="it.ht.rcs.console.system.view.frontend.healthCheck.StatusRenderer"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:TitleWindow>