Skip to content

Commit 299f5ab

Browse files
committed
Merge remote-tracking branch 'origin/release/7.0.0-rev2' into NAE-2092_old_user
2 parents 12a7ef7 + 2ef1e0a commit 299f5ab

21 files changed

Lines changed: 155 additions & 2209 deletions

File tree

application-engine/src/main/groovy/com/netgrif/application/engine/petrinet/domain/dataset/logic/action/FieldActionsRunner.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.netgrif.application.engine.petrinet.domain.dataset.logic.action
33
import com.netgrif.application.engine.business.IPostalCodeService
44
import com.netgrif.application.engine.business.orsr.IOrsrService
55
import com.netgrif.application.engine.importer.service.FieldFactory
6+
import com.netgrif.application.engine.objects.event.events.event.ActionStartEvent
7+
import com.netgrif.application.engine.objects.event.events.event.ActionStopEvent
68
import com.netgrif.application.engine.workflow.service.interfaces.IFieldActionsCacheService
79
import com.netgrif.application.engine.objects.petrinet.domain.Function
810
import com.netgrif.application.engine.objects.workflow.domain.Case
@@ -12,6 +14,7 @@ import org.slf4j.Logger
1214
import org.slf4j.LoggerFactory
1315
import org.springframework.beans.factory.annotation.Autowired
1416
import org.springframework.beans.factory.annotation.Lookup
17+
import org.springframework.context.ApplicationEventPublisher
1518
import org.springframework.stereotype.Component
1619

1720
@Component
@@ -35,6 +38,9 @@ abstract class FieldActionsRunner {
3538
@Autowired
3639
private IFieldActionsCacheService actionsCacheService
3740

41+
@Autowired
42+
private ApplicationEventPublisher publisher
43+
3844
private Map<String, Object> actionsCache = new HashMap<>()
3945

4046
List<EventOutcome> run(com.netgrif.application.engine.objects.petrinet.domain.dataset.logic.action.Action action, Case useCase, Map<String, String> params, List<Function> functions = []) {
@@ -47,11 +53,15 @@ abstract class FieldActionsRunner {
4753

4854
log.debug("Action: $action")
4955
def code = getActionCode(action, functions)
56+
final ActionStartEvent actionStart = new ActionStartEvent(action)
5057
try {
58+
publisher.publishEvent(actionStart)
5159
code.init(action, useCase, task, this, params)
5260
code()
61+
publisher.publishEvent(new ActionStopEvent(action, actionStart, true))
5362
} catch (Exception e) {
5463
log.error("Action: $action.definition")
64+
publisher.publishEvent(new ActionStopEvent(action, actionStart, false))
5565
throw e
5666
}
5767
return ((ActionDelegate) code.delegate).outcomes
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.netgrif.application.engine.event.dispatchers;
2+
3+
4+
import com.netgrif.application.engine.objects.event.dispatchers.common.AbstractDispatcher;
5+
6+
import com.netgrif.application.engine.objects.event.events.event.ActionStartEvent;
7+
import com.netgrif.application.engine.objects.event.events.event.ActionStopEvent;
8+
import org.springframework.context.event.EventListener;
9+
import org.springframework.stereotype.Component;
10+
11+
import java.util.Set;
12+
13+
@Component
14+
public class ActionDispatcher extends AbstractDispatcher {
15+
protected ActionDispatcher() {
16+
super(Set.of(ActionStartEvent.class, ActionStopEvent.class));
17+
}
18+
19+
@EventListener
20+
public void handleActionStartEvent(ActionStartEvent event) {
21+
dispatch(event);
22+
}
23+
24+
@EventListener
25+
public void handleAsyncActionStartEvent(ActionStartEvent event) {
26+
dispatchAsync(event);
27+
}
28+
29+
@EventListener
30+
public void handleActionStopEvent(ActionStopEvent event) {
31+
dispatch(event);
32+
}
33+
34+
@EventListener
35+
public void handleAsyncActionStopEvent(ActionStopEvent event) {
36+
dispatchAsync(event);
37+
}
38+
}

application-engine/src/main/java/com/netgrif/application/engine/impersonation/service/ImpersonationService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.netgrif.application.engine.objects.auth.domain.LoggedUser;
77
import com.netgrif.application.engine.auth.service.UserService;
88
import com.netgrif.application.engine.configuration.properties.ImpersonationProperties;
9+
import com.netgrif.application.engine.objects.event.RunPhase;
910
import com.netgrif.application.engine.objects.event.events.user.ImpersonationEvent;
1011
import com.netgrif.application.engine.objects.event.events.user.ImpersonationPhase;
1112
import com.netgrif.application.engine.impersonation.domain.Impersonator;
@@ -90,7 +91,7 @@ protected LoggedUser doImpersonate(LoggedUser loggedUser, LoggedUser impersonate
9091
securityContextService.saveToken(loggedUser.getId());
9192
securityContextService.reloadSecurityContext(loggedUser);
9293
log.info(loggedUser.getFullName() + " has just impersonated user " + impersonatedLogged.getFullName());
93-
publisher.publishEvent(new ImpersonationEvent(loggedUser, impersonatedLogged, ImpersonationPhase.START));
94+
publisher.publishEvent(new ImpersonationEvent(loggedUser, impersonatedLogged, RunPhase.START));
9495
return loggedUser;
9596
}
9697

@@ -122,15 +123,15 @@ public LoggedUser endImpersonation(LoggedUser impersonator) {
122123
log.info(impersonator.getFullName() + " has stopped impersonating user " + impersonated.getFullName());
123124
securityContextService.saveToken(impersonator.getId());
124125
securityContextService.reloadSecurityContext(impersonator);
125-
publisher.publishEvent(new ImpersonationEvent(impersonator, impersonated, ImpersonationPhase.STOP));
126+
publisher.publishEvent(new ImpersonationEvent(impersonator, impersonated, RunPhase.STOP));
126127
return impersonator;
127128
}
128129

129130
@Override
130131
public void onSessionDestroy(LoggedUser impersonator) {
131132
removeImpersonator(impersonator.getId());
132133
log.info(impersonator.getFullName() + " has logged out and stopped impersonating user " + impersonator.getImpersonated().getFullName());
133-
publisher.publishEvent(new ImpersonationEvent(impersonator, impersonator.getImpersonated(), ImpersonationPhase.STOP));
134+
publisher.publishEvent(new ImpersonationEvent(impersonator, impersonator.getImpersonated(), RunPhase.STOP));
134135
}
135136

136137
@Override

application-engine/src/main/resources/logback.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
<conversionRule conversionWord="wEx"
99
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
1010
<property name="CONSOLE_LOG_PATTERN"
11-
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
11+
value="${CONSOLE_LOG_PATTERN:-%clr(time=){yellow}%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(level=){yellow}%clr(${LOG_LEVEL_PATTERN:-%-5p}) %clr(pid=){yellow}%clr(${PID:- }){magenta} %clr(thread=){yellow}%clr(%-15.15t){faint} %clr(logger=){yellow}%clr(%-40.40logger{39}){cyan} %clr(msg=){yellow}%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
1212
<property name="FILE_LOG_PATTERN"
13-
value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
13+
value="${FILE_LOG_PATTERN:-time=%d{yyyy-MM-dd HH:mm:ss.SSS} level=${LOG_LEVEL_PATTERN:-%5p} pid=${PID:- } thread=%t logger=%-40.40logger{39} msg=%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
1414

1515
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
1616
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.netgrif.application.engine.objects.event;
2+
3+
public enum RunPhase {
4+
START,
5+
STOP
6+
}

nae-object-library/src/main/java/com/netgrif/application/engine/objects/event/events/Event.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public Event(Object source) {
2323
public Event(Object source, EventPhase eventPhase) {
2424
super(source);
2525
this.eventPhase = eventPhase;
26+
this.time = LocalDateTime.now();
2627
}
2728

2829
public abstract String getMessage();
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.netgrif.application.engine.objects.event.events.event;
2+
3+
import com.netgrif.application.engine.objects.event.RunPhase;
4+
import com.netgrif.application.engine.objects.event.events.Event;
5+
import com.netgrif.application.engine.objects.petrinet.domain.dataset.logic.action.Action;
6+
import lombok.Getter;
7+
import org.bson.types.ObjectId;
8+
9+
import java.util.Map;
10+
11+
@Getter
12+
public abstract class ActionEvent extends Event {
13+
14+
private final String importId;
15+
private final ObjectId id;
16+
private final Map<String, String> fieldIds;
17+
private final Map<String, String> transitionIds;
18+
private RunPhase phase;
19+
20+
21+
public ActionEvent(Action action) {
22+
super(action);
23+
this.importId = action.getImportId();
24+
this.id = action.getId();
25+
this.fieldIds = action.getFieldIds();
26+
this.transitionIds = action.getTransitionIds();
27+
}
28+
29+
protected void setPhase(RunPhase phase) {
30+
this.phase = phase;
31+
}
32+
33+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.netgrif.application.engine.objects.event.events.event;
2+
3+
import com.netgrif.application.engine.objects.event.RunPhase;
4+
import com.netgrif.application.engine.objects.petrinet.domain.dataset.logic.action.Action;
5+
import com.netgrif.application.engine.objects.petrinet.domain.events.DataEventType;
6+
import lombok.Getter;
7+
8+
@Getter
9+
public class ActionStartEvent extends ActionEvent {
10+
11+
private final DataEventType trigger;
12+
13+
public ActionStartEvent(Action action) {
14+
super(action);
15+
this.trigger = action.getTrigger();
16+
setPhase(RunPhase.START);
17+
}
18+
19+
@Override
20+
public String getMessage() {
21+
return String.format("ActionStartEvent: %s [%s] %s", trigger, getId(), getPhase());
22+
}
23+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.netgrif.application.engine.objects.event.events.event;
2+
3+
import com.netgrif.application.engine.objects.event.RunPhase;
4+
import com.netgrif.application.engine.objects.petrinet.domain.dataset.logic.action.Action;
5+
import lombok.Getter;
6+
7+
import java.time.Duration;
8+
import java.time.LocalDateTime;
9+
10+
@Getter
11+
public class ActionStopEvent extends ActionStartEvent {
12+
13+
private final boolean success;
14+
private final long totalDuration;
15+
16+
public ActionStopEvent(Action action, ActionStartEvent startEvent, boolean success) {
17+
super(action);
18+
setPhase(RunPhase.STOP);
19+
this.success = success;
20+
this.totalDuration = calculateExecutionDuration(startEvent.getTime());
21+
}
22+
23+
@Override
24+
public String getMessage() {
25+
return String.format("ActionStopEvent: %s [%s] %s", getTrigger(), getId(), getPhase());
26+
}
27+
28+
private long calculateExecutionDuration(LocalDateTime start) {
29+
Duration duration = Duration.between(start, this.getTime());
30+
return duration.toMillis();
31+
}
32+
33+
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
package com.netgrif.application.engine.objects.event.events.user;
22

33
import com.netgrif.application.engine.objects.auth.domain.LoggedUser;
4+
import com.netgrif.application.engine.objects.event.RunPhase;
45
import lombok.Getter;
56

67
public class ImpersonationEvent extends UserEvent {
78

89
@Getter
910
private LoggedUser impersonated;
1011

11-
private final ImpersonationPhase impersonationPhase;
12+
private final RunPhase runPhase;
1213

13-
public ImpersonationEvent(LoggedUser user, LoggedUser impersonated, ImpersonationPhase impersonationPhase) {
14+
public ImpersonationEvent(LoggedUser user, LoggedUser impersonated, RunPhase runPhase) {
1415
super(user);
1516
this.impersonated = impersonated;
16-
this.impersonationPhase = impersonationPhase;
17+
this.runPhase = runPhase;
1718
}
1819

1920
@Override
2021
public String getMessage() {
21-
return "User " + user.getUsername() + " is impersonating: " + impersonated.getUsername() + " phase: " + impersonationPhase;
22+
return "User " + user.getUsername() + " is impersonating: " + impersonated.getUsername() + " phase: " + runPhase;
2223
}
2324
}

0 commit comments

Comments
 (0)