hackedteam/rcs-console

View on GitHub
src/it/ht/rcs/console/system/view/frontend/healthCheck/HealthCheckWindow.mxml

Summary

Maintainability
Test Coverage
<?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>