Skip to content

Commit

Permalink
Campaign execution can now be cancelled, paused and resumed fixed #2211
Browse files Browse the repository at this point in the history
  • Loading branch information
vertigo17 committed Feb 12, 2025
1 parent ad7d804 commit 344a715
Show file tree
Hide file tree
Showing 28 changed files with 773 additions and 178 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@ public ResponseWrapper(HttpStatus status, String message) {
}

public ResponseWrapper(HttpStatus status, String message, Throwable ex) {
this(status, ex);
this(status);
this.message = message;
this.debugMessage = ex.getLocalizedMessage();
}

private void addSubError(ISubErrorWrapper subError) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,20 @@
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
import lombok.AllArgsConstructor;
import org.cerberus.core.api.controllers.wrappers.ResponseWrapper;
import org.cerberus.core.crud.service.ITagService;
import org.cerberus.core.engine.queuemanagement.IExecutionThreadPoolService;
import org.cerberus.core.util.answer.AnswerItem;
import org.cerberus.core.util.servlet.ServletUtil;

@AllArgsConstructor
@RestController
@RequestMapping("/campaignexecutions/")
public class CampaignExecutionPrivateController {

private static final Logger LOG = LogManager.getLogger(CampaignExecutionPrivateController.class);
private final IExecutionThreadPoolService executionThreadPoolService;
@Autowired
private ITagStatisticService tagStatisticService;
@Autowired
Expand Down Expand Up @@ -238,8 +244,12 @@ public ResponseEntity<String> getCampaignStatisticsByCountryEnv(
aggregateListByCampaign.add(value);
String environment = key.split("_")[0];
String country = key.split("_")[1];
if (!environments.contains(environment)) environments.add(environment);
if (!countries.contains(country)) countries.add(country);
if (!environments.contains(environment)) {
environments.add(environment);
}
if (!countries.contains(country)) {
countries.add(country);
}
});

response.put("campaignStatistics", aggregateListByCampaign);
Expand Down Expand Up @@ -287,6 +297,77 @@ public String updateUndeclareFalseNegative(

}

@PostMapping(path = "{executionId}/cancel", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper cancelTag(
@PathVariable("executionId") String tag,
HttpServletRequest request) {

// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
try {
AnswerItem<Integer> ansNb = tagService.cancelAllExecutions(tag, request.getUserPrincipal().getName());
String message = "";
if (ansNb.getItem() <= 0) {
message = "No queue entries were canceled. Probably all of them were already triggered.";
} else {
message = ansNb.getItem() + " queue entry(ies) was(were) cancelled.";
}
return new ResponseWrapper(HttpStatus.OK, message);
} catch (CerberusException ex) {
LOG.error(ex, ex);
return new ResponseWrapper(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
}
}

@PostMapping(path = "{executionId}/pause", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper pauseTag(
@PathVariable("executionId") String tag,
HttpServletRequest request) {

// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
try {
AnswerItem<Integer> ansNb = tagService.pauseAllExecutions(tag, request.getUserPrincipal().getName());
String message = "";
if (ansNb.getItem() <= 0) {
message = "No queue entries were paused. Probably all of them were already triggered.";
} else {
message = ansNb.getItem() + " queue entry(ies) was(were) paused.";
}
return new ResponseWrapper(HttpStatus.OK, message);
} catch (CerberusException ex) {
LOG.error(ex, ex);
return new ResponseWrapper(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
}
}

@PostMapping(path = "{executionId}/resume", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseWrapper resumeTag(
@PathVariable("executionId") String tag,
HttpServletRequest request) {

// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
try {
AnswerItem<Integer> ansNb = tagService.resumeAllExecutions(tag, request.getUserPrincipal().getName());
String message = "";
if (ansNb.getItem() <= 0) {
message = "No queue entry were resumed. No paused queue entry(ies) was(were) found.";
} else {
// executionQueueService.checkAndReleaseQueuedEntry(long1, tCExecution.getTag());

message = ansNb.getItem() + " queue entry(ies) was(were) resumed.";
// After every execution finished we try to trigger more from the queue;-).
executionThreadPoolService.executeNextInQueueAsynchroneously(false);

}
return new ResponseWrapper(HttpStatus.OK, message);
} catch (CerberusException ex) {
LOG.error(ex, ex);
return new ResponseWrapper(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
}
}

private List<String> checkMissingFilters(Map<String, Object> filters) {
List<String> missingParameters = new ArrayList<>();
for (Map.Entry<String, Object> filter : filters.entrySet()) {
Expand Down
8 changes: 8 additions & 0 deletions source/src/main/java/org/cerberus/core/crud/dao/ITagDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,14 @@ public interface ITagDAO {
*/
Answer updateComment(String tag, Tag object);

/**
*
* @param tag
* @param object
* @return
*/
Answer appendComment(String tag, Tag object);

/**
*
* @param tag
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,39 @@ public interface ITestCaseExecutionQueueDAO {
*/
AnswerItem<Integer> updateToCancelledOldRecord(Integer timeOutInS, String comment);

/**
* This method moves queue State to CANCELLED any queue entry that belong to
* tag and that is still to be executed (QUEUED or QUWITHDEP)
*
* @param tag
* @param user
* @param comment
* @return
*/
AnswerItem<Integer> updateToCancelledPendingRecord(String tag, String user, String comment);

/**
* This method moves queue State to *-PAUSED any queue entry that belong to
* tag and that is still to be executed (QUEUED or QUWITHDEP)
*
* @param tag
* @param user
* @param comment
* @return
*/
AnswerItem<Integer> updateToPausedPendingRecord(String tag, String user, String comment);

/**
* This method removes queue State from -PAUSED any queue entry that belong to
* tag and that has been paused (*-PAUSED)
*
* @param tag
* @param user
* @param comment
* @return
*/
AnswerItem<Integer> updateToNonPausedPendingRecord(String tag, String user, String comment);

/**
* @param id
* @param comment
Expand Down
30 changes: 29 additions & 1 deletion source/src/main/java/org/cerberus/core/crud/dao/impl/TagDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,35 @@ public Answer updateComment(String tag, Tag object) {
query.append(" WHERE Tag = ?");

LOG.debug("SQL : {}", query);
LOG.debug("SQL.param.tag : {}", object.getTag());
LOG.debug("SQL.param.tag : {}", tag);
LOG.debug("SQL.param.comment : {}", object.getComment());

try (Connection connection = this.databaseSpring.connect(); PreparedStatement preStat = connection.prepareStatement(query.toString())) {

int i = 1;
preStat.setString(i++, object.getComment());
preStat.setString(i++, object.getUsrModif());
preStat.setString(i, tag);
preStat.executeUpdate();
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_OK);
msg.setDescription(msg.getDescription().replace("%ITEM%", OBJECT_NAME).replace("%OPERATION%", "UPDATE"));
} catch (SQLException exception) {
LOG.error("Unable to execute query : {}", exception.toString());
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", exception.toString()));
}
return new Answer(msg);
}

@Override
public Answer appendComment(String tag, Tag object) {
MessageEvent msg;
StringBuilder query = new StringBuilder("UPDATE tag SET comment = trim(concat (comment, ?)), dateModif = NOW(), usrModif= ?");
query.append(" WHERE Tag = ?");

LOG.debug("SQL : {}", query);
LOG.debug("SQL.param.tag : {}", tag);
LOG.debug("SQL.param.comment : {}", object.getComment());

try (Connection connection = this.databaseSpring.connect(); PreparedStatement preStat = connection.prepareStatement(query.toString())) {

Expand Down
Loading

0 comments on commit 344a715

Please sign in to comment.