Skip to content

Commit 344a715

Browse files
committed
Campaign execution can now be cancelled, paused and resumed fixed #2211
1 parent ad7d804 commit 344a715

28 files changed

+773
-178
lines changed

source/src/main/java/org/cerberus/core/api/controllers/wrappers/ResponseWrapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,9 @@ public ResponseWrapper(HttpStatus status, String message) {
7777
}
7878

7979
public ResponseWrapper(HttpStatus status, String message, Throwable ex) {
80-
this(status, ex);
80+
this(status);
8181
this.message = message;
82+
this.debugMessage = ex.getLocalizedMessage();
8283
}
8384

8485
private void addSubError(ISubErrorWrapper subError) {

source/src/main/java/org/cerberus/core/apiprivate/CampaignExecutionPrivateController.java

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,20 @@
4040
import javax.servlet.http.HttpServletRequest;
4141
import java.text.SimpleDateFormat;
4242
import java.util.*;
43+
import lombok.AllArgsConstructor;
44+
import org.cerberus.core.api.controllers.wrappers.ResponseWrapper;
4345
import org.cerberus.core.crud.service.ITagService;
46+
import org.cerberus.core.engine.queuemanagement.IExecutionThreadPoolService;
47+
import org.cerberus.core.util.answer.AnswerItem;
4448
import org.cerberus.core.util.servlet.ServletUtil;
4549

50+
@AllArgsConstructor
4651
@RestController
4752
@RequestMapping("/campaignexecutions/")
4853
public class CampaignExecutionPrivateController {
4954

5055
private static final Logger LOG = LogManager.getLogger(CampaignExecutionPrivateController.class);
56+
private final IExecutionThreadPoolService executionThreadPoolService;
5157
@Autowired
5258
private ITagStatisticService tagStatisticService;
5359
@Autowired
@@ -238,8 +244,12 @@ public ResponseEntity<String> getCampaignStatisticsByCountryEnv(
238244
aggregateListByCampaign.add(value);
239245
String environment = key.split("_")[0];
240246
String country = key.split("_")[1];
241-
if (!environments.contains(environment)) environments.add(environment);
242-
if (!countries.contains(country)) countries.add(country);
247+
if (!environments.contains(environment)) {
248+
environments.add(environment);
249+
}
250+
if (!countries.contains(country)) {
251+
countries.add(country);
252+
}
243253
});
244254

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

288298
}
289299

300+
@PostMapping(path = "{executionId}/cancel", produces = MediaType.APPLICATION_JSON_VALUE)
301+
public ResponseWrapper cancelTag(
302+
@PathVariable("executionId") String tag,
303+
HttpServletRequest request) {
304+
305+
// Calling Servlet Transversal Util.
306+
ServletUtil.servletStart(request);
307+
try {
308+
AnswerItem<Integer> ansNb = tagService.cancelAllExecutions(tag, request.getUserPrincipal().getName());
309+
String message = "";
310+
if (ansNb.getItem() <= 0) {
311+
message = "No queue entries were canceled. Probably all of them were already triggered.";
312+
} else {
313+
message = ansNb.getItem() + " queue entry(ies) was(were) cancelled.";
314+
}
315+
return new ResponseWrapper(HttpStatus.OK, message);
316+
} catch (CerberusException ex) {
317+
LOG.error(ex, ex);
318+
return new ResponseWrapper(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
319+
}
320+
}
321+
322+
@PostMapping(path = "{executionId}/pause", produces = MediaType.APPLICATION_JSON_VALUE)
323+
public ResponseWrapper pauseTag(
324+
@PathVariable("executionId") String tag,
325+
HttpServletRequest request) {
326+
327+
// Calling Servlet Transversal Util.
328+
ServletUtil.servletStart(request);
329+
try {
330+
AnswerItem<Integer> ansNb = tagService.pauseAllExecutions(tag, request.getUserPrincipal().getName());
331+
String message = "";
332+
if (ansNb.getItem() <= 0) {
333+
message = "No queue entries were paused. Probably all of them were already triggered.";
334+
} else {
335+
message = ansNb.getItem() + " queue entry(ies) was(were) paused.";
336+
}
337+
return new ResponseWrapper(HttpStatus.OK, message);
338+
} catch (CerberusException ex) {
339+
LOG.error(ex, ex);
340+
return new ResponseWrapper(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
341+
}
342+
}
343+
344+
@PostMapping(path = "{executionId}/resume", produces = MediaType.APPLICATION_JSON_VALUE)
345+
public ResponseWrapper resumeTag(
346+
@PathVariable("executionId") String tag,
347+
HttpServletRequest request) {
348+
349+
// Calling Servlet Transversal Util.
350+
ServletUtil.servletStart(request);
351+
try {
352+
AnswerItem<Integer> ansNb = tagService.resumeAllExecutions(tag, request.getUserPrincipal().getName());
353+
String message = "";
354+
if (ansNb.getItem() <= 0) {
355+
message = "No queue entry were resumed. No paused queue entry(ies) was(were) found.";
356+
} else {
357+
// executionQueueService.checkAndReleaseQueuedEntry(long1, tCExecution.getTag());
358+
359+
message = ansNb.getItem() + " queue entry(ies) was(were) resumed.";
360+
// After every execution finished we try to trigger more from the queue;-).
361+
executionThreadPoolService.executeNextInQueueAsynchroneously(false);
362+
363+
}
364+
return new ResponseWrapper(HttpStatus.OK, message);
365+
} catch (CerberusException ex) {
366+
LOG.error(ex, ex);
367+
return new ResponseWrapper(HttpStatus.INTERNAL_SERVER_ERROR, ex.getMessage(), ex);
368+
}
369+
}
370+
290371
private List<String> checkMissingFilters(Map<String, Object> filters) {
291372
List<String> missingParameters = new ArrayList<>();
292373
for (Map.Entry<String, Object> filter : filters.entrySet()) {

source/src/main/java/org/cerberus/core/crud/dao/ITagDAO.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,14 @@ public interface ITagDAO {
146146
*/
147147
Answer updateComment(String tag, Tag object);
148148

149+
/**
150+
*
151+
* @param tag
152+
* @param object
153+
* @return
154+
*/
155+
Answer appendComment(String tag, Tag object);
156+
149157
/**
150158
*
151159
* @param tag

source/src/main/java/org/cerberus/core/crud/dao/ITestCaseExecutionQueueDAO.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,39 @@ public interface ITestCaseExecutionQueueDAO {
277277
*/
278278
AnswerItem<Integer> updateToCancelledOldRecord(Integer timeOutInS, String comment);
279279

280+
/**
281+
* This method moves queue State to CANCELLED any queue entry that belong to
282+
* tag and that is still to be executed (QUEUED or QUWITHDEP)
283+
*
284+
* @param tag
285+
* @param user
286+
* @param comment
287+
* @return
288+
*/
289+
AnswerItem<Integer> updateToCancelledPendingRecord(String tag, String user, String comment);
290+
291+
/**
292+
* This method moves queue State to *-PAUSED any queue entry that belong to
293+
* tag and that is still to be executed (QUEUED or QUWITHDEP)
294+
*
295+
* @param tag
296+
* @param user
297+
* @param comment
298+
* @return
299+
*/
300+
AnswerItem<Integer> updateToPausedPendingRecord(String tag, String user, String comment);
301+
302+
/**
303+
* This method removes queue State from -PAUSED any queue entry that belong to
304+
* tag and that has been paused (*-PAUSED)
305+
*
306+
* @param tag
307+
* @param user
308+
* @param comment
309+
* @return
310+
*/
311+
AnswerItem<Integer> updateToNonPausedPendingRecord(String tag, String user, String comment);
312+
280313
/**
281314
* @param id
282315
* @param comment

source/src/main/java/org/cerberus/core/crud/dao/impl/TagDAO.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,35 @@ public Answer updateComment(String tag, Tag object) {
638638
query.append(" WHERE Tag = ?");
639639

640640
LOG.debug("SQL : {}", query);
641-
LOG.debug("SQL.param.tag : {}", object.getTag());
641+
LOG.debug("SQL.param.tag : {}", tag);
642+
LOG.debug("SQL.param.comment : {}", object.getComment());
643+
644+
try (Connection connection = this.databaseSpring.connect(); PreparedStatement preStat = connection.prepareStatement(query.toString())) {
645+
646+
int i = 1;
647+
preStat.setString(i++, object.getComment());
648+
preStat.setString(i++, object.getUsrModif());
649+
preStat.setString(i, tag);
650+
preStat.executeUpdate();
651+
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_OK);
652+
msg.setDescription(msg.getDescription().replace("%ITEM%", OBJECT_NAME).replace("%OPERATION%", "UPDATE"));
653+
} catch (SQLException exception) {
654+
LOG.error("Unable to execute query : {}", exception.toString());
655+
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
656+
msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", exception.toString()));
657+
}
658+
return new Answer(msg);
659+
}
660+
661+
@Override
662+
public Answer appendComment(String tag, Tag object) {
663+
MessageEvent msg;
664+
StringBuilder query = new StringBuilder("UPDATE tag SET comment = trim(concat (comment, ?)), dateModif = NOW(), usrModif= ?");
665+
query.append(" WHERE Tag = ?");
666+
667+
LOG.debug("SQL : {}", query);
668+
LOG.debug("SQL.param.tag : {}", tag);
669+
LOG.debug("SQL.param.comment : {}", object.getComment());
642670

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

0 commit comments

Comments
 (0)