diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java
new file mode 100644
index 0000000..117251e
--- /dev/null
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java
@@ -0,0 +1,16 @@
+package it.fabioformosa.quartzmanager.aspects;
+
+import org.quartz.SchedulerException;
+
+/**
+ *
+ * Notify the progress of the trigger to all consumers
+ *
+ * @author Fabio Formosa
+ *
+ */
+public interface ProgressNotifier {
+
+ void send() throws SchedulerException;
+
+}
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdater.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdater.java
deleted file mode 100644
index cee2e98..0000000
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdater.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package it.fabioformosa.quartzmanager.aspects;
-
-import org.quartz.SchedulerException;
-
-public interface ProgressUpdater {
-
- void update() throws SchedulerException;
-
-}
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java
similarity index 64%
rename from quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java
rename to quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java
index 791d444..dcf0b20 100644
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressUpdaterImpl.java
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java
@@ -11,12 +11,19 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.stereotype.Component;
-import it.fabioformosa.quartzmanager.dto.TriggerProgress;
+import it.fabioformosa.quartzmanager.dto.TriggerStatus;
import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor;
+/**
+ *
+ * Notify the progress of the trigger through websocket
+ *
+ * @author Fabio Formosa
+ *
+ */
//@Aspect
@Component
-public class ProgressUpdaterImpl implements ProgressUpdater {
+public class WebSocketProgressNotifier implements ProgressNotifier {
@Autowired
private SimpMessageSendingOperations messagingTemplate;
@@ -34,13 +41,13 @@ public class ProgressUpdaterImpl implements ProgressUpdater {
// }
@Override
- public void update() throws SchedulerException {
- TriggerProgress progress = new TriggerProgress();
+ public void send() throws SchedulerException {
+ TriggerStatus currTriggerStatus = new TriggerStatus();
Trigger trigger = scheduler.getTrigger(triggerMonitor.getTrigger().getKey());
- progress.setFinalFireTime(trigger.getFinalFireTime());
- progress.setNextFireTime(trigger.getNextFireTime());
- progress.setPreviousFireTime(trigger.getPreviousFireTime());
+ currTriggerStatus.setFinalFireTime(trigger.getFinalFireTime());
+ currTriggerStatus.setNextFireTime(trigger.getNextFireTime());
+ currTriggerStatus.setPreviousFireTime(trigger.getPreviousFireTime());
int timesTriggered = 0;
int repeatCount = 0;
@@ -57,13 +64,13 @@ public class ProgressUpdaterImpl implements ProgressUpdater {
Trigger jobTrigger = triggerMonitor.getTrigger();
if (jobTrigger != null && jobTrigger.getJobKey() != null) {
- progress.setJobKey(jobTrigger.getJobKey().getName());
- progress.setJobClass(jobTrigger.getClass().getSimpleName());
- progress.setTimesTriggered(timesTriggered);
- progress.setRepeatCount(repeatCount + 1);
+ currTriggerStatus.setJobKey(jobTrigger.getJobKey().getName());
+ currTriggerStatus.setJobClass(jobTrigger.getClass().getSimpleName());
+ currTriggerStatus.setTimesTriggered(timesTriggered);
+ currTriggerStatus.setRepeatCount(repeatCount + 1);
}
- messagingTemplate.convertAndSend("/topic/progress", progress);
+ messagingTemplate.convertAndSend("/topic/progress", currTriggerStatus);
}
}
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java
index f7f7eed..f1a2ac0 100644
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java
@@ -15,11 +15,11 @@ import lombok.extern.slf4j.Slf4j;
@Api(value = "Healthy Check")
public class QuartzManagerController {
- @ResponseStatus(code = HttpStatus.OK)
- @GetMapping("/")
- public void healthyCheck() {
- log.debug("Healthy check called");
- }
+ @ResponseStatus(code = HttpStatus.OK)
+ @GetMapping("/")
+ public void healthyCheck() {
+ log.debug("Healthy check called");
+ }
}
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java
index 13152ab..35242fc 100644
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/SchedulerController.java
@@ -24,7 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import it.fabioformosa.quartzmanager.dto.SchedulerConfigParam;
-import it.fabioformosa.quartzmanager.dto.TriggerProgress;
+import it.fabioformosa.quartzmanager.dto.TriggerStatus;
import it.fabioformosa.quartzmanager.enums.SchedulerStates;
import it.fabioformosa.quartzmanager.scheduler.TriggerMonitor;
@@ -63,9 +63,9 @@ public class SchedulerController {
}
@GetMapping("/progress")
- public TriggerProgress getProgressInfo() throws SchedulerException {
+ public TriggerStatus getProgressInfo() throws SchedulerException {
log.trace("SCHEDULER - GET PROGRESS INFO");
- TriggerProgress progress = new TriggerProgress();
+ TriggerStatus progress = new TriggerStatus();
SimpleTriggerImpl jobTrigger = (SimpleTriggerImpl) scheduler.getTrigger(triggerMonitor.getTrigger().getKey());
if (jobTrigger != null && jobTrigger.getJobKey() != null) {
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/dto/TriggerProgress.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/dto/TriggerStatus.java
similarity index 97%
rename from quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/dto/TriggerProgress.java
rename to quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/dto/TriggerStatus.java
index 3b663be..2e24a40 100644
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/dto/TriggerProgress.java
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/dto/TriggerStatus.java
@@ -2,7 +2,7 @@ package it.fabioformosa.quartzmanager.dto;
import java.util.Date;
-public class TriggerProgress {
+public class TriggerStatus {
private int timesTriggered;
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java
index 0911526..a55378b 100644
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java
@@ -10,7 +10,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
-import it.fabioformosa.quartzmanager.aspects.ProgressUpdater;
+import it.fabioformosa.quartzmanager.aspects.ProgressNotifier;
import it.fabioformosa.quartzmanager.jobs.entities.LogRecord;
/**
@@ -28,7 +28,7 @@ public abstract class AbstractLoggingJob implements Job {
private SimpMessageSendingOperations messagingTemplate;
@Resource
- private ProgressUpdater progressUpdater;
+ private ProgressNotifier progressNotifier;
/**
*
@@ -42,7 +42,7 @@ public abstract class AbstractLoggingJob implements Job {
try {
LogRecord logMsg = doIt(jobExecutionContext);
logAndSend(logMsg);
- progressUpdater.update();
+ progressNotifier.send();
} catch (SchedulerException e) {
log.error("Error updating progress " + e.getMessage());
}
diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/TokenHelper.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/TokenHelper.java
index 692f1fa..6576838 100644
--- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/TokenHelper.java
+++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/TokenHelper.java
@@ -26,133 +26,133 @@ import lombok.extern.slf4j.Slf4j;
@Component
public class TokenHelper {
- @Value("${app.name}")
- private String APP_NAME;
+ @Value("${app.name}")
+ private String APP_NAME;
- @Value("${jwt.secret}")
- private String SECRET;
+ @Value("${jwt.secret}")
+ private String SECRET;
- @Value("${jwt.expires_in_sec}")
- private int EXPIRES_IN_SEC;
+ @Value("${jwt.expires_in_sec}")
+ private int EXPIRES_IN_SEC;
- @Value("${jwt.header}")
- private String AUTH_HEADER;
+ @Value("${jwt.header}")
+ private String AUTH_HEADER;
- @Value("${jwt.cookie}")
- private String AUTH_COOKIE;
+ @Value("${jwt.cookie}")
+ private String AUTH_COOKIE;
- // @Autowired
- // UserDetailsService userDetailsService;
+ // @Autowired
+ // UserDetailsService userDetailsService;
- private SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS512;
+ private SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS512;
- public Boolean canTokenBeRefreshed(String token) {
- try {
- final Date expirationDate = getClaimsFromToken(token).getExpiration();
- // String username = getUsernameFromToken(token);
- // UserDetails userDetails = userDetailsService.loadUserByUsername(username);
- return expirationDate.compareTo(generateCurrentDate()) > 0;
- } catch (Exception e) {
- return false;
- }
- }
+ public Boolean canTokenBeRefreshed(String token) {
+ try {
+ final Date expirationDate = getClaimsFromToken(token).getExpiration();
+ // String username = getUsernameFromToken(token);
+ // UserDetails userDetails = userDetailsService.loadUserByUsername(username);
+ return expirationDate.compareTo(generateCurrentDate()) > 0;
+ } catch (Exception e) {
+ return false;
+ }
+ }
- public String generateToken(String username) {
- return Jwts.builder()
- .setIssuer(APP_NAME)
- .setSubject(username)
- .setIssuedAt(generateCurrentDate())
- .setExpiration(generateExpirationDate())
- .signWith(SIGNATURE_ALGORITHM, SECRET)
- .compact();
- }
+ private Date generateCurrentDate() {
+ return new Date(getCurrentTimeMillis());
+ }
- /**
- * Find a specific HTTP cookie in a request.
- *
- * @param request
- * The HTTP request object.
- * @param name
- * The cookie name to look for.
- * @return The cookie, or null if not found.
- */
- public Cookie getCookieValueByName(HttpServletRequest request, String name) {
- if (request.getCookies() == null)
- return null;
- for (int i = 0; i < request.getCookies().length; i++)
- if (request.getCookies()[i].getName().equals(name))
- return request.getCookies()[i];
- return null;
- }
+ private Date generateExpirationDate() {
+ return new Date(getCurrentTimeMillis() + EXPIRES_IN_SEC * 1000);
+ }
- public String getToken( HttpServletRequest request ) {
- Cookie authCookie = getCookieValueByName( request, AUTH_COOKIE );
- if ( authCookie != null )
- return authCookie.getValue();
+ String generateToken(Map claims) {
+ return Jwts.builder()
+ .setClaims(claims)
+ .setExpiration(generateExpirationDate())
+ .signWith( SIGNATURE_ALGORITHM, SECRET )
+ .compact();
+ }
- String authHeader = request.getHeader(AUTH_HEADER);
- if ( authHeader != null && authHeader.startsWith("Bearer "))
- return authHeader.substring(7);
+ public String generateToken(String username) {
+ return Jwts.builder()
+ .setIssuer(APP_NAME)
+ .setSubject(username)
+ .setIssuedAt(generateCurrentDate())
+ .setExpiration(generateExpirationDate())
+ .signWith(SIGNATURE_ALGORITHM, SECRET)
+ .compact();
+ }
- return null;
- }
+ private Claims getClaimsFromToken(String token) {
+ Claims claims;
+ try {
+ claims = Jwts.parser()
+ .setSigningKey(SECRET)
+ .parseClaimsJws(token)
+ .getBody();
+ } catch (Exception e) {
+ claims = null;
+ log.error("Error getting claims from jwt token due to " + e.getMessage(), e);
+ }
+ return claims;
+ }
- public String getUsernameFromToken(String token) {
- String username;
- try {
- final Claims claims = getClaimsFromToken(token);
- username = claims.getSubject();
- } catch (Exception e) {
- username = null;
- log.error("Error getting claims from jwt token due to " + e.getMessage(), e);
- }
- return username;
- }
+ /**
+ * Find a specific HTTP cookie in a request.
+ *
+ * @param request
+ * The HTTP request object.
+ * @param name
+ * The cookie name to look for.
+ * @return The cookie, or null if not found.
+ */
+ public Cookie getCookieValueByName(HttpServletRequest request, String name) {
+ if (request.getCookies() == null)
+ return null;
+ for (int i = 0; i < request.getCookies().length; i++)
+ if (request.getCookies()[i].getName().equals(name))
+ return request.getCookies()[i];
+ return null;
+ }
- public String refreshToken(String token) {
- String refreshedToken;
- try {
- final Claims claims = getClaimsFromToken(token);
- claims.setIssuedAt(generateCurrentDate());
- refreshedToken = generateToken(claims);
- } catch (Exception e) {
- log.error("Error refreshing jwt token due to " + e.getMessage(), e);
- refreshedToken = null;
- }
- return refreshedToken;
- }
+ private long getCurrentTimeMillis() {
+ return DateTime.now().getMillis();
+ }
- private Date generateCurrentDate() {
- return new Date(getCurrentTimeMillis());
- }
+ public String getToken( HttpServletRequest request ) {
+ Cookie authCookie = getCookieValueByName( request, AUTH_COOKIE );
+ if ( authCookie != null )
+ return authCookie.getValue();
- private Date generateExpirationDate() {
- return new Date(getCurrentTimeMillis() + EXPIRES_IN_SEC * 1000);
- }
+ String authHeader = request.getHeader(AUTH_HEADER);
+ if ( authHeader != null && authHeader.startsWith("Bearer "))
+ return authHeader.substring(7);
- private Claims getClaimsFromToken(String token) {
- Claims claims;
- try {
- claims = Jwts.parser()
- .setSigningKey(SECRET)
- .parseClaimsJws(token)
- .getBody();
- } catch (Exception e) {
- claims = null;
- log.error("Error getting claims from jwt token due to " + e.getMessage(), e);
- }
- return claims;
- }
+ return null;
+ }
- private long getCurrentTimeMillis() {
- return DateTime.now().getMillis();
- }
+ public String getUsernameFromToken(String token) {
+ String username;
+ try {
+ final Claims claims = getClaimsFromToken(token);
+ username = claims.getSubject();
+ } catch (Exception e) {
+ username = null;
+ log.error("Error getting claims from jwt token due to " + e.getMessage(), e);
+ }
+ return username;
+ }
- String generateToken(Map claims) {
- return Jwts.builder()
- .setClaims(claims)
- .setExpiration(generateExpirationDate())
- .signWith( SIGNATURE_ALGORITHM, SECRET )
- .compact();
- }
+ public String refreshToken(String token) {
+ String refreshedToken;
+ try {
+ final Claims claims = getClaimsFromToken(token);
+ claims.setIssuedAt(generateCurrentDate());
+ refreshedToken = generateToken(claims);
+ } catch (Exception e) {
+ log.error("Error refreshing jwt token due to " + e.getMessage(), e);
+ refreshedToken = null;
+ }
+ return refreshedToken;
+ }
}
diff --git a/quartz-manager-api/src/main/resources/logback.xml b/quartz-manager-api/src/main/resources/logback.xml
index dbcf85d..9977078 100644
--- a/quartz-manager-api/src/main/resources/logback.xml
+++ b/quartz-manager-api/src/main/resources/logback.xml
@@ -15,6 +15,9 @@
+
+
+