public bool CheckStage(modelSpiderSiteRecord wRecord, spiderObjectiveSolutionSet oSet, spiderTask task) { bool okToLeave = false; if (task.Count() == 0) { wRecord.logBuilder.log("> Spider task [i:" + task.iteration + "] have no tasks defined. Aborting the stage loop."); okToLeave = true; return(okToLeave); } // <----------------------------- OBJECTIVE SOLUTION SET okToLeave = operation_executeObjectiveSolutionSet(oSet, wRecord); if (okToLeave) { return(okToLeave); } // <----------------------------- SPIDER LIMITS OVERRIDERS ---------------| if (stageIteration > wRecord.tRecord.instance.settings.limitIterations) { wRecord.log("> Spider settings (limit iterations) trigered abort at [" + stageIteration + "] Aborting the stage loop."); okToLeave = true; return(okToLeave); } // <----------------------------------------------------------------------| // <----------------------------- SPIDER LIMITS OVERRIDERS ---------------| if (wRecord.web.webPages.Count() > wRecord.tRecord.instance.settings.limitTotalPageLoad) { wRecord.log("> Spider settings (limit pages load) trigered abort at [" + wRecord.web.webPages.Count() + "] Aborting the stage loop."); okToLeave = true; return(okToLeave); } // <----------------------------------------------------------------------| if (stageIteration > stageIterationLimit) { wRecord.logBuilder.log("> Stage [" + name + "] iteration limit reached [ " + stageIterationLimit + " ] -- aborting [" + objectives.Count + "] objectives and move on"); okToLeave = true; return(okToLeave); } if (stageIteration > GLOBAL_stageIterationLimit) { Exception ex = new aceGeneralException("spiderStage [" + name + "] reached the " + nameof(GLOBAL_stageIterationLimit) + "(" + GLOBAL_stageIterationLimit.ToString() + ")"); throw ex; } stageIteration++; return(okToLeave); }
public bool operation_executeObjectiveSolutionSet(spiderObjectiveSolutionSet solutionSet, modelSpiderSiteRecord wRecord) { bool leave = false; foreach (spiderObjectiveSolution sol in solutionSet) { if (sol.status != spiderObjectiveStatus.unknown) { switch (sol.type) { case spiderObjectiveType.dropOutControl: break; case spiderObjectiveType.flowControl: List <spiderObjectiveEnum> targets = sol.targetedObjective.getEnumListFromFlags <spiderObjectiveEnum>(); foreach (spiderObjectiveEnum target in targets) { spiderObjective selObjective = objectives.FirstOrDefault <spiderObjective>(x => x.tag == target); if (selObjective != null) { resolveObjective(selObjective, sol, wRecord); } } break; } } } leave = true; foreach (spiderObjective obj in objectives) { if (obj.status == spiderObjectiveStatus.notSolved) { leave = false; } } if (leave) { wRecord.logBuilder.log("All objectives solved/avoided/aborted. Leaving the stage [" + name + "]"); } return(leave); }