package org.goldenorb.client; //import java.util.List; import java.util.Date; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.HorizontalPanel; /** * Entry point classes define <code>onModuleLoad()</code>. */ public class OrbTrackerStatus implements EntryPoint { private FlexTable orbTrackerFlexTable; private Label lastUpdatedLabel; private Label errorLabelOTM; private Label errorLabelJQ; private Label errorLabelJIP; private static final int REFRESH_INTERVAL = 5000; private OrbTrackerMemberDataServiceAsync dataService = GWT.create(OrbTrackerMemberDataService.class); private VerticalPanel mainPanel; private HorizontalPanel jobsGroupedPanel; private FlexTable jobsInProgressPanel; private FlexTable jobsInQueuePanel; @Override public void onModuleLoad() { RootPanel rootPanel = RootPanel.get(); mainPanel = new VerticalPanel(); rootPanel.add(mainPanel); Image image = new Image("images/logo-full.jpg"); mainPanel.add(image); // Label titleLabel = new Label("GoldenOrb"); // mainPanel.add(titleLabel); lastUpdatedLabel = new Label("Last Updated : "); mainPanel.add(lastUpdatedLabel); Label lblOrbtrackermembers = new Label("OrbTrackerMembers"); mainPanel.add(lblOrbtrackermembers); orbTrackerFlexTable = new FlexTable(); mainPanel.add(orbTrackerFlexTable); orbTrackerFlexTable.setSize("761px", "116px"); orbTrackerFlexTable.setText(0, 0, "Node Name"); orbTrackerFlexTable.setText(0, 1, "Partition Capacity"); orbTrackerFlexTable.setText(0, 2, "Available Partitions"); orbTrackerFlexTable.setText(0, 3, "Reserved Partitions"); orbTrackerFlexTable.setText(0, 4, "In Use Partitions"); orbTrackerFlexTable.setText(0, 5, "Host Name"); orbTrackerFlexTable.setText(0, 6, "Leader"); orbTrackerFlexTable.setText(0, 7, "Port"); jobsGroupedPanel = new HorizontalPanel(); mainPanel.add(jobsGroupedPanel); jobsGroupedPanel.setSize("258px", "100px"); jobsInProgressPanel = new FlexTable(); jobsInProgressPanel.setText(0, 0, "Jobs In Progress"); jobsGroupedPanel.add(jobsInProgressPanel); jobsInQueuePanel = new FlexTable(); jobsInQueuePanel.setText(0, 0, "Jobs In Queue"); jobsGroupedPanel.add(jobsInQueuePanel); jobsInProgressPanel.setTitle("Jobs In Progress"); jobsInQueuePanel.setTitle("Jobs in Queue"); errorLabelOTM = new Label(""); mainPanel.add(errorLabelOTM); errorLabelJIP = new Label(""); mainPanel.add(errorLabelJIP); errorLabelJQ = new Label(""); mainPanel.add(errorLabelJQ); Timer refreshTimer = new Timer() { public void run() { refreshWatchDataList(); refreshJobsInProgress(); refreshJobsInQueue(); } }; refreshTimer.scheduleRepeating(REFRESH_INTERVAL); } private void refreshJobsInProgress() { // initialize service if (dataService == null) { dataService = GWT.create(OrbTrackerMemberDataService.class); } // set up callback AsyncCallback<String[]> callback = new AsyncCallback<String[]>() { @SuppressWarnings("deprecation") public void onFailure(Throwable caught) { // If error occurred while getting updates String details = caught.getMessage(); if (caught instanceof WatcherException) { details = ((WatcherException) caught).getErrorMessage(); } else if (caught instanceof ZooKeeperConnectionException) { details = ((ZooKeeperConnectionException) caught).getErrorMessage(); } else if (caught instanceof NodeDoesNotExistException) { details = ((NodeDoesNotExistException) caught).getErrorMessage(); } errorLabelJIP.setText(details); errorLabelJIP.setVisible(true); lastUpdatedLabel.setText("Last Updated : " + DateTimeFormat.getMediumDateTimeFormat().format(new Date())); clearTables(jobsInProgressPanel); } @SuppressWarnings("deprecation") public void onSuccess(String[] result) { updateJobTable(result, jobsInProgressPanel); lastUpdatedLabel.setText("Last Updated : " + DateTimeFormat.getMediumDateTimeFormat().format(new Date())); errorLabelJIP.setVisible(false); } }; dataService.getJobsInProgress(callback); } private void refreshJobsInQueue() { // initialize service if (dataService == null) { dataService = GWT.create(OrbTrackerMemberDataService.class); } // set up callback AsyncCallback<String[]> callback = new AsyncCallback<String[]>() { @SuppressWarnings("deprecation") public void onFailure(Throwable caught) { // If error occurred while getting updates String details = caught.getMessage(); if (caught instanceof WatcherException) { details = ((WatcherException) caught).getErrorMessage(); } else if (caught instanceof ZooKeeperConnectionException) { details = ((ZooKeeperConnectionException) caught).getErrorMessage(); } else if (caught instanceof NodeDoesNotExistException) { details = ((NodeDoesNotExistException) caught).getErrorMessage(); } errorLabelJQ.setText(details); errorLabelJQ.setVisible(true); lastUpdatedLabel.setText("Last Updated : " + DateTimeFormat.getMediumDateTimeFormat().format(new Date())); clearTables(jobsInQueuePanel); } @SuppressWarnings("deprecation") public void onSuccess(String[] result) { updateJobTable(result, jobsInQueuePanel); lastUpdatedLabel.setText("Last Updated : " + DateTimeFormat.getMediumDateTimeFormat().format(new Date())); errorLabelJQ.setVisible(false); } }; dataService.getJobsInQueue(callback); } private void refreshWatchDataList() { // initialize service if (dataService == null) { dataService = GWT.create(OrbTrackerMemberDataService.class); } // set up callback AsyncCallback<OrbTrackerMemberData[]> callback = new AsyncCallback<OrbTrackerMemberData[]>() { @SuppressWarnings("deprecation") public void onFailure(Throwable caught) { // If error occurred while getting updates String details = caught.getMessage(); if (caught instanceof WatcherException) { details = ((WatcherException) caught).getErrorMessage(); } else if (caught instanceof ZooKeeperConnectionException) { details = ((ZooKeeperConnectionException) caught).getErrorMessage(); } else if (caught instanceof NodeDoesNotExistException) { details = ((NodeDoesNotExistException) caught).getErrorMessage(); } errorLabelOTM.setText(details); errorLabelOTM.setVisible(true); lastUpdatedLabel.setText("Last Updated : " + DateTimeFormat.getMediumDateTimeFormat().format(new Date())); clearTables(orbTrackerFlexTable); } @SuppressWarnings("deprecation") public void onSuccess(OrbTrackerMemberData[] result) { updateTable(result); lastUpdatedLabel.setText("Last Updated : " + DateTimeFormat.getMediumDateTimeFormat().format(new Date())); errorLabelOTM.setVisible(false); } }; // Make the call to the OrbTrackerMemberData service. dataService.getOrbTrackerMemberData(callback); } private void updateJobTable(String[] jobs, FlexTable tableToUpdate) { // clear table int num_rows = tableToUpdate.getRowCount(); for (int r = num_rows - 1; r > 0; r--) { tableToUpdate.removeRow(r); } int row = 1; for (String job : jobs) { tableToUpdate.setText(row, 0, job); row++; } } private void updateTable(OrbTrackerMemberData[] update) { // clear table int num_rows = orbTrackerFlexTable.getRowCount(); for (int r = num_rows - 1; r > 0; r--) { orbTrackerFlexTable.removeRow(r); } int row = 1; for (OrbTrackerMemberData data : update) { orbTrackerFlexTable.setSize("761px", "116px"); orbTrackerFlexTable.setText(row, 0, data.getName()); orbTrackerFlexTable.setText(row, 1, "" + data.getPartitionCapacity()); orbTrackerFlexTable.setText(row, 2, "" + data.getAvailablePartitions()); orbTrackerFlexTable.setText(row, 3, "" + data.getReservedPartitions()); orbTrackerFlexTable.setText(row, 4, "" + data.getInUsePartitions()); orbTrackerFlexTable.setText(row, 5, "" + data.getHostname()); orbTrackerFlexTable.setText(row, 6, "" + data.getLeaderStatus()); orbTrackerFlexTable.setText(row, 7, "" + data.getPort()); row++; } } private void clearTables(FlexTable table) { int num_rows = table.getRowCount(); for (int r = num_rows - 1; r > 0; r--) { table.removeRow(r); } } }