private void UpdateSystemInformationOfTarget(IDocumentSession session, CollectRequest collectRequest, FamilyEnumeration plataform, ExecutionLogBuilder executionLog) { if (!collectRequest.Target.IsSystemInformationDefined()) { executionLog.CollectSystemInformation(); ISystemInformationService systemInformationService = ProbeManager.GetSystemInformationService(plataform); if (systemInformationService != null) { try { this.GetSystemInformationFromTarget(collectRequest, systemInformationService); session.SaveChanges(); } catch (RecoverableProbeException ex) { CollectExecution collectExecution = this.CreateCollectExecution(session, collectRequest); collectExecution.SetDateStartCollect(); this.ConfigureTheCollectRequestWithAnErrorProbeExecute(collectRequest, "SystemInformation", collectExecution, ex, executionLog); session.SaveChanges(); throw new SystemInformationException(ex.Message, ex); } catch (Exception ex) { CreateCollectionExcutionWithError(session, collectRequest, "SystemInformation", ex, executionLog); session.SaveChanges(); throw new SystemInformationException(ex.Message, ex); } } } }
private void CreateCollectionExcutionWithError(IDocumentSession session, CollectRequest collectRequest, string capability, Exception ex, ExecutionLogBuilder executionLog) { CollectExecution collectExecution = this.CreateCollectExecution(session, collectRequest); collectExecution.SetDateStartCollect(); EndsACollectRequestBecauseThisErrorIsUnrecoverable(collectRequest, capability, collectExecution, ex, executionLog); }
public CollectRequest CreateCollectRequestCompleteAfterCollect(IDocumentSession session) { CollectRequest collectRequest = new CollectRequest(); session.Store(collectRequest); CollectExecution collectExecution = new CollectExecution(); session.Store(collectExecution); collectExecution.RequestId = collectRequest.Oid; collectExecution.SetDateStartCollect(); collectExecution.SetDateEndCollect(); ProbeResult probeResult = new ProbeResultFactory().CreateProbeResultForRegistryCollect(); CollectFactory collectFactory = new CollectFactory(session); ProbeExecution probeExecution = collectFactory.CreateAProbeExecution(probeResult, "registry"); CollectResult collectResult = new CollectResultFactory().CreateCollectResultForTheProbeExecution(probeResult); collectRequest.Result = collectResult; string systemCharacteristicsXml = this.GetSystemCharacteristicsInXML(".system_characteristics.oval.org.mitre.oval.sc.5368.xml"); collectResult.SystemCharacteristics = systemCharacteristicsXml; probeExecution.SystemCharacteristics = collectResult.SystemCharacteristics; collectExecution.ProbeExecutions.Add(probeExecution); this.CreateTarget(session, collectRequest); //session.Store(collectRequest); collectExecution.RequestId = collectRequest.Oid; return(collectRequest); }
private CollectExecution CreateCollectExecution(IDocumentSession session, CollectRequest collectRequest) { collectFactory = new CollectFactory(); CollectExecution collectExecution = collectFactory.CreateCollectExecution(session, collectRequest); return(collectExecution); }
public void Should_be_possible_finalize_the_collectRequest_if_the_number_of_execution_exceeds_of_limits() { IDocumentSession fakeSession = provider.GetSession(); CollectRequest collectRequest = this.GetCollectRequest(); oval_definitions definitions = new OvalDocumentLoader().GetFakeOvalDefinitions("definitionsWithLocalVariable.xml"); var objList = new List <ObjectType>(); objList.Add(new family_object() { id = "oval:org.mitre.oval:obj:1000" }); objList.Add(new file_object() { id = "oval:org.mitre.oval:obj:5000" }); definitions.objects = objList.ToArray(); var newDefinitiondoc = new DefinitionDocument() { OriginalId = "01", Text = definitions.GetDefinitionsXml() }; session.Store(newDefinitiondoc); collectRequest.OvalDefinitionsId = newDefinitiondoc.Oid; CollectExecutionManagerFactory factory = new CollectExecutionManagerFactory(collectRequest, session); List <string> registryObjectsThatNotProcessInFirstTime = new List <string>(); List <string> familyObjectsThatNotProcessInFirstTime = new List <string>(); CollectExecutionManager executionManager = factory.CreateExecutionManagerForTheSuccessScenario(this.GetResultForRegistry(collectRequest, registryObjectsThatNotProcessInFirstTime), this.GetResultForFamily(collectRequest, familyObjectsThatNotProcessInFirstTime)); session.Store(collectRequest); var newExecution1 = new CollectExecution() { RequestId = collectRequest.Oid }; session.Store(newExecution1); var newExecution2 = new CollectExecution() { RequestId = collectRequest.Oid }; session.Store(newExecution2); var newExecution3 = new CollectExecution() { RequestId = collectRequest.Oid }; session.Store(newExecution3); executionManager.ExecuteCollect(fakeSession, collectRequest, FamilyEnumeration.windows); session.SaveChanges(); CollectRequest collectRequestAfterExecute = session.Load <CollectRequest>(collectRequest.Oid.ToString()); Assert.IsNotNull(collectRequest); Assert.AreEqual(4, collectRequestAfterExecute.GetNumberOfExecutions(session)); Assert.IsTrue(collectRequestAfterExecute.isClosed()); }
public CollectExecution CreateCollect(IDocumentSession session) { CollectExecution collect = new CollectExecution(); collect.SetDateStartCollect(); collect.SetDateEndCollect(); session.Store(collect); return(collect); }
public CollectExecution CreateACollectExecutionWithError(IDocumentSession session) { CollectExecution collectExecution = new CollectExecution(); collectExecution.SetDateStartCollect(); ProbeExecution probeExecution = this.GetProbeExecutionWithError(session); collectExecution.ProbeExecutions.Add(probeExecution); collectExecution.SetDateEndCollect(); return(collectExecution); }
private static CollectExecution CreateCollectExecution(IDocumentSession session, CollectRequest collectRequest) { var collectExecution = new CollectExecution() { RequestId = collectRequest.Oid }; collectExecution.SetDateStartCollect(); collectExecution.SetDateEndCollect(); return(collectExecution); }
public void Should_be_possible_to_get_a_number_of_times_that_was_executed_the_collectRequest() { CollectRequestFactory factory = new CollectRequestFactory(); IDocumentSession fakeSession = this.GetSession(); CollectRequest collectRequest = factory.CreateCollectRequest(fakeSession).Item2; Assert.IsTrue(collectRequest.GetNumberOfExecutions(fakeSession) == 0, "this request collect still not executed"); //add two executions CollectExecution firstExecution = factory.CreateCollect(fakeSession); firstExecution.RequestId = collectRequest.Oid; firstExecution.ProbeExecutions.Add(factory.CreateProbeExecution(fakeSession, "registry")); firstExecution.ProbeExecutions.Add(factory.CreateProbeExecution(fakeSession, "family")); CollectExecution secondExecution = factory.CreateCollect(fakeSession); secondExecution.RequestId = collectRequest.Oid; secondExecution.ProbeExecutions.Add(factory.CreateProbeExecution(fakeSession, "registry")); fakeSession.SaveChanges(); Assert.AreEqual(2, collectRequest.GetNumberOfExecutions(fakeSession)); }
public CollectRequest CreateCollectRequestIncompleteAfterCollect(IDocumentSession session) { CollectRequest collectRequest = new CollectRequest(); string definitionsInXml = GetOvalObjectInXML(".definitions.fdcc_xpfirewall_oval.xml"); StringBuilder builder = new StringBuilder(definitionsInXml); var newDefinitiondoc = new DefinitionDocument() { OriginalId = "01", Text = builder.ToString() }; session.Store(newDefinitiondoc); collectRequest.OvalDefinitionsId = newDefinitiondoc.Oid; session.Store(collectRequest); CollectExecution collectExecution = new CollectExecution(); collectExecution.RequestId = collectRequest.Oid; session.Store(collectExecution); collectExecution.SetDateStartCollect(); collectExecution.SetDateEndCollect(); //collectRequest.Collects.Add(collectExecution); ProbeResult probeResult = new ProbeResultFactory().CreateProbeResultForRegistryCollect(); CollectFactory collectFactory = new CollectFactory(session); ProbeExecution probeExecution = collectFactory.CreateAProbeExecution(probeResult, "registry"); CollectResult collectResult = new CollectResultFactory().CreateCollectResultForTheProbeExecution(probeResult); string systemCharacteristicsXml = this.GetSystemCharacteristicsInXML(".system_characteristics.fdcc_xpfirewall_oval.sc_incomplete.xml"); collectResult.SystemCharacteristics = systemCharacteristicsXml; probeExecution.SystemCharacteristics = collectResult.SystemCharacteristics; collectExecution.ProbeExecutions.Add(probeExecution); // collectRequest.Collects.Add(collectExecution); this.CreateTarget(session, collectRequest); session.SaveChanges(); return(collectRequest); }
/// <summary> /// This method is responsible to start of collect process. /// </summary> /// <param name="objectTypes">The object types.</param> public void ExecuteCollect(IDocumentSession session, CollectRequest collectRequest, FamilyEnumeration plataform) { ExecutionLogBuilder executionLog = new ExecutionLogBuilder(); this.SetStatusToExecuting(collectRequest); CollectExecution collectExecution = this.CreateCollectExecution(session, collectRequest); try { collectExecution.SetDateStartCollect(); this.StartCollect(session, collectRequest, collectExecution, plataform, executionLog); this.EndCollect(session, collectRequest, collectExecution); } catch (Exception ex) { var logMessage = String.Format(EXECUTION_ERROR_MESSAGE, ex.Message, ex.StackTrace); Logger.Error(logMessage); this.EndsACollectRequestBecauseThisErrorIsUnrecoverable(collectRequest, "Collect Manager", collectExecution, ex, executionLog); } session.SaveChanges(); }
/// <summary> /// Ends the request collect because this error is unrecoverable. /// This request was not execute because exists some error that is not possible perform the collect. /// Ex.: Invalid credentials, bad format of oval xmls, etc. /// </summary> /// <param name="collectRequest">The request collect.</param> /// <param name="probe">The probe.</param> /// <param name="collectExecution">the Collect execution object.</param> /// <param name="error">the exception that represents an error.</param> private void EndsACollectRequestBecauseThisErrorIsUnrecoverable(CollectRequest collectRequest, string probeCapability, CollectExecution collectExecution, Exception error, ExecutionLogBuilder executionLog) { ConfigureTheCollectRequestWithAnErrorProbeExecute(collectRequest, probeCapability, collectExecution, error, executionLog); collectRequest.Close(); }
private void CloseExecutionIfIncomplete(IDocumentSession session, CollectRequest collectRequest, CollectExecution collectExecution, FamilyEnumeration plataform, IEnumerable <ObjectType> objectTypes) { IEnumerable <SelectedProbe> objectsNotSupported = ProbeManager.GetNotSupportedObjects(objectTypes, plataform); var objectNotSupported = this.GetObjectTypesFromSelectedProbes(objectsNotSupported); var objectSupportedNotCollect = objectTypes.Except(objectNotSupported); this.CreateCollectedObjectsForNotSupportedObjects(session, objectsNotSupported, collectRequest, collectExecution); if (objectSupportedNotCollect.Count() > 0) { IEnumerable <SelectedProbe> objectsSupportedNotCollected = ProbeManager.GetProbesFor(objectSupportedNotCollect, plataform); this.CreateCollectedObjectsForNotSupportedObjects(session, objectsSupportedNotCollected, collectRequest, collectExecution); } collectRequest.SetResultComplete(session); collectRequest.Close(); session.SaveChanges(); }
private void CreateCollectedObjectsForNotSupportedObjects(IDocumentSession session, IEnumerable <SelectedProbe> objectsNotSupported, CollectRequest collectRequest, CollectExecution collectExecution) { foreach (var probe in objectsNotSupported) { ProbeResult probeResult = probe.CreateCollectedObjectForNotSupportedObjects(probe.ObjectTypes); ProbeExecution probeExecution = this.CreateTheProbeExecution(probeResult, probe); collectRequest.UpdateSystemCharacteristics(session); collectExecution.ProbeExecutions.Add(probeExecution); session.SaveChanges(); } }
private void EndCollect(IDocumentSession session, CollectRequest collectRequest, CollectExecution collectExecution) { if (collectTimeOut.IsExceededTheMaxOfExecutionsDefined(collectRequest.GetNumberOfExecutions(session))) { collectRequest.Close(); } else { if (!collectRequest.isClosed()) { if (!collectExecution.ExistsExecutionsWithError()) { collectRequest.TryClose(session); } else { collectRequest.Reopen(); } } } collectExecution.SetDateEndCollect(); session.SaveChanges(); }
/// <summary> /// Execute the collect for the probes selected /// </summary> /// <param name="selectedProbes">The selected probes.</param> /// <param name="collectRequest">The request collect.</param> private void ExecuteCollectWithProbes(IDocumentSession session, IEnumerable <SelectedProbe> selectedProbes, CollectRequest collectRequest, VariablesEvaluated variables, IEnumerable <StateType> states, CollectExecution collectExecution, ExecutionLogBuilder executionLog) { foreach (SelectedProbe probe in selectedProbes) { if (Interrupted) { break; } try { ProbeExecution probeExecution = this.ExecuteCollect(session, probe, collectRequest, variables, states, executionLog); collectExecution.ProbeExecutions.Add(probeExecution); } catch (RecoverableProbeException ex) { this.ConfigureTheCollectRequestWithAnErrorProbeExecute(collectRequest, probe.Capability.OvalObject, collectExecution, ex, executionLog); session.SaveChanges(); throw ex; } catch (Exception ex) { EndsACollectRequestBecauseThisErrorIsUnrecoverable(collectRequest, probe.Capability.OvalObject, collectExecution, ex, executionLog); session.SaveChanges(); throw ex; } } session.SaveChanges(); }
/// <summary> /// Configures the request collect with one probeExecute with the error status. /// </summary> /// <param name="collectRequest">The request collect.</param> /// <param name="probe">The probe.</param> /// <param name="collectExecution">The collect execution.</param> /// <param name="error">The error.</param> private void ConfigureTheCollectRequestWithAnErrorProbeExecute(CollectRequest collectRequest, string probeCapability, CollectExecution collectExecution, Exception error, ExecutionLogBuilder executionLog) { executionLog.AnErrorOccurred(error.Message); executionLog.EndCollect(); ProbeExecution executionWithError = collectFactory.CreateAProbeExecutionWithError(probeCapability, executionLog.BuildExecutionLogs()); collectExecution.ProbeExecutions.Add(executionWithError); }
private void StartCollect(IDocumentSession session, CollectRequest collectRequest, CollectExecution collectExecution, FamilyEnumeration plataform, ExecutionLogBuilder executionLog) { int attemptsOfEvaluateVariables = 1; bool anErrorOccured = false; bool allObjectWasCollect = false; IEnumerable <ObjectType> objectTypes = collectRequest.GetObjectTypesWasNotCollected(session); session.SaveChanges(); while (!collectTimeOut.IsExceededTheMaxAttemptsOfEvaluateVariables(attemptsOfEvaluateVariables) && !allObjectWasCollect && !anErrorOccured && !Interrupted) { IEnumerable <StateType> states = collectRequest.GetStates(session); IEnumerable <SelectedProbe> selectedProbes = ProbeManager.GetProbesFor(objectTypes, plataform); VariablesEvaluated variables = variableEvaluatorService.Evaluate(collectRequest, session); session.SaveChanges(); try { this.UpdateSystemInformationOfTarget(session, collectRequest, plataform, executionLog); this.ExecuteCollectWithProbes(session, selectedProbes, collectRequest, variables, states, collectExecution, executionLog); session.SaveChanges(); } catch (SystemInformationException ex) { string logMessage; if (ex.InnerException == null) { logMessage = String.Format(EXECUTION_ERROR_MESSAGE, ex.Message, ex.StackTrace); } else { logMessage = String.Format(EXECUTION_ERROR_MESSAGE_WITH_INNER_EXCEPTION, ex.Message, ex.InnerException.StackTrace, ex.StackTrace); } Logger.Error(logMessage); collectRequest.SetResultError(); collectRequest.Close(); anErrorOccured = true; session.SaveChanges(); break; } catch { // only ends the loop. The error already was treated anErrorOccured = true; } objectTypes = collectRequest.GetObjectTypesWasNotCollected(session); allObjectWasCollect = objectTypes.Count() == 0; attemptsOfEvaluateVariables++; } if (Interrupted) { collectRequest.Status = CollectRequestStatus.Canceled; } else { if ((!allObjectWasCollect) && (!anErrorOccured)) { CloseExecutionIfIncomplete(session, collectRequest, collectExecution, plataform, objectTypes); } } session.SaveChanges(); }