Package org.nebulaframework.grid.cluster.manager.services.jobs

Examples of org.nebulaframework.grid.cluster.manager.services.jobs.GridJobProfile


  protected void createJobTab(final String jobId) {
   
   
    // Request Job Profile
    final InternalClusterJobService jobService = ClusterManager.getInstance().getJobService();
    final GridJobProfile profile = jobService.getProfile(jobId);
   
    // Job Start Time
    final long startTime = System.currentTimeMillis();
   
    final JPanel jobPanel = new JPanel();
    jobPanel.setLayout(new BorderLayout(10,10));
   
    // Progess Panel
    JPanel progressPanel = new JPanel();
    progressPanel.setLayout(new BorderLayout(10,10));
    progressPanel.setBorder(BorderFactory.createTitledBorder("Progress"));
    jobPanel.add(progressPanel, BorderLayout.NORTH);
   
    final JProgressBar progressBar = new JProgressBar();
    progressBar.setStringPainted(true);
    progressPanel.add(progressBar, BorderLayout.CENTER);
    addUIElement("jobs."+jobId+".progress", progressBar)// Add to components map
   
    // Buttons Panel
    JPanel buttonsPanel = new JPanel();
    jobPanel.add(buttonsPanel, BorderLayout.SOUTH);
    buttonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
   
    // Terminate Button
    JButton terminateButton = new JButton("Terminate");
    terminateButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        new Thread(new Runnable() {

          public void run() {

            // Job Name = Class Name
            String name = profile.getJob().getClass().getSimpleName();
           
            // Request user confirmation
            int option = JOptionPane.showConfirmDialog(ClusterMainUI.this,
                                                              "Are you sure to terminate GridJob "
                                                       + name + "?",
                                                       "Nebula - Terminate GridJob",
                                                       JOptionPane.YES_NO_OPTION);
           
            if (option == JOptionPane.NO_OPTION) return;
           
            // Attempt Cancel
            boolean result = profile.getFuture().cancel();
           
            // Notify results
            if (result) {
              JOptionPane.showMessageDialog(ClusterMainUI.this, "Grid Job '" +
                                            name +
                                            "terminated successfully.", "Nebula - Job Terminated",
                                            JOptionPane.INFORMATION_MESSAGE);
            }
            else {
              JOptionPane.showMessageDialog(ClusterMainUI.this, "Failed to terminate Grid Job '" +
                                            name
                                            , "Nebula - Job Termination Failed",
                                            JOptionPane.WARNING_MESSAGE);
            }           
          }
         
        }).start();
      }
    });
    buttonsPanel.add(terminateButton);
    addUIElement("jobs."+jobId+".terminate", terminateButton)// Add to components map
   
    // Close Tab Button
    JButton closeButton = new JButton("Close Tab");
    closeButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            removeJobTab(jobId);
          }
        });
      }
    });
    closeButton.setEnabled(false);
   
    buttonsPanel.add(closeButton);
    addUIElement("jobs."+jobId+".closetab", closeButton)// Add to components map
   
    JPanel centerPanel = new JPanel();
    centerPanel.setLayout(new GridBagLayout());
    jobPanel.add(centerPanel, BorderLayout.CENTER);
   
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.BOTH;
    c.weightx = 1.0;
    c.weightx = 1.0;
   
    /* -- Job Information -- */
   
    JPanel jobInfoPanel = new JPanel();
    jobInfoPanel.setBorder(BorderFactory.createTitledBorder("Job Information"));
    jobInfoPanel.setLayout(new GridBagLayout());
    c.gridy = 0;
    c.ipady = 30;
    centerPanel.add(jobInfoPanel, c);
   
    GridBagConstraints c1 = new GridBagConstraints();
    c1.fill = GridBagConstraints.BOTH;
    c1.weightx = 1;
    c1.weighty = 1;
   
    // Name
    jobInfoPanel.add(new JLabel("Name :"),c1);
    JLabel jobNameLabel = new JLabel();
    jobInfoPanel.add(jobNameLabel,c1);
    jobNameLabel.setText(profile.getJob().getClass().getSimpleName());
    addUIElement("jobs."+jobId+".job.name", jobNameLabel)// Add to components map
   
    // Gap
    jobInfoPanel.add(new JLabel(),c1);
   
    // Type
    jobInfoPanel.add(new JLabel("Type :"),c1);
    JLabel jobType = new JLabel();
    jobType.setText(getJobType(profile.getJob()));
    jobInfoPanel.add(jobType,c1);
    addUIElement("jobs."+jobId+".job.type", jobType )// Add to components map
   
    // Job Class Name
    c1.gridy = 1;
    c1.gridwidth = 1;
    jobInfoPanel.add(new JLabel("GridJob Class :"),c1);
    c1.gridwidth = GridBagConstraints.REMAINDER;
    JLabel jobClassLabel = new JLabel();
    jobClassLabel.setText(profile.getJob().getClass().getName());
    jobInfoPanel.add(jobClassLabel,c1);
    addUIElement("jobs."+jobId+".job.class", jobClassLabel)// Add to components map
   
   
   
    /* -- Execution Information -- */
   
    JPanel executionInfoPanel = new JPanel();
    executionInfoPanel.setBorder(BorderFactory.createTitledBorder("Execution Statistics"));
    executionInfoPanel.setLayout(new GridBagLayout());
    c.gridy = 1;
    c.ipady = 30;
    centerPanel.add(executionInfoPanel, c);
   
    GridBagConstraints c3 = new GridBagConstraints();
    c3.weightx = 1;
    c3.weighty = 1;
    c3.fill = GridBagConstraints.BOTH;
   
    // Start Time
    executionInfoPanel.add(new JLabel("Job Status :"),c3);
    final JLabel statusLabel = new JLabel("Initializing");
    executionInfoPanel.add(statusLabel,c3);
    addUIElement("jobs."+jobId+".execution.status", statusLabel)// Add to components map
   
    // Status Update Listener
    profile.getFuture().addGridJobStateListener(new GridJobStateListener() {
      public void stateChanged(final GridJobState newState) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            statusLabel.setText(StringUtils.capitalize(newState.toString().toLowerCase()));
          }
        });
      }
    });
   
    executionInfoPanel.add(new JLabel(),c3); // Space Holder
   
    // Percent Complete
    executionInfoPanel.add(new JLabel("Completed % :"),c3);
    final JLabel percentLabel = new JLabel("-N/A-");
    executionInfoPanel.add(percentLabel,c3);
    addUIElement("jobs."+jobId+".execution.percentage", percentLabel)// Add to components map
   
    c3.gridy = 1;
   
    // Start Time
    executionInfoPanel.add(new JLabel("Start Time :"),c3);
    JLabel startTimeLabel = new JLabel(DateFormat.getInstance().format(new Date(startTime)));
    executionInfoPanel.add(startTimeLabel,c3);
    addUIElement("jobs."+jobId+".execution.starttime", startTimeLabel)// Add to components map
   
    executionInfoPanel.add(new JLabel(),c3); // Space Holder
   
    // Elapsed Time
    executionInfoPanel.add(new JLabel("Elapsed Time :"),c3);
    JLabel elapsedTimeLabel = new JLabel("-N/A-");
    executionInfoPanel.add(elapsedTimeLabel,c3);
    addUIElement("jobs."+jobId+".execution.elapsedtime", elapsedTimeLabel)// Add to components map
   
    c3.gridy = 2;
   
    // Tasks Deployed (Count)
    executionInfoPanel.add(new JLabel("Tasks Deployed :"),c3);
    JLabel tasksDeployedLabel = new JLabel("-N/A-");
    executionInfoPanel.add(tasksDeployedLabel,c3);
    addUIElement("jobs."+jobId+".execution.tasks", tasksDeployedLabel)// Add to components map
   
    executionInfoPanel.add(new JLabel(),c3); // Space Holder
   
    // Results Collected (Count)
    executionInfoPanel.add(new JLabel("Results Collected :"),c3);
    JLabel resultsCollectedLabel = new JLabel("-N/A-");
    executionInfoPanel.add(resultsCollectedLabel,c3);
    addUIElement("jobs."+jobId+".execution.results", resultsCollectedLabel)// Add to components map
   
    c3.gridy = 3;
   
    // Remaining Tasks (Count)
    executionInfoPanel.add(new JLabel("Remaining Tasks :"),c3);
    JLabel remainingTasksLabel = new JLabel("-N/A-");
    executionInfoPanel.add(remainingTasksLabel,c3);
    addUIElement("jobs."+jobId+".execution.remaining", remainingTasksLabel)// Add to components map
   
    executionInfoPanel.add(new JLabel(),c3); // Space Holder
   
    // Failed Tasks (Count)
    executionInfoPanel.add(new JLabel("Failed Tasks :"),c3);
    JLabel failedTasksLabel = new JLabel("-N/A-");
    executionInfoPanel.add(failedTasksLabel,c3);
    addUIElement("jobs."+jobId+".execution.failed", failedTasksLabel)// Add to components map
   
    /* -- Submitter Information -- */
    UUID ownerId = profile.getOwner();
    GridNodeDelegate owner = ClusterManager.getInstance().getClusterRegistrationService().getGridNodeDelegate(ownerId);
   
    JPanel ownerInfoPanel = new JPanel();
    ownerInfoPanel.setBorder(BorderFactory.createTitledBorder("Owner Information"));
    ownerInfoPanel.setLayout(new GridBagLayout());
    c.gridy = 2;
    c.ipady = 10;
    centerPanel.add(ownerInfoPanel, c);
   
    GridBagConstraints c2 = new GridBagConstraints();
   
    c2.fill = GridBagConstraints.BOTH;
    c2.weightx = 1;
    c2.weighty = 1;

    // Host Name
    ownerInfoPanel.add(new JLabel("Host Name :"),c2);
    JLabel hostNameLabel = new JLabel(owner.getProfile().getName());
    ownerInfoPanel.add(hostNameLabel, c2);
    addUIElement("jobs."+jobId+".owner.hostname", hostNameLabel)// Add to components map
   
    // Gap
    ownerInfoPanel.add(new JLabel(), c2);
   
    // Host IP Address
    ownerInfoPanel.add(new JLabel("Host IP :"), c2);
    JLabel hostIPLabel = new JLabel(owner.getProfile().getIpAddress());
    ownerInfoPanel.add(hostIPLabel,c2);
    addUIElement("jobs."+jobId+".owner.hostip", hostIPLabel)// Add to components map
   
    // Owner UUID
    c2.gridy = 1;
    c2.gridx = 0;
    ownerInfoPanel.add(new JLabel("Owner ID :"),c2);
    JLabel ownerIdLabel = new JLabel(profile.getOwner().toString());
    c2.gridx = 1;
    c2.gridwidth = 4;
    ownerInfoPanel.add(ownerIdLabel,c2);
    addUIElement("jobs."+jobId+".owner.id", ownerIdLabel)// Add to components map
   

    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        // Create Tab
        addUIElement("jobs." + jobId, jobPanel);
        JTabbedPane tabs = getUIElement("tabs");
        tabs.addTab(profile.getJob().getClass().getSimpleName(), jobPanel);
        tabs.revalidate();
      }
    });

   
   
    // Execution Information Updater Thread
    new Thread(new Runnable() {
     
      boolean initialized = false;
      boolean unbounded = false;
     
      public void run() {

        // Unbounded, No Progress Supported
        if ((!initialized) && profile.getJob() instanceof UnboundedGridJob<?>) {
          SwingUtilities.invokeLater(new Runnable() {
            public void run() {
              progressBar.setIndeterminate(true);
              progressBar.setStringPainted(false);
             
              // Infinity Symbol
              percentLabel.setText(String.valueOf('\u221e'));
             
            }
          });
          initialized = true;
          unbounded = true;
        }
       
        // Update Job Info
        while(true) {
         
          try {
            // 500ms Interval
            Thread.sleep(500);
           
          } catch (InterruptedException e) {
            log.warn("Interrupted Progress Updater Thread",e);
          }
         
          final int totalCount = profile.getTotalTasks();
          final int tasksRem = profile.getTaskCount();
          final int resCount = profile.getResultCount();
          final int failCount = profile.getFailedCount();
         
          showBusyIcon();
         
          // Task Information
          JLabel totalTaskLabel = getUIElement("jobs."+jobId+".execution.tasks");
          totalTaskLabel.setText(String.valueOf(totalCount));
         
          // Result Count
          JLabel resCountLabel = getUIElement("jobs."+jobId+".execution.results");
          resCountLabel.setText(String.valueOf(resCount));
         
          // Remaining Task Count
          JLabel remLabel = getUIElement("jobs."+jobId+".execution.remaining");
          remLabel.setText(String.valueOf(tasksRem));
         
          // Failed Task Count
          JLabel failedLabel = getUIElement("jobs."+jobId+".execution.failed");
          failedLabel.setText(String.valueOf(failCount));
         
          // Elapsed Time
          JLabel elapsedLabel = getUIElement("jobs."+jobId+".execution.elapsedtime");
          elapsedLabel.setText(TimeUtils.timeDifference(startTime));
         
          // Job State
          final JLabel statusLabel = getUIElement("jobs."+jobId+".execution.status");
         
          // If not in Executing Mode
          if ((!profile.getFuture().isJobFinished())&&profile.getFuture().getState()!=GridJobState.EXECUTING) {
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
               
                // Progress Bar
                progressBar.setIndeterminate(true);
                progressBar.setStringPainted(false);
               
                // Status Text
                String state = profile.getFuture().getState().toString();
                statusLabel.setText(StringUtils.capitalize(state.toLowerCase()));
               
                // Percentage Label
                percentLabel.setText(String.valueOf('\u221e'));
              }
            });
          }
          else { // Executing Mode : Progress Information
           
            // Job Finished, Stop
            if (profile.getFuture().isJobFinished()) {
              showIdleIcon();
              return;
            }
           
            // Double check for status label
            if (!statusLabel.getText().equalsIgnoreCase("executing")) {
              SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                  String newstate = profile.getFuture().getState().toString();
                  statusLabel.setText(StringUtils.capitalize(newstate.toLowerCase()));
                }
               
              });
            }
           
            if (!unbounded) {
             
              final int percentage = (int) (profile.percentage() * 100);
             
              //final int failCount = profile.get
              SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                 
                  // If finished at this point, do not update
                  if (progressBar.getValue()==100) {
                    return;
                  }
                 
                  // If ProgressBar is in indeterminate
                  if (progressBar.isIndeterminate()) {
                    progressBar.setIndeterminate(false);
                    progressBar.setStringPainted(true);
                  }
                 
                  // Update Progress Bar / Percent Label
                  progressBar.setValue(percentage);
                  percentLabel.setText(percentage + " %");
                 
                }
              });
            }
          }

         
        }
      }
    }).start();
   
    // Job End Hook to Execute Job End Actions
    ServiceEventsSupport.addServiceHook(new ServiceHookCallback() {

      public void onServiceEvent(final ServiceMessage event) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
           
            JButton close = getUIElement("jobs."+jobId+".closetab");
            JButton terminate = getUIElement("jobs."+jobId+".terminate");
            terminate.setEnabled(false);
            close.setEnabled(true);
           
            JProgressBar progress = getUIElement("jobs."+jobId+".progress");
            JLabel percentage = getUIElement("jobs."+jobId+".execution.percentage");
           
            progress.setEnabled(false);
           
            // If Successfully Finished
            if (event.getType()==ServiceMessageType.JOB_END) {
             
             
              if (profile.getFuture().getState()!=GridJobState.FAILED) {
                // If Not Job Failed
                progress.setValue(100);
                percentage.setText("100 %");
              }
              else {
View Full Code Here

TOP

Related Classes of org.nebulaframework.grid.cluster.manager.services.jobs.GridJobProfile

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.