ret.put("Class", step.getStep().getClass().getName()); ret.put("Priority", ""+step.getPriority()); ret.put("Id", ""+step.getStepCount()); if(step.getStep() instanceof ITransferableStep) Map<String, String> det = ((ITransferableStep)step.getStep()).getTransferableObject(); if(det!=null) ret.putAll(det); Field[] fields = step.getStep().getClass().getDeclaredFields(); for(int i = 0; i < fields.length; i++) Object val = fields[i].get(step.getStep()); valtext = val == null ? "null" : val.toString();
priostep = si.getPriority()>=STEP_PRIORITY_IMMEDIATE; if(stepinfo.equals(""+sti.getStepCount())) if(step.getStep() instanceof IConditionalComponentStep<?>) valid = ((IConditionalComponentStep<?>)step.getStep()).isValid(); boolean stateok = priostep || endstart==-1 || step.getStepCount()>=endstart; step.getTransfer().afterSwitch(); stepfut = step.getStep().execute(component); getComponent().getLogger().warning(!stateok? "Step omitted due to endstate:"+" "+step.getStep(): "Step invalid "+" "+step.getStep()); ex = new StepAborted(); getComponent().getLogger().warning("Component step threw hard exception: "+step.getStep()+"\n"+sw); step.getFuture().setExceptionIfUndone(ex instanceof Exception? (Exception)ex: new RuntimeException(ex)); if(!step.getFuture().hasResultListener() && (!(ex instanceof ComponentTerminatedException) || !((ComponentTerminatedException)ex).getComponentIdentifier().equals(component.getComponentIdentifier()))) getComponent().getLogger().severe("Component step failed: "+step.getStep()+"\n"+sw); if(DEBUG && stepadditions!=null && stepadditions.containsKey(step.getStep())) stepadditions.get(step.getStep()).printStackTrace();
addStep(new StepInfo(step, ret, new ThreadLocalTransferHelper(true), prio, stepcnt++));
for(StepInfo step: steps) if(step.getPriority()<IExecutionFeature.STEP_PRIORITY_IMMEDIATE) MonitoringEvent event = new MonitoringEvent(getComponent().getComponentIdentifier(), getComponent().getComponentDescription().getCreationTime(), step.getStep().toString(), IMonitoringEvent.EVENT_TYPE_CREATION+"."+TYPE_STEP, null, System.currentTimeMillis(), PublishEventLevel.FINE); event.setProperty("sourcename", SReflect.getUnqualifiedClassName(step.getStep().getClass())); event.setProperty("details", getStepDetails(step)); event.setProperty("id", step.getStepCount()); ret.add(event);
/** * Kernel specific test if the step is a breakpoint. */ public boolean testIfBreakpoint(String[] breakpoints) { boolean ret = false; try { // System.out.println("testing: "+steps.first().getStep().getClass()); Method m = steps.first().getStep().getClass().getMethod("execute", new Class[]{IInternalAccess.class}); Breakpoint bp = m.getAnnotation(Breakpoint.class); if(bp!=null) { Set<String> bps = new HashSet<String>(Arrays.asList(breakpoints)); String bpname = bp.value(); // todo: support wildcard matching ret = bps.contains(bpname); if(ret) bpstepid = steps.first().getStepCount(); } } catch(Exception e) { e.printStackTrace(); } return ret; }
/** * Test if the agent's execution is currently at one of the * given breakpoints. If yes, the agent will be suspended by * the platform. * Available breakpoints can be specified in the * micro agent meta info. * @param breakpoints An array of breakpoints. * @return True, when some breakpoint is triggered. */ public boolean isAtBreakpoint(String[] breakpoints) { boolean ret = false; if(steps!=null && steps.size()>0) { if(steps.first().getStepCount()==bpstepid) { bpstepid = -1; } else { ret = testIfBreakpoint(breakpoints); } } return ret; }
/** * Publish a step event. */ public void publishStepEvent(StepInfo step, String type) { if(step.getPriority()<IExecutionFeature.STEP_PRIORITY_IMMEDIATE && getComponent().getComponentFeature0(IMonitoringComponentFeature.class)!=null && getComponent().getComponentFeature(IMonitoringComponentFeature.class).hasEventTargets(PublishTarget.TOALL, PublishEventLevel.FINE)) { MonitoringEvent event = new MonitoringEvent(getComponent().getComponentIdentifier(), getComponent().getComponentDescription().getCreationTime(), step.getStep().toString(), type+"."+TYPE_STEP, null, System.currentTimeMillis(), PublishEventLevel.FINE); // null was step.getCause() event.setProperty("sourcename", SReflect.getUnqualifiedClassName(step.getStep().getClass())); event.setProperty("details", getStepDetails(step)); event.setProperty("id", step.getStepCount()); getComponent().getComponentFeature(IMonitoringComponentFeature.class).publishEvent(event, PublishTarget.TOALL); } }
public void customResultAvailable(Object result) { if(step.getPriority()<STEP_PRIORITY_IMMEDIATE && getComponent().getComponentFeature0(IMonitoringComponentFeature.class)!=null && getComponent().getComponentFeature(IMonitoringComponentFeature.class).hasEventTargets(PublishTarget.TOALL, PublishEventLevel.FINE)) { getComponent().getComponentFeature(IMonitoringComponentFeature.class).publishEvent(new MonitoringEvent(getComponent().getComponentIdentifier(), getComponent().getComponentDescription().getCreationTime(), step.getStep().toString(), IMonitoringEvent.EVENT_TYPE_DISPOSAL+"." +IMonitoringEvent.SOURCE_CATEGORY_EXECUTION, null, System.currentTimeMillis(), PublishEventLevel.FINE), PublishTarget.TOALL); // null was step.getCause() } super.customResultAvailable(result); } });
/** * Compare two steps. */ public int compareTo(StepInfo o) { int ret = o.getPriority()-getPriority(); if(ret==0) ret = getStepCount()-o.getStepCount(); return ret; }