You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4252 lines
116 KiB
4252 lines
116 KiB
/****************************************************************************** |
|
* |
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
|
* All rights reserved. |
|
* |
|
******************************************************************************/ |
|
|
|
package com.fe.client; |
|
|
|
import java.io.BufferedReader; |
|
import java.io.File; |
|
import java.io.FileReader; |
|
import java.io.IOException; |
|
import java.io.InputStream; |
|
import java.io.InputStreamReader; |
|
import java.sql.SQLException; |
|
import java.sql.Timestamp; |
|
import java.text.SimpleDateFormat; |
|
import java.util.ArrayList; |
|
import java.util.Calendar; |
|
import java.util.Collection; |
|
import java.util.Comparator; |
|
import java.util.Date; |
|
import java.util.HashMap; |
|
import java.util.Iterator; |
|
import java.util.LinkedHashMap; |
|
import java.util.List; |
|
import java.util.Map; |
|
import java.util.StringTokenizer; |
|
import java.util.TimeZone; |
|
import java.util.TreeMap; |
|
import java.util.Vector; |
|
import java.util.regex.Matcher; |
|
import java.util.regex.Pattern; |
|
|
|
import javax.servlet.http.Cookie; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpSession; |
|
|
|
import org.apache.commons.beanutils.BeanUtils; |
|
import org.apache.commons.lang3.StringUtils; |
|
import org.apache.jcs.JCS; |
|
import org.apache.jcs.engine.behavior.IElementAttributes; |
|
import org.apache.logging.log4j.LogManager; |
|
import org.apache.logging.log4j.Logger; |
|
import org.json.JSONArray; |
|
import org.json.JSONObject; |
|
import org.mozilla.javascript.edu.emory.mathcs.backport.java.util.Arrays; |
|
import org.tmatesoft.svn.core.SVNLogEntry; |
|
|
|
import EDU.oswego.cs.dl.util.concurrent.Semaphore; |
|
|
|
import com.fe.lucene.LuceneCrawler; |
|
import com.fe.lucene.TickerIndexRecord; |
|
import com.fe.lucene.TokenCollectorFactory; |
|
import com.fe.scheduler.TemplateParser; |
|
import com.fe.svn.SVNSchedulerCommitInfo; |
|
import com.fe.svn.SVNSync; |
|
import com.fe.util.RestartTomcat; |
|
import com.fe.util.WikiRFunctionManual; |
|
import com.fourelementscapital.alarm.Alarm; |
|
import com.fourelementscapital.alarm.AlarmType; |
|
import com.fourelementscapital.alarm.ThemeVO; |
|
import com.fourelementscapital.auth.UserThemeAccessPermission; |
|
import com.fourelementscapital.db.BBSyncDB; |
|
import com.fourelementscapital.db.ConstructQueryDB; |
|
import com.fourelementscapital.db.InfrastructureDB; |
|
import com.fourelementscapital.db.RFunctionDB; |
|
import com.fourelementscapital.db.SchedulerDB; |
|
import com.fourelementscapital.db.vo.FlexiField; |
|
import com.fourelementscapital.db.vo.SchedulerTrigger; |
|
import com.fourelementscapital.db.vo.ValueObject; |
|
import com.fourelementscapital.scheduler.ScheduledTaskFactory; |
|
import com.fourelementscapital.scheduler.ScheduledTaskQueue; |
|
import com.fourelementscapital.scheduler.SchedulerEngine; |
|
import com.fourelementscapital.scheduler.SchedulerEngineUtils; |
|
import com.fourelementscapital.scheduler.balance.LoadBalancingQueue; |
|
import com.fourelementscapital.scheduler.balance.LoadBalancingQueueItem; |
|
import com.fourelementscapital.scheduler.balance.LoadBalancingQueueTimeout; |
|
import com.fourelementscapital.scheduler.config.Config; |
|
import com.fourelementscapital.scheduler.engines.ScheduledTask; |
|
import com.fourelementscapital.scheduler.engines.ScheduledTaskField; |
|
import com.fourelementscapital.scheduler.error.ClientError; |
|
import com.fourelementscapital.scheduler.group.DirectRServeExecuteRUnix; |
|
import com.fourelementscapital.scheduler.group.REngineScriptTask; |
|
import com.fourelementscapital.scheduler.group.RServeUnixTask; |
|
import com.fourelementscapital.scheduler.p2p.P2PService; |
|
import com.fourelementscapital.scheduler.p2p.listener.IncomingMessage; |
|
import com.fourelementscapital.scheduler.p2p.listener.P2PTransportMessage; |
|
import com.fourelementscapital.scheduler.p2p.msg.PostMessage; |
|
import com.fourelementscapital.scheduler.p2p.msg.impl.helper.SendCommand2Helper; |
|
import com.fourelementscapital.scheduler.p2p.msg.scheduler.InstantPeerStatus; |
|
import com.fourelementscapital.scheduler.p2p.msg.scheduler.rserve.PeerPropertiesGet; |
|
import com.fourelementscapital.scheduler.p2p.msg.scheduler.rserve.PeerPropertiesSet; |
|
import com.fourelementscapital.scheduler.p2p.msg.scheduler.rserve.RServeSessionQuery; |
|
import com.fourelementscapital.scheduler.p2p.msg.scheduler.rserve.RServeSessionStat; |
|
import com.fourelementscapital.scheduler.p2p.peer.PeerMachine; |
|
import com.fourelementscapital.scheduler.p2p.peer.PeerManagerHSQL; |
|
import com.fourelementscapital.scheduler.pluggin.PlugginInterface; |
|
import com.fourelementscapital.scheduler.pluggin.SchedulerPlugginRegister; |
|
|
|
|
|
/** |
|
* This class exposes data in JSON format for scheduler UI. |
|
* |
|
* The following infos can be retrived for the UI. |
|
* -Queue data |
|
* -Executing tasks |
|
* -Queued tasks |
|
* -Online peers |
|
* -Queue history |
|
* -Execution Logs |
|
* -Queue settings |
|
* |
|
* -Managing task groups and order |
|
* -Managing task folders and order |
|
* -Managing tasks and its order |
|
* -Managing contents of tasks including Scripts and code management |
|
* -Managing themes and privileges |
|
* |
|
* -Managing peers and association with tasks |
|
* -Enabling/Disabling peers |
|
* |
|
* -Rendering scheduler related reports |
|
* |
|
* Changing anything in this class required extensive testing as it can directly impact the queue behaviours and sometimes may lead to |
|
* critical bugs and could stop certain scheduler functionalities. |
|
* |
|
* Returned data will be parsed as JSON objects in the javascript side. |
|
* |
|
* Check DWR documentation to know more about why this class needed. |
|
* |
|
*/ |
|
public class SchedulerMgmt extends AbstractTeamOrgMgmt { |
|
|
|
|
|
private Logger log = LogManager.getLogger(SchedulerMgmt.class.getName()); |
|
private HttpServletRequest request=null; |
|
|
|
|
|
/* |
|
* Session key constant to keep some of the settings in session; |
|
*/ |
|
private String ACTIVE_TAB_ATTRIBUTE="$$$ActiveSchedulerTab"; //current tab |
|
private String TAG_SHOWHIDE_ATTRIBUTE="$$$ShowHideTags"; //show or hide his tags; |
|
private String COOKIE_SCHEDULER_ALLITEMS="scheduler_showAll"; //remember the scheduler list filter (all/only mine) |
|
|
|
private static String LOG_STATUS_RESTARTED="re-executed"; |
|
private static JCS lockcache=null; |
|
private static Semaphore logListLock=new Semaphore(1); |
|
|
|
private static String CALLING_ANOTHER_SCRIPT_PATTERN="executeSchedulerScript("; |
|
|
|
|
|
|
|
|
|
/** |
|
* for DWR invocation |
|
* @throws Exception |
|
*/ |
|
public SchedulerMgmt() throws Exception { |
|
super(); |
|
|
|
} |
|
|
|
|
|
/** |
|
* Invocation only when you have HttpRequest is available, |
|
* in JSP or internally. |
|
* @param request |
|
* @throws Exception |
|
*/ |
|
public SchedulerMgmt(HttpServletRequest request) throws Exception { |
|
super(request); |
|
|
|
} |
|
|
|
|
|
/** |
|
* checks the current scheduler script has valid edit permission in the current request. |
|
* @param scheduler_id |
|
* @param sdb |
|
* @throws Exception |
|
*/ |
|
public void validateEditPrivilege(int scheduler_id, SchedulerDB sdb) throws Exception { |
|
String access=getAccessPrivilege(scheduler_id, sdb); |
|
if(access==null || (access!=null && access.equals("") || access!=null && access.equals(ACCESS_PRIVILEGE_R) || access!=null && access.equals(ACCESS_PRIVILEGE_RX))){ |
|
throw new Exception("Access denied to scheduler ID ("+scheduler_id+") Contact Administrator."); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
* This method returns Map that contains data for rendering |
|
* tree menu item in the left side panel of the scheduler tasks User interface screen |
|
* Map contains, group, folders, tasks and tags together with the access permission. |
|
* |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map listScheduledItems() throws Exception { |
|
return listScheduledItems2(null); |
|
} |
|
|
|
|
|
|
|
private Vector getGroupOrder() throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
Vector rtn=sdb.getGroupOrder(); |
|
|
|
|
|
return rtn; |
|
}catch(Exception e){ throw e;} |
|
finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
/** |
|
* @deprecated |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public boolean killServerTaskQueue() throws Exception { |
|
ScheduledTaskQueue.killQueueThread(); |
|
return true; |
|
} |
|
|
|
|
|
private Map getGroupIconsAndColors() throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
HashMap rtn=new HashMap(); |
|
|
|
HashMap icons=new HashMap(); |
|
HashMap colors=new HashMap(); |
|
sdb.connectDB(); |
|
Vector data=sdb.getActiveGroups(); |
|
for(Iterator i=data.iterator();i.hasNext();){ |
|
Map row=(Map)i.next(); |
|
icons.put(row.get("taskuid"),row.get("icon")); |
|
colors.put(row.get("taskuid"),row.get("bar_colorcode")); |
|
} |
|
rtn.put("group_icons",icons); |
|
rtn.put("group_colorcodes",colors); |
|
return rtn; |
|
}catch(Exception e){ throw e;} |
|
finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
/** |
|
* Search by task name, within the selected tag. |
|
* @deprecated |
|
* @param keyword |
|
* @param tagid |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map searchScheduledItems(String keyword, String tagid) throws Exception { |
|
//return listScheduledItems2(keyword); |
|
HashMap rtn=new HashMap(); |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
int tid=0; |
|
try{tid=Integer.parseInt(tagid);}catch(Exception e){} |
|
|
|
List slist=sdb.searchScheduler(keyword,tid); |
|
rtn.put("scheduleditems", slist); |
|
return rtn; |
|
}catch(Exception e){ throw e;} |
|
finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isSchedulerShowAll() throws Exception{ |
|
boolean showAll=false; |
|
|
|
Cookie cookies[]=getRequest().getCookies(); |
|
for(int i=0;i<cookies.length;i++){ |
|
if(cookies[i].getName().equals(COOKIE_SCHEDULER_ALLITEMS)){ |
|
if(cookies[i].getValue()!=null && cookies[i].getValue().equalsIgnoreCase("yes")){ |
|
showAll=true; |
|
} |
|
} |
|
} |
|
return showAll; |
|
} |
|
|
|
|
|
/** |
|
* @see listSchedulerItems |
|
* @param keyword |
|
* @return |
|
* @throws Exception |
|
*/ |
|
private Map listScheduledItems2(String keyword) throws Exception { |
|
|
|
HashMap rtn=new HashMap(); |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
List slist=new ArrayList(); |
|
|
|
boolean showAll=true; |
|
|
|
List folders=null; |
|
|
|
// 20161124 : always null |
|
if(keyword==null){ |
|
|
|
if(showAll){ |
|
slist=sdb.listSchedulerTaskUIDJoin() ; |
|
folders=sdb.listOfFolders(null); //null means all folders |
|
}else{ |
|
ArrayList al=new ArrayList(); |
|
UserThemeAccessPermission user=null; |
|
try{ |
|
user=getAuthenticatedUserObj(sdb); |
|
if(user!=null){ |
|
log.debug("user:"+user); |
|
al.addAll(user.getRwx()); |
|
al.addAll(user.getRx()); |
|
al.addAll(user.getR()); |
|
slist=sdb.listScheduler(al); |
|
folders=sdb.listofMyFolders(al); |
|
} |
|
}catch(Exception e){ |
|
//e.printStackTrace(); |
|
log.error("Error while getAuthenticatedUserObj, could be wiki database issue"); |
|
} |
|
} |
|
} |
|
|
|
List<ScheduledTask> tasks= new ScheduledTaskFactory().getTasks(); |
|
|
|
LinkedHashMap tasksnames=new LinkedHashMap (); |
|
Vector uniqt=new Vector(); |
|
|
|
Vector orders=getGroupOrder(); |
|
|
|
for(int i=0;i<=orders.size();i++){ |
|
Object item=(i<orders.size())?orders.get(i):null; |
|
|
|
for(Iterator<ScheduledTask> it=tasks.iterator();it.hasNext();){ |
|
ScheduledTask tsk=it.next(); |
|
if(item==null || (item!=null && item.equals(tsk.getUniqueid()))){ |
|
if(!uniqt.contains(tsk.getUniqueid())){ |
|
if(tsk.getClass().getName().equals(REngineScriptTask.class.getName()) || tsk.getClass().getName().equals(DirectRServeExecuteRUnix.class.getName())){ |
|
//ignore REngineScript Tasks (direct_script) as this type available only via SchedulerAPI |
|
}else{ |
|
tasksnames.put(tsk.getUniqueid(),tsk.getName()); |
|
uniqt.add(tsk.getUniqueid()); |
|
} |
|
} |
|
} |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
TreeMap relationship=new TreeMap(); |
|
for(Iterator i=tasksnames.keySet().iterator();i.hasNext();){ |
|
String tas1=(String)i.next(); |
|
for(Iterator ia=uniqt.iterator();ia.hasNext();){ |
|
String tas2=(String)ia.next(); |
|
if(tas1.substring(0,4).equals(tas2.substring(0,4)) && !tas1.equals(tas2)){ |
|
HashMap h ; |
|
if(relationship.get(tas1)==null){ |
|
h=new HashMap(); |
|
relationship.put(tas1,h); |
|
}else{ |
|
h=(HashMap)relationship.get(tas1); |
|
} |
|
h.put(tas2,tasksnames.get(tas2)); |
|
} |
|
} |
|
} |
|
|
|
|
|
rtn.putAll(getThemeAccessData(sdb)); //putting team organization data example: tags |
|
|
|
sdb.closeDB(); |
|
|
|
|
|
rtn.put("scheduleditems", slist); |
|
|
|
rtn.put("folders", folders); |
|
rtn.put("tasktypes",tasksnames ); |
|
rtn.put("taskrelation", relationship); |
|
rtn.put("isShowAll", showAll); |
|
|
|
return rtn; |
|
|
|
} |
|
|
|
|
|
/** |
|
* return list of task types |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map getScriptTypes () throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
|
|
Map sitems=listScheduledItems2(null); |
|
Map types=(Map)sitems.get("tasktypes"); |
|
|
|
sdb.connectDB(); |
|
LoadBalancingQueueTimeout lqt=new LoadBalancingQueueTimeout(sdb,types.keySet()); |
|
|
|
Map timeoutdata=BeanUtils.describe(lqt); |
|
timeoutdata.putAll(lqt.getMaxWaitingAlert()); |
|
Map tags4new=getTags4New(); |
|
Map rtn=(Map)tags4new.get("tag_follow"); |
|
rtn.put("types",types); |
|
rtn.put("data",timeoutdata); |
|
|
|
return rtn; |
|
|
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
/** |
|
* Saves timeout settings, includes sql query criteria for timeout and what should be done incase of timeout and so on. |
|
* @param data |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public boolean updateTimeoutSettings(Map data) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
sdb.connectDB(); |
|
sdb.updateTimeoutSettings(data); |
|
return true; |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
/** |
|
* called during clicking trash icon |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public List trashedItems() throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
sdb.connectDB(); |
|
List rtn=sdb.listTrashedScheduler(); |
|
return rtn; |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
private void updateWikiThread(final int scheduler_id){ |
|
|
|
|
|
Thread thread=new Thread() { |
|
|
|
public void run() { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
String wiki=getWikiHelp(scheduler_id+""); |
|
log.debug("wiki taskname:"+scheduler_id+" found: "+wiki.contains("\"noarticletext\"")+" scheduler_id:"+scheduler_id); |
|
if(wiki.contains("\"noarticletext\"")){ |
|
sdb.updateWikiDone(scheduler_id, 0); |
|
}else{ |
|
sdb.updateWikiDone(scheduler_id, 1); |
|
} |
|
}catch(Exception e){ |
|
log.error("Error while updating"); |
|
}finally{ |
|
try{ |
|
sdb.closeDB(); |
|
}catch(Exception e){} |
|
} |
|
|
|
} |
|
}; |
|
thread.start(); |
|
|
|
|
|
} |
|
|
|
/** |
|
* On cick of edit button on task item from tree menu |
|
* |
|
* @param scheduleditem_id |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map getScheduledItem(int scheduleditem_id) throws Exception { |
|
|
|
|
|
HashMap rtn=new HashMap(); |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
|
|
Map data=sdb.getScheduler(scheduleditem_id); |
|
log.debug("rscript:"+data.get("rscript")); |
|
|
|
String access=getAccessPrivilege(scheduleditem_id, sdb); |
|
|
|
if(access==null || (access!=null && access.equals(""))){ |
|
|
|
rtn.put("access", ACCESS_PRIVILEGE_R); |
|
}else{ |
|
rtn.put("access", access); |
|
} |
|
|
|
log.debug("access:"+rtn.get("access")); |
|
|
|
//added 29/Oct/2013 no access to restricted scripts. |
|
/*if(rtn.get("access")!=null && (rtn.get("access").equals(ACCESS_PRIVILEGE_R) || rtn.get("access").equals(ACCESS_PRIVILEGE_RX) )) { |
|
throw new Exception("No access to view this task"); |
|
}*/ |
|
if(access==null){ |
|
throw new Exception("No access to view this task"); |
|
} |
|
updateWikiThread( scheduleditem_id); |
|
|
|
Vector tdata=sdb.getTriggerData(scheduleditem_id); |
|
rtn.put("triggerdata", convertTriggerData(tdata)); |
|
try{ |
|
rtn.put("revisions",getSVNLogs(sdb,scheduleditem_id)); |
|
}catch(Exception e){ |
|
log.error("error while reading revisions, ERR:"+e.getMessage()); |
|
} |
|
|
|
|
|
if(data!=null){ |
|
String taskuid=(String)data.get("taskuid"); |
|
|
|
|
|
ScheduledTask task=new ScheduledTaskFactory().getTask(taskuid); |
|
|
|
if(task==null){ |
|
throw new Exception("No engine active engine found for type "+taskuid); |
|
} |
|
log.debug("task:"+task); |
|
|
|
|
|
for(ScheduledTaskField field:task.listFormFields()){ |
|
if(field.getPluggindata()!=null){ |
|
PlugginInterface pl=SchedulerPlugginRegister.getPluggin(field.getFieldtype()); |
|
|
|
String rec_id=(String)data.get(pl.getPlugginData().getFieldreference()); |
|
log.debug("field:"+field.getFieldlabel()+" recordid:"+rec_id+" ref:"+pl.getPlugginData().getFieldreference()+" data:"+data); |
|
|
|
if(rec_id!=null){ |
|
Map pluggindata=pl.fetchData(Integer.parseInt(rec_id),getRequest()); |
|
data.put("pluggindata_field", field); |
|
data.put("pluggindata", pl.getPlugginData()); |
|
|
|
data.put("pluggindata_data", pluggindata); |
|
} |
|
} |
|
} |
|
|
|
log.debug("pluggin processed"); |
|
|
|
List<ScheduledTaskField> fields=getTaskFields(taskuid); |
|
ScheduledTaskField folder=null; |
|
for(Iterator<ScheduledTaskField> i=fields.iterator();i.hasNext();){ |
|
ScheduledTaskField sf=i.next(); |
|
if(sf.getShortname().equalsIgnoreCase("folder_id")) folder=sf; |
|
} |
|
|
|
log.debug("folder:"+folder); |
|
|
|
if(folder!=null) fields.remove(folder); |
|
rtn.put("fields",fields); |
|
rtn.put("taskdata", data) ; |
|
rtn.put("lockedby", getLockedBy(scheduleditem_id,sdb)); |
|
try{ |
|
rtn.put("isAuthorized", isAuthorizedUser(sdb)) ; |
|
rtn.put("authorizedUser", getAuthorizedUser(sdb)); |
|
|
|
String access1=(String)rtn.get("access"); |
|
|
|
|
|
String usr=new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb); |
|
if(getLockedBy(scheduleditem_id,sdb)==null){ |
|
if(access1!=null && access1.equals(ACCESS_PRIVILEGE_RWX)){ |
|
|
|
refreshCache(scheduleditem_id,LOCK_AUTO_RELEASE,usr); |
|
} |
|
} |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
} |
|
|
|
log.debug("near end"); |
|
rtn.put("tag_follow", getItemTags2(scheduleditem_id,sdb)); |
|
log.debug("end"); |
|
|
|
} |
|
return rtn; |
|
}catch(Exception e){ |
|
//e.printStackTrace(); |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
public Map getTags4New() throws Exception { |
|
HashMap rtn=new HashMap(); |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
rtn.put("tag_follow", getItemTags2(0,sdb)); |
|
return rtn; |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
public String getScriptRev(String scheduler_id, String revision,boolean flag) throws Exception { |
|
SVNSync sync=new SVNSync(); |
|
String script=null; |
|
if(flag) |
|
script=sync.getScript(Integer.parseInt(scheduler_id), Long.parseLong(revision)); |
|
else |
|
script=sync.diffWC(Integer.parseInt(scheduler_id), Long.parseLong(revision)); |
|
|
|
return script; |
|
|
|
} |
|
|
|
|
|
private Vector getSVNLogs(SchedulerDB sdb, int scheduler_id) throws Exception { |
|
SVNSync sync=new SVNSync(); |
|
TreeMap rtn=new TreeMap(); |
|
Vector d=sync.log(scheduler_id); |
|
List otherlogsList=sdb.getEditLogs(scheduler_id); |
|
if( (d!=null && d.size()>0) || (otherlogsList!=null && otherlogsList.size()>0)){ |
|
|
|
SimpleDateFormat format=new SimpleDateFormat("dd-MMM-yyyy hh:mm a"); |
|
for(Iterator<Map> i=otherlogsList.iterator();i.hasNext();){ |
|
Map d1=(Map)i.next(); |
|
HashMap data=new HashMap(); |
|
data.put("author", d1.get("username")); |
|
data.put("date", format.format((Date)d1.get("edited_datetime"))); |
|
data.put("message", d1.get("message")); |
|
data.put("scheduler_id", scheduler_id); |
|
rtn.put(((Date)d1.get("edited_datetime")).getTime(), data); |
|
} |
|
if(d!=null){ |
|
for(Iterator<SVNLogEntry> i=d.iterator();i.hasNext();){ |
|
SVNLogEntry entry=i.next(); |
|
ValueObject vo=new ValueObject(); |
|
HashMap data=new HashMap(); |
|
data.put("author", entry.getAuthor()); |
|
data.put("date", format.format(entry.getDate())); |
|
data.put("message", entry.getMessage()); |
|
data.put("revision", entry.getRevision()); |
|
data.put("scheduler_id", scheduler_id); |
|
if(entry.getRevision()>0){ |
|
//rtn.put(entry.getRevision(), data); |
|
rtn.put(entry.getDate().getTime(), data); |
|
} |
|
//System.out.println(" Rev:"+entry.getRevision()+" Date:"+format.format(entry.getDate())+" User:"+entry.getAuthor()+" Msg:"+entry.getMessage()); |
|
|
|
} |
|
} |
|
//return rtn.descendingMap(); |
|
Vector rtn1=new Vector(rtn.descendingMap().values()); |
|
return rtn1; |
|
}else{ |
|
return null; |
|
} |
|
|
|
} |
|
|
|
|
|
private Vector convertTriggerData(Vector v){ |
|
|
|
Vector rtn=new Vector(); |
|
for(Iterator i=v.iterator();i.hasNext();){ |
|
Map rd=(Map)i.next(); |
|
Vector row=new Vector(); |
|
row.add(rd.get("exp_second")); |
|
row.add(rd.get("exp_minute")); |
|
row.add(rd.get("exp_hour")); |
|
row.add(rd.get("exp_week")); |
|
row.add(rd.get("exp_day")); |
|
row.add(rd.get("exp_month")); |
|
row.add(rd.get("inject_code")); |
|
rtn.add(row); |
|
} |
|
return rtn; |
|
} |
|
|
|
/** |
|
* list all fields for the task.. |
|
* @param uid |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public List getTaskFields(String uid) throws Exception { |
|
|
|
try { |
|
List<ScheduledTask> list=new ScheduledTaskFactory().getTasks(); |
|
List<ScheduledTaskField> rtn=null; |
|
|
|
for(Iterator<ScheduledTask> i=list.iterator();i.hasNext();){ |
|
ScheduledTask st=i.next(); |
|
if(st.getUniqueid().equals(uid)){ |
|
rtn=st.listFormFields(); |
|
} |
|
} |
|
return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
private ScheduledTask getTask (String uid) throws Exception { |
|
|
|
try { |
|
return new ScheduledTaskFactory().getTask(uid); |
|
//List<ScheduledTask> list=new ScheduledTaskFactory().getTasks(); |
|
//ScheduledTask rtn=null; |
|
|
|
//for(Iterator<ScheduledTask> i=list.iterator();i.hasNext();){ |
|
// ScheduledTask st=i.next(); |
|
// if(st.getUniqueid().equals(uid)){ |
|
// rtn=st ; |
|
// } |
|
//} |
|
//return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
public String move2RootGroup(int scheduler_id, String taskuid) throws Exception { |
|
|
|
boolean normalError=false; |
|
try { |
|
String msg=""; |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
|
|
Map scheduler=sdb.listSchedulerItem(scheduler_id); |
|
String task_taskuid=(String)scheduler.get("taskuid"); |
|
|
|
if(task_taskuid!=null && taskuid!=null && task_taskuid.equals(taskuid) ){ |
|
sdb.updateTaskFolder(scheduler_id, 0); |
|
msg="Task has been moved"; |
|
|
|
}else if( |
|
task_taskuid!=null && taskuid!=null && |
|
!task_taskuid.equals(taskuid) && |
|
task_taskuid.substring(0,3).equals(taskuid.substring(0, 3)) |
|
|
|
){ |
|
sdb.moveItemToRootOrGroup(scheduler_id, taskuid, 0); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
msg="Please note, the task has been moved to different group"; |
|
|
|
}else{ |
|
normalError=true; |
|
throw new Exception("Moving allowed only within similar groups"); |
|
} |
|
sdb.closeDB(); |
|
//return listScheduledItems(); |
|
return msg; |
|
}catch(Exception e){ |
|
if(!normalError){ |
|
ClientError.reportError(e, null); |
|
} |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public String updateTaskFolder (int scheduler_id, int folder_id) throws Exception { |
|
|
|
boolean normalError=false; |
|
try { |
|
String msg=""; |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
String folder_tuid=sdb.getFolderTaskUID(folder_id); |
|
Map scheduler=sdb.listSchedulerItem(scheduler_id); |
|
String task_taskuid=(String)scheduler.get("taskuid"); |
|
|
|
if(task_taskuid!=null && folder_tuid!=null && task_taskuid.equals(folder_tuid) ){ |
|
int oFolder_id=(Integer)scheduler.get("folder_id"); |
|
if(oFolder_id==folder_id){ |
|
msg="Task not moved! Source and destination folder are the same"; |
|
}else{ |
|
sdb.updateTaskFolder(scheduler_id, folder_id); |
|
msg="Task has been moved"; |
|
} |
|
}else if( |
|
task_taskuid!=null && folder_tuid!=null && |
|
!task_taskuid.equals(folder_tuid) && |
|
task_taskuid.substring(0,3).equals(folder_tuid.substring(0, 3)) |
|
|
|
){ |
|
sdb.moveItemToRootOrGroup(scheduler_id, folder_tuid, folder_id); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
msg="Please note, the task has been moved to different group"; |
|
|
|
}else{ |
|
normalError=true; |
|
throw new Exception("Moving allowed only within similar groups"); |
|
} |
|
sdb.closeDB(); |
|
//return listScheduledItems(); |
|
return msg; |
|
}catch(Exception e){ |
|
if(!normalError){ |
|
ClientError.reportError(e, null); |
|
} |
|
throw e; |
|
} |
|
} |
|
|
|
public Map folderTasks (int folder_id, String taskuid) throws Exception { |
|
|
|
try { |
|
HashMap rtn=new HashMap(); |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
rtn.put("tasks", sdb.folderTasks(folder_id)); |
|
rtn.put("folders", sdb.listOfFolders(taskuid)); |
|
sdb.closeDB(); |
|
return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public Map updateScheduleTask(int scheduled_id,Map<String,String> data, String taskuid,boolean confirm_flag,Map plugindata, SchedulerTrigger[] triggerdata, String comment,Vector newtask_tags,Vector follow_tags) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
HashMap rtn=new HashMap(); |
|
|
|
log.debug(" updateScheduleTask : 1"); |
|
|
|
sdb.connectDB(); |
|
|
|
if(scheduled_id>0){ |
|
validateEditPrivilege(scheduled_id,sdb); |
|
} |
|
log.debug(" updateScheduleTask : 2"); |
|
if(confirm_flag){ |
|
|
|
//folder id and taskuid remains same, to avoid mistakenly updated some cases |
|
|
|
boolean newtask=false; |
|
String name=(String)data.get("name"); |
|
if(data==null ||(name!=null && name.trim().equalsIgnoreCase(""))){ |
|
throw new Exception("Name field is empty!!"); |
|
}else{ |
|
if(sdb.isNameExisting(name,scheduled_id)){ |
|
throw new Exception("Name:"+name+" already existing, please try different name"); |
|
} |
|
} |
|
|
|
|
|
if(scheduled_id>0){ |
|
Map tdata1=sdb.getScheduler(scheduled_id); |
|
//over-ride the taskuid and folder_id for existing so that can't be changed by mistake |
|
taskuid=(String)tdata1.get("taskuid"); |
|
String folder_id=tdata1.get("folder_id")+""; |
|
data.put("folder_id",folder_id); |
|
}else{ |
|
newtask=true; |
|
} |
|
|
|
log.debug(" updateScheduleTask : 3"); |
|
|
|
if(data.get("rscript")!=null) { |
|
String rscript=(String)data.get("rscript"); |
|
boolean calling=isCallingAnotherScript(rscript); |
|
if(calling){ |
|
data.put("calling_another_script","1"); |
|
} |
|
} |
|
|
|
ScheduledTask task=new ScheduledTaskFactory().getTask(taskuid); |
|
|
|
for(ScheduledTaskField field:task.listFormFields()){ |
|
if(field.getPluggindata()!=null){ |
|
//System.out.println("plugindata:"+data.get(field.getShortname())); |
|
//Map plugindata=(Map)data.get(field.getShortname()); |
|
PlugginInterface pl=SchedulerPlugginRegister.getPluggin(field.getFieldtype()); |
|
if(scheduled_id==0){ |
|
int p_recordid=pl.addAction(plugindata,getRequest()); |
|
data.put(pl.getPlugginData().getFieldreference(), p_recordid+""); |
|
}else{ |
|
int p_recordid=pl.updateAction(scheduled_id,plugindata,getRequest()); |
|
data.put(pl.getPlugginData().getFieldreference(), p_recordid+""); |
|
} |
|
data.put("plugin_txt", pl.getText(plugindata)); |
|
} |
|
} |
|
|
|
log.debug(" updateScheduleTask : 4"); |
|
|
|
//sdb.connectDB(); |
|
//String ip=(String)getRequest().getSession().getAttribute(REMOTE_IP); |
|
String user=getAuthenticatedUser(); |
|
//int scheduler_id=sdb.addOrUpdateScheduler(scheduled_id,data, taskuid,ip,comment); |
|
|
|
//SVNSchedulerCommitInfo sinfo=sdb.addOrUpdateScheduler(scheduled_id,data, taskuid,user,comment); |
|
Integer id = sdb.addOrUpdateSchedulerGetId(scheduled_id, data, taskuid); |
|
|
|
|
|
String rscript = null; |
|
|
|
if(id != null){ |
|
for(Iterator<ScheduledTaskField> it=task.listFormFields().iterator();it.hasNext();){ |
|
ScheduledTaskField stf=it.next(); |
|
if(data.get(stf.getShortname())!=null && !data.get(stf.getShortname()).equals("") ){ |
|
sdb.addOrUpdateSchedulerInsertTaskdata(id, data, stf.getShortname()); |
|
if(stf.getShortname().equalsIgnoreCase(FlexiField.TYPE_RSCRIPTEDITOR)){ |
|
rscript=data.get(stf.getShortname()); |
|
} |
|
} |
|
} |
|
} |
|
|
|
String svndata=rscript; |
|
|
|
if(rscript==null && data.get("plugin_txt")!=null ){ |
|
svndata=data.get("plugin_txt"); |
|
} |
|
|
|
SVNSchedulerCommitInfo sinfo=new SVNSchedulerCommitInfo (); |
|
sinfo.setRevision(-1); |
|
|
|
//SVN Synchronizing |
|
try{ |
|
if(svndata!=null){ |
|
String svnuser=Config.getString("svn_user"); |
|
String svnpwd=Config.getString("svn_pwd"); |
|
//String message="IP:"+clientip; |
|
// |
|
|
|
/* |
|
PreparedStatement ps5=this.connection().prepareStatement("SELECT * FROM users where ip_address=?"); |
|
ps5.setString(1, clientip); |
|
ResultSet rs5= ps5.executeQuery(); |
|
|
|
if(rs5.next()){ |
|
//Map row=new BasicRowProcessor().toMap(rs5); |
|
svnuser=rs5.getString("svn_username"); |
|
svnpwd=rs5.getString("svn_password"); |
|
} |
|
*/ |
|
//Map u=sdb.getSVNUser(clientip); |
|
Map u=sdb.getSVNUser4WikiUser(user); |
|
if(u!=null && u.get("svn_username")!=null && u.get("svn_password")!=null){ |
|
svnuser=(String)u.get("svn_username"); |
|
svnpwd=(String)u.get("svn_password"); |
|
} |
|
|
|
SVNSync sync=new SVNSync(svnuser,svnpwd); |
|
long rev=sync.syncScript(id, svndata,comment); |
|
sinfo.setRevision(rev); |
|
|
|
//Vector tag_ids=new Vector(); |
|
String user1="usr-"+svnuser.trim().toLowerCase(); |
|
int tag_id=sdb.addIfTagNotExist(user1); |
|
//tag_ids.add(id); |
|
|
|
//updateTagIds4Task(thisid, tag_ids,SchedulerDB.DONT_REMOVE_BEFORE_UPDATE) ; |
|
sdb.updateLast2UsersTag(id,tag_id); |
|
|
|
|
|
} |
|
}catch(Exception e){ |
|
log.error("Error on SVN sync: ERR:"+e.getMessage()); |
|
} |
|
|
|
|
|
|
|
//indexing |
|
try{ |
|
TickerIndexRecord tir=new TickerIndexRecord(); |
|
tir.setTablename(LuceneCrawler.INDEX_SCHEDULER); |
|
|
|
if( TokenCollectorFactory.getTokenCollector(tir)!=null){ |
|
LuceneCrawler lc=new LuceneCrawler(LuceneCrawler.INDEX_SCHEDULER); |
|
lc.index(id+""); |
|
} |
|
}catch(Exception e){ |
|
log.error("Error while indexing MSG:"+e.getMessage()); |
|
} |
|
sinfo.setScheduler_id(id.intValue()); |
|
|
|
|
|
|
|
int scheduler_id=sinfo.getScheduler_id(); |
|
|
|
log.debug(" updateScheduleTask : 5"); |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
ArrayList<Integer> ids=new ArrayList(); |
|
for(Iterator i=newtask_tags.iterator();i.hasNext();){ |
|
String tid=(String)i.next(); |
|
ids.add(Integer.parseInt(tid)); |
|
} |
|
sdb.updateTaskTagIds(scheduler_id, ids); |
|
|
|
ArrayList<Integer> fids=new ArrayList(); |
|
for(Iterator i=follow_tags.iterator();i.hasNext();){ |
|
String tid=(String)i.next(); |
|
fids.add(Integer.parseInt(tid)); |
|
} |
|
sdb.updateFollwerTagIds(scheduler_id, fids); |
|
|
|
|
|
|
|
|
|
*/ |
|
//String diff, Map tempdata, String templ_file |
|
|
|
|
|
|
|
SVNSync sync=new SVNSync(); |
|
String diff=null; |
|
if(sinfo.getRevision()>=0){ |
|
diff=sync.getLastChanged(scheduler_id); |
|
}else { |
|
diff="@@@No modification on script@@ there may be change on other than script for example trigger times, name and etc.. "; |
|
|
|
} |
|
|
|
HashMap hdata=new HashMap(); |
|
hdata.put("task_name", name); |
|
hdata.put("scheduler_id", scheduler_id); |
|
hdata.put("current_user", getAuthorizedUser(sdb)); |
|
hdata.put("diff", diff); |
|
hdata.put("comments", comment); |
|
String templ_filename="scheduler_modified_alert.txt"; |
|
updateAllItemTags(scheduler_id, newtask_tags,follow_tags,sdb,sdb,name, comment,sinfo.getRevision(), diff, hdata, templ_filename) ; |
|
|
|
|
|
|
|
//updateAllItemTags(scheduler_id, newtask_tags,follow_tags,sdb, name, comment,sinfo.getRevision(), ); |
|
//notifyLastModification(sdb,name,scheduled_id,comment,sinfo.getRevision()); |
|
|
|
|
|
log.debug(" updateScheduleTask : 5"); |
|
sdb.setTriggerData(scheduler_id, triggerdata); |
|
|
|
Map data1=sdb.getScheduler(scheduler_id); |
|
try{ |
|
SchedulerEngine engine=new SchedulerEngine(); |
|
engine.updateJob(data1, taskuid,sdb); |
|
}catch(Exception e){ |
|
log.error("Couldn't update scheduler engine as this server isn't set as load balance manager"); |
|
} |
|
|
|
Map rtndata=sdb.getScheduler(scheduler_id); |
|
Vector v=new Vector(); |
|
v.add(rtndata); |
|
|
|
log.debug(" updateScheduleTask : 6"); |
|
|
|
|
|
//sdb.closeDB(); |
|
//return listScheduledItems(); |
|
|
|
rtn.put("scheduleditems", v); |
|
rtn.put("scheduler_id", scheduler_id); |
|
log.debug(" updateScheduleTask : 7"); |
|
|
|
rtn.putAll(getThemeAccessData(sdb)); |
|
|
|
/* |
|
AuthUser auth=getAuthenticatedUserObj(sdb); |
|
|
|
if(auth!=null){ |
|
rtn.put("rwx_tags",auth.getRwx()); |
|
rtn.put("rx_tags",auth.getRx()); |
|
rtn.put("r_tags",auth.getR()); |
|
} |
|
|
|
String superuser=(String)getRequest().getSession().getAttribute(ValidateSuperUser.SESSION_LOGGED_SUPERUSER); |
|
if(superuser!=null && !superuser.equals("")){ |
|
rtn.put("superuser",superuser); |
|
} |
|
*/ |
|
return rtn; |
|
|
|
}else{ |
|
|
|
ScheduledTask task=new ScheduledTaskFactory().getTask(taskuid); |
|
for(ScheduledTaskField field:task.listFormFields()){ |
|
if(field.getPluggindata()!=null){ |
|
//rtn.put("pluggindata", field.getPluggindata()); |
|
rtn.put("plugginfield", field); |
|
} |
|
} |
|
//String validation_stng=engine.validateTaskData(data,taskuid); |
|
//rtn.put("message", validation_stng); |
|
return rtn ; |
|
|
|
} |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
e.printStackTrace(); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
private boolean isCallingAnotherScript(String rscript) throws Exception { |
|
|
|
//log.debug("rscript:"+rscript); |
|
boolean calling=false; |
|
StringTokenizer st=new StringTokenizer(rscript,"\r\n;{}"); |
|
while(st.hasMoreTokens()){ |
|
String line=st.nextToken(); |
|
if(line.contains("#")){ |
|
line=line.substring(0,line.indexOf("#")); |
|
} |
|
|
|
if(line.toLowerCase().contains(CALLING_ANOTHER_SCRIPT_PATTERN.toLowerCase())){ |
|
log.debug("~~~~calling executeSchedulerScript()"); |
|
calling=true; |
|
} |
|
log.debug("line:"+line+" contains:"+line.toLowerCase().contains(CALLING_ANOTHER_SCRIPT_PATTERN.toLowerCase())); |
|
} |
|
return calling; |
|
|
|
|
|
} |
|
|
|
public void updateCallingAnotherScript(int start, int end) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
for(int i=start;i<end;i++) { |
|
|
|
Map data=sdb.getScheduler(i); |
|
if(data!=null && data.get("rscript")!=null) { |
|
String rscript=(String)data.get("rscript"); |
|
boolean calling=isCallingAnotherScript(rscript); |
|
sdb.updateCallingAnotherScript(i, calling?1:0); |
|
} |
|
|
|
} |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
/* |
|
public Map renameFolder(int folderid, String foldername) throws Exception { |
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
sdb.renameFolder(folderid, foldername); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
return listScheduledItems(); |
|
}catch(Exception e){ |
|
ClientErrorMgmt.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
*/ |
|
public boolean renameFolder(String taskuid,String oldfolder, String newfolder) throws Exception { |
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
sdb.renameFolder(taskuid,oldfolder,newfolder); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
return true; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public Map moveTasks(String d_tkuid,int d_fid, String s_tkuid,int s_fid) throws Exception { |
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
sdb.moveTasks(d_tkuid, d_fid, s_tkuid, s_fid); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
return listScheduledItems(); |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public boolean moveFolderContents(String foldername, String taskuid, String parentfolder, String targetuid, String targetpath) throws Exception { |
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
//sdb.deleteFolder(folderid); |
|
ArrayList<Integer> ids=sdb.moveItems(foldername, taskuid, parentfolder, targetuid, targetpath); |
|
|
|
SchedulerEngine engine=new SchedulerEngine(); |
|
for(Integer scheduler_id: ids){ |
|
Map data1=sdb.getScheduler(scheduler_id); |
|
try{ |
|
engine.removeJob(scheduler_id, data1, taskuid); //remove the job first that linked with previous taskuid |
|
engine.updateJob(data1, targetuid,sdb); //add job with new taskuid |
|
}catch(Exception e){ |
|
log.error("Couldn't update scheduler task id:"+scheduler_id+" when folder "+foldername+" moved"); |
|
} |
|
} |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
return true; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
public Map deleteFolder(int folderid) throws Exception { |
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
sdb.deleteFolder(folderid); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
return listScheduledItems(); |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public boolean addFolder(String taskuid, String foldername) throws Exception { |
|
try{ |
|
Map rtn=new HashMap(); |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
long id=sdb.addFolder(taskuid, foldername); |
|
new ScheduledTaskFactory().refreshTaskLoaded(); |
|
|
|
|
|
|
|
return true; |
|
|
|
//return listScheduledItems(); |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public int toggleActive(int scheduler_id) throws Exception { |
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
int rtn=sdb.toggleActive(scheduler_id); |
|
|
|
String message="Task "+(rtn==0 ? " Unpaused ":" Paused "); |
|
String user=getAuthenticatedUser(); |
|
Map data1=sdb.getScheduler(scheduler_id); |
|
|
|
//sdb.closeDB(); |
|
//data.put("id", scheduler_id); |
|
sdb.addEditLogs(scheduler_id, user, message); |
|
|
|
String name=(String)data1.get("name"); |
|
notifyLastModification(sdb,name , scheduler_id, message, 0); |
|
|
|
log.debug("just before update..."); |
|
String taskuid=(String)data1.get("taskuid"); |
|
new SchedulerEngine().updateJob(data1, taskuid,sdb); |
|
|
|
sdb.closeDB(); |
|
return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
|
|
} |
|
} |
|
|
|
|
|
|
|
public String getLogMessages(int logger_id) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
String msgs=sdb.getLogMessages(logger_id); |
|
sdb.closeDB(); |
|
return msgs; |
|
} |
|
|
|
|
|
/* |
|
public String getLogMessages(int log_id ) throws Exception { |
|
try{ |
|
SchedulerDB sdb=new SchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
String rtn=sdb.getLogMessages(log_id); |
|
|
|
|
|
sdb.closeDB(); |
|
|
|
return rtn; |
|
|
|
}catch(Exception e){ |
|
ClientErrorMgmt.reportError(e, null); |
|
throw e; |
|
} |
|
|
|
} |
|
*/ |
|
|
|
|
|
public String getNext5Times(int scheduler_id ) throws Exception { |
|
|
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
Map data=sdb.getScheduler(scheduler_id); |
|
|
|
Number active=(Number)data.get("active"); |
|
if(active!=null && active.intValue()==-1 ){ |
|
throw new Exception("Task is inactive and no queue for this task"); |
|
} |
|
String taskuid=(String)data.get("taskuid"); |
|
String name=(String)data.get("name"); |
|
String timezs=(String)data.get("timezone"); |
|
TimeZone timezone=null; |
|
if(timezs!=null && !timezs.equals("")){ |
|
timezone=TimeZone.getTimeZone(timezs); |
|
}else{ |
|
timezone=TimeZone.getDefault(); |
|
} |
|
String time5="The followings are task execution time ("+timezone.getID()+") pattern:\n"; |
|
time5+="--------------------------------------\n"; |
|
time5+=new SchedulerEngine().getNext5Times(name, taskuid, timezone,scheduler_id); |
|
|
|
|
|
|
|
sdb.closeDB(); |
|
|
|
return time5; |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
|
|
} |
|
|
|
|
|
public Map removeTask(int scheduler_id) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
sdb.connectDB(); |
|
|
|
List depids=sdb.getDependsThis(scheduler_id); |
|
List depNotRemove = new ArrayList(); |
|
if (depids.size()>0) { |
|
depNotRemove = sdb.searchScheduler(StringUtils.join(depids, ',')); |
|
} |
|
|
|
if(depNotRemove.size()>0){ |
|
throw new Exception("Deleting faild. Task Ids "+depids+" depends this task"); |
|
}else{ |
|
Map data=sdb.getScheduler(scheduler_id); |
|
String taskuid=(String)data.get("taskuid"); |
|
new SchedulerEngine().removeJob(scheduler_id, data, taskuid); |
|
|
|
sdb.deleteScheduler(scheduler_id); |
|
sdb.removeQueueLog(new Date().getTime(),scheduler_id); |
|
sdb.closeDB(); |
|
|
|
return listScheduledItems(); |
|
} |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
public Map putBackTask(int scheduler_id) throws Exception { |
|
|
|
try{ |
|
HashMap rtn=new HashMap(); |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
List depids=sdb.getDependsTo(scheduler_id); |
|
for (int i=0; i<depids.size(); i++) { |
|
int depId = ((Integer) depids.get(i)).intValue(); |
|
if (sdb.isDeleted(depId)) { |
|
Map schedulerMap = sdb.getScheduler(depId); |
|
String taskName = (String) schedulerMap.get("name"); |
|
throw new Exception("Put back task failed. This task depend to " + depId + " ('" + taskName + "'). Put back task "+depId+" first."); |
|
} |
|
} |
|
|
|
|
|
sdb.putBackScheduler(scheduler_id); |
|
|
|
Map data=sdb.getScheduler(scheduler_id); |
|
|
|
String taskuid=(String)data.get("taskuid"); |
|
|
|
new SchedulerEngine().updateJob(data, taskuid,sdb); |
|
|
|
|
|
Vector v=new Vector(); |
|
v.add(data); |
|
|
|
|
|
|
|
|
|
sdb.closeDB(); |
|
//return listScheduledItems(); |
|
|
|
rtn.put("scheduleditems", v); |
|
rtn.put("scheduler_id", scheduler_id); |
|
|
|
sdb.closeDB(); |
|
|
|
return rtn; |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public boolean purgeTask(int scheduler_id) throws Exception { |
|
|
|
try{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
Map data=sdb.getScheduler(scheduler_id); |
|
String taskuid=(String)data.get("taskuid"); |
|
new SchedulerEngine().removeJob(scheduler_id, data, taskuid); |
|
|
|
ScheduledTask task=new ScheduledTaskFactory().getTask(taskuid); |
|
|
|
for(ScheduledTaskField field:task.listFormFields()){ |
|
if(field.getPluggindata()!=null){ |
|
PlugginInterface pl=SchedulerPlugginRegister.getPluggin(field.getFieldtype()); |
|
if(scheduler_id>0){ |
|
try{ |
|
pl.deleteAction(scheduler_id,getRequest()); |
|
}catch(Exception e){ |
|
log.error("Error:"+e.getMessage()); |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
sdb.purgeScheduler(scheduler_id); |
|
sdb.removeQueueLog(new Date().getTime(),scheduler_id); |
|
sdb.closeDB(); |
|
|
|
//return listScheduledItems(); |
|
return true; |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
/** |
|
* @deprecated |
|
* @param scheduler_id |
|
* @param log_id |
|
* @return |
|
* @throws Exception |
|
* this method to be removed later and should not be called in any new development |
|
*/ |
|
|
|
public Collection executeTaskNow(int scheduler_id, int log_id) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
|
|
sdb.connectDB(); |
|
|
|
log.debug("log_id:"+log_id); |
|
if(log_id>0){ |
|
|
|
sdb.updateQueueLogStatus(log_id,LOG_STATUS_RESTARTED, P2PService.getComputerName()); |
|
} |
|
Map data=sdb.getScheduler(scheduler_id); |
|
|
|
Number active=(Number)data.get("active"); |
|
//if(active!=null && active.intValue()==-1 ){ |
|
// throw new Exception("Inactive task can't be executed"); |
|
//} |
|
String taskuid=(String)data.get("taskuid"); |
|
String name=(String)data.get("name"); |
|
String user=getAuthenticatedUser(); |
|
String inject_code=null; |
|
new SchedulerEngine().executeJobNow(name, taskuid,data,sdb,user,inject_code); |
|
|
|
|
|
|
|
return getQueueLogs(null); |
|
|
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally { |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
public Collection executeTask(int scheduler_id, int log_id,int minutes_delay) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
|
|
sdb.connectDB(); |
|
|
|
log.debug("log_id:"+log_id); |
|
if(log_id>0){ |
|
|
|
sdb.updateQueueLogStatus(log_id,LOG_STATUS_RESTARTED, P2PService.getComputerName()); |
|
} |
|
Map data=sdb.getScheduler(scheduler_id); |
|
|
|
Number active=(Number)data.get("active"); |
|
//if(active!=null && active.intValue()==-1 ){ |
|
// throw new Exception("Inactive task can't be executed"); |
|
//} |
|
String taskuid=(String)data.get("taskuid"); |
|
String name=(String)data.get("name"); |
|
String user=getAuthenticatedUser(); |
|
|
|
String inject_code=null; |
|
|
|
if(minutes_delay>0){ |
|
new SchedulerEngine().runJobDelayed(data, taskuid,sdb,minutes_delay,user); |
|
}else{ |
|
new SchedulerEngine().executeJobNow(name, taskuid,data,sdb,user,inject_code); |
|
} |
|
|
|
|
|
|
|
return getQueueLogs(null); |
|
|
|
|
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
|
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally { |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
private static JCS cache=null; |
|
|
|
|
|
|
|
private Number convertNumber(Object obj){ |
|
if(obj instanceof Number){ |
|
return (Number)obj; |
|
}if(obj instanceof String){ |
|
Integer num=new Integer(Integer.parseInt((String)obj)); |
|
return num; |
|
} |
|
return null; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static boolean TIMER_RUNNING=false; |
|
private synchronized void setTimerRunning(boolean flag){ |
|
TIMER_RUNNING=flag; |
|
} |
|
|
|
|
|
private static HashMap datamap=new HashMap(); |
|
private synchronized static Object accessData(int action, String key){ |
|
//action =1 to access the data |
|
//action =2 to remove the data. |
|
Object rtn=null; |
|
if(action==1 && key!=null && datamap!=null && datamap.containsKey(key)){ |
|
rtn=datamap.get(key); |
|
}else if (action==2){ |
|
datamap.clear(); |
|
} |
|
return rtn; |
|
} |
|
|
|
|
|
|
|
private String getEnbledTaskTypes(){ |
|
|
|
Vector vs=SchedulerEngine.getEnabledTaskTypes(); |
|
String tasktypes=""; |
|
for(Object taskuid: SchedulerEngine.getEnabledTaskTypes()){ |
|
tasktypes+=(tasktypes.equals("") ? "'"+taskuid+"'":",'"+taskuid+"'"); |
|
} |
|
|
|
return tasktypes; |
|
|
|
} |
|
|
|
/** |
|
* |
|
* @param dobj |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Collection getQueueLogs(Map dobj) throws Exception { |
|
|
|
String datequery = ConstructQueryDB.getConstructQueryDB().constructQueueHistoryQuery(dobj); |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
sdb.connectDB(); |
|
|
|
if(cache==null){ |
|
cache=JCS.getInstance("logQueues"); |
|
} |
|
IElementAttributes att= cache.getDefaultElementAttributes(); |
|
att.setMaxLifeSeconds(2); |
|
|
|
try{ |
|
|
|
sdb.setReadOnly(true); |
|
|
|
Date now=new Date(); |
|
List c=null; |
|
|
|
Map logdata= getExecutingTasks(); |
|
log.debug("log data"+logdata); |
|
|
|
Vector all_ids=(Vector)logdata.get("queued"); |
|
|
|
//String enabledtaskuids=getEnbledTaskTypes(); |
|
|
|
if(datequery==null){ |
|
if(cache.get("c1")==null){ |
|
List<LoadBalancingQueueItem> qidst=LoadBalancingQueue.getDefault().getAllTasks(); //ScheduledTaskQueue.getQueuedTaskIds(); |
|
String ids=null; |
|
Vector qids=new Vector(); |
|
|
|
for(LoadBalancingQueueItem it:qidst){ |
|
// ids=(ids==null)? ""+id:ids+","+id; |
|
String id_tr=it.getSchedulerid()+"_"+it.getSf().getTrigger_time(); |
|
ids=(ids==null)? "'"+id_tr+"'": ids+",'"+id_tr+"'"; |
|
qids.add(id_tr); |
|
} |
|
|
|
IElementAttributes att1= cache.getDefaultElementAttributes(); |
|
att1.setMaxLifeSeconds(3); |
|
|
|
List c1=(List)cache.get("qLogsDb"); |
|
if(c1==null ){ |
|
|
|
c=sdb.listOfQueueLogs(ids,now.getTime()); |
|
if(c!=null)cache.put("qLogsDb",c,att1); |
|
|
|
}else{ |
|
c1.size(); //access any of the method to make sure it wont't expire |
|
c=c1; |
|
} |
|
|
|
log.debug("c1:"+c.size()+" all_ids:"+((all_ids!=null)?all_ids.size():0)+" qidst:"+qidst.size()); |
|
|
|
|
|
if(IncomingMessage.getExecutingPeersTime()!=null ){ |
|
Collection sid_times=IncomingMessage.getExecutingPeersTime().values(); |
|
log.debug("sid_times"+sid_times); |
|
try{ |
|
synchronized(sid_times){ |
|
for(Iterator<Map> i=sid_times.iterator();i.hasNext();){ |
|
Map sisd=i.next(); |
|
if(sisd!=null){ |
|
try{ |
|
int scid=(Integer)sisd.keySet().iterator().next(); |
|
long trig=(Long)sisd.values().iterator().next(); |
|
String id_tr1=scid+"_"+trig; |
|
|
|
if(!qids.contains(id_tr1)){ |
|
|
|
Map rec=sdb.listOfQueueLog(scid,trig); |
|
//rec.put("crashed", true); |
|
Number numb=(Number)rec.get("is_triggered"); |
|
if(rec!=null && (numb==null || (numb!=null && numb.intValue()!=1)) ){ |
|
|
|
//c.add(0,rec); //adds on top |
|
|
|
} |
|
if(numb!=null && numb.intValue()==1){ |
|
LoadBalancingQueue.getDefault().removeFaultyProcessingTask(scid, trig); |
|
|
|
} |
|
} |
|
}catch(Exception e){ |
|
//log.error("Error:"+e.getMessage()); |
|
} |
|
}else{ |
|
//log.error("error: sisd=is null"); |
|
} |
|
|
|
} |
|
} |
|
}catch(Exception e){ |
|
log.error("Error e:"+e.getMessage()); |
|
} |
|
|
|
|
|
} |
|
|
|
if(c!=null) cache.put("c1",c,att); |
|
//System.out.println("storing..."); |
|
}else{ |
|
c=(List)cache.get("c1"); |
|
//System.out.println("retrieving..."); |
|
} |
|
}else{ |
|
if(cache.get("c2")==null){ |
|
c=sdb.listOfHistoryQueueLogs(now.getTime(),datequery); |
|
if(c!=null)cache.put("c2",c,att); |
|
}else{ |
|
c=(List)cache.get("c2"); |
|
} |
|
} |
|
|
|
|
|
if(c==null) { |
|
return new ArrayList(); |
|
} |
|
|
|
Vector excecuting=(Vector)logdata.get("queued"); |
|
Map pfnames=(Map)logdata.get("pfnames"); |
|
|
|
log.debug("execting:"+excecuting); |
|
//log.debug("c:"+c); |
|
populateHistoryLogs(c,pfnames,all_ids,excecuting); |
|
|
|
log.debug("c:"+c.size()); |
|
return c; |
|
}catch(SQLException e1){ |
|
|
|
//log.error("SQL Error:"+e1.getMessage()+"\n -->Call stack at this time:\n"); |
|
//log.error(SchedulerDB.collectStack4All()); |
|
log.error("Error:"+e1.getMessage()); |
|
|
|
//e1.printStackTrace(); |
|
|
|
return new ArrayList(); |
|
|
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
//public String getConsoleMsg(int scheduler_id, long trigger_time) throws Exception |
|
|
|
public String getConsoleMsg(String unique_id) throws Exception { |
|
SchedulerDB sdb = SchedulerDB.getSchedulerDB(); |
|
|
|
try { |
|
int scheduler_id=0; |
|
long trigger_time=0; |
|
|
|
StringTokenizer st=new StringTokenizer(unique_id,"_"); |
|
if(st.countTokens()>=2){ |
|
try{ |
|
String t1=st.nextToken(); |
|
String t2=st.nextToken(); |
|
scheduler_id=Integer.parseInt(t1); |
|
trigger_time=Long.parseLong(t2); |
|
}catch(Exception e){log.error("error while parsing: "+unique_id);} |
|
} |
|
|
|
|
|
sdb.connectDB(); |
|
String rtn= sdb.getConsoleMsg(scheduler_id, trigger_time); |
|
|
|
return rtn; |
|
} catch (Exception e) { |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} finally { |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
|
|
public Collection getLast15Logs(int scheduler_id) throws Exception { |
|
SchedulerDB sdb = SchedulerDB.getSchedulerDB(); |
|
try { |
|
sdb.connectDB(); |
|
List c = sdb.listOfLast15Logs(new Date().getTime(), scheduler_id); |
|
populateHistoryLogs(c, new HashMap(), new Vector(), new Vector()); |
|
return c; |
|
} catch (Exception e) { |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} finally { |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
private void populateHistoryLogs(List c,Map pfnames,List all_ids,List excecuting) { |
|
for(Iterator i=c.iterator();i.hasNext();){ |
|
Map record=(Map)i.next(); |
|
if(record!=null){ |
|
//log.debug("record:"+record); |
|
//replace host names with friendly names |
|
String host=(String)record.get("host"); |
|
if(pfnames!=null && pfnames.get(host)!=null){ |
|
record.put("host",pfnames.get(host)); |
|
} |
|
Number scheduler_id=(Number)record.get("scheduler_id"); |
|
Number trigger_time; |
|
if(record.get("trigger_time") instanceof String){ |
|
trigger_time=(Number)record.get("trigger_time_or"); |
|
}else{ |
|
trigger_time=(Number)record.get("trigger_time"); |
|
} |
|
|
|
String uid=scheduler_id+"_"+trigger_time; |
|
if(all_ids.contains(uid)){ |
|
record.put("queued", 1); |
|
}else{ |
|
record.put("queued", 0); |
|
} |
|
|
|
|
|
String tzsuffix=""; |
|
String timezone=(String)record.get("timezone"); |
|
List list=Arrays.asList(TimeZone.getAvailableIDs()); |
|
TimeZone currentTZ=null; |
|
if(timezone!=null && !timezone.trim().equals("") && list.contains(timezone.trim())) { |
|
tzsuffix=" "+TimeZone.getTimeZone(timezone).getDisplayName(false, TimeZone.SHORT)+""; |
|
|
|
} |
|
|
|
//if(uid.equals(currentexec_id)){ |
|
if(excecuting.contains(uid)){ |
|
record.put("executing", 1); |
|
} |
|
record.put("unique_id", scheduler_id+"_"+trigger_time); |
|
if(trigger_time!=null){ |
|
Date d1=new Date(); |
|
Date d2=d1; |
|
|
|
d1.setTime(trigger_time.longValue()); |
|
record.put("trigger_time_or",trigger_time ); |
|
record.put("trigger_time", getFriendlyTime(d1,timezone)+tzsuffix); |
|
} |
|
int is_triggered=(record.get("is_triggered")==null?0: ((Number)record.get("is_triggered")).intValue()); |
|
//Date sd=(Date)record.get("start_time"); |
|
//Date ed=(Date)record.get("end_time"); |
|
Timestamp s=(Timestamp)record.get("start_time"); |
|
Timestamp e=(Timestamp)record.get("end_time"); |
|
|
|
if(record.get("db_connection_ids")!=null){ |
|
//remove db_connection_ids, as it may slow down the client. |
|
record.remove("db_connection_ids"); |
|
} |
|
|
|
|
|
//SimpleDateFormat dateFormat1 =new SimpleDateFormat("hh:mm:ss"); |
|
SimpleDateFormat dateFormat =new SimpleDateFormat("mm:ss"); |
|
SimpleDateFormat dateFormat2 =new SimpleDateFormat("hh:mm:ss"); |
|
|
|
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); |
|
dateFormat2.setTimeZone(TimeZone.getTimeZone("GMT")); |
|
if(s!=null){ |
|
Date d3=new Date(); |
|
d3.setTime(trigger_time.longValue()); |
|
long diff3=s.getTime()-d3.getTime(); |
|
if(diff3>=1000){ |
|
record.put("started_at",dateFormat.format(new Date(diff3))); |
|
} |
|
//record.put("started_at",dateFormat1.format(s)); |
|
} |
|
if(e!=null && s!=null){ |
|
long diff=e.getTime()-s.getTime(); |
|
if(diff>3600000){ |
|
record.put("duration", dateFormat2.format(new Date(diff))); |
|
}else{ |
|
record.put("duration", dateFormat.format(new Date(diff))); |
|
} |
|
} |
|
|
|
} //if record !=null |
|
} |
|
} |
|
|
|
public Vector getDataLogHistory(String unique_id) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
int scheduler_id=0; |
|
long trigger_time=0; |
|
|
|
StringTokenizer st=new StringTokenizer(unique_id,"_"); |
|
if(st.countTokens()>=2){ |
|
try{ |
|
String t1=st.nextToken(); |
|
String t2=st.nextToken(); |
|
scheduler_id=Integer.parseInt(t1); |
|
trigger_time=Long.parseLong(t2); |
|
}catch(Exception e){log.error("error while parsing: "+unique_id);} |
|
} |
|
|
|
sdb.connectDB(); |
|
Vector data=sdb.getDataLogHistory(scheduler_id, trigger_time); |
|
return data; |
|
|
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
* |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map getExecutingTasks() throws Exception { |
|
try{ |
|
|
|
if(cache==null){ |
|
cache=JCS.getInstance("logQueues"); |
|
} |
|
IElementAttributes att= cache.getDefaultElementAttributes(); |
|
att.setMaxLifeSeconds(2); |
|
|
|
if(cache.get("getExecutingTasks")!=null){ |
|
Map t1=(Map)cache.get("getExecutingTasks"); |
|
t1.put("servertime", new SimpleDateFormat("MMMMM dd, yyyy HH:mm:ss").format(new Date())); |
|
t1.put("onlinepeers", getOnlinePeers()); |
|
return t1; |
|
}else{ |
|
|
|
Vector rtn=new Vector(); |
|
|
|
//currently executing task |
|
TreeMap t=new TreeMap(); |
|
TreeMap emachines=new TreeMap(); |
|
|
|
|
|
Collection<LoadBalancingQueueItem> executingTasks=LoadBalancingQueue.getDefault().getExecutingTasks(); |
|
|
|
|
|
Collection<LoadBalancingQueueItem> queuedTasks=LoadBalancingQueue.getDefault().getQueuedTasks(); |
|
|
|
|
|
//Map<String,Map> extasktimes=IncomingMessage.getExecutingPeersTime(); |
|
|
|
Vector executing=new Vector(); |
|
for(Iterator<LoadBalancingQueueItem> i=executingTasks.iterator();i.hasNext();){ |
|
LoadBalancingQueueItem item=i.next(); |
|
String uid=item.getSchedulerid()+"_"+item.getSf().getTrigger_time(); |
|
rtn.add(uid); |
|
executing.add(uid); |
|
emachines.put(uid, item.getMachine()); |
|
} |
|
|
|
|
|
for(Iterator<LoadBalancingQueueItem> i=queuedTasks.iterator();i.hasNext();){ |
|
LoadBalancingQueueItem item=i.next(); |
|
String uid=item.getSchedulerid()+"_"+item.getSf().getTrigger_time(); |
|
rtn.add(uid); |
|
} |
|
|
|
/* |
|
log.debug("queued items:"+queuedTasks.size()); |
|
if(extasktimes!=null){ |
|
try{ |
|
for(Iterator<String> i=extasktimes.keySet().iterator();i.hasNext();){ |
|
String peer=i.next(); |
|
Map<Integer,Long> idtime=extasktimes.get(peer); |
|
if(idtime!=null){ |
|
for(Integer s_id: idtime.keySet()){ |
|
//int s_id=(Integer)idtime.keySet().iterator().next(); |
|
//long t_id=(Long)idtime.values().iterator().next(); |
|
|
|
long t_id=idtime.get(s_id); |
|
String uid=s_id+"_"+t_id; |
|
if(!rtn.contains(uid)){ |
|
rtn.add(uid); |
|
executing.add(uid); |
|
//executingsids.add(s_id); |
|
emachines.put(uid, peer); |
|
} |
|
} |
|
} |
|
} |
|
}catch(Exception e){ } |
|
} |
|
*/ |
|
|
|
//t.put("alltasks", rtn); |
|
|
|
TreeMap t1=new TreeMap(); |
|
|
|
//Vector ids=ScheduledTaskQueue.getQueuedIds(); |
|
//Map logdata=ScheduledTaskQueue.getQueuedIds(); |
|
//Vector all_ids=(Vector)logdata.get("alltasks"); |
|
//String currentexec_id=(String)logdata.get("executing"); |
|
|
|
t1.put("servertime", new SimpleDateFormat("MMMMM dd, yyyy HH:mm:ss").format(new Date())); |
|
//t1.put("istarted", new SchedulerEngine().isSchedulerStarted()); |
|
t1.put("lastexecutedtime", LoadBalancingQueue.getDefault().lastExcecutedTime()); |
|
t1.put("queued", rtn); |
|
if(P2PService.getComputerName().equalsIgnoreCase("4ecappcsg5") && !getRequest().getContextPath().contains("tomcat_beta")){ |
|
|
|
}else{ |
|
t1.put("onlinepeers", getOnlinePeers()); |
|
} |
|
HashMap excount=new HashMap(); |
|
int last10sec=10000; |
|
List<PeerMachine> online=new PeerManagerHSQL().getOnlinePeers(last10sec ); |
|
for(PeerMachine pm:online){ |
|
if(pm.getRunning().size()>0){ |
|
excount.put(pm.getPeername(), pm.getRunning().size()); |
|
} |
|
} |
|
t1.put("exe_count",excount); |
|
t1.put("executing",executing); |
|
t1.put("executingpeers",emachines); |
|
|
|
t1.put("pfnames", getPeerFriendlyNames()); |
|
|
|
try{ |
|
//t1.put("x_executingids",executingsids); |
|
//t1.put("x_completed",percentageCalc(executingsids,executingTasks)); |
|
t1.put("x_completed",percentageCalc1(executingTasks)); |
|
|
|
}catch(Exception e){ |
|
t1.put("x_completed_error",e.getMessage()); |
|
} |
|
t1.put("hostname",P2PService.getComputerName()); |
|
cache.put("getExecutingTasks",t1,att); |
|
return t1; |
|
} |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
/** |
|
* @deprecated |
|
* @return |
|
* @throws Exception |
|
*/ |
|
private Map getExecutingTasks_old() throws Exception { |
|
try{ |
|
|
|
if(cache==null){ |
|
cache=JCS.getInstance("logQueues"); |
|
} |
|
IElementAttributes att= cache.getDefaultElementAttributes(); |
|
att.setMaxLifeSeconds(2); |
|
|
|
if(cache.get("getExecutingTasks")!=null){ |
|
Map t1=(Map)cache.get("getExecutingTasks"); |
|
t1.put("servertime", new SimpleDateFormat("MMMMM dd, yyyy HH:mm:ss").format(new Date())); |
|
t1.put("onlinepeers", getOnlinePeers()); |
|
return t1; |
|
}else{ |
|
|
|
Vector rtn=new Vector(); |
|
|
|
//currently executing task |
|
TreeMap t=new TreeMap(); |
|
TreeMap emachines=new TreeMap(); |
|
|
|
|
|
Collection<LoadBalancingQueueItem> executingTasks=LoadBalancingQueue.getDefault().getExecutingTasks(); |
|
//System.out.println("SchedulerMgmt.getExecutingTasks(): executingTasks:"+executingTasks); |
|
|
|
Collection<LoadBalancingQueueItem> queuedTasks=LoadBalancingQueue.getDefault().getQueuedTasks(); |
|
|
|
|
|
Map<String,Map> extasktimes=IncomingMessage.getExecutingPeersTime(); |
|
|
|
Vector executing=new Vector(); |
|
//Vector executingsids=new Vector(); |
|
for(Iterator<LoadBalancingQueueItem> i=executingTasks.iterator();i.hasNext();){ |
|
LoadBalancingQueueItem item=i.next(); |
|
String uid=item.getSchedulerid()+"_"+item.getSf().getTrigger_time(); |
|
rtn.add(uid); |
|
executing.add(uid); |
|
//executingsids.add(item.getSchedulerid()); |
|
emachines.put(uid, item.getMachine()); |
|
} |
|
|
|
|
|
|
|
//t.put("executing",executing); |
|
|
|
|
|
for(Iterator<LoadBalancingQueueItem> i=queuedTasks.iterator();i.hasNext();){ |
|
LoadBalancingQueueItem item=i.next(); |
|
String uid=item.getSchedulerid()+"_"+item.getSf().getTrigger_time(); |
|
rtn.add(uid); |
|
|
|
} |
|
|
|
log.debug("queued items:"+queuedTasks.size()); |
|
if(extasktimes!=null){ |
|
try{ |
|
for(Iterator<String> i=extasktimes.keySet().iterator();i.hasNext();){ |
|
String peer=i.next(); |
|
Map<Integer,Long> idtime=extasktimes.get(peer); |
|
if(idtime!=null){ |
|
for(Integer s_id: idtime.keySet()){ |
|
//int s_id=(Integer)idtime.keySet().iterator().next(); |
|
//long t_id=(Long)idtime.values().iterator().next(); |
|
|
|
long t_id=idtime.get(s_id); |
|
String uid=s_id+"_"+t_id; |
|
if(!rtn.contains(uid)){ |
|
rtn.add(uid); |
|
executing.add(uid); |
|
//executingsids.add(s_id); |
|
emachines.put(uid, peer); |
|
} |
|
} |
|
} |
|
} |
|
}catch(Exception e){ } |
|
} |
|
|
|
//t.put("alltasks", rtn); |
|
|
|
TreeMap t1=new TreeMap(); |
|
|
|
//Vector ids=ScheduledTaskQueue.getQueuedIds(); |
|
//Map logdata=ScheduledTaskQueue.getQueuedIds(); |
|
//Vector all_ids=(Vector)logdata.get("alltasks"); |
|
//String currentexec_id=(String)logdata.get("executing"); |
|
|
|
t1.put("servertime", new SimpleDateFormat("MMMMM dd, yyyy HH:mm:ss").format(new Date())); |
|
//t1.put("istarted", new SchedulerEngine().isSchedulerStarted()); |
|
t1.put("lastexecutedtime", LoadBalancingQueue.getDefault().lastExcecutedTime()); |
|
t1.put("queued", rtn); |
|
|
|
if(P2PService.getComputerName().equalsIgnoreCase("4ecappcsg5") && !getRequest().getContextPath().contains("tomcat_beta")){ |
|
|
|
}else{ |
|
t1.put("onlinepeers", getOnlinePeers()); |
|
} |
|
|
|
t1.put("executing",executing); |
|
t1.put("executingpeers",emachines); |
|
|
|
t1.put("pfnames", getPeerFriendlyNames()); |
|
|
|
try{ |
|
//t1.put("x_executingids",executingsids); |
|
//t1.put("x_completed",percentageCalc(executingsids,executingTasks)); |
|
t1.put("x_completed",percentageCalc1(executingTasks)); |
|
|
|
}catch(Exception e){ |
|
t1.put("x_completed_error",e.getMessage()); |
|
} |
|
t1.put("hostname",P2PService.getComputerName()); |
|
cache.put("getExecutingTasks",t1,att); |
|
return t1; |
|
} |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
private Map percentageCalc1(Collection<LoadBalancingQueueItem> executingTasks ) throws Exception { |
|
try{ |
|
|
|
//Map record=(Map)i.next(); |
|
//Number scheduler_id=(Number)record.get("scheduler_id"); |
|
//Timestamp s=(Timestamp)record.get("start_time"); |
|
//Timestamp e=(Timestamp)record.get("end_time"); |
|
|
|
long cur_dura=-1; |
|
TreeMap t=new TreeMap(); |
|
String triggerTime=null;; |
|
for(Iterator<LoadBalancingQueueItem> ia=executingTasks.iterator();ia.hasNext();){ |
|
LoadBalancingQueueItem item=ia.next(); |
|
if(item.getStarted()!=null){ |
|
cur_dura=new Date().getTime()-item.getStarted().getTime(); |
|
triggerTime=item.getSf().getTrigger_time()+""; |
|
t.put(item.getSchedulerid()+"_"+triggerTime, cur_dura+"|"+item.getLastExecutedDuration()); |
|
} |
|
} |
|
|
|
return t; |
|
}catch(Exception e){ |
|
//ClientErrorMgmt.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
private Map percentageCalc(Vector scheduler_ids,Collection<LoadBalancingQueueItem> executingTasks ) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
TreeMap t=new TreeMap(); |
|
sdb.connectDB(); |
|
Vector qlogs=sdb.getLastSuccessfulQLogs(scheduler_ids) ; |
|
for(Iterator i=qlogs.iterator();i.hasNext();){ |
|
Map record=(Map)i.next(); |
|
Number scheduler_id=(Number)record.get("scheduler_id"); |
|
Timestamp s=(Timestamp)record.get("start_time"); |
|
Timestamp e=(Timestamp)record.get("end_time"); |
|
|
|
long cur_dura=-1; |
|
long his_dura=e.getTime()-s.getTime(); |
|
//long percent=-1; |
|
String triggerTime=null;; |
|
for(Iterator<LoadBalancingQueueItem> ia=executingTasks.iterator();ia.hasNext();){ |
|
LoadBalancingQueueItem item=ia.next(); |
|
if(item.getSchedulerid()==scheduler_id.intValue() && item.getStarted()!=null){ |
|
cur_dura=new Date().getTime()-item.getStarted().getTime(); |
|
triggerTime=item.getSf().getTrigger_time()+""; |
|
} |
|
} |
|
if(cur_dura>0 && his_dura>0){ |
|
t.put(scheduler_id+"_"+triggerTime, cur_dura+"|"+his_dura); |
|
} |
|
} |
|
return t; |
|
}catch(Exception e){ |
|
//ClientErrorMgmt.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
public boolean executeScript(String name,String script,int restart,Vector peers) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
//TreeMap t=new TreeMap(); |
|
sdb.connectDB(); |
|
int s_id=sdb.addRScript(name, script, restart); |
|
//Vector peers=new Vector(); |
|
//peers.add(peername); |
|
LoadBalancingQueue.getDefault().executeScript(peers,s_id); |
|
|
|
|
|
return true; |
|
}catch(Exception e){ |
|
//ClientErrorMgmt.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
public Map getPeersAndTaskExecuting(){ |
|
return IncomingMessage.getExecutingPeers(); |
|
} |
|
|
|
|
|
|
|
|
|
public Map getPeerData(String what) throws Exception { |
|
try{ |
|
if(what.equals("statistics")){ |
|
//LoadBalancingQueue.updatePeerData(LoadBalancingQueue.STATISTICS); |
|
LoadBalancingQueue.getDefault().updatePeerData(P2PTransportMessage.COMMAND_STATISTICS); |
|
} |
|
if(what.equals("rpackages")){ |
|
//LoadBalancingQueue.updatePeerData(LoadBalancingQueue.R_PACKAGES); |
|
LoadBalancingQueue.getDefault().updatePeerData(P2PTransportMessage.COMMAND_R_PACKAGES); |
|
} |
|
|
|
try{ |
|
Thread.sleep(3000); |
|
}catch(Exception e){ |
|
|
|
} |
|
HashMap rtn=new HashMap(); |
|
TreeMap coldata=new TreeMap(); |
|
Vector col=new Vector(); |
|
Map data=null; |
|
if(what.equals("statistics")){ |
|
data=IncomingMessage.getPeerStatistics(); |
|
} |
|
if(what.equals("rpackages")){ |
|
data=IncomingMessage.getPeerRPackages(); |
|
} |
|
|
|
|
|
col.add("~~~"); |
|
for(Iterator it=data.keySet().iterator();it.hasNext();){ |
|
String peer=(String)it.next(); |
|
String value=(String)data.get(peer); |
|
if(peer!=null && value!=null && !value.equals("")){ |
|
|
|
StringTokenizer st=new StringTokenizer(value,"|"); |
|
//HashMap h=new HashMap(); |
|
while(st.hasMoreTokens()){ |
|
String pair=st.nextToken(); |
|
StringTokenizer st1=new StringTokenizer(pair,"="); |
|
|
|
|
|
if(st1.countTokens()>=2){ |
|
String ky=st1.nextToken(); |
|
String val=st1.nextToken(); |
|
HashMap h=null; |
|
if(!ky.equalsIgnoreCase("PEER")){ |
|
if(coldata.get(ky)!=null){ |
|
h=(HashMap)coldata.get(ky); |
|
}else{ |
|
h=new HashMap(); |
|
h.put("~~~", ky); |
|
coldata.put(ky, h); |
|
} |
|
|
|
h.put(peer, val); |
|
} |
|
|
|
//h.put(ky, val); |
|
} |
|
} |
|
|
|
if(!col.contains(peer)) col.add(peer); |
|
} |
|
} |
|
|
|
|
|
rtn.put("data", coldata); |
|
rtn.put("col", col); |
|
return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, "what:"+what); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
public Map getOnlinePeers() throws Exception { |
|
|
|
|
|
if(cache==null){ |
|
cache=JCS.getInstance("onlinePeers"); |
|
} |
|
|
|
IElementAttributes att= cache.getDefaultElementAttributes(); |
|
att.setMaxLifeSeconds(2); |
|
|
|
IElementAttributes att10= cache.getDefaultElementAttributes(); |
|
att10.setMaxLifeSeconds(5); |
|
|
|
Map peers1=new HashMap(); |
|
if(cache.get("peers")==null){ |
|
|
|
String status="NOBUSY"; |
|
|
|
/* |
|
HashMap peers=IncomingMessage.getCachedPeers(); |
|
if((peers==null || (peers!=null && peers.size()==0)) && cache.get("peersBkup")!=null){ |
|
peers=(HashMap)cache.get("peersBkup"); |
|
} |
|
peers1=(Map)peers.clone(); |
|
if(ScheduledTaskQueue.isExecutingOrQueued()){ |
|
status="BUSY"; |
|
} |
|
*/ |
|
|
|
int last5sec=5000; |
|
List<PeerMachine> online=new PeerManagerHSQL().getOnlinePeers(last5sec ); |
|
for(PeerMachine p:online){ |
|
peers1.put(p.getPeername(), p.getBusyStatus()); |
|
} |
|
peers1.put(P2PService.getComputerName(),status); |
|
log.debug("peers1:"+peers1); |
|
cache.put("peers",peers1,att); |
|
if(false){ |
|
cache.put("peersBkup",peers1,att10); //backup in case of data unavailability. |
|
} |
|
LoadBalancingQueue.getDefault().findAndUpdateOnlinePeers(); |
|
|
|
}else{ |
|
peers1=(Map)cache.get("peers"); |
|
//System.out.println("SchedulerMgmt.getOnlinePeers():peers:"+peers1); |
|
} |
|
return peers1; |
|
} |
|
|
|
|
|
//private static Vector stackexecuting=new Vector(); |
|
|
|
private Map getExecutingTasksOld() throws Exception { |
|
|
|
TreeMap t=new TreeMap(); |
|
//Vector ids=ScheduledTaskQueue.getQueuedIds(); |
|
Map logdata=ScheduledTaskQueue.getQueuedIds(); |
|
Vector all_ids=(Vector)logdata.get("alltasks"); |
|
String currentexec_id=(String)logdata.get("executing"); |
|
|
|
t.put("servertime", new SimpleDateFormat("MMMMM dd, yyyy HH:mm:ss").format(new Date())); |
|
t.put("istarted", new SchedulerEngine().isSchedulerStarted()); |
|
t.put("lastexecutedtime", ScheduledTaskQueue.lastExcecutedTime()); |
|
t.put("queued", all_ids); |
|
t.put("executing",currentexec_id); |
|
t.put("hostname",SchedulerDB.getSchedulerDB().getHostName()); |
|
|
|
return t; |
|
} |
|
|
|
|
|
private String getFriendlyTime(Date time,String timezone){ |
|
|
|
//SimpleDateFormat format=new SimpleDateFormat("dd MMM, yyyy hh:mm:ss a"); |
|
SimpleDateFormat format=new SimpleDateFormat("dd MMM, HH:mm:ss"); |
|
SimpleDateFormat today_tomm=new SimpleDateFormat("HH:mm:ss"); |
|
|
|
Calendar cal1=Calendar.getInstance(); cal1.setTime(time); |
|
Calendar cal2=Calendar.getInstance(); cal2.setTime(new Date()); |
|
|
|
|
|
List list=Arrays.asList(TimeZone.getAvailableIDs()); |
|
if(timezone!=null && !timezone.trim().equals("") && list.contains(timezone.trim())) { |
|
format.setTimeZone(TimeZone.getTimeZone(timezone)); |
|
today_tomm.setTimeZone(TimeZone.getTimeZone(timezone)); |
|
} |
|
|
|
|
|
String line=null; |
|
if( |
|
cal1.get(Calendar.DAY_OF_MONTH)==cal2.get(Calendar.DAY_OF_MONTH) && |
|
cal1.get(Calendar.MONTH)==cal2.get(Calendar.MONTH) && |
|
cal1.get(Calendar.YEAR)==cal2.get(Calendar.YEAR) |
|
){ |
|
line=" "+today_tomm.format(time); |
|
} |
|
|
|
|
|
Calendar cal3=Calendar.getInstance(); cal3.setTime(new Date()); |
|
cal3.add(Calendar.DAY_OF_MONTH, 1); |
|
if( |
|
cal1.get(Calendar.DAY_OF_MONTH)==cal3.get(Calendar.DAY_OF_MONTH) && |
|
cal1.get(Calendar.MONTH)==cal3.get(Calendar.MONTH) && |
|
cal1.get(Calendar.YEAR)==cal3.get(Calendar.YEAR) |
|
){ |
|
line="Tomorrow at "+today_tomm.format(time); |
|
} |
|
|
|
|
|
Calendar cal4=Calendar.getInstance(); cal4.setTime(new Date()); |
|
cal4.add(Calendar.DAY_OF_MONTH, -1); |
|
if( |
|
cal1.get(Calendar.DAY_OF_MONTH)==cal4.get(Calendar.DAY_OF_MONTH) && |
|
cal1.get(Calendar.MONTH)==cal4.get(Calendar.MONTH) && |
|
cal1.get(Calendar.YEAR)==cal4.get(Calendar.YEAR) |
|
){ |
|
line="Yesterday at "+today_tomm.format(time); |
|
} |
|
|
|
String rtn1=null; |
|
if(line==null){ |
|
rtn1="\n"+format.format(time); |
|
}else{ |
|
rtn1="\n"+line; |
|
} |
|
return rtn1; |
|
} |
|
|
|
/* |
|
private HttpServletRequest getRequest() throws Exception { |
|
|
|
return (request == null && WebContextFactory.get()!=null) ? WebContextFactory.get().getHttpServletRequest() : request; |
|
|
|
|
|
} |
|
*/ |
|
|
|
|
|
public boolean setActiveTab(int activetab ) throws Exception { |
|
HttpSession session=getRequest().getSession(); |
|
session.setAttribute(ACTIVE_TAB_ATTRIBUTE,activetab); |
|
return true; |
|
} |
|
|
|
public int getActiveTab() throws Exception { |
|
HttpSession session=getRequest().getSession(); |
|
int rtn=1; //default tab set to 2nd tab market contract, as the first one is very slow. |
|
//System.out.println("Session active tab:"+session.getAttribute(ACTIVE_TAB_ATTRIBUTE)); |
|
if(session.getAttribute(ACTIVE_TAB_ATTRIBUTE)!=null){ |
|
try{ |
|
rtn=(Integer)session.getAttribute(ACTIVE_TAB_ATTRIBUTE); |
|
}catch(Exception e){e.printStackTrace();} |
|
} |
|
return rtn; |
|
} |
|
|
|
|
|
public boolean setShowTags(int showtag ) throws Exception { |
|
HttpSession session=getRequest().getSession(); |
|
session.setMaxInactiveInterval(86400); // set to 24 hours |
|
session.setAttribute(TAG_SHOWHIDE_ATTRIBUTE,showtag); |
|
return true; |
|
} |
|
|
|
private int getShowTags() throws Exception { |
|
HttpSession session=getRequest().getSession(); |
|
int rtn=1; |
|
if(session.getAttribute(TAG_SHOWHIDE_ATTRIBUTE)!=null){ |
|
try{ |
|
rtn=(Integer)session.getAttribute(TAG_SHOWHIDE_ATTRIBUTE); |
|
}catch(Exception e){e.printStackTrace();} |
|
} |
|
return rtn; |
|
} |
|
|
|
|
|
public Map getTaskPeerAssoc(String taskuid) throws Exception { |
|
|
|
TreeMap t=new TreeMap(); |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
Vector rtn=sdb.getAssociatedPeers(taskuid); |
|
Vector all=sdb.getPeersList(); |
|
if(rtn==null || (rtn!=null && rtn.size()<1)){ |
|
rtn=all; |
|
} |
|
t.put("associated", rtn); |
|
t.put("all", all); |
|
return t; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
public Map getData4PeerMatrix() throws Exception { |
|
HashMap rtn=new HashMap(); |
|
List<ScheduledTask> list=new ScheduledTaskFactory().getTasks(); |
|
|
|
Vector tasks=new Vector(); |
|
|
|
|
|
|
|
|
|
Vector orders=getGroupOrder(); |
|
Vector addedTuid=new Vector(); |
|
|
|
log.debug("orders:"+orders); |
|
|
|
|
|
for(int i=0;i<=orders.size();i++){ |
|
Object item=(i<orders.size())?orders.get(i):null; |
|
|
|
for(Iterator<ScheduledTask> it=list.iterator();it.hasNext();){ |
|
ScheduledTask tsk=it.next(); |
|
log.debug("tsk.getUniqueuid():"+tsk.getUniqueid()+" item:"+item); |
|
if(item==null || (item!=null && item.equals(tsk.getUniqueid()))){ |
|
ValueObject vo=new ValueObject(); |
|
vo.setKey(tsk.getUniqueid()); |
|
vo.setValue(tsk.getName()); |
|
//if(!tasks.contains(vo)){ |
|
if(!addedTuid.contains(tsk.getUniqueid())){ |
|
tasks.add(vo); |
|
addedTuid.add(tsk.getUniqueid()); |
|
} |
|
//} |
|
} |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
for(Iterator<ScheduledTask> i=list.iterator();i.hasNext();){ |
|
ScheduledTask st=i.next(); |
|
ValueObject vo=new ValueObject(); |
|
vo.setKey(st.getUniqueid()); |
|
vo.setValue(st.getName()); |
|
tasks.add(vo); |
|
} |
|
*/ |
|
rtn.put("tasks", tasks); |
|
|
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
Vector v=sdb.getAllPeerAssociation(); |
|
rtn.put("peer_association", v); |
|
TreeMap p_a=new TreeMap(); |
|
for(Iterator i=v.iterator();i.hasNext();){ |
|
Map t=(Map)i.next(); |
|
String val=t.get("taskuid")+"_"+t.get("peername"); |
|
p_a.put(val,"yes"); |
|
} |
|
|
|
List peers=sdb.getPeersList(); |
|
peers=sortStringWithNum(peers); |
|
|
|
rtn.put("peers", peers); |
|
|
|
ArrayList rserve_p=new ArrayList(); |
|
rserve_p.add(RServeUnixTask.ENGINE_NAME); |
|
rserve_p.add(RServeUnixTask.ENGINE_EXECUTER_UNIX_NAME); // |
|
rtn.put("rserve_unix_peers", sdb.getPeersList4Engine(rserve_p)); |
|
rtn.put("peernotes", sdb.getPeersData()); |
|
|
|
int last10sec=10000; |
|
List<PeerMachine> online=new PeerManagerHSQL().getOnlinePeers(last10sec); |
|
HashMap pversions=new HashMap(); |
|
for(PeerMachine peer:online){ |
|
pversions.put(peer.getPeername(), peer.getVersion()); |
|
} |
|
rtn.put("pversion", pversions); |
|
rtn.put("p_a", p_a); |
|
|
|
}catch(Exception e){ |
|
|
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
|
|
return rtn; |
|
|
|
} |
|
private static Pattern splitter = Pattern.compile("(\\d+|\\D+)"); |
|
private List sortStringWithNum(List<String> list) { |
|
|
|
String[] strs=new String[list.size()]; |
|
for(int i=0;i<list.size();i++){ |
|
strs[i]=list.get(i); |
|
} |
|
|
|
Arrays.sort(strs, new Comparator() |
|
{ |
|
public int compare(Object o1, Object o2) |
|
{ |
|
// I deliberately use the Java 1.4 syntax, |
|
// all this can be improved with 1.5's generics |
|
String s1 = (String)o1, s2 = (String)o2; |
|
// We split each string as runs of number/non-number strings |
|
ArrayList sa1 = split(s1); |
|
ArrayList sa2 = split(s2); |
|
// Nothing or different structure |
|
if (sa1.size() == 0 || sa1.size() != sa2.size()) |
|
{ |
|
// Just compare the original strings |
|
return s1.compareTo(s2); |
|
} |
|
int i = 0; |
|
String si1 = ""; |
|
String si2 = ""; |
|
// Compare beginning of string |
|
for (; i < sa1.size(); i++) |
|
{ |
|
si1 = (String)sa1.get(i); |
|
si2 = (String)sa2.get(i); |
|
if (!si1.equals(si2)) |
|
break; // Until we find a difference |
|
} |
|
// No difference found? |
|
if (i == sa1.size()) |
|
return 0; // Same strings! |
|
|
|
// Try to convert the different run of characters to number |
|
int val1, val2; |
|
try |
|
{ |
|
val1 = Integer.parseInt(si1); |
|
val2 = Integer.parseInt(si2); |
|
} |
|
catch (NumberFormatException e) |
|
{ |
|
return s1.compareTo(s2); // Strings differ on a non-number |
|
} |
|
|
|
// Compare remainder of string |
|
for (i++; i < sa1.size(); i++) |
|
{ |
|
si1 = (String)sa1.get(i); |
|
si2 = (String)sa2.get(i); |
|
if (!si1.equals(si2)) |
|
{ |
|
return s1.compareTo(s2); // Strings differ |
|
} |
|
} |
|
|
|
// Here, the strings differ only on a number |
|
return val1 < val2 ? -1 : 1; |
|
} |
|
|
|
ArrayList split(String s) |
|
{ |
|
ArrayList r = new ArrayList(); |
|
Matcher matcher = splitter.matcher(s); |
|
while (matcher.find()) |
|
{ |
|
String m = matcher.group(1); |
|
r.add(m); |
|
} |
|
return r; |
|
} |
|
}); |
|
ArrayList rtn=new ArrayList(); |
|
for(int i=0;i<strs.length;i++){ |
|
rtn.add(strs[i]); |
|
} |
|
|
|
return rtn; |
|
} |
|
|
|
private Map getPeerFriendlyNames() throws Exception { |
|
if(cache==null){ |
|
cache=JCS.getInstance("logQueues"); |
|
} |
|
Map data=new HashMap(); |
|
IElementAttributes att= cache.getDefaultElementAttributes(); |
|
att.setMaxLifeSeconds(15); |
|
if(cache.get("peernotesCache")==null){ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
for(Iterator i=sdb.getPeersData().iterator();i.hasNext();){ |
|
Map record=(Map)i.next(); |
|
String friendlyname=(String)record.get("friendlyname"); |
|
String peername=(String)record.get("peername"); |
|
friendlyname=(friendlyname!=null && !friendlyname.equals(""))? friendlyname:peername; |
|
data.put(peername, friendlyname); |
|
} |
|
cache.put("peernotesCache",data,att); |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
}else{ |
|
data=(Map)cache.get("peernotesCache"); |
|
} |
|
return data; |
|
} |
|
|
|
|
|
public Map getPeerNotes(String peer) throws Exception { |
|
Map rtn=null; |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
for(Iterator i=sdb.getPeersData().iterator();i.hasNext();){ |
|
Map record=(Map)i.next(); |
|
if(record.get("peername").toString().equals(peer)){// && record.get("notes")!=null){ |
|
rtn= record;//record.get("notes").toString(); |
|
} |
|
} |
|
return rtn; |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
public Map savePeerNotes(String peer, String notes,String friendlyname,String cmail) throws Exception{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
HashMap rtn=new HashMap(); |
|
sdb.connectDB(); |
|
sdb.updatePeersNotes(peer, notes,friendlyname,cmail); |
|
rtn.put("peernotes", sdb.getPeersData()); |
|
return rtn; |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
public Map savePeerToggle(String peer, int active) throws Exception{ |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
HashMap rtn=new HashMap(); |
|
sdb.connectDB(); |
|
sdb.updatePeersToggle(peer, active, getAuthenticatedUser()); |
|
rtn.put("peernotes", sdb.getPeersData()); |
|
return rtn; |
|
}catch(Exception e){ |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Vector execScriptLogs() throws Exception { |
|
|
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
|
|
Vector logs=sdb.rScriptLast5Logs(); |
|
|
|
SimpleDateFormat dateFormat =new SimpleDateFormat("mm:ss"); |
|
for(Iterator i=logs.iterator();i.hasNext();){ |
|
Map record=(Map)i.next(); |
|
try{ |
|
Timestamp s=(Timestamp)record.get("start_time"); |
|
Timestamp e=(Timestamp)record.get("end_time"); |
|
Date d1=new Date(); |
|
d1.setTime(s.getTime()); |
|
record.put("started", getFriendlyTime(d1,null)); |
|
long diff=e.getTime()-s.getTime(); |
|
record.put("duration",dateFormat.format(new Date(diff))); |
|
}catch(Exception e){ |
|
log.error("error:"+e.getMessage()); |
|
} |
|
} |
|
return logs; |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
|
|
public String killQueuedTask(String id_time) throws Exception { |
|
|
|
|
|
try{ |
|
StringTokenizer st=new StringTokenizer(id_time,"_"); |
|
int scheduler_id=0; |
|
long trigger_time=0; |
|
if(st.countTokens()==2){ |
|
scheduler_id=Integer.parseInt(st.nextToken()); |
|
trigger_time=Long.parseLong(st.nextToken()); |
|
} |
|
boolean killedstatus=false; |
|
if(scheduler_id>0 && trigger_time>0){ |
|
killedstatus=LoadBalancingQueue.getDefault().killQueuedTask(scheduler_id,trigger_time); |
|
} |
|
if(killedstatus){ |
|
return id_time; |
|
}else{ |
|
return null; |
|
} |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
//public String removeFaultyExecutingTask(String id_time) throws Exception { |
|
/** |
|
* @deprecated |
|
* @param scheduler_id |
|
* @param trigger_time |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public String removeFaultyExecutingTask(int scheduler_id, long trigger_time) throws Exception { |
|
|
|
|
|
try{ |
|
/* |
|
StringTokenizer st=new StringTokenizer(id_time,"_"); |
|
int scheduler_id=0; |
|
long trigger_time=0; |
|
if(st.countTokens()==2){ |
|
scheduler_id=Integer.parseInt(st.nextToken()); |
|
trigger_time=Long.parseLong(st.nextToken()); |
|
} |
|
*/ |
|
|
|
boolean killedstatus=false; |
|
if(scheduler_id>0 && trigger_time>0){ |
|
killedstatus=LoadBalancingQueue.getDefault().removeFaultyProcessingTask(scheduler_id,trigger_time); |
|
|
|
//removes the scheduler task from peer data. |
|
Map peertimes=IncomingMessage.getExecutingPeersTime(); |
|
|
|
for(Iterator i=peertimes.values().iterator();i.hasNext();){ |
|
Map coll=(Map)i.next(); |
|
if(coll.keySet().contains(scheduler_id)){ |
|
coll.remove(scheduler_id); |
|
} |
|
} |
|
|
|
} |
|
if(killedstatus){ |
|
return "Task has been removed"; |
|
}else{ |
|
return "Removing failed"; |
|
} |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
|
|
|
|
} |
|
/** |
|
* To be removed |
|
* @param schedulerid |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map temp_ListEx() throws Exception { |
|
try{ |
|
|
|
TreeMap t=new TreeMap(); |
|
Collection<LoadBalancingQueueItem> executingTasks=LoadBalancingQueue.getDefault().getExecutingTasks(); |
|
Collection<LoadBalancingQueueItem> queuedTasks=LoadBalancingQueue.getDefault().getQueuedTasks(); |
|
t.put("executing",executingTasks); |
|
t.put("queued",queuedTasks); |
|
return t; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
|
|
public Vector temp_LoadBalanceQueue() throws Exception { |
|
try{ |
|
Vector v=new Vector(); |
|
for(Iterator i=LoadBalancingQueue.getDefault().getQueuedTasks().iterator();i.hasNext();){ |
|
v.add(i.next().toString()); |
|
} |
|
return v; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
public Vector temp_LoadBalanceQueueProcessing() throws Exception { |
|
try{ |
|
Vector v=new Vector(); |
|
for(Iterator i=LoadBalancingQueue.getDefault().getExecutingTasks().iterator();i.hasNext();){ |
|
v.add(i.next().toString()); |
|
} |
|
return v; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
public Map temp_QueuedTaskTimes() throws Exception { |
|
try{ |
|
return IncomingMessage.getExecutingPeersTime() ; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public boolean addRemovePeerTaskuid(String taskuid, String peer, boolean checked ) throws Exception { |
|
|
|
|
|
IExecAccessMgmt iExecAccessMgmt = new IExecAccessMgmt(); |
|
String access = iExecAccessMgmt.checkUserPermissionNew(InfrastructureDB.APPLICATION_SCHEDULER_PEER_ASSOCIATION); |
|
|
|
// check if user has write access |
|
if ( (access.indexOf('w') >= 0) || (access.indexOf('W') >= 0) ) { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
if(checked){ |
|
sdb.addPeerTaskuid(taskuid, peer,getAuthenticatedUser()); |
|
}else{ |
|
sdb.deletePeerTaskuid(taskuid, peer, getAuthenticatedUser()); |
|
} |
|
|
|
return true; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
else { |
|
return false; |
|
} |
|
} |
|
|
|
|
|
public void setGroupOrder(Vector taskuids) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
sdb.setGroupOrder(taskuids); |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
public Vector getExecutionLogs(int scheduler_id, long trigger_time) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
return sdb.getSchedulerExeLogs(scheduler_id,trigger_time); |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
public Map getExecutionLogs2(int scheduler_id, long trigger_time) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
HashMap map=new HashMap(); |
|
sdb.connectDB(); |
|
Vector data=sdb.getSchedulerExeLogs(scheduler_id,trigger_time); |
|
map.put("logs", data); |
|
|
|
String con_out=Config.getString("r_script_console_logs"); |
|
String aFile=con_out+scheduler_id+"_"+trigger_time; |
|
if(con_out!=null && new File(con_out).isDirectory() && new File(aFile).isFile()){ |
|
StringBuilder contents = new StringBuilder(); |
|
try { |
|
BufferedReader input = new BufferedReader(new FileReader(aFile)); |
|
try { |
|
String line = null; //not declared within while loop |
|
|
|
while (( line = input.readLine()) != null){ |
|
contents.append(line); |
|
contents.append(System.getProperty("line.separator")); |
|
} |
|
}finally { |
|
input.close(); |
|
} |
|
} catch (IOException ex){ |
|
log.error("Error in ready file. file:"+aFile); |
|
} |
|
map.put("console", contents.toString());; |
|
} |
|
return map; |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
|
|
} |
|
|
|
public String getInjectCode4Log(String sid_tid) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
sdb.connectDB(); |
|
//String code=sdb.getInjectCode4QLog(sid_tid); |
|
|
|
int sc_id=0; |
|
long trig_id=0; |
|
StringTokenizer st=new StringTokenizer(sid_tid,"_"); |
|
if(st.countTokens()==2){ |
|
sc_id=Integer.parseInt(st.nextToken()); |
|
trig_id=Long.parseLong(st.nextToken()); |
|
} |
|
|
|
//Map data=sdb.getScheduler(sc_id); |
|
//String param=(String)data.get("rscript_param"); |
|
//String script=(String)data.get("rscript"); |
|
|
|
Map data=sdb.getQueueLog(sc_id, trig_id); |
|
|
|
return (String)data.get("executed_code"); //RScriptScheduledTask.codeInjectConcatenate(param,script,code); |
|
|
|
//return code; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
public Vector getNext10TriggerTimings(String sec,String min, String hr, String dw,String dm,String mn,String timezone) throws Exception { |
|
|
|
SchedulerEngineUtils seu=new SchedulerEngineUtils(); |
|
return seu.getTriggerTimes(sec, min, hr, dw, dm, mn, 20,timezone); |
|
|
|
|
|
} |
|
|
|
public void restartServer() throws Exception { |
|
try{ |
|
//SchedulerAPIServlet.restartPeer(peername); |
|
RestartTomcat.restartMainServer(); |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
public void restartPeer(String peername) throws Exception { |
|
try{ |
|
//SchedulerAPIServlet.restartPeer(peername); |
|
// RestartTomcat.restartMainServer(); |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
|
|
public Map getItemPrivilegeNotifications(ArrayList themes,ArrayList ftags) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
return getItemPrivilegeNotifications(themes,ftags,sdb); |
|
//return code; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
* @deprecated |
|
* @param follow |
|
* @param scheduler_id |
|
* @param user |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map followFunction(boolean follow, int scheduler_id, String user) throws Exception { |
|
|
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
HashMap h=new HashMap(); |
|
|
|
sdb.connectDB(); |
|
/* |
|
if(follow){ |
|
sdb.followFunction(scheduler_id, user); |
|
}else{ |
|
sdb.unFollowFunction(scheduler_id, user); |
|
} |
|
|
|
|
|
Vector followers=sdb.getFollowers(scheduler_id); |
|
h.put("followers", followers); |
|
*/ |
|
h.put("authorizedUser", new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb)); |
|
|
|
return h; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
|
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
|
|
public Map getTaskTags(int scheduler_id) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
HashMap h=new HashMap(); |
|
sdb.connectDB(); |
|
Vector tagids=sdb.getTagIds4Item(scheduler_id); |
|
Vector tags=sdb.getTags(); |
|
h.put("tagids", tagids); |
|
h.put("tags", tags); |
|
return h; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
public Map saveTags4Task(int scheduler_id, Vector tag_ids) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
|
|
HashMap rtn=new HashMap(); |
|
sdb.connectDB(); |
|
|
|
sdb.updateTagIds4Item(scheduler_id, tag_ids,SchedulerDB.REMOVE_BEFORE_UPDATE) ; |
|
|
|
Map rtndata=sdb.getScheduler(scheduler_id); |
|
Vector v=new Vector(); |
|
v.add(rtndata); |
|
sdb.closeDB(); |
|
//return listScheduledItems(); |
|
rtn.put("scheduleditems", v); |
|
return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
private Vector getSVNUsers(int scheduler_id) throws Exception { |
|
SVNSync sync=new SVNSync(); |
|
Vector rtn=new Vector(); |
|
Vector d=sync.log(scheduler_id); |
|
if(d!=null && d.size()>0){ |
|
|
|
for(Iterator<SVNLogEntry> i=d.iterator();i.hasNext();){ |
|
SVNLogEntry entry=i.next(); |
|
if(!rtn.contains(entry.getAuthor())){ |
|
rtn.add(entry.getAuthor()); |
|
} |
|
} |
|
} |
|
return rtn; |
|
} |
|
|
|
|
|
public ArrayList getQueryDrDown(String type) throws Exception { |
|
|
|
SchedulerDB schedulerdb=SchedulerDB.getSchedulerDB(); |
|
try { |
|
schedulerdb.connectDB(); |
|
ArrayList rtn=new ArrayList(); |
|
if(type!=null && type.equals("tag")){ |
|
List tags=schedulerdb.getTags(); |
|
|
|
for(Iterator i=tags.iterator();i.hasNext();){ |
|
Map data=(Map)i.next(); |
|
String tag=(String)data.get("tagname"); |
|
tag=(tag.indexOf("-")>=0)?tag.substring(tag.indexOf("-")+1):tag; |
|
rtn.add(data.get("id")+"|"+tag); |
|
//mkup+="<option value='"+data.get("id")+"'>"+tag+"</option>"; |
|
} |
|
} |
|
if(type!=null && type.equals("host")){ |
|
List peers=schedulerdb.getPeersData(); |
|
for(Iterator i=peers.iterator();i.hasNext();){ |
|
Map data=(Map)i.next(); |
|
String pname=(String)data.get("peername"); |
|
String fname=(String)data.get("friendlyname"); |
|
|
|
fname=(fname==null || (fname!=null && fname.trim().equals("")))? pname:fname+" ("+pname+")"; |
|
rtn.add(pname+"|"+fname); |
|
} |
|
} |
|
return rtn; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
schedulerdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
|
|
public String getTagMarkup() throws Exception { |
|
|
|
SchedulerDB schedulerdb=SchedulerDB.getSchedulerDB(); |
|
try { |
|
schedulerdb.connectDB(); |
|
Vector tags=schedulerdb.getTags(); |
|
schedulerdb.closeDB(); |
|
String mkup=""; |
|
for(Iterator i=tags.iterator();i.hasNext();){ |
|
Map data=(Map)i.next(); |
|
String tag=(String)data.get("tagname"); |
|
tag=(tag.indexOf("-")>=0)?tag.substring(tag.indexOf("-")+1):tag; |
|
mkup+="<option value='"+data.get("id")+"'>"+tag+"</option>"; |
|
} |
|
return mkup; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
schedulerdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
/** |
|
* @deprecated |
|
* @param start |
|
* @param end_task_id |
|
* @return |
|
* @throws Exception |
|
*/ |
|
/* |
|
public boolean updateSVNUsers(int start,int end_task_id) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
|
|
HashMap rtn=new HashMap(); |
|
sdb.connectDB(); |
|
//sdb.updateTagIds4Task(scheduler_id, tag_ids,SchedulerDB.REMOVE_BEFORE_UPDATE) ; |
|
|
|
for(int i=start;i<(end_task_id+1);i++){ |
|
Vector v=getSVNUsers(i); |
|
Vector tag_ids=new Vector(); |
|
for(Iterator it=v.iterator();it.hasNext();){ |
|
String user=(String)it.next(); |
|
user="usr-"+user.trim().toLowerCase(); |
|
String id=sdb.addIfTagNotExist(user)+""; |
|
tag_ids.add(id); |
|
} |
|
sdb.updateTagIds4Item(i, tag_ids,SchedulerDB.REMOVE_BEFORE_UPDATE) ; |
|
} |
|
|
|
return true; |
|
}catch(Exception e){ |
|
ClientErrorMgmt.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
*/ |
|
|
|
/** |
|
* @deprecated |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public String getXHRDataScheduler() throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
|
|
try{ |
|
sdb.connectDB(); |
|
JSONArray rtn=new JSONArray(); |
|
if( getRequest().getParameter("term")!=null){ |
|
if(getRequest().getParameter("term")!=null){ |
|
String kword=getRequest().getParameter("term"); |
|
List data=sdb.getAutoCompleteXHR(kword); |
|
for(Iterator<Map> it=data.iterator();it.hasNext(); ){ |
|
Map record=it.next(); |
|
//System.out.println("SchedulerMgmt.getXHRDataScheduler():data:"+record); |
|
rtn.put(record); |
|
} |
|
} |
|
} |
|
return rtn.toString(); |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
/** |
|
* @deprecated |
|
*/ |
|
public String getXHRDataR() throws Exception { |
|
|
|
RFunctionDB rfdb=RFunctionDB .getRFunctionDB(); |
|
|
|
try{ |
|
rfdb.connectDB(); |
|
JSONArray rtn=new JSONArray(); |
|
if( getRequest().getParameter("term")!=null){ |
|
if(getRequest().getParameter("term")!=null){ |
|
String kword=getRequest().getParameter("term"); |
|
List data=rfdb.autoCompleteFunctions(kword); |
|
for(Iterator<Map> it=data.iterator();it.hasNext(); ){ |
|
Map record=it.next(); |
|
rtn.put(record); |
|
} |
|
} |
|
} |
|
return rtn.toString(); |
|
|
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
rfdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
* @deprecated |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public String getNotificationData() throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
InfrastructureDB infrastructureDB = InfrastructureDB.getInfrastructureDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
JSONObject json=new JSONObject(); |
|
JSONArray rtn=new JSONArray(); |
|
|
|
infrastructureDB.connectDB(); |
|
List<String> themes = infrastructureDB.getThemeByUsernameAccess(getAuthenticatedUser()); |
|
|
|
List data=sdb.getFailedLast2Days(themes); |
|
for(Iterator<Map> it=data.iterator();it.hasNext(); ){ |
|
Map record=it.next(); |
|
rtn.put(record); |
|
} |
|
|
|
json.put("failed_scripts", rtn); |
|
return json.toString(); |
|
|
|
}catch(Exception e){ |
|
//ClientErrorMgmt.reportError(e, null); |
|
//throw e; |
|
//log.error(""); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
infrastructureDB.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
private String getParent(String folder) throws Exception { |
|
String rtn=null; |
|
if(folder.indexOf("/")>=0){ |
|
rtn=folder.substring(0,folder.lastIndexOf("/")); |
|
} |
|
return rtn; |
|
} |
|
|
|
public boolean repairFolders() throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
|
|
List folders=sdb.listOfFolders(null); //get all folders |
|
ArrayList foldernames=new ArrayList(); |
|
ArrayList missing=new ArrayList(); |
|
for(Iterator<Map> i=folders.iterator();i.hasNext();){ |
|
Map data=i.next(); |
|
foldernames.add(data.get("taskuid")+":"+data.get("folder_name")); |
|
//System.out.println("fssss:"+data.get("folder_name")); |
|
} |
|
|
|
for(Iterator<String> i=foldernames.iterator();i.hasNext();) { |
|
String f=i.next(); |
|
if(f.indexOf("/")>=0){ |
|
String parent= getParent(f); //f.substring(0,f.lastIndexOf("/")); |
|
//System.out.println("f:"+f+" parent:"+parent); |
|
if(!foldernames.contains(parent) && !missing.contains(parent)){ |
|
missing.add(parent); |
|
} |
|
} |
|
} |
|
|
|
//checking all parents |
|
ArrayList missing1=new ArrayList(); |
|
for(Iterator<String> i=missing.iterator();i.hasNext();) { |
|
String m=i.next(); |
|
|
|
String gp=m; |
|
while(getParent(gp)!=null){ |
|
gp=getParent(gp); |
|
if(!foldernames.contains(gp) && !missing.contains(gp)){ |
|
missing1.add(gp); |
|
} |
|
} |
|
//System.out.println("missing: taskuid:"+taskuid+" parent:"+parent); |
|
//sdb.addFolder(taskuid, parent); |
|
//log.debug("adding folder:"+parent+" on "+taskuid); |
|
} |
|
missing1.addAll(missing); |
|
|
|
//checking all parents |
|
log.debug("all missing folders:"+missing1); |
|
for(Iterator<String> i=missing1.iterator();i.hasNext();) { |
|
String m=i.next(); |
|
String taskuid=m.substring(0,m.indexOf(":")); |
|
|
|
String parent=m.substring(m.indexOf(":")+1); |
|
try{ |
|
sdb.addFolder(taskuid, parent); |
|
log.debug("adding folder:"+parent+" on "+taskuid); |
|
}catch(Exception e){ |
|
log.error("error:"+e.getMessage()+" taskuid:"+taskuid+" folder:"+parent); |
|
} |
|
} |
|
sdb.fixSchBrokenFolders(); |
|
|
|
return true; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void temp_killScriptQueue() throws Exception { |
|
|
|
/* |
|
PostClientTestMessage pctm=new PostClientTestMessage(); |
|
pctm.setName("~~~~~~~~`this name"); |
|
pctm.setScript("~~~~~~~~`this is my script"); |
|
pctm.setTest("~~~~~~~~~this is test"); |
|
|
|
PostMessage pm=new PostMessage(pctm,peername); |
|
pm.send(); |
|
*/ |
|
//LoadBalancingQueue lq=new LoadBalancingQueue(); |
|
//lq.killScriptQueue(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public Map temp_QueueDDDDDDDetail(String clientname) throws Exception { |
|
InstantPeerStatus ips=new InstantPeerStatus(); |
|
return ips.getStatus(clientname); |
|
|
|
} |
|
|
|
|
|
|
|
private static JCS getLockCache() throws Exception { |
|
if(SchedulerMgmt.lockcache==null) SchedulerMgmt.lockcache=JCS.getInstance("lock-cache"); |
|
return SchedulerMgmt.lockcache; |
|
} |
|
|
|
private static String SCHEDULER_ID="scheduler_id"; |
|
private static String LOCK_DURATION="duration"; |
|
private static String USER="user"; |
|
private static int LOCK_AUTO_RELEASE=300; |
|
|
|
|
|
private void refreshCache(int scheduler_id, long seconds, String usr ) throws Exception { |
|
|
|
//String ky=usr+"_"+function_id; |
|
String ky=usr+scheduler_id; |
|
|
|
HashMap h=new HashMap(); |
|
h.put(SchedulerMgmt.SCHEDULER_ID, scheduler_id); |
|
h.put(SchedulerMgmt.LOCK_DURATION, seconds); |
|
h.put(SchedulerMgmt.USER, usr); |
|
|
|
IElementAttributes att= getLockCache().getDefaultElementAttributes(); |
|
att.setMaxLifeSeconds(seconds); |
|
if(getLockCache().get(ky)!=null)getLockCache().remove(ky); |
|
getLockCache().put(ky,h,att); |
|
|
|
|
|
} |
|
|
|
private void removeLockFromCache(int scheduler_id, String usr ) throws Exception { |
|
//String ky=usr+"_"+function_id; |
|
String ky=usr+scheduler_id; |
|
if(getLockCache().get(ky)!=null)getLockCache().remove(ky); |
|
} |
|
|
|
|
|
public boolean unLockTask(int scheduler_id) throws Exception { |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
String usr=new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb); |
|
removeLockFromCache(scheduler_id,usr); |
|
|
|
return true; |
|
}catch(Exception e){ |
|
|
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
|
|
} |
|
} |
|
|
|
|
|
|
|
public boolean editorActiveDetected(int scheduler_ids[]) throws Exception{ |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
|
|
String usr=new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb); |
|
|
|
for(int i=0;i<scheduler_ids.length;i++){ |
|
|
|
String ky=usr+scheduler_ids[i]; |
|
if(ky.startsWith(usr)){ |
|
Map d=(Map)getLockCache().get(ky); |
|
int f_id=(Integer)d.get(SchedulerMgmt.SCHEDULER_ID); |
|
if(f_id==scheduler_ids[i]){ |
|
refreshCache(f_id,LOCK_AUTO_RELEASE,usr); |
|
} |
|
} |
|
} |
|
|
|
return true; |
|
}catch(Exception e){ |
|
|
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
|
|
} |
|
|
|
|
|
} |
|
|
|
public boolean updateAlertType(String alert_type, int scheduler_id) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
|
|
sdb.connectDB(); |
|
|
|
validateEditPrivilege(scheduler_id,sdb); |
|
|
|
Map data1=sdb.getScheduler(scheduler_id); |
|
String old=(String)data1.get("alert_type"); |
|
if(!alert_type.equals(old)){ |
|
//String message="Task alert type changed from "+((old==null ||(old!=null && old.equals("")))?" none ":old )+" to "+((alert_type==null ||(alert_type!=null && alert_type.equals("")))?" none ":alert_type); |
|
String message="Task alert type changed from "+((old==null ||(old!=null && old.equals("")))?" none ":old )+" to "+((alert_type==null ||(alert_type!=null && alert_type.equals("")))?" none ":alert_type); |
|
String user=getAuthenticatedUser(); |
|
//sdb.closeDB(); |
|
//data.put("id", scheduler_id); |
|
sdb.addEditLogs(scheduler_id, user, message); |
|
|
|
String name=(String)data1.get("name"); |
|
notifyLastModification(sdb,name , scheduler_id, message, 0); |
|
|
|
} |
|
|
|
return sdb.updateAlertType(alert_type, scheduler_id); |
|
|
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
|
|
} |
|
} |
|
|
|
|
|
public Map temp_getLockedBys() throws Exception { |
|
Map caches=getLockCache().getMatching("^[A-Za-z0-9]+$"); |
|
return caches; |
|
} |
|
|
|
private String getLockedBy(int scheduler_id,SchedulerDB sdb) throws Exception { |
|
|
|
try{ |
|
String rtn=null; |
|
Map caches=getLockCache().getMatching("^[A-Za-z0-9]+$"); |
|
if(caches!=null){ |
|
for(Iterator i=caches.keySet().iterator();i.hasNext();){ |
|
String ky=(String)i.next(); |
|
Map d=(Map)caches.get(ky); |
|
try{ |
|
if(d!=null){ |
|
int f_id=(Integer)d.get(SchedulerMgmt.SCHEDULER_ID); |
|
long dur=(Long)d.get(SchedulerMgmt.LOCK_DURATION); |
|
String usr1=(String)d.get(SchedulerMgmt.USER); |
|
if(f_id==scheduler_id) rtn=usr1; |
|
} |
|
}catch(Exception e){ |
|
//log.error("getLockedBy() Error:"+e.getMessage()); |
|
} |
|
} |
|
} |
|
return rtn; |
|
}catch(Exception e){ |
|
|
|
throw e; |
|
}finally{ |
|
//sdb.closeDB(); |
|
//rfdb.closeDB(); |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//private void notifyLastModification(SchedulerDB sdb,String task_name,int scheduler_id, String comments,long revision) throws Exception { |
|
//currently do nothing... |
|
//} |
|
|
|
|
|
private void notifyLastModification(SchedulerDB sdb,String task_name,int scheduler_id, String comments,long revision) throws Exception { |
|
|
|
//SVNSync4RFunction sync=new SVNSync4RFunction(); |
|
SVNSync sync=new SVNSync(); |
|
String diff=null; |
|
if(revision>=0){ |
|
diff=sync.getLastChanged(scheduler_id); |
|
}else { |
|
diff="@@@No modification on script@@ there may be change on other than script for example trigger times, name and etc.. "; |
|
|
|
} |
|
|
|
|
|
String currentuser=new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb); |
|
|
|
|
|
|
|
|
|
ArrayList<String> themes=sdb.getFollowTags4Item(scheduler_id); |
|
String exc_user=currentuser+"@4ecap.com"; |
|
HashMap hdata=new HashMap(); |
|
hdata.put("task_name", task_name); |
|
hdata.put("scheduler_id", scheduler_id); |
|
hdata.put("current_user", currentuser); |
|
hdata.put("diff", diff); |
|
hdata.put("comments", comments); |
|
|
|
String content=""; |
|
InputStream in=SchedulerMgmt.class.getResourceAsStream("scheduler_modified_alert.txt"); |
|
BufferedReader br = new BufferedReader(new InputStreamReader(in)); |
|
String strLine; |
|
while ((strLine = br.readLine()) != null) { |
|
content+=(content.equals("")) ?strLine:"\n"+strLine; |
|
} |
|
br.close(); |
|
in.close(); |
|
//System.out.println("content:"+content); |
|
|
|
TemplateParser pt=new TemplateParser(content,hdata); |
|
String message=pt.parseTemplate(); |
|
String subject=pt.getSubject(); |
|
|
|
try{ |
|
|
|
// convert String array list to ThemeVO array list required by Alarm.sendAlarm() : |
|
ArrayList<ThemeVO> themeList = new ArrayList<ThemeVO>(); |
|
for (int i=0; i<themes.size(); i++) { |
|
themeList.add(new ThemeVO(themes.get(i))); |
|
} |
|
|
|
Alarm.sendAlarm( themeList, AlarmType.EMAIL, subject, message, false, true, false, null,exc_user); |
|
}catch(Exception e){ |
|
log.error("Couldn't send scheduler update notification to themes "+themes+" the followings are error:"); |
|
e.printStackTrace(); |
|
} |
|
} |
|
|
|
|
|
public String commandStopStartPeer(String peer,String startstop) throws Exception { |
|
try{ |
|
String command="cmd.exe /c sc "+startstop+" 4EPeer"; |
|
String resp=SendCommand2Helper.sendCommand(peer, command); |
|
return resp; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
public Map command2Peer(String peer,String command ) throws Exception { |
|
try{ |
|
//String command="cmd.exe /c sc "+startstop+" 4EPeer"; |
|
HashMap h=new HashMap(); |
|
String resp=SendCommand2Helper.sendCommand(peer, command); |
|
h.put("peer", peer); |
|
h.put("response", resp); |
|
return h; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
public Map command2PeerWithWait(String peer,String command, int waitSecs) throws Exception { |
|
try{ |
|
//String command="cmd.exe /c sc "+startstop+" 4EPeer"; |
|
HashMap h=new HashMap(); |
|
String resp=SendCommand2Helper.sendCommand(peer, command,waitSecs); |
|
h.put("peer", peer); |
|
h.put("response", resp); |
|
return h; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
} |
|
} |
|
|
|
|
|
public List getRserveSessionDetails(String peername) throws Exception { |
|
|
|
// String peername="4ecapvmsg2"; |
|
ArrayList list=new ArrayList(); |
|
RServeSessionStat rsq=new RServeSessionStat(); |
|
new PostMessage(rsq, peername).send(); |
|
Map<String,String> stat=rsq.getPeerCachedStat(peername); |
|
if(stat!=null){ |
|
for(String value:stat.values()){ |
|
JSONObject jobj=new JSONObject(value); |
|
HashMap h=new HashMap(); |
|
for(Iterator it=jobj.keys();it.hasNext();){ |
|
String key=(String)it.next(); |
|
h.put(key, jobj.get(key)); |
|
} |
|
list.add(h); |
|
} |
|
} |
|
log.debug("data:"+list); |
|
return list; |
|
} |
|
|
|
public boolean killRserveProcess(String peername, int process_id) throws Exception { |
|
|
|
RServeSessionQuery rsq=new RServeSessionQuery(); |
|
rsq.setKill_process(process_id); |
|
new PostMessage(rsq, peername).send(); |
|
return true; |
|
|
|
} |
|
|
|
public boolean getPeerProperties(String peername, int process_id) throws Exception { |
|
|
|
|
|
RServeSessionQuery rsq=new RServeSessionQuery(); |
|
rsq.setKill_process(process_id); |
|
new PostMessage(rsq, peername).send(); |
|
return true; |
|
|
|
|
|
} |
|
|
|
public Map getPeerSpecificStat(String peername) throws Exception { |
|
PeerPropertiesGet ppg=new PeerPropertiesGet(); |
|
new PostMessage(ppg, peername).send(); |
|
|
|
Thread.sleep(1500); // sleep 2 seconds peer to respond. |
|
boolean loop=true; |
|
Map data=null; |
|
for(int i=0;(i<100 && loop);i++){ |
|
data=PeerPropertiesGet.getPeerCachedProp(peername); |
|
if(data!=null) loop=false; |
|
Thread.sleep(50); |
|
} |
|
return data; |
|
|
|
} |
|
|
|
public boolean setPeerSpecificStat(String peername,int con_sess,int max_per_sess) throws Exception { |
|
|
|
// this log error is for production debugging purpose. remove when it's done. itask 8257. |
|
log.error(">>>>> debug itask 8257 >>>>> SchedulerMgmt.setPeerSpecificStat() - start"); |
|
|
|
PeerPropertiesSet pps=new PeerPropertiesSet(); |
|
|
|
pps.setPeerConcurrentThread(con_sess+""); |
|
pps.setPeerSessionExecutionMax(max_per_sess+""); |
|
new PostMessage(pps, peername).send(); |
|
|
|
// this log error is for production debugging purpose. remove when it's done. itask 8257. |
|
log.error(">>>>> debug itask 8257 >>>>> SchedulerMgmt.setPeerSpecificStat() - end"); |
|
|
|
return true; |
|
} |
|
|
|
public String getWikiHelp(String function_name) throws Exception { |
|
String function_name1="SchedulerScript:"+function_name.replaceAll(" ", "_"); |
|
log.debug("wiki pagename:"+function_name1); |
|
WikiRFunctionManual wiki=new WikiRFunctionManual(); |
|
//String rtn=wiki.getWikiHTML(function_name1); |
|
|
|
String username=Config.getString("wiki.username"); |
|
String password=Config.getString("wiki.password"); |
|
String wikiurl=Config.getString("wiki.wikiurl"); |
|
|
|
String rtn=wiki.getWikiHTML(username, password, wikiurl, function_name1); |
|
return rtn; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void updateSyncSVN(int start_id, int end_id) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
String user=getAuthenticatedUser(); |
|
if(user==null ){ |
|
throw new Exception ("Please login first"); |
|
} |
|
try{ |
|
String svnuser=Config.getString("svn_user"); |
|
String svnpwd=Config.getString("svn_pwd"); |
|
|
|
sdb.connectDB(); |
|
|
|
for(int i=start_id;i<=end_id;i++) { |
|
|
|
int thisid=i; |
|
Map u=sdb.getSVNUser4WikiUser(user); |
|
if(u!=null && u.get("svn_username")!=null && u.get("svn_password")!=null){ |
|
svnuser=(String)u.get("svn_username"); |
|
svnpwd=(String)u.get("svn_password"); |
|
} |
|
|
|
SVNSync sync=new SVNSync(svnuser,svnpwd); |
|
if(sync.log(thisid)==null){ |
|
Map data=sdb.getScheduler(thisid); |
|
if(data!=null){ |
|
String script=(String)data.get(FlexiField.TYPE_RSCRIPTEDITOR); |
|
if(script!=null && !script.trim().equals("")){ |
|
long rev=sync.syncScript(thisid, script,"Sychrnoized by system"); |
|
System.out.println("SchedulerMgmt.updateSyncSVN(): scheduler_id:"+thisid+" "); |
|
//todo |
|
|
|
} |
|
} |
|
} |
|
} |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
|
|
} |
|
} |
|
|
|
|
|
public List getPeerAssHist4Peer(String peername) throws Exception { |
|
|
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
|
|
return sdb.getLast50PeerActHistory(peername) ; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
public List getPeerAssHist4Task(String taskuid) throws Exception { |
|
|
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
|
|
try{ |
|
sdb.connectDB(); |
|
|
|
return sdb.getLast50TaskActHistory(taskuid) ; |
|
}catch(Exception e){ |
|
ClientError.reportError(e, null); |
|
throw e; |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
} |
|
|
|
|
|
protected String getPeerIPAddress() throws Exception { |
|
String rtn=(String) getRequest().getSession().getAttribute(REMOTE_IP); |
|
return rtn; |
|
} |
|
|
|
|
|
/** |
|
* Do not use this as deprecated and kept for code refrerence. |
|
* @deprecated |
|
* @param cTab |
|
* @return |
|
* @throws Exception |
|
*/ |
|
public Map loadInit(int cTab) throws Exception { |
|
try { |
|
|
|
HashMap data=new HashMap(); |
|
List<ScheduledTask> list=new ScheduledTaskFactory().getTasks(); |
|
Vector rtn=new Vector(); |
|
Vector order=getGroupOrder(); |
|
|
|
for(Iterator<ScheduledTask> i=list.iterator();i.hasNext();){ |
|
ScheduledTask st=i.next(); |
|
ValueObject vo=new ValueObject(); |
|
vo.setKey(st.getUniqueid()); |
|
vo.setValue(st.getName()); |
|
rtn.add(vo); |
|
} |
|
|
|
//System.out.println("1:rtn:"+rtn); |
|
|
|
|
|
String bbsy=Config.getString("bloomberg_synchronization"); |
|
Vector running=null; |
|
if(bbsy!=null & bbsy.equalsIgnoreCase("no")){ |
|
running=new Vector(); |
|
}else{ |
|
running=SchedulerEngine.getEnabledTaskTypes(); |
|
} |
|
|
|
if(cTab==-1){ |
|
cTab=getActiveTab(); |
|
} |
|
|
|
data.put("activetab", cTab); |
|
|
|
if(cTab==0){ //tab 1 |
|
|
|
data.put("tasktypes", rtn); |
|
data.put("timezones", TimeZone.getAvailableIDs()); |
|
Map data1=listScheduledItems(); |
|
data1.put("taskrunning", running); |
|
|
|
|
|
data.put("listtasks", data1); |
|
|
|
BBSyncDB syncdb=BBSyncDB.getBBSyncDB(); |
|
syncdb.connectDB(); |
|
Vector fields=syncdb.getFieldMapping(); |
|
syncdb.closeDB(); |
|
|
|
data.put("field_mapping", fields); |
|
|
|
SchedulerDB schedulerdb=SchedulerDB.getSchedulerDB(); |
|
schedulerdb.connectDB(); |
|
Vector tags=schedulerdb.getTags(); |
|
schedulerdb.closeDB(); |
|
data.put("tags", tags); |
|
data.put("showtags", getShowTags()); |
|
} |
|
|
|
if(cTab==1){ |
|
|
|
data.put("qlogs", getQueueLogs(null)); |
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB(); |
|
try{ |
|
sdb.connectDB(); |
|
data.put("peerslist", sdb.getPeersData()); |
|
}catch(Exception e){ |
|
log.error("Error:"+e.getMessage()); |
|
}finally{ |
|
sdb.closeDB(); |
|
} |
|
|
|
} |
|
if(cTab==2){ |
|
data.put("peersdata", getData4PeerMatrix()); |
|
} |
|
//String localnames[]= |
|
data.putAll(getGroupIconsAndColors()); |
|
|
|
return data; |
|
}catch(Exception e){ |
|
e.printStackTrace(); |
|
ClientError.reportError(e, null); |
|
throw e; |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|