Skip to content

[backend/frontend] Bring execution traces at asset/agent level #2976

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 73 commits into from
Apr 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
57dbf47
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
40d6eac
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
1d067d9
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
2c08aa4
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
5994ad5
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
fa06ea2
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
e3a13db
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
f3738ed
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
2de09d5
[backend/frontend] Add tab execution into overview atomic
savacano28 Apr 16, 2025
369ea2b
[frontend] Add style
savacano28 Apr 17, 2025
883c3ad
[frontend] wip
savacano28 Apr 17, 2025
ca1ab67
[frontend] wip
savacano28 Apr 18, 2025
fc3bb28
[backend/frontend] Clean
savacano28 Apr 22, 2025
659a050
[backend/frontend] Clean
savacano28 Apr 22, 2025
9b4e1eb
[backend/frontend] Clean
savacano28 Apr 22, 2025
6754ef4
[backend/frontend] Clean
savacano28 Apr 22, 2025
a38e2c1
[backend/frontend] Clean
savacano28 Apr 22, 2025
19f9e97
[backend/frontend] Clean
savacano28 Apr 22, 2025
ff8bda8
[backend/frontend] Clean
savacano28 Apr 22, 2025
22d49da
[backend/frontend] Clean
savacano28 Apr 22, 2025
207ef3d
[backend/frontend] Clean
savacano28 Apr 22, 2025
4002443
[backend/frontend] Clean
savacano28 Apr 22, 2025
44f3ab6
[backend/frontend] Clean
savacano28 Apr 22, 2025
38c1298
[backend/frontend] Clean
savacano28 Apr 23, 2025
d59e8ad
[backend/frontend] Clean
savacano28 Apr 23, 2025
8519317
[backend/frontend] Clean
savacano28 Apr 23, 2025
0c9130b
[backend/frontend] Clean
savacano28 Apr 23, 2025
1773a3e
[backend/frontend] Clean
savacano28 Apr 23, 2025
1498f81
[backend/frontend] Clean
savacano28 Apr 23, 2025
494c7fe
[backend/frontend] Clean
savacano28 Apr 23, 2025
ee739c4
[backend/frontend] Clean
savacano28 Apr 23, 2025
6e66036
[backend/frontend] Clean
savacano28 Apr 23, 2025
046082f
[backend/frontend] Clean
savacano28 Apr 23, 2025
8dc7d34
[backend/frontend] Add tests
savacano28 Apr 24, 2025
49f09b7
[backend/frontend] Add tests
savacano28 Apr 24, 2025
642921d
[backend/frontend] Clean
savacano28 Apr 24, 2025
26adf1c
[backend/frontend] Clean
savacano28 Apr 24, 2025
4923747
[backend/frontend] Clean
savacano28 Apr 24, 2025
f9164b4
[backend/frontend] Clean
savacano28 Apr 24, 2025
8fdd586
[backend/frontend] Clean
savacano28 Apr 24, 2025
ae91cea
[backend/frontend] Clean
savacano28 Apr 24, 2025
869a8a1
[backend/frontend] Clean
savacano28 Apr 24, 2025
7ef4746
[backend/frontend] Clean
savacano28 Apr 24, 2025
bad916a
[backend/frontend] Clean
savacano28 Apr 24, 2025
c088273
[backend] Fix tests
savacano28 Apr 27, 2025
5066328
[backend] Clean
savacano28 Apr 28, 2025
40c7b0f
[backend] Clean
savacano28 Apr 28, 2025
e8504f0
[frontend] refacto header atm
MarineLeM Apr 28, 2025
8f81979
[backend/frontend] Clean
savacano28 Apr 28, 2025
333a3ce
[backend/frontend] Clean
savacano28 Apr 28, 2025
916d4cd
[backend/frontend] Clean
savacano28 Apr 28, 2025
f05713a
[backend/frontend] Clean
savacano28 Apr 28, 2025
4faa1f6
[backend/frontend] Clean
savacano28 Apr 28, 2025
cdfda8a
[backend/frontend] Clean
savacano28 Apr 28, 2025
b1b2307
[backend/frontend] Clean
savacano28 Apr 28, 2025
73fdeb3
[backend/frontend] Clean
savacano28 Apr 28, 2025
f0be33e
[backend/frontend] Clean
savacano28 Apr 28, 2025
845c0aa
[backend/frontend] Clean
savacano28 Apr 28, 2025
720606e
[backend/frontend] Clean
savacano28 Apr 28, 2025
1ea3bc8
[frontend] fix reponse pie
MarineLeM Apr 29, 2025
6badc0a
[backend/frontend] Clean tests
savacano28 Apr 29, 2025
7057360
[backend/frontend] Clean tests
savacano28 Apr 29, 2025
a375fa2
[backend/frontend] Clean
savacano28 Apr 29, 2025
d721695
[backend/frontend] Clean
savacano28 Apr 29, 2025
bc88694
[backend/frontend] Clean
savacano28 Apr 29, 2025
a42d030
[backend/frontend] Clean
savacano28 Apr 29, 2025
5fd047e
[backend/frontend] Clean
savacano28 Apr 29, 2025
7aee8d4
[backend/frontend] Clean
savacano28 Apr 29, 2025
ce01ded
[backend/frontend] Clean
savacano28 Apr 29, 2025
4dd6871
[backend/frontend] Clean
savacano28 Apr 29, 2025
04614ae
[backend/frontend] Clean
savacano28 Apr 29, 2025
9661dab
[backend/frontend] Clean
savacano28 Apr 29, 2025
55ff98b
[backend/frontend] Clean
savacano28 Apr 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions openbas-api/src/main/java/io/openbas/executors/Executor.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ private InjectStatus executeExternal(ExecutableInject executableInject, Injector
throws IOException, TimeoutException {
Inject inject = executableInject.getInjection().getInject();
String jsonInject = mapper.writeValueAsString(executableInject);
InjectStatus injectStatus = this.injectStatusRepository.findByInject(inject).orElseThrow();
InjectStatus injectStatus =
this.injectStatusRepository.findByInjectId(inject.getId()).orElseThrow();
queueService.publish(injector.getType(), jsonInject);
injectStatus.addInfoTrace(
"The inject has been published and is now waiting to be consumed.",
Expand All @@ -58,7 +59,8 @@ private InjectStatus executeInternal(ExecutableInject executableInject, Injector
// After execution, expectations are already created
// Injection status is filled after complete execution
// Report inject execution
InjectStatus injectStatus = this.injectStatusRepository.findByInject(inject).orElseThrow();
InjectStatus injectStatus =
this.injectStatusRepository.findByInjectId(inject.getId()).orElseThrow();
InjectStatus completeStatus = injectStatusService.fromExecution(execution, injectStatus);
return injectStatusRepository.save(completeStatus);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.openbas.executors;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.utils.InjectionUtils.isInInjectableRange;

import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.openbas.injectors.caldera;

import static io.openbas.database.model.Command.COMMAND_TYPE;
import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewInfoTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewInfoTrace;
import static io.openbas.model.expectation.DetectionExpectation.*;
import static io.openbas.model.expectation.ManualExpectation.*;
import static io.openbas.model.expectation.PreventionExpectation.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void run() {
&& resultStatus.isComplete()
&& resultStatus.isFail()) {
injectStatus.addTrace(
new ExecutionTraces(
new ExecutionTrace(
injectStatus,
ExecutionTraceStatus.MAYBE_PREVENTED,
List.of(),
Expand All @@ -96,7 +96,7 @@ public void run() {
&& resultStatus.isComplete()
&& !resultStatus.isFail()) {
injectStatus.addTrace(
new ExecutionTraces(
new ExecutionTrace(
injectStatus,
ExecutionTraceStatus.SUCCESS,
List.of(),
Expand All @@ -116,7 +116,7 @@ public void run() {
.isBefore(Instant.now().minus(5L, ChronoUnit.MINUTES))) {

injectStatus.addTrace(
new ExecutionTraces(
new ExecutionTrace(
injectStatus,
ExecutionTraceStatus.MAYBE_PREVENTED,
List.of(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.openbas.injectors.challenge;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewSuccessTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewSuccessTrace;
import static io.openbas.helper.StreamHelper.fromIterable;
import static io.openbas.injectors.challenge.ChallengeContract.CHALLENGE_PUBLISH;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.openbas.injectors.channel;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewInfoTrace;
import static io.openbas.database.model.ExecutionTraces.getNewSuccessTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewInfoTrace;
import static io.openbas.database.model.ExecutionTrace.getNewSuccessTrace;
import static io.openbas.helper.StreamHelper.fromIterable;
import static io.openbas.injectors.channel.ChannelContract.CHANNEL_PUBLISH;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.openbas.injectors.email;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.injectors.email.EmailContract.EMAIL_GLOBAL;

import io.openbas.config.OpenBASConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.openbas.injectors.email.service;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewInfoTrace;
import static io.openbas.database.model.ExecutionTraces.getNewSuccessTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewInfoTrace;
import static io.openbas.database.model.ExecutionTrace.getNewSuccessTrace;
import static io.openbas.helper.TemplateHelper.buildContextualContent;
import static java.util.stream.Collectors.joining;

Expand Down Expand Up @@ -75,7 +75,7 @@ public void sendEmail(
execution.addTrace(
getNewSuccessTrace("Mail sent to " + emails, ExecutionTraceAction.EXECUTION, userIds));
// Store message in Imap after sending
storeMessageImap(execution, mimeMessage);
storeMessageImap(execution, mimeMessage, userIds);
}

public void sendEmail(
Expand Down Expand Up @@ -108,7 +108,7 @@ public void sendEmail(
execution.addTrace(
getNewSuccessTrace("Mail sent to " + email, ExecutionTraceAction.EXECUTION, userIds));
// Store message in Imap after sending
storeMessageImap(execution, mimeMessage);
storeMessageImap(execution, mimeMessage, userIds);
}

private InternetAddress getInternetAddress(String email) {
Expand All @@ -119,12 +119,12 @@ private InternetAddress getInternetAddress(String email) {
}
}

private void storeMessageImap(Execution execution, MimeMessage mimeMessage)
private void storeMessageImap(Execution execution, MimeMessage mimeMessage, List<String> userIds)
throws InterruptedException {
if (!imapEnabled) {
execution.addTrace(
getNewSuccessTrace(
"Mail successfully send (imap disabled)", ExecutionTraceAction.COMPLETE));
"Mail successfully send (imap disabled)", ExecutionTraceAction.COMPLETE, userIds));
return;
}
if (execution.isRuntime() && imapEnabled) {
Expand All @@ -133,18 +133,22 @@ private void storeMessageImap(Execution execution, MimeMessage mimeMessage)
imapService.storeSentMessage(mimeMessage);
execution.addTrace(
getNewSuccessTrace(
"Mail successfully stored in IMAP", ExecutionTraceAction.COMPLETE));
"Mail successfully stored in IMAP", ExecutionTraceAction.COMPLETE, userIds));
return;
} catch (Exception e) {
execution.addTrace(
getNewInfoTrace(
"Fail to store mail in IMAP " + e.getMessage(), ExecutionTraceAction.EXECUTION));
"Fail to store mail in IMAP " + e.getMessage(),
ExecutionTraceAction.EXECUTION,
userIds));
Thread.sleep(2000);
}
}
execution.addTrace(
getNewErrorTrace(
"Fail to store mail in IMAP after 3 attempts", ExecutionTraceAction.COMPLETE));
"Fail to store mail in IMAP after 3 attempts",
ExecutionTraceAction.COMPLETE,
userIds));
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.openbas.injectors.lade;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewInfoTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewInfoTrace;

import com.fasterxml.jackson.databind.node.ObjectNode;
import io.openbas.database.model.Execution;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.openbas.injectors.lade.model;

import io.openbas.database.model.ExecutionTraces;
import io.openbas.database.model.ExecutionTrace;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -10,15 +10,15 @@
@Getter
public class LadeWorkflow {

private final List<ExecutionTraces> traces = new ArrayList<>();
private final List<ExecutionTrace> traces = new ArrayList<>();

@Setter private boolean done = false;

@Setter private boolean fail = false;

@Setter private Instant stopTime;

public void addTrace(ExecutionTraces trace) {
public void addTrace(ExecutionTrace trace) {
this.traces.add(trace);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
import com.fasterxml.jackson.databind.node.NullNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.openbas.database.model.Endpoint;
import io.openbas.database.model.ExecutionTrace;
import io.openbas.database.model.ExecutionTraceAction;
import io.openbas.database.model.ExecutionTraces;
import io.openbas.injector_contract.Contract;
import io.openbas.injector_contract.ContractConfig;
import io.openbas.injector_contract.ContractDef;
Expand Down Expand Up @@ -357,11 +357,11 @@ public LadeWorkflow getWorkflowStatus(String workflowId) {
String eventLevel = workflowEvent.get("level").asText();
String message = workflowEvent.get("message").asText();
if (!message.isEmpty() && !message.equals("null")) {
ExecutionTraces trace;
ExecutionTrace trace;
if (eventLevel.equals("error")) {
trace = ExecutionTraces.getNewErrorTrace(message, ExecutionTraceAction.COMPLETE);
trace = ExecutionTrace.getNewErrorTrace(message, ExecutionTraceAction.COMPLETE);
} else {
trace = ExecutionTraces.getNewSuccessTrace(message, ExecutionTraceAction.COMPLETE);
trace = ExecutionTrace.getNewSuccessTrace(message, ExecutionTraceAction.COMPLETE);
}
ladeWorkflow.addTrace(trace);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.openbas.injectors.manual;

import io.openbas.database.model.Execution;
import io.openbas.database.model.ExecutionTrace;
import io.openbas.database.model.ExecutionTraceAction;
import io.openbas.database.model.ExecutionTraces;
import io.openbas.execution.ExecutableInject;
import io.openbas.executors.Injector;
import io.openbas.injectors.manual.model.ManualContent;
Expand Down Expand Up @@ -41,7 +41,7 @@ public ExecutionProcess process(

injectExpectationService.buildAndSaveInjectExpectations(injection, expectations);
execution.addTrace(
ExecutionTraces.getNewSuccessTrace(
ExecutionTrace.getNewSuccessTrace(
"Manual inject execution", ExecutionTraceAction.COMPLETE));
return new ExecutionProcess(false);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.openbas.injectors.mastodon;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewSuccessTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewSuccessTrace;

import io.openbas.database.model.*;
import io.openbas.execution.ExecutableInject;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.openbas.injectors.mastodon.service;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.openbas.database.model.DataAttachment;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.openbas.injectors.openbas;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.model.expectation.DetectionExpectation.*;
import static io.openbas.model.expectation.ManualExpectation.*;
import static io.openbas.model.expectation.PreventionExpectation.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.openbas.injectors.opencti;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.injectors.opencti.OpenCTIContract.OPENCTI_CREATE_CASE;

import io.openbas.database.model.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.openbas.injectors.opencti.service;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewSuccessTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewSuccessTrace;

import io.openbas.database.model.DataAttachment;
import io.openbas.database.model.Execution;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.openbas.injectors.ovh;

import static io.openbas.database.model.ExecutionTraces.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTraces.getNewSuccessTrace;
import static io.openbas.database.model.ExecutionTrace.getNewErrorTrace;
import static io.openbas.database.model.ExecutionTrace.getNewSuccessTrace;
import static org.springframework.util.StringUtils.hasText;

import io.openbas.database.model.Execution;
Expand Down Expand Up @@ -58,7 +58,9 @@ public ExecutionProcess process(
String email = user.getEmail();
if (!StringUtils.hasLength(phone)) {
String message = "Sms fail for " + email + ": no phone number";
execution.addTrace(getNewErrorTrace(message, ExecutionTraceAction.COMPLETE));
execution.addTrace(
getNewErrorTrace(
message, ExecutionTraceAction.COMPLETE, List.of(user.getId())));
} else {
try {
String callResult = smsService.sendSms(context, phone, smsMessage);
Expand All @@ -76,15 +78,20 @@ public ExecutionProcess process(
+ " contains error ("
+ callResult
+ ")";
execution.addTrace(getNewErrorTrace(message, ExecutionTraceAction.COMPLETE));
execution.addTrace(
getNewErrorTrace(
message, ExecutionTraceAction.COMPLETE, List.of(user.getId())));
} else {
String message =
"Sms sent to " + email + " through " + phone + " (" + callResult + ")";
execution.addTrace(getNewSuccessTrace(message, ExecutionTraceAction.COMPLETE));
execution.addTrace(
getNewSuccessTrace(
message, ExecutionTraceAction.COMPLETE, List.of(user.getId())));
}
} catch (Exception e) {
execution.addTrace(
getNewErrorTrace(e.getMessage(), ExecutionTraceAction.COMPLETE));
getNewErrorTrace(
e.getMessage(), ExecutionTraceAction.COMPLETE, List.of(user.getId())));
}
}
});
Expand Down

This file was deleted.

Loading