/* * This file or a portion of this file is licensed under the terms of * the Globus Toolkit Public License, found in file GTPL, or at * http://www.globus.org/toolkit/download/license.html. This notice must * appear in redistributions of this file, with or without modification. * * Redistributions of this Software, with or without modification, must * reproduce the GTPL in: (1) the Software, or (2) the Documentation or * some other similar material which is provided with the Software (if * any). * * Copyright 1999-2004 University of Chicago and The University of * Southern California. All rights reserved. */ package org.griphyn.vdl.directive; import java.io.*; import edu.isi.pegasus.common.util.CommonProperties; import org.griphyn.vdl.workflow.*; /** * * A <code>WorkflowJob</code> object defines the state of a job within a Workflow * * @author Mike Wilde * @author Eric Gilbert * @version $Revision$ * * @see org.griphyn.vdl.toolkit.VDLc */ public class WorkflowJob { /* Class Variables */ public static final int MAXJOBS = 100000; public static WorkflowJob[] jobs = new WorkflowJob[MAXJOBS]; public static int njobs; public static String wfjobsCmd = "/home/dscheftn/vds/bin/vds-WorkflowJob-script-wfjobs"; /* Instance Variables */ /* db fields select * from wf_jobstate; wfid | jobid | state | mtime | site ------+----------+---------------------+------------------------+------------- 2 | ID000001 | POST_SCRIPT_SUCCESS | 2005-08-21 15:55:10-05 | terminable 4 | ID000001 | PRE_SCRIPT_FAILURE | 2005-08-24 15:51:11-05 | 5 | ID000001 | POST_SCRIPT_SUCCESS | 2005-08-24 16:23:43-05 | terminable 6 | ID000001 | JOB_RELEASED | 2005-08-24 17:26:59-05 | */ public String wfid; public String jobid; public String state; public String mtime; public String site; /* Class Methods */ public static boolean refresh() { Process p; int rc; Reader is; StringBuffer sb = new StringBuffer(); char [] b = new char[100000]; int n; /* Run status command to get job states */ try { p = Runtime.getRuntime().exec(wfjobsCmd); InputStream out = p.getInputStream(); InputStreamReader r = new InputStreamReader(out); BufferedReader in = new BufferedReader(r); String line; njobs=0; while ( (line = in.readLine()) != null ) { WorkflowJob j = new WorkflowJob(); String[] t = line.split("\\|"); int nt = t.length; if (nt > 1) j.wfid=t[1]; if (nt > 2) j.jobid = t[2]; if (nt > 3) j.state = t[3]; if (nt > 4) j.mtime = t[4]; if (nt > 5) j.site = t[5]; if( njobs < MAXJOBS ) { jobs[njobs++] = j; } else { return false; } } rc = p.waitFor(); return true; } catch (Exception e) { System.out.println("WorkflowJob.refresh: Exception: " + e.toString() ); return false; } } /* Instance Methods */ public String asStatusString() { return "jobid=" + jobid + " wfid=" + wfid + " state=" + state + " mtime=" + mtime + " site=" + site; } }