Package com.taobao.zeus.model

Examples of com.taobao.zeus.model.JobDescriptor


 
  public static Tuple<JobDescriptor,JobStatus> convert(JobPersistence persist){
    if(persist==null){
      return null;
    }
    JobDescriptor jd=new JobDescriptor();
    jd.setId(String.valueOf(persist.getId()));
    jd.setName(persist.getName());
    jd.setDesc(persist.getDescr());
    jd.setOwner(persist.getOwner());
    jd.setGroupId(persist.getGroupId()==null?null:String.valueOf(persist.getGroupId()));
    jd.setAuto((persist.getAuto()!=null &&persist.getAuto()==1)?true:false);
    jd.setCronExpression(persist.getCronExpression());
    if(persist.getConfigs()!=null){
      JSONObject object=JSONObject.fromObject(persist.getConfigs());
      jd.setProperties(new HashMap<String, String>());
      for(Object key:object.keySet()){
        jd.getProperties().put(key.toString(), object.getString(key.toString()));
      }
    }
    if(persist.getDependencies()!=null){
      jd.setDependencies(Arrays.asList(persist.getDependencies().split(",")));
    }
    jd.setJobType(JobRunType.parser(persist.getRunType()));
    jd.setScheduleType(JobScheduleType.parser(persist.getScheduleType()));
    String res=persist.getResources();
    if(res!=null){
      List<Map<String, String>> tempRes=new ArrayList<Map<String,String>>();
      JSONArray resArray=JSONArray.fromObject(res);
      for(int i=0;i<resArray.size();i++){
        JSONObject o=resArray.getJSONObject(i);
        Map<String, String> map=new HashMap<String, String>();
        for(Object key:o.keySet()){
          map.put(key.toString(), o.getString(key.toString()));
        }
        tempRes.add(map);
      }
      jd.setResources(tempRes);
    }
   
    jd.setScript(persist.getScript());
   
    if(persist.getPreProcessers()!=null && !"".equals(persist.getPreProcessers().trim())){
      JSONArray preArray=JSONArray.fromObject(persist.getPreProcessers());
      List<Processer> preProcessers=new ArrayList<Processer>();
      for(int i=0;i<preArray.size();i++){
        Processer p=ProcesserUtil.parse(preArray.getJSONObject(i));
        if(p!=null){
          preProcessers.add(p);
        }
       
      }
      jd.setPreProcessers(preProcessers);
    }
    if(persist.getPostProcessers()!=null && !"".equals(persist.getPostProcessers().trim())){
      JSONArray postArray=JSONArray.fromObject(persist.getPostProcessers());
      List<Processer> postProcessers=new ArrayList<Processer>();
      for(int i=0;i<postArray.size();i++){
        Processer p=ProcesserUtil.parse(postArray.getJSONObject(i));
        if(p!=null){
          postProcessers.add(p);
        }
      }
      jd.setPostProcessers(postProcessers);
    }
   
   
    JobStatus status=new JobStatus();
    status.setJobId(String.valueOf(persist.getId()));
View Full Code Here


      String parentGroup,JobRunType jobType) throws ZeusException {
    GroupDescriptor parent=getGroupDescriptor(parentGroup);
    if(parent.isDirectory()){
      throw new ZeusException("目录组下不得创建Job");
    }
    JobDescriptor job=new JobDescriptor();
    job.setOwner(user);
    job.setName(jobName);
    job.setGroupId(parentGroup);
    job.setJobType(jobType);
    job.setPreProcessers(Arrays.asList((Processer)new DownloadProcesser()));
    JobPersistence persist=PersistenceAndBeanConvert.convert(job);
    persist.setGmtCreate(new Date());
    persist.setGmtModified(new Date());
    getHibernateTemplate().save(persist);
    return PersistenceAndBeanConvert.convert(persist).getX();
View Full Code Here

    }
  }

  @Override
  public void moveJob(String uid,String jobId, String groupId) throws ZeusException {
    JobDescriptor jd=getJobDescriptor(jobId).getX();
    GroupDescriptor gd=getGroupDescriptor(groupId);
    if(gd.isDirectory()){
      throw new ZeusException("非法操作");
    }
    updateJob(uid, jd, jd.getOwner(), groupId);
  }
View Full Code Here

      String historyId = entry.getKey();
      JobHistory his = context.getJobHistoryManager().findJobHistory(
          historyId);
      long maxTime;
      try {
        JobDescriptor jd = context.getGroupManager()
            .getJobDescriptor(his.getJobId()).getX();
        String maxTimeString = jd.getProperties().get(
            "zeus.job.maxtime");
        if (maxTimeString == null || maxTimeString.trim().isEmpty()) {
          continue;
        }
        maxTime = Long.parseLong(maxTimeString);
View Full Code Here

    for (Map.Entry<String, Boolean> entry : w.getRunnings().entrySet()) {
      if (entry.getValue() != null && entry.getValue()) {
        continue;
      }
      String jobId = entry.getKey();
      JobDescriptor jd = context.getGroupManager()
          .getJobDescriptor(jobId).getX();
      String maxTimeString = jd.getProperties().get("zeus.job.maxtime");
      long maxTime;
      try {
        if (maxTimeString == null || maxTimeString.trim().isEmpty()) {
          continue;
        }
View Full Code Here

  }
 
  @Override
  public boolean canHandle(AppEvent event, boolean bubbleDown) {
    if(super.canHandle(event, bubbleDown)){
      JobDescriptor jd=cache.getJobDescriptor();
      if(jd==null){
        autofix();
        return false;
      }
      return jd.getAuto();
    }
    return false;
  }
View Full Code Here

        context.getJobHistoryManager().addJobHistory(history);
        master.run(history);
      }
    }
   
    JobDescriptor jd=cache.getJobDescriptor();
    //如果是定时任务,启动定时程序
    if(jd.getAuto() && jd.getScheduleType()==JobScheduleType.Independent){
      String cronExpression=jd.getCronExpression();
      try {
        CronTrigger trigger=new CronTrigger(jd.getId(), "group", cronExpression);
        JobDetail detail=new JobDetail(jd.getId(), "group", TimerJob.class);
        detail.getJobDataMap().put("jobId",jd.getId());
        detail.getJobDataMap().put("dispatcher", context.getDispatcher());
        context.getScheduler().scheduleJob(detail, trigger);
      } catch (Exception e) {
        if(e instanceof SchedulerException && "Based on configured schedule, the given trigger will never fire.".equals(e.getMessage())){
          //定时器已经不会被触发了,关闭该job的自动调度功能
          jd.setAuto(false);
          try {
            groupManager.updateJob(jd.getOwner(), jd);
          } catch (ZeusException e1) {
            log.error("JobId:"+jobId+" 更新失败",e1);
          }
          cache.refresh();
        }else{
View Full Code Here

  private void  successEventHandle(JobSuccessEvent event){
    if(event.getTriggerType()==TriggerType.MANUAL){
      return;
    }
    String eId=event.getJobId();
    JobDescriptor jobDescriptor=cache.getJobDescriptor();
    if(jobDescriptor==null){
      autofix();
      return;
    }
    if(!jobDescriptor.getAuto()){
      return ;
    }
    if(jobDescriptor.getScheduleType()==JobScheduleType.Independent){
      return ;
    }
    if(!jobDescriptor.getDependencies().contains(eId) ){
      return ;
    }
    JobStatus jobStatus=null;
    synchronized (this) {
      jobStatus=groupManager.getJobStatus(jobId);
      JobBean bean=groupManager.getUpstreamJobBean(jobId);
      String cycle=bean.getHierarchyProperties().getProperty(PropertyKeys.DEPENDENCY_CYCLE);
      if(cycle!=null && !"".equals(cycle)){
        Map<String, String> dep=jobStatus.getReadyDependency();
        if("sameday".equals(cycle)){
          SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
          String now=format.format(new Date());
          for(String key:new HashSet<String>(dep.keySet())){
            String d=format.format(new Date(Long.valueOf(dep.get(key))));
            if(!now.equals(d)){
              jobStatus.getReadyDependency().remove(key);
              ScheduleInfoLog.info("JobId:"+jobId+" remove overdue dependency "+key);
            }
          }
        }
      }
     
      ScheduleInfoLog.info("JobId:"+jobId+" received a successed dependency job with jobId:"+event.getJobId());
     
      ScheduleInfoLog.info("JobId:"+jobId+" the dependency jobId:"+event.getJobId()+" record it");
      jobStatus.getReadyDependency().put(eId, String.valueOf(new Date().getTime()));
     
      groupManager.updateJobStatus(jobStatus);
    }
    boolean allComplete=true;
    for(String key:jobDescriptor.getDependencies()){
      if(jobStatus.getReadyDependency().get(key)==null){
        allComplete=false;
        break;
      }
    }
    if(allComplete){
      ScheduleInfoLog.info("JobId:"+jobId+" all dependency jobs is ready,run!");
      JobHistory history=new JobHistory();
      history.setIllustrate("依赖任务全部到位,开始执行");
      history.setTriggerType(TriggerType.SCHEDULE);
      history.setJobId(jobId);
      context.getJobHistoryManager().addJobHistory(history);
      history=master.run(history);
      if(history.getStatus()==Status.FAILED){
        ZeusJobException exception=new ZeusJobException(history.getJobId(),history.getLog().getContent());
        JobFailedEvent jfe=new JobFailedEvent(jobDescriptor.getId(),event.getTriggerType(),history,exception);
        ScheduleInfoLog.info("JobId:"+jobId+" is fail,dispatch the fail event");
        //广播消息
        context.getDispatcher().forwardEvent(jfe);
      }
    }else{
View Full Code Here

   * 1.
   * 2.抛出失败的消息
   * @param event
   */
  private void failedEventHandle(JobFailedEvent event){
    JobDescriptor jobDescriptor=cache.getJobDescriptor();
    if(jobDescriptor==null){
      autofix();
      return;
    }
    if(!jobDescriptor.getAuto()){
      return;
    }
    if(jobDescriptor.getDependencies().contains(event.getJobId())){//本Job依赖失败的Job
      if(event.getTriggerType()==TriggerType.SCHEDULE){//依赖的Job 的失败类型是 SCHEDULE类型
        //自身依赖的Job失败了,表明自身也无法继续执行,抛出失败的消息
        ZeusJobException exception=new ZeusJobException(event.getJobException().getCauseJobId(),"jobId:"+jobDescriptor.getId()+" 失败,原因是依赖的Job:"+event.getJobId()+" 执行失败",
            event.getJobException());
        ScheduleInfoLog.info("jobId:"+jobId+" is fail,as dependendy jobId:"+jobDescriptor.getId()+" is failed");
        //记录进History日志
        JobHistory history=new JobHistory();
        history.setStartTime(new Date());
        history.setEndTime(new Date());
        history.setExecuteHost(null);
        history.setJobId(jobId);
        history.setTriggerType(event.getTriggerType());
        history.setStatus(Status.FAILED);
        history.getLog().appendZeusException(exception);
        history=jobHistoryManager.addJobHistory(history);
        jobHistoryManager.updateJobHistoryLog(history.getId(), history.getLog().getContent());
       
       
        JobFailedEvent jfe=new JobFailedEvent(jobDescriptor.getId(),event.getTriggerType(),history,exception);
       
        ScheduleInfoLog.info("JobId:"+jobId+" is fail,dispatch the fail event");
        //广播消息
        context.getDispatcher().forwardEvent(jfe);
      }
View Full Code Here

   * 因为可能会碰到很多异常情况,比如本该删除的job没有删除,本该更新的job没有更新等等
   * 这里做统一的处理,处理完成之后,保证与数据库的设置是一致的
   */
  private void autofix(){
    cache.refresh();
    JobDescriptor jd=cache.getJobDescriptor();
    if(jd==null){//如果这是一个删除操作,这里将会是null 忽略
      //job被删除,需要清理
      context.getDispatcher().removeController(this);
      destory();
      ScheduleInfoLog.info("schedule remove job with jobId:"+jobId);
      return;
    }
    JobDetail detail=null;
    try {
      detail = context.getScheduler().getJobDetail(jobId, "group");
    } catch (SchedulerException e) {
      log.error(e);
    }
    //判断自动调度的开关
    if(!jd.getAuto()){
      if(detail!=null){
        try {
          context.getScheduler().deleteJob(jobId, "group");
          log.error("schedule remove job with jobId:"+jobId);
        } catch (SchedulerException e) {
          log.error(e);
        }
      }
      return;
    }
   
    if(jd.getScheduleType()==JobScheduleType.Dependent){//如果是依赖任务
      if(detail!=null){//说明原来是独立任务,现在变成依赖任务,需要删除原来的定时调度
        try {
          context.getScheduler().deleteJob(jobId, "group");
          ScheduleInfoLog.info("JobId:"+jobId+" from independent to dependent ,remove from schedule");
        } catch (SchedulerException e) {
          log.error(e);
        }
      }
     
    }else if(jd.getScheduleType()==JobScheduleType.Independent){//如果是独立任务
      ScheduleInfoLog.info("JobId:"+jobId+" independent job,update");
      try {
        if(detail!=null){
          context.getScheduler().deleteJob(jobId, "group");
          ScheduleInfoLog.info("JobId:"+jobId+" remove from schedule");
        }
        CronTrigger trigger=new CronTrigger(jd.getId(), "group", jd.getCronExpression());
        detail=new JobDetail(jd.getId(), "group", TimerJob.class);
        detail.getJobDataMap().put("jobId",jd.getId());
        detail.getJobDataMap().put("dispatcher", context.getDispatcher());
        context.getScheduler().scheduleJob(detail, trigger);
        ScheduleInfoLog.info("JobId:"+jobId+" add job to schedule for refresh");
      } catch (SchedulerException e) {
        log.error(e);
View Full Code Here

TOP

Related Classes of com.taobao.zeus.model.JobDescriptor

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