Skip to content

Commit 579cc69

Browse files
committed
Fix deployment
1 parent c8b208d commit 579cc69

File tree

5 files changed

+208
-174
lines changed

5 files changed

+208
-174
lines changed

analytics/src/main/java/io/sentrius/agent/services/AgentFeedbackClient.java

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
package io.sentrius.agent.services;
22

3+
import io.sentrius.sso.core.dto.UserDTO;
4+
import io.sentrius.sso.core.dto.agents.AgentExecution;
35
import io.sentrius.sso.core.dto.feedback.AgentFeedbackDTO;
46
import io.sentrius.sso.core.dto.feedback.FeedbackSubmissionDTO;
7+
import io.sentrius.sso.core.exceptions.ZtatException;
58
import io.sentrius.sso.core.feedback.FeedbackType;
9+
import io.sentrius.sso.core.services.agents.AgentClientService;
10+
import io.sentrius.sso.core.services.agents.AgentExecutionService;
11+
import io.sentrius.sso.core.services.agents.ZeroTrustClientService;
12+
import io.sentrius.sso.core.utils.JsonUtil;
613
import lombok.extern.slf4j.Slf4j;
14+
import org.springframework.beans.factory.annotation.Value;
715
import org.springframework.http.*;
816
import org.springframework.stereotype.Service;
917
import org.springframework.web.client.RestTemplate;
@@ -18,15 +26,26 @@
1826
@Slf4j
1927
@Service
2028
public class AgentFeedbackClient {
29+
30+
private final AgentExecution agentExecution;
31+
@Value("${agent.api.url:http://localhost:8080}")
32+
private String apiUrl;
33+
34+
@Value("${agents.analytics.name:analytics-agent}")
35+
private String agentName;
36+
37+
private final AgentExecutionService agentExecutionService;
38+
private final ZeroTrustClientService zeroTrustClientService;
2139

22-
private final RestTemplate restTemplate;
23-
private final String apiBaseUrl;
24-
private final TokenProvider tokenProvider;
25-
26-
public AgentFeedbackClient(RestTemplate restTemplate, String apiBaseUrl, TokenProvider tokenProvider) {
27-
this.restTemplate = restTemplate;
28-
this.apiBaseUrl = apiBaseUrl;
29-
this.tokenProvider = tokenProvider;
40+
public AgentFeedbackClient(AgentExecutionService agentExecutionService, ZeroTrustClientService zeroTrustClientService) {
41+
this.agentExecutionService = agentExecutionService;
42+
this.zeroTrustClientService = zeroTrustClientService;
43+
44+
UserDTO user = UserDTO.builder()
45+
.username(agentName)
46+
.build();
47+
48+
agentExecution = agentExecutionService.getAgentExecution(user);
3049
}
3150

3251
/**
@@ -37,66 +56,44 @@ public AgentFeedbackDTO submitFeedback(
3756
FeedbackType feedbackType,
3857
String feedbackText,
3958
String behaviorCategory,
40-
String context) {
41-
42-
String url = apiBaseUrl + "/api/v1/feedback/submit";
59+
String context) throws ZtatException {
4360

61+
String url = "/api/v1/feedback/submit";
62+
4463
FeedbackSubmissionDTO submission = FeedbackSubmissionDTO.builder()
4564
.agentId(agentId)
4665
.feedbackType(feedbackType)
4766
.feedbackText(feedbackText)
4867
.behaviorCategory(behaviorCategory)
4968
.context(context)
5069
.build();
51-
52-
HttpHeaders headers = new HttpHeaders();
53-
headers.setContentType(MediaType.APPLICATION_JSON);
54-
headers.setBearerAuth(tokenProvider.getToken());
55-
56-
HttpEntity<FeedbackSubmissionDTO> request = new HttpEntity<>(submission, headers);
57-
58-
try {
59-
ResponseEntity<AgentFeedbackDTO> response = restTemplate.exchange(
60-
url, HttpMethod.POST, request, AgentFeedbackDTO.class
61-
);
62-
63-
log.info("Feedback submitted: agentId={}, type={}, id={}",
64-
agentId, feedbackType, response.getBody().getId());
65-
66-
return response.getBody();
67-
} catch (Exception e) {
68-
log.error("Failed to submit feedback: {}", e.getMessage(), e);
69-
throw new RuntimeException("Failed to submit feedback", e);
70-
}
70+
71+
72+
73+
var resp = zeroTrustClientService.callPostOnApi(url, submission);
74+
75+
AgentFeedbackDTO responseBody = JsonUtil.MAPPER.convertValue(resp, AgentFeedbackDTO.class);
76+
77+
log.info("Feedback submitted: agentId={}, type={}, id={}",
78+
agentId, feedbackType, responseBody.getId());
79+
80+
return responseBody;
7181
}
7282

7383
/**
7484
* Get feedback statistics for this agent.
7585
*/
76-
public Map<String, Object> getFeedbackStatistics(String agentId, int days) {
77-
String url = apiBaseUrl + "/api/v1/feedback/agent/" + agentId + "/statistics?days=" + days;
78-
79-
HttpHeaders headers = new HttpHeaders();
80-
headers.setBearerAuth(tokenProvider.getToken());
81-
82-
HttpEntity<Void> request = new HttpEntity<>(headers);
83-
84-
try {
85-
ResponseEntity<Map> response = restTemplate.exchange(
86-
url, HttpMethod.GET, request, Map.class
87-
);
88-
89-
return (Map<String, Object>) response.getBody();
90-
} catch (Exception e) {
91-
log.error("Failed to get feedback statistics: {}", e.getMessage(), e);
92-
throw new RuntimeException("Failed to get feedback statistics", e);
93-
}
86+
public Map<String, Object> getFeedbackStatistics(String agentId, int days) throws ZtatException {
87+
String url = "/api/v1/feedback/agent/" + agentId + "/statistics?days=" + days;
88+
89+
String resp = zeroTrustClientService.callAuthenticatedGetOnApi(apiUrl, url);
90+
return JsonUtil.MAPPER.convertValue(resp, Map.class);
9491
}
9592

9693
/**
9794
* Get feedback score for this agent (0-100).
9895
*/
99-
public Double getFeedbackScore(String agentId) {
96+
public Double getFeedbackScore(String agentId) throws ZtatException {
10097
Map<String, Object> stats = getFeedbackStatistics(agentId, 30);
10198
Object scoreObj = stats.get("feedback_score");
10299

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
CREATE TABLE IF NOT EXISTS agent_feedback (
2+
id BIGSERIAL PRIMARY KEY,
3+
4+
agent_id VARCHAR(255) NOT NULL,
5+
agent_name VARCHAR(255),
6+
7+
feedback_type VARCHAR(50) NOT NULL,
8+
9+
feedback_text TEXT NOT NULL,
10+
context TEXT,
11+
12+
action_id VARCHAR(255),
13+
14+
trust_impact INTEGER,
15+
16+
provided_by VARCHAR(255) NOT NULL,
17+
18+
timestamp TIMESTAMP NOT NULL,
19+
20+
processed BOOLEAN NOT NULL DEFAULT FALSE,
21+
22+
behavior_category VARCHAR(100),
23+
24+
reinforcement_weight DOUBLE PRECISION
25+
);
26+
27+
-- Indexes
28+
CREATE INDEX IF NOT EXISTS idx_agent_feedback_agent_id
29+
ON agent_feedback(agent_id);
30+
31+
CREATE INDEX IF NOT EXISTS idx_agent_feedback_timestamp
32+
ON agent_feedback(timestamp);
33+
34+
CREATE INDEX IF NOT EXISTS idx_agent_feedback_type
35+
ON agent_feedback(feedback_type);
36+
37+
CREATE INDEX IF NOT EXISTS idx_agent_feedback_processed
38+
ON agent_feedback(processed);

docker/sentrius/demoInstaller.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ npes:
4040
authorizationType:
4141
userTypeName: agentType
4242
atlpDefinition: behavior-risk-openai
43+
- username: service-account-ssh-agent
44+
name: SSH Agent(s)
45+
authorizationType:
46+
userTypeName: agentType
47+
atlpDefinition: behavior-risk-openai
4348
rules:
4449
- displayName: deleteRule
4550
ruleClass: io.sentrius.sso.automation.auditing.rules.DeletePrevention

enterprise-agent/src/main/java/io/sentrius/agent/services/AgentFeedbackClient.java

Lines changed: 59 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
package io.sentrius.agent.services;
22

3+
import io.sentrius.sso.core.dto.UserDTO;
4+
import io.sentrius.sso.core.dto.agents.AgentExecution;
35
import io.sentrius.sso.core.dto.feedback.AgentFeedbackDTO;
46
import io.sentrius.sso.core.dto.feedback.FeedbackSubmissionDTO;
7+
import io.sentrius.sso.core.exceptions.ZtatException;
58
import io.sentrius.sso.core.feedback.FeedbackType;
9+
import io.sentrius.sso.core.services.agents.AgentClientService;
10+
import io.sentrius.sso.core.services.agents.AgentExecutionService;
11+
import io.sentrius.sso.core.services.agents.ZeroTrustClientService;
12+
import io.sentrius.sso.core.utils.JsonUtil;
613
import lombok.extern.slf4j.Slf4j;
14+
import org.springframework.beans.factory.annotation.Value;
715
import org.springframework.http.*;
816
import org.springframework.stereotype.Service;
917
import org.springframework.web.client.RestTemplate;
@@ -18,95 +26,84 @@
1826
@Slf4j
1927
@Service
2028
public class AgentFeedbackClient {
21-
22-
private final RestTemplate restTemplate;
23-
private final String apiBaseUrl;
24-
private final TokenProvider tokenProvider;
25-
26-
public AgentFeedbackClient(RestTemplate restTemplate, String apiBaseUrl, TokenProvider tokenProvider) {
27-
this.restTemplate = restTemplate;
28-
this.apiBaseUrl = apiBaseUrl;
29-
this.tokenProvider = tokenProvider;
29+
30+
private final AgentExecution agentExecution;
31+
@Value("${agent.api.url:http://localhost:8080}")
32+
private String apiUrl;
33+
34+
@Value("${agents.analytics.name:analytics-agent}")
35+
private String agentName;
36+
37+
private final AgentExecutionService agentExecutionService;
38+
private final ZeroTrustClientService zeroTrustClientService;
39+
40+
public AgentFeedbackClient(AgentExecutionService agentExecutionService, ZeroTrustClientService zeroTrustClientService) {
41+
this.agentExecutionService = agentExecutionService;
42+
this.zeroTrustClientService = zeroTrustClientService;
43+
44+
UserDTO user = UserDTO.builder()
45+
.username(agentName)
46+
.build();
47+
48+
agentExecution = agentExecutionService.getAgentExecution(user);
3049
}
31-
50+
3251
/**
3352
* Submit feedback for this agent.
3453
*/
3554
public AgentFeedbackDTO submitFeedback(
36-
String agentId,
37-
FeedbackType feedbackType,
38-
String feedbackText,
39-
String behaviorCategory,
40-
String context) {
41-
42-
String url = apiBaseUrl + "/api/v1/feedback/submit";
43-
55+
String agentId,
56+
FeedbackType feedbackType,
57+
String feedbackText,
58+
String behaviorCategory,
59+
String context) throws ZtatException {
60+
61+
String url = "/api/v1/feedback/submit";
62+
4463
FeedbackSubmissionDTO submission = FeedbackSubmissionDTO.builder()
4564
.agentId(agentId)
4665
.feedbackType(feedbackType)
4766
.feedbackText(feedbackText)
4867
.behaviorCategory(behaviorCategory)
4968
.context(context)
5069
.build();
51-
52-
HttpHeaders headers = new HttpHeaders();
53-
headers.setContentType(MediaType.APPLICATION_JSON);
54-
headers.setBearerAuth(tokenProvider.getToken());
55-
56-
HttpEntity<FeedbackSubmissionDTO> request = new HttpEntity<>(submission, headers);
57-
58-
try {
59-
ResponseEntity<AgentFeedbackDTO> response = restTemplate.exchange(
60-
url, HttpMethod.POST, request, AgentFeedbackDTO.class
61-
);
62-
63-
log.info("Feedback submitted: agentId={}, type={}, id={}",
64-
agentId, feedbackType, response.getBody().getId());
65-
66-
return response.getBody();
67-
} catch (Exception e) {
68-
log.error("Failed to submit feedback: {}", e.getMessage(), e);
69-
throw new RuntimeException("Failed to submit feedback", e);
70-
}
70+
71+
72+
73+
var resp = zeroTrustClientService.callPostOnApi(url, submission);
74+
75+
AgentFeedbackDTO responseBody = JsonUtil.MAPPER.convertValue(resp, AgentFeedbackDTO.class);
76+
77+
log.info("Feedback submitted: agentId={}, type={}, id={}",
78+
agentId, feedbackType, responseBody.getId());
79+
80+
return responseBody;
7181
}
72-
82+
7383
/**
7484
* Get feedback statistics for this agent.
7585
*/
76-
public Map<String, Object> getFeedbackStatistics(String agentId, int days) {
77-
String url = apiBaseUrl + "/api/v1/feedback/agent/" + agentId + "/statistics?days=" + days;
78-
79-
HttpHeaders headers = new HttpHeaders();
80-
headers.setBearerAuth(tokenProvider.getToken());
81-
82-
HttpEntity<Void> request = new HttpEntity<>(headers);
83-
84-
try {
85-
ResponseEntity<Map> response = restTemplate.exchange(
86-
url, HttpMethod.GET, request, Map.class
87-
);
88-
89-
return (Map<String, Object>) response.getBody();
90-
} catch (Exception e) {
91-
log.error("Failed to get feedback statistics: {}", e.getMessage(), e);
92-
throw new RuntimeException("Failed to get feedback statistics", e);
93-
}
86+
public Map<String, Object> getFeedbackStatistics(String agentId, int days) throws ZtatException {
87+
String url = "/api/v1/feedback/agent/" + agentId + "/statistics?days=" + days;
88+
89+
String resp = zeroTrustClientService.callAuthenticatedGetOnApi(apiUrl, url);
90+
return JsonUtil.MAPPER.convertValue(resp, Map.class);
9491
}
95-
92+
9693
/**
9794
* Get feedback score for this agent (0-100).
9895
*/
99-
public Double getFeedbackScore(String agentId) {
96+
public Double getFeedbackScore(String agentId) throws ZtatException {
10097
Map<String, Object> stats = getFeedbackStatistics(agentId, 30);
10198
Object scoreObj = stats.get("feedback_score");
102-
99+
103100
if (scoreObj instanceof Number) {
104101
return ((Number) scoreObj).doubleValue();
105102
}
106-
103+
107104
return 50.0; // Default neutral score
108105
}
109-
106+
110107
/**
111108
* Interface for providing authentication tokens.
112109
*/

0 commit comments

Comments
 (0)