private Set<ProcessLevel> getReverseOrderedProcessLevels( RuleResult ruleResult ) { Set<ProcessLevel> ordered = new TreeSet<>( Collections.reverseOrder() ); ordered.addAll( ruleResult.getRegistry().getProcessLevels() ); return ordered; } }
@Override public int compare( RuleResult lhs, RuleResult rhs ) { // preserver order of preference from rule registry if all things are equal return registrySet.indexOf( lhs.getRegistry() ) - registrySet.indexOf( rhs.getRegistry() ); } };
public void writeFinal( String fileName, RuleResult ruleResult ) { Path path = getPlanTracePath(); if( path == null ) return; Path filePath = path.resolve( String.format( "%s-%s.txt", fileName, ruleResult.getRegistry().getName() ) ); File file = filePath.toFile(); processLogger.logInfo( "writing final registry: {}", file ); try( PrintWriter writer = new PrintWriter( file ) ) { writer.println( "filename names winning rule registry" ); } catch( IOException exception ) { processLogger.logError( "could not write final registry", exception ); } }
private void notifyUnsupported() { if( unsupported.isEmpty() ) return; for( RuleResult ruleResult : unsupported ) getFlowLogger().logInfo( "rule registry: {}, does not support assembly", ruleResult.getRegistry().getName() ); if( !registrySet.isIgnoreFailed() || success.isEmpty() && illegal.isEmpty() && interrupted.isEmpty() ) rethrow( unsupported.get( 0 ).getPlannerException() ); }
private void notifyIllegal() { if( illegal.isEmpty() ) return; for( RuleResult ruleResult : illegal ) getFlowLogger().logInfo( "rule registry: {}, found assembly to be malformed", ruleResult.getRegistry().getName() ); if( !registrySet.isIgnoreFailed() || success.isEmpty() ) rethrow( illegal.get( 0 ).getPlannerException() ); }
private RuleResult selectSuccess() { if( success.isEmpty() ) throw new IllegalStateException( "no planner results from registry set" ); for( RuleResult ruleResult : success ) getFlowLogger().logInfo( "rule registry: {}, supports assembly with steps: {}, nodes: {}", ruleResult.getRegistry().getName(), ruleResult.getNumSteps(), ruleResult.getNumNodes() ); if( success.size() != 1 ) { // sort is stable Collections.sort( success, getOrderComparator() ); Collections.sort( success, getPlanComparator() ); } RuleResult ruleResult = success.get( 0 ); if( registrySet.getSelect() == RuleRegistrySet.Select.FIRST ) getFlowLogger().logInfo( "rule registry: {}, result was selected as first successful", ruleResult.getRegistry().getName() ); else if( registrySet.getSelect() == RuleRegistrySet.Select.COMPARED ) getFlowLogger().logInfo( "rule registry: {}, result was selected using: \'{}\'", ruleResult.getRegistry().getName(), getPlanComparator().toString() ); return ruleResult; }
private void notifyInterrupted() { if( interrupted.isEmpty() ) return; for( RuleResult ruleResult : interrupted ) getFlowLogger().logInfo( "rule registry: {}, planned longer than default duration, was cancelled", ruleResult.getRegistry().getName() ); if( interrupted.size() == registrySet.size() ) throw new PlannerException( "planner registry timeout exceeded for all registries: " + formatDurationFromMillis( registrySet.getPlannerTimeoutSec() * 1000 ) ); if( !registrySet.isIgnoreFailed() || success.isEmpty() ) rethrow( interrupted.get( 0 ).getPlannerException() ); }
public void writeStats( PlannerContext plannerContext, RuleResult ruleResult ) { Path path = getPlanStatsPath(); if( path == null ) return; File file = path.resolve( String.format( "planner-stats-%s-%s.txt", ruleResult.getRegistry().getName(), ruleResult.getResultStatus() ) ).toFile(); processLogger.logInfo( "writing planner stats to: {}", file ); file.getParentFile().mkdirs(); try( PrintWriter writer = new PrintWriter( file ) ) { Flow flow = plannerContext.getFlow(); Map<Object, Object> configAsProperties = flow.getConfigAsProperties(); writer.format( "cascading version: %s, build: %s\n", emptyOrValue( Version.getReleaseFull() ), emptyOrValue( Version.getReleaseBuild() ) ); writer.format( "application id: %s\n", emptyOrValue( AppProps.getApplicationID( configAsProperties ) ) ); writer.format( "application name: %s\n", emptyOrValue( AppProps.getApplicationName( configAsProperties ) ) ); writer.format( "application version: %s\n", emptyOrValue( AppProps.getApplicationVersion( configAsProperties ) ) ); writer.format( "platform: %s\n", emptyOrValue( flow.getPlatformInfo() ) ); writer.format( "frameworks: %s\n", emptyOrValue( AppProps.getApplicationFrameworks( configAsProperties ) ) ); writer.println(); ruleResult.writeStats( writer ); } catch( IOException exception ) { processLogger.logError( "could not write stats", exception ); } }
String registryName = ruleResult.getRegistry().getName();
traceWriter.writeTracePlanSteps( "4-final-flow-steps", flowStepGraph ); flow.setPlannerInfo( getPlannerInfo( ruleResult.getRegistry().getName() ) );