Skip to content

Commit 39925e0

Browse files
committed
update
1 parent f57ad47 commit 39925e0

File tree

41 files changed

+326
-131
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+326
-131
lines changed

.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
SENTRIUS_VERSION=1.0.2
1+
SENTRIUS_VERSION=1.0.4
22
SENTRIUS_SSH_VERSION=1.0.1
33
SENTRIUS_KEYCLOAK_VERSION=1.0.1
4-
SENTRIUS_AGENT_VERSION=1.0.5
4+
SENTRIUS_AGENT_VERSION=1.0.8

analyagents/pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@
4848
<artifactId>junit-jupiter-params</artifactId>
4949
<scope>test</scope>
5050
</dependency>
51+
<dependency>
52+
<groupId>org.postgresql</groupId>
53+
<artifactId>postgresql</artifactId>
54+
<version>${postgresql-version}</version>
55+
</dependency>
56+
<dependency>
57+
<groupId>org.flywaydb</groupId>
58+
<artifactId>flyway-database-postgresql</artifactId>
59+
</dependency>
5160
<dependency>
5261
<groupId>org.projectlombok</groupId>
5362
<artifactId>lombok</artifactId>

analyagents/src/main/java/io/sentrius/agent/analysis/Agent.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55
import org.springframework.boot.autoconfigure.domain.EntityScan;
66
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
7+
import org.springframework.scheduling.annotation.EnableScheduling;
78

89

910
@SpringBootApplication(scanBasePackages = {"io.sentrius.agent", "io.sentrius.sso"})
10-
//@ComponentScan(basePackages = {"io.sentrius.sso"})
1111
@EnableJpaRepositories(basePackages = {"io.sentrius.sso.core.data", "io.sentrius.sso.core.repository"})
12-
@EntityScan(basePackages = {"io.sentrius.sso.core.model", "io.sentrius.sentrius.ai.model"}) // Replace with
13-
// your
14-
// actual entity package
12+
@EntityScan(basePackages = {"io.sentrius.sso.core.model", "io.sentrius.sentrius.ai.model"})
13+
@EnableScheduling
1514
public class Agent {
1615
public static void main(String[] args) {
17-
SpringApplication.run(Agent.class, args);
18-
}
19-
16+
SpringApplication.run(Agent.class, args);
2017
}
18+
}

analyagents/src/main/java/io/sentrius/agent/analysis/agents/sessions/SessionAnalyticsAgent.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.sentrius.agent.analysis.agents.sessions;
22

33
import java.util.List;
4+
import java.util.Set;
45
import java.util.stream.Collectors;
56
import io.sentrius.sso.core.model.metadata.AnalyticsTracking;
67
import io.sentrius.sso.core.model.metadata.TerminalBehaviorMetrics;
@@ -14,6 +15,7 @@
1415
import io.sentrius.sso.core.services.metadata.TerminalRiskIndicatorService;
1516
import io.sentrius.sso.core.services.metadata.TerminalSessionMetadataService;
1617
import io.sentrius.sso.core.services.metadata.UserExperienceMetricsService;
18+
import jakarta.transaction.Transactional;
1719
import lombok.RequiredArgsConstructor;
1820
import lombok.extern.slf4j.Slf4j;
1921
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -33,44 +35,42 @@ public class SessionAnalyticsAgent {
3335
private final UserExperienceMetricsService experienceMetricsService;
3436
private final AnalyticsTrackingRepository trackingRepository;
3537

36-
37-
@Scheduled(fixedRate = 60000) // Runs every 60 seconds
38+
@Scheduled(fixedDelay = 60000) // Waits 60 seconds after the previous run completes
39+
@Transactional
3840
public void processSessions() {
3941
log.info("Processing unprocessed sessions...");
42+
43+
// Fetch already processed session IDs in bulk
44+
Set<Long> processedSessionIds = trackingRepository.findAllSessionIds();
4045
List<TerminalSessionMetadata> unprocessedSessions = sessionService.getAllSessions().stream()
41-
.filter(session -> !trackingRepository.existsBySessionId(session.getId()))
46+
.filter(session -> !processedSessionIds.contains(session.getId()))
4247
.collect(Collectors.toList());
4348

4449
for (TerminalSessionMetadata session : unprocessedSessions) {
4550
try {
4651
processSession(session);
4752
saveToTracking(session.getId(), "PROCESSED");
4853
} catch (Exception e) {
54+
log.error("Error processing session {}: {}", session.getId(), e.getMessage(), e);
4955
saveToTracking(session.getId(), "ERROR");
50-
e.printStackTrace();
5156
}
5257
}
5358
}
5459

5560
private void processSession(TerminalSessionMetadata session) {
5661
List<TerminalCommand> commands = commandService.getCommandsBySessionId(session.getId());
62+
if (commands == null) {
63+
commands = List.of(); // Ensure it's not null
64+
}
5765

58-
// Compute behavioral metrics
5966
TerminalBehaviorMetrics behaviorMetrics = behaviorMetricsService.computeMetricsForSession(session);
60-
61-
// Assess risk indicators
6267
TerminalRiskIndicator riskIndicators = riskIndicatorService.computeRiskIndicators(session, commands);
63-
64-
// Evaluate user experience metrics
6568
UserExperienceMetrics experienceMetrics = experienceMetricsService.calculateExperienceMetrics(
6669
session.getUser(), session, commands
6770
);
6871

69-
// Optionally log or store results
70-
System.out.println("Processed session " + session.getId() + ":");
71-
System.out.println("Behavior Metrics: " + behaviorMetrics);
72-
System.out.println("Risk Indicators: " + riskIndicators);
73-
System.out.println("Experience Metrics: " + experienceMetrics);
72+
log.info("Processed session {}: Behavior Metrics: {}, Risk Indicators: {}, Experience Metrics: {}",
73+
session.getId(), behaviorMetrics, riskIndicators, experienceMetrics);
7474
}
7575

7676
private void saveToTracking(Long sessionId, String status) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
package io.sentrius.agent.analysis.api;
22

3+
import io.sentrius.agent.analysis.model.AgentStatus;
34
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.web.bind.annotation.GetMapping;
47
import org.springframework.web.bind.annotation.RequestMapping;
58
import org.springframework.web.bind.annotation.RestController;
69

710
@Slf4j
811
@RestController
912
@RequestMapping("/api/v1/agent")
1013
public class AgentController {
14+
15+
16+
@GetMapping("/status")
17+
public ResponseEntity<AgentStatus> getStatus() {
18+
return ResponseEntity.ok(AgentStatus.builder().status("UP").version("1.0.0").health("OK").build());
19+
}
20+
1121
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package io.sentrius.agent.analysis.model;
2+
3+
import lombok.Builder;
4+
import lombok.Data;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@Data
9+
@Builder
10+
public class AgentStatus {
11+
12+
private String status;
13+
private String version;
14+
private String health;
15+
16+
public AgentStatus(String status, String version, String health) {
17+
this.status = status;
18+
this.version = version;
19+
this.health = health;
20+
}
21+
22+
public String getStatus() {
23+
return status;
24+
}
25+
26+
public String getVersion() {
27+
return version;
28+
}
29+
30+
public String getHealth() {
31+
return health;
32+
}
33+
34+
public void setStatus(String status) {
35+
this.status = status;
36+
}
37+
38+
public void setVersion(String version) {
39+
this.version = version;
40+
}
41+
42+
public void setHealth(String health) {
43+
this.health = health;
44+
}
45+
46+
@Override
47+
public String toString() {
48+
return "AgentStatus{" +
49+
"status='" + status + '\'' +
50+
", version='" + version + '\'' +
51+
", health='" + health + '\'' +
52+
'}';
53+
}
54+
}
Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,37 @@
1+
keystore.file=sso.jceks
2+
keystore.password=keystorepassword
13

4+
keystore.alias=KEYBOX-ENCRYPTION_KEY
5+
keystore.algorithm=AES
26

37
spring.main.web-application-type=servlet
48
spring.thymeleaf.enabled=true
59
spring.freemarker.enabled=false
610

711
#flyway configuration
8-
spring.flyway.enabled=true
9-
#spring.flyway.locations=classpath:db/postgres/ # Ensure this path matches your project structure
12+
spring.flyway.enabled=false
1013
spring.flyway.baseline-on-migrate=true
1114

12-
# Thymeleaf settings
13-
spring.thymeleaf.prefix=classpath:/templates/
14-
spring.thymeleaf.suffix=.html
15-
1615
## h2 database
1716

17+
spring.datasource.url=jdbc:postgresql://home.guard.local:5432/sentrius
18+
spring.datasource.username=postgres
19+
spring.datasource.password=password
20+
spring.datasource.driver-class-name=org.postgresql.Driver
21+
22+
# Connection pool settings
23+
spring.datasource.hikari.maximum-pool-size=10
24+
spring.datasource.hikari.minimum-idle=5
25+
spring.datasource.hikari.idle-timeout=30000
26+
spring.datasource.hikari.max-lifetime=1800000
27+
28+
# Hibernate settings (optional, for JPA)
29+
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
1830

1931

2032
## Logging
2133

22-
logging.level.org.springframework.web=INFO
34+
logging.level.org.springframework.web=DEBUG
2335
logging.level.org.springframework.security=INFO
2436
logging.level.io.sentrius=DEBUG
2537

@@ -28,16 +40,21 @@ logging.level.org.thymeleaf=INFO
2840
spring.thymeleaf.servlet.produce-partial-output-while-processing=false
2941

3042
spring.servlet.multipart.enabled=true
31-
spring.servlet.multipart.max-file-size=10MB
43+
spring.servlet.multipart.max-file-size=10MB
3244
spring.servlet.multipart.max-request-size=10MB
3345

46+
3447
server.error.whitelabel.enabled=false
3548

36-
sentrius.api.endpoint=https://localhost:8080/api/v1/
3749

38-
#OAUTH2_API_BASE_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}
39-
#OAUTH2_AUTHORIZATION_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/protocol/openid-connect/auth
40-
#OAUTH2_SERVER_METADATA_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/.well-known/openid-configuration
41-
#OAUTH2_TOKEN_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/protocol/openid-connect/token
42-
#OAUTH2_USERINFO_ENDPOINT=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/protocol/openid-connect/userinfo
4350

51+
keycloak.realm=sentrius
52+
53+
spring.security.oauth2.client.registration.keycloak.client-id=sentrius-api
54+
spring.security.oauth2.client.registration.keycloak.client-secret=nGkEukexSWTvDzYjSkDmeUlM0FJ5Jhh0
55+
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
56+
spring.security.oauth2.client.registration.keycloak.redirect-uri=http://192.168.1.162:8080/login/oauth2/code/keycloak
57+
spring.security.oauth2.client.registration.keycloak.scope=openid,profile,email
58+
59+
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://192.168.1.162:8180/realms/sentrius
60+
spring.security.oauth2.client.provider.keycloak.issuer-uri=http://192.168.1.162:8180/realms/sentrius

analyagents/sso.jceks

4 KB
Binary file not shown.
3.05 KB
Binary file not shown.
Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,37 @@
1+
keystore.file=sso.jceks
2+
keystore.password=keystorepassword
13

4+
keystore.alias=KEYBOX-ENCRYPTION_KEY
5+
keystore.algorithm=AES
26

37
spring.main.web-application-type=servlet
48
spring.thymeleaf.enabled=true
59
spring.freemarker.enabled=false
610

711
#flyway configuration
8-
spring.flyway.enabled=true
9-
#spring.flyway.locations=classpath:db/postgres/ # Ensure this path matches your project structure
12+
spring.flyway.enabled=false
1013
spring.flyway.baseline-on-migrate=true
1114

12-
# Thymeleaf settings
13-
spring.thymeleaf.prefix=classpath:/templates/
14-
spring.thymeleaf.suffix=.html
15-
1615
## h2 database
1716

17+
spring.datasource.url=jdbc:postgresql://home.guard.local:5432/sentrius
18+
spring.datasource.username=postgres
19+
spring.datasource.password=password
20+
spring.datasource.driver-class-name=org.postgresql.Driver
21+
22+
# Connection pool settings
23+
spring.datasource.hikari.maximum-pool-size=10
24+
spring.datasource.hikari.minimum-idle=5
25+
spring.datasource.hikari.idle-timeout=30000
26+
spring.datasource.hikari.max-lifetime=1800000
27+
28+
# Hibernate settings (optional, for JPA)
29+
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
1830

1931

2032
## Logging
2133

22-
logging.level.org.springframework.web=INFO
34+
logging.level.org.springframework.web=DEBUG
2335
logging.level.org.springframework.security=INFO
2436
logging.level.io.sentrius=DEBUG
2537

@@ -28,16 +40,21 @@ logging.level.org.thymeleaf=INFO
2840
spring.thymeleaf.servlet.produce-partial-output-while-processing=false
2941

3042
spring.servlet.multipart.enabled=true
31-
spring.servlet.multipart.max-file-size=10MB
43+
spring.servlet.multipart.max-file-size=10MB
3244
spring.servlet.multipart.max-request-size=10MB
3345

46+
3447
server.error.whitelabel.enabled=false
3548

36-
sentrius.api.endpoint=https://localhost:8080/api/v1/
3749

38-
#OAUTH2_API_BASE_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}
39-
#OAUTH2_AUTHORIZATION_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/protocol/openid-connect/auth
40-
#OAUTH2_SERVER_METADATA_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/.well-known/openid-configuration
41-
#OAUTH2_TOKEN_URL=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/protocol/openid-connect/token
42-
#OAUTH2_USERINFO_ENDPOINT=${SCHEME}://keycloak.${HOST}:${PORT}/realms/${REALM}/protocol/openid-connect/userinfo
4350

51+
keycloak.realm=sentrius
52+
53+
spring.security.oauth2.client.registration.keycloak.client-id=sentrius-api
54+
spring.security.oauth2.client.registration.keycloak.client-secret=nGkEukexSWTvDzYjSkDmeUlM0FJ5Jhh0
55+
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
56+
spring.security.oauth2.client.registration.keycloak.redirect-uri=http://192.168.1.162:8080/login/oauth2/code/keycloak
57+
spring.security.oauth2.client.registration.keycloak.scope=openid,profile,email
58+
59+
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://192.168.1.162:8180/realms/sentrius
60+
spring.security.oauth2.client.provider.keycloak.issuer-uri=http://192.168.1.162:8180/realms/sentrius

0 commit comments

Comments
 (0)