├── README.md
├── .idea
├── vcs.xml
└── .gitignore
├── src
└── main
│ ├── java
│ └── io
│ │ └── bitdive
│ │ └── mcpserver
│ │ ├── dto
│ │ ├── hierarchy_method
│ │ │ ├── data
│ │ │ │ ├── FindClassAndMethodBetweenDateDTO.java
│ │ │ │ ├── MessageKafkaParentMethodUIDto.java
│ │ │ │ ├── ModuleUIDto.java
│ │ │ │ ├── ModuleRepositoryDTO.java
│ │ │ │ ├── InPointUIDto.java
│ │ │ │ ├── ClassNameUIDto.java
│ │ │ │ ├── ServiceUIDto.java
│ │ │ │ ├── MessageKafkaCallTimeUIDto.java
│ │ │ │ ├── CallMethodQueueSendRepositoryDTO.java
│ │ │ │ ├── CallMethodUIDto.java
│ │ │ │ ├── CallMethodSqlRepositoryDTO.java
│ │ │ │ ├── CallMethodQueueSendDTO.java
│ │ │ │ ├── CallMethodSqlDTO.java
│ │ │ │ ├── CallMethodRestDTO.java
│ │ │ │ ├── CallMethodRestRepositoryDTO.java
│ │ │ │ ├── CallMethodRepositoryDTO.java
│ │ │ │ └── CallMethodDTO.java
│ │ │ ├── HierarchyMethodAlertUI.java
│ │ │ ├── CallNodeUIDto.java
│ │ │ ├── SQLCall.java
│ │ │ ├── QueueCall.java
│ │ │ ├── RestCall.java
│ │ │ ├── HierarchyMethodUIDto.java
│ │ │ └── heap_map
│ │ │ │ ├── InPointAnalyticsDTO.java
│ │ │ │ ├── ClassAnalyticsDTO.java
│ │ │ │ ├── ModuleAnalyticsDTO.java
│ │ │ │ ├── ServiceAnalyticsDTO.java
│ │ │ │ └── AnalyticsBaseDTO.java
│ │ └── last_call
│ │ │ ├── LastCallModuleAndServiceDTO.java
│ │ │ └── LastCallReturn.java
│ │ ├── db
│ │ ├── entity
│ │ │ ├── CallMethodQueueSendEntity.java
│ │ │ ├── CallMethodSql.java
│ │ │ ├── CallMethodRest.java
│ │ │ ├── ServiceNodeForModule.java
│ │ │ ├── CallMethod.java
│ │ │ ├── ModuleCallAnalytics.java
│ │ │ ├── ServiceCallAnalytics.java
│ │ │ ├── ClassCallAnalytics.java
│ │ │ └── InPointCallAnalytics.java
│ │ └── repository
│ │ │ ├── ClassCallAnalyticsRepository.java
│ │ │ ├── ModuleCallAnalyticsRepository.java
│ │ │ ├── InPointCallAnalyticsRepository.java
│ │ │ ├── ServiceCallAnalyticsRepository.java
│ │ │ ├── ServiceNodeForModuleRepository.java
│ │ │ ├── CallMethodSqlRepository.java
│ │ │ ├── CallMethodQueueSendRepository.java
│ │ │ ├── CallMethodRestRepository.java
│ │ │ └── CallMethodRepository.java
│ │ ├── McpServerApplication.java
│ │ ├── utils
│ │ ├── UserViewModule.java
│ │ ├── HierarchySearcher.java
│ │ ├── FinalConvertObject.java
│ │ ├── HierarchyUtils.java
│ │ ├── CallMethodConverter.java
│ │ └── UtilsCovert.java
│ │ ├── config
│ │ ├── ToolCallbackConfig.java
│ │ └── McpKeepAliveConfig.java
│ │ ├── component
│ │ ├── PiiMaskClientComponent.java
│ │ ├── LastCallComponent.java
│ │ ├── MonitoringHeapMapComponent.java
│ │ ├── MonitoringComponent.java
│ │ ├── InPointProvider.java
│ │ └── AnalyticsService.java
│ │ └── service
│ │ ├── LastCallTools.java
│ │ ├── TraceTools.java
│ │ └── HeadMapTools.java
│ └── resources
│ └── application.yml
├── HELP.md
├── pom.xml
├── mvnw.cmd
├── mvnw
└── LICENSE
/README.md:
--------------------------------------------------------------------------------
1 | # mcp-server
2 | bitdive mcp server for conenction with AI
3 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 | # Datasource local storage ignored files
7 | /dataSources/
8 | /dataSources.local.xml
9 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/FindClassAndMethodBetweenDateDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import java.util.UUID;
4 |
5 | public interface FindClassAndMethodBetweenDateDTO {
6 | UUID getInPointMessageId();
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/MessageKafkaParentMethodUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | @Getter
7 | @Setter
8 | public class MessageKafkaParentMethodUIDto {
9 | private String UUIDParent;
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/HierarchyMethodAlertUI.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @Builder
8 | public class HierarchyMethodAlertUI {
9 | private String alertValue=null;
10 | private Boolean alertMeaning=false;
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/ModuleUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | import java.util.Set;
7 |
8 | @Getter
9 | @AllArgsConstructor
10 | public class ModuleUIDto {
11 | private String name;
12 | private Set serviceUI;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/ModuleRepositoryDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | public interface ModuleRepositoryDTO {
4 |
5 | String getModule();
6 |
7 | String getService();
8 |
9 | String getClassName();
10 |
11 | String getMethod();
12 |
13 | Boolean getIsInPoint();
14 |
15 | Long getInPointId();
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/CallNodeUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 |
7 | import java.util.List;
8 |
9 | @Getter
10 | @Setter
11 | @Builder
12 | public class CallNodeUIDto {
13 | private String methodName;
14 | private String className;
15 | private Double callTime;
16 | private List children;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/InPointUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.EqualsAndHashCode;
5 | import lombok.Getter;
6 |
7 | @Getter
8 | @EqualsAndHashCode
9 | @AllArgsConstructor
10 | public class InPointUIDto {
11 | @EqualsAndHashCode.Exclude
12 | private Long inPointId;
13 | private String inPointName;
14 | private Boolean IsInPoint;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/ClassNameUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.EqualsAndHashCode;
5 | import lombok.Getter;
6 |
7 | import java.util.Set;
8 |
9 | @Getter
10 | @AllArgsConstructor
11 | @EqualsAndHashCode
12 | public class ClassNameUIDto {
13 | @EqualsAndHashCode.Exclude
14 | private String name;
15 | private Set inPointUI;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/ServiceUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.EqualsAndHashCode;
5 | import lombok.Getter;
6 |
7 | import java.util.Set;
8 |
9 | @Getter
10 | @AllArgsConstructor
11 | @EqualsAndHashCode
12 | public class ServiceUIDto {
13 | @EqualsAndHashCode.Exclude
14 | private String name;
15 | private Set classNameUI;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/last_call/LastCallModuleAndServiceDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.last_call;
2 |
3 | import java.time.Instant;
4 | import java.util.UUID;
5 |
6 | public interface LastCallModuleAndServiceDTO {
7 | public UUID getMessageId();
8 |
9 | public String getModuleName();
10 |
11 | public String getServiceName();
12 |
13 | public String getClassName();
14 |
15 | public String getMethodName();
16 |
17 | public Instant getCallDateTime();
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/CallMethodQueueSendEntity.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Entity;
4 | import jakarta.persistence.Id;
5 | import jakarta.persistence.Table;
6 | import org.hibernate.annotations.JdbcTypeCode;
7 | import org.hibernate.type.SqlTypes;
8 |
9 | import java.util.UUID;
10 |
11 | @Entity
12 | @Table(name = "call_method_queue_send")
13 | public class CallMethodQueueSendEntity {
14 | @Id
15 | @JdbcTypeCode(SqlTypes.CHAR)
16 | private UUID id;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/repository/ClassCallAnalyticsRepository.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.repository;
2 |
3 | import io.bitdive.mcpserver.db.entity.ClassCallAnalytics;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.List;
8 |
9 | public interface ClassCallAnalyticsRepository extends JpaRepository {
10 | List findByAnalysisTimestampBetween(OffsetDateTime start, OffsetDateTime end);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/CallMethodSql.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Entity;
4 | import jakarta.persistence.Id;
5 | import jakarta.persistence.Table;
6 | import lombok.Getter;
7 | import org.hibernate.annotations.JdbcTypeCode;
8 | import org.hibernate.type.SqlTypes;
9 |
10 | import java.util.UUID;
11 |
12 | @Entity
13 | @Getter
14 | @Table(name = "call_method_sql")
15 | public class CallMethodSql {
16 | @Id
17 | @JdbcTypeCode(SqlTypes.CHAR)
18 | private UUID id;
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/repository/ModuleCallAnalyticsRepository.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.repository;
2 |
3 | import io.bitdive.mcpserver.db.entity.ModuleCallAnalytics;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.List;
8 |
9 | public interface ModuleCallAnalyticsRepository extends JpaRepository {
10 | List findByAnalysisTimestampBetween(OffsetDateTime start, OffsetDateTime end);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/repository/InPointCallAnalyticsRepository.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.repository;
2 |
3 | import io.bitdive.mcpserver.db.entity.InPointCallAnalytics;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.List;
8 |
9 | public interface InPointCallAnalyticsRepository extends JpaRepository {
10 | List findByAnalysisTimestampBetween(OffsetDateTime start, OffsetDateTime end);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/CallMethodRest.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Entity;
4 | import jakarta.persistence.Id;
5 | import jakarta.persistence.Table;
6 | import lombok.Getter;
7 | import org.hibernate.annotations.JdbcTypeCode;
8 | import org.hibernate.type.SqlTypes;
9 |
10 | import java.util.UUID;
11 |
12 | @Entity
13 | @Getter
14 | @Table(name = "call_method_rest")
15 | public class CallMethodRest {
16 | @Id
17 | @JdbcTypeCode(SqlTypes.CHAR)
18 | private UUID id;
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/repository/ServiceCallAnalyticsRepository.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.repository;
2 |
3 | import io.bitdive.mcpserver.db.entity.ServiceCallAnalytics;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.List;
8 |
9 | public interface ServiceCallAnalyticsRepository extends JpaRepository {
10 | List findByAnalysisTimestampBetween(OffsetDateTime start, OffsetDateTime end);
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/MessageKafkaCallTimeUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 | import lombok.NoArgsConstructor;
6 | import lombok.Setter;
7 |
8 | import java.time.LocalDateTime;
9 |
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | @Getter
13 | @Setter
14 | public class MessageKafkaCallTimeUIDto {
15 | private LocalDateTime dateStart;
16 | private LocalDateTime dateEnd;
17 | private long deltaCall;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/SQLCall.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.UUID;
8 |
9 | @Getter
10 | @Builder
11 | public class SQLCall {
12 | private UUID messageId;
13 | private String sql;
14 | private OffsetDateTime callTimeDateStart;
15 | private OffsetDateTime callTimeDateEnd;
16 | private Double callTimeDelta;
17 | private String errorCallMessage;
18 | private String libraryVersion;
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/ServiceNodeForModule.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Entity;
4 | import jakarta.persistence.Id;
5 | import jakarta.persistence.Table;
6 | import lombok.Getter;
7 | import lombok.Setter;
8 | import org.hibernate.annotations.JdbcTypeCode;
9 | import org.hibernate.type.SqlTypes;
10 |
11 | import java.util.UUID;
12 |
13 | @Getter
14 | @Setter
15 | @Entity
16 | @Table(name = "service_node_for_module")
17 | public class ServiceNodeForModule {
18 | @Id
19 | @JdbcTypeCode(SqlTypes.CHAR)
20 | private UUID id;
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/last_call/LastCallReturn.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.last_call;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Builder;
5 | import lombok.Getter;
6 |
7 | import java.time.Instant;
8 | import java.time.OffsetDateTime;
9 | import java.util.UUID;
10 |
11 | @AllArgsConstructor
12 | @Getter
13 | public class LastCallReturn {
14 | private UUID traceId;
15 | private String moduleName;
16 | private String serviceName;
17 | private String className;
18 | private String methodName;
19 | private OffsetDateTime callDateTime;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/McpServerApplication.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver;
2 |
3 | import org.springframework.ai.mcp.server.autoconfigure.McpServerAutoConfiguration;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 | import org.springframework.scheduling.annotation.EnableScheduling;
7 | import reactor.core.publisher.Hooks;
8 |
9 | @SpringBootApplication()
10 | @EnableScheduling
11 | public class McpServerApplication {
12 | public static void main(String[] args) {
13 | SpringApplication.run(McpServerApplication.class, args);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodQueueSendRepositoryDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import java.util.UUID;
4 |
5 | public interface CallMethodQueueSendRepositoryDTO {
6 | UUID getMessageId();
7 | UUID getSpanId();
8 | UUID getTraceId();
9 | UUID getCallIdMessage();
10 | String getMessageBody();
11 | String getCallTimeDateStart();
12 | String getCallTimeDateEnd();
13 | Long getCallTimeDelta();
14 | String getQueueServer();
15 | String getTopicName();
16 | String getLibraryVersion();
17 | String getErrorCall();
18 | Boolean getIsError();
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import java.util.UUID;
7 |
8 | @Getter
9 | @Setter
10 | public class CallMethodUIDto {
11 | private UUID id;
12 | private UUID traceId;
13 | private String className;
14 | private String methodName;
15 | private String args;
16 | private MessageKafkaCallTimeUIDto messageKafkaCallTime;
17 | private MessageKafkaParentMethodUIDto parentMethod;
18 | private String methodReturn;
19 | private String errorCallMessage;
20 | private String libraryVersion;
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/QueueCall.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.UUID;
8 |
9 | @Getter
10 | @Builder
11 | public class QueueCall {
12 | private UUID messageId;
13 | private OffsetDateTime callTimeDateStart;
14 | private OffsetDateTime callTimeDateEnd;
15 | private Double callTimeDelta;
16 | private String messageBody;
17 | private String queueTopic;
18 | private String queueServer;
19 | private String libraryVersion;
20 | private String errorCall;
21 | private Boolean isError;
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/utils/UserViewModule.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.utils;
2 |
3 | import io.bitdive.mcpserver.config.securety.dto.CurrentUser;
4 |
5 | public class UserViewModule {
6 | public static boolean isViewForModule(CurrentUser currentUser, String moduleName) {
7 | return currentUser.isAdmin() || currentUser.moduleView().stream()
8 | .anyMatch(userModuleView -> userModuleView.equalsIgnoreCase(
9 | moduleName.contains("-")
10 | ? moduleName.substring(0, moduleName.toLowerCase().indexOf("-"))
11 | : moduleName
12 | )
13 | );
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodSqlRepositoryDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import java.util.UUID;
4 |
5 | public interface CallMethodSqlRepositoryDTO {
6 |
7 | Integer getId();
8 |
9 | UUID getSpanId();
10 |
11 | UUID getTraceId();
12 |
13 | UUID getMessageId();
14 |
15 | UUID getCallIdMessage();
16 |
17 | String getCallMethodSqlText();
18 |
19 | String getCallMethodSqlParam();
20 |
21 | String getCallTimeDateStart();
22 |
23 | String getCallTimeDateEnd();
24 |
25 | Double getCallTimeDelta();
26 |
27 | String getErrorCallMessage();
28 |
29 | String getLibraryVersion();
30 |
31 | Integer getUrlConnectId();
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/RestCall.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.UUID;
8 |
9 | @Getter
10 | @Builder
11 | public class RestCall {
12 | private UUID messageId;
13 | private String uri;
14 | private OffsetDateTime callTimeDateStart;
15 | private OffsetDateTime callTimeDateEnd;
16 | private Double callTimeDelta;
17 | private String method;
18 | private String headers;
19 | private String body;
20 | private String statusCode;
21 | public String responseHeaders;
22 | public String responseBody;
23 | private String errorCallMessage;
24 | private String libraryVersion;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/CallMethod.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 |
4 | import jakarta.persistence.Column;
5 | import jakarta.persistence.Entity;
6 | import jakarta.persistence.Id;
7 | import jakarta.persistence.Table;
8 | import lombok.AllArgsConstructor;
9 | import lombok.Getter;
10 | import lombok.NoArgsConstructor;
11 | import lombok.Setter;
12 | import org.hibernate.annotations.JdbcTypeCode;
13 | import org.hibernate.type.SqlTypes;
14 |
15 | import java.util.UUID;
16 |
17 | @Getter
18 | @Setter
19 | @Entity
20 | @AllArgsConstructor
21 | @NoArgsConstructor
22 | @Table(name = "call_method")
23 | public class CallMethod {
24 | @Id
25 | @JdbcTypeCode(SqlTypes.CHAR)
26 | @Column(name = "message_id", nullable = false)
27 | private UUID id;
28 | }
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodQueueSendDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.Builder;
4 | import lombok.Data;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.UUID;
8 |
9 | @Data
10 | @Builder
11 | public class CallMethodQueueSendDTO {
12 | private UUID messageId;
13 | private UUID spanId;
14 | private UUID traceId;
15 | private UUID callIdMessage;
16 | private String messageBody;
17 | private OffsetDateTime callTimeDateStart;
18 | private OffsetDateTime callTimeDateEnd;
19 | private Long callTimeDelta;
20 | private String queueServer;
21 | private String topicName;
22 | private String libraryVersion;
23 | private String errorCall;
24 | private Boolean isError;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodSqlDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.UUID;
8 |
9 | @Getter
10 | @Builder
11 | public class CallMethodSqlDTO {
12 | private Integer id;
13 | private UUID spanId;
14 | private UUID traceId;
15 | private UUID messageId;
16 | private UUID callIdMessage;
17 | private String callMethodSqlText;
18 | private String callMethodSqlParam;
19 | private OffsetDateTime callTimeDateStart;
20 | private OffsetDateTime callTimeDateEnd;
21 | private Double callTimeDelta;
22 | private String errorCallMessage;
23 | private String libraryVersion;
24 | private Integer urlConnectId;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodRestDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.UUID;
8 |
9 | @Getter
10 | @Builder
11 | public class CallMethodRestDTO {
12 | private UUID traceId;
13 | private UUID spanId;
14 | private UUID messageId;
15 | private UUID callIdMessage;
16 | private OffsetDateTime dateStart;
17 | private OffsetDateTime dateEnd;
18 | private Double callTimeDelta;
19 | private String uri;
20 | private String methodId;
21 | private String headers;
22 | private String body;
23 | private String statusCode;
24 | private String responseHeaders;
25 | private String responseBody;
26 | private String errorCall;
27 | private String libraryVersion;
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/config/ToolCallbackConfig.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.config;
2 |
3 | import io.bitdive.mcpserver.service.HeadMapTools;
4 | import io.bitdive.mcpserver.service.LastCallTools;
5 | import io.bitdive.mcpserver.service.TraceTools;
6 | import org.springframework.ai.tool.ToolCallbackProvider;
7 | import org.springframework.ai.tool.method.MethodToolCallbackProvider;
8 | import org.springframework.context.annotation.Bean;
9 | import org.springframework.context.annotation.Configuration;
10 |
11 | @Configuration
12 | public class ToolCallbackConfig {
13 | @Bean
14 | public ToolCallbackProvider monitoringTools(TraceTools traceTools, HeadMapTools headMapTools, LastCallTools lastCallTools) {
15 | return MethodToolCallbackProvider.builder()
16 | .toolObjects(traceTools, headMapTools, lastCallTools)
17 | .build();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodRestRepositoryDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import java.util.UUID;
4 |
5 | public interface CallMethodRestRepositoryDTO {
6 |
7 | String getId();
8 |
9 | UUID getTraceId();
10 |
11 | UUID getSpanId();
12 |
13 | UUID getMessageId();
14 |
15 | UUID getCallIdMessage();
16 |
17 | String getDateStart();
18 |
19 | String getDateEnd();
20 |
21 | Double getCallTimeDelta();
22 |
23 | String getUrl();
24 |
25 | String getMethodName();
26 |
27 | String getHeaders();
28 |
29 | String getBody();
30 |
31 | String getResponseHeaders();
32 |
33 | String getResponseBody();
34 |
35 | String getStatusCode();
36 |
37 | String getErrorCall();
38 |
39 | String getLibraryVersion();
40 |
41 | String getServiceCallId();
42 |
43 | }
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/utils/HierarchySearcher.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.utils;
2 |
3 | import io.bitdive.mcpserver.dto.hierarchy_method.HierarchyMethodUIDto;
4 |
5 | import java.util.Optional;
6 |
7 | public class HierarchySearcher {
8 |
9 | public static Optional findInHierarchy(
10 | HierarchyMethodUIDto node,
11 | String className,
12 | String methodName
13 | ) {
14 | if (className.equals(node.getClassName()) &&
15 | methodName.equals(node.getMethodName())) {
16 | return Optional.of(node);
17 | }
18 |
19 | for (HierarchyMethodUIDto child : node.getChildCalls()) {
20 | Optional found = findInHierarchy(child, className, methodName);
21 | if (found.isPresent()) {
22 | return found;
23 | }
24 | }
25 |
26 | return Optional.empty();
27 | }
28 | }
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/repository/ServiceNodeForModuleRepository.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.repository;
2 |
3 | import io.bitdive.mcpserver.db.entity.ServiceNodeForModule;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.jpa.repository.Query;
6 |
7 | import java.util.Optional;
8 |
9 | public interface ServiceNodeForModuleRepository extends JpaRepository {
10 | @Query(value = """
11 | select max(snm.id) as id
12 | from service_node_for_module snm
13 | left join module m on snm.module_id=m.id
14 | left join service_for_module sfm on sfm.module_id=snm.module_id and sfm.id=snm.service_id
15 | where lower(m.name)=:moduleName and lower(sfm.name)=:serviceName
16 | """ ,nativeQuery = true)
17 | Optional findNativeLastNodeForModuleAndService(String moduleName, String serviceName);
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/config/McpKeepAliveConfig.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.config;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import io.modelcontextprotocol.server.transport.WebFluxSseServerTransportProvider;
5 | import org.springframework.beans.factory.annotation.Value;
6 | import org.springframework.context.annotation.Bean;
7 | import org.springframework.context.annotation.Configuration;
8 | import org.springframework.scheduling.annotation.EnableScheduling;
9 | import org.springframework.scheduling.annotation.Scheduled;
10 | import reactor.core.Disposable;
11 | import reactor.core.publisher.Flux;
12 |
13 | import java.time.Duration;
14 |
15 | @Configuration
16 | @EnableScheduling // важно!
17 | public class McpKeepAliveConfig {
18 |
19 | @Bean
20 | public Disposable heartbeatLoop(WebFluxSseServerTransportProvider provider) {
21 | return Flux.interval(Duration.ofSeconds(40))
22 | .flatMap(t -> provider.sendHeartbeat())
23 | .subscribe();
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodRepositoryDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import java.time.Instant;
4 | import java.time.OffsetDateTime;
5 | import java.util.UUID;
6 |
7 | public interface CallMethodRepositoryDTO {
8 |
9 | UUID getMessageId();
10 |
11 | UUID getTraceId();
12 |
13 | UUID getSpanId();
14 |
15 | UUID getCallIdParent();
16 |
17 | String getModuleName();
18 |
19 | String getServiceName();
20 |
21 | String getClassName();
22 |
23 | String getMethodName();
24 |
25 | String getOperationType();
26 |
27 | Instant getCallTimeDateStart();
28 |
29 | Instant getCallTimeDateEnd();
30 |
31 | Boolean getInPointFlag();
32 |
33 | Double getCallTimeDelta();
34 |
35 | Integer getCodeResponse();
36 |
37 | String getDataInsert();
38 |
39 | String getLibraryVersion();
40 |
41 | String getArgs();
42 |
43 | String getErrorCallMessage();
44 |
45 | String getMethodReturn();
46 |
47 | String getServiceCallId();
48 |
49 | }
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/data/CallMethodDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.data;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 |
6 | import java.time.OffsetDateTime;
7 | import java.util.List;
8 | import java.util.UUID;
9 |
10 | @Getter
11 | @Builder
12 | public class CallMethodDTO {
13 | private UUID id;
14 | private UUID traceId;
15 | private UUID spanId;
16 | private String className;
17 | private String methodName;
18 | private UUID callIdParent;
19 | private String args;
20 | private OffsetDateTime callTimeDateStart;
21 | private OffsetDateTime callTimeDateEnd;
22 | private String methodReturn;
23 | private String errorCallMessage;
24 | private Long inPointId;
25 | private String moduleName;
26 | private String serviceName;
27 | private Boolean inPointFlag;
28 | private Double callTimeDelta;
29 | private String operationType;
30 | private Integer codeResponse;
31 | private List callMethodSqlList;
32 | private List callMethodRests;
33 | private List callMethodQueue;
34 | private String libraryVersion;
35 | private CallMethodRestDTO restCallMethod;
36 | }
--------------------------------------------------------------------------------
/HELP.md:
--------------------------------------------------------------------------------
1 | # Getting Started
2 |
3 | ### Reference Documentation
4 | For further reference, please consider the following sections:
5 |
6 | * [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
7 | * [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/3.4.5/maven-plugin)
8 | * [Create an OCI image](https://docs.spring.io/spring-boot/3.4.5/maven-plugin/build-image.html)
9 | * [Spring Web](https://docs.spring.io/spring-boot/3.4.5/reference/web/servlet.html)
10 |
11 | ### Guides
12 | The following guides illustrate how to use some features concretely:
13 |
14 | * [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
15 | * [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
16 | * [Building REST services with Spring](https://spring.io/guides/tutorials/rest/)
17 |
18 | ### Maven Parent overrides
19 |
20 | Due to Maven's design, elements are inherited from the parent POM to the project POM.
21 | While most of the inheritance is fine, it also inherits unwanted elements like `` and `` from the parent.
22 | To prevent this, the project POM contains empty overrides for these elements.
23 | If you manually switch to a different parent and actually want the inheritance, you need to remove those overrides.
24 |
25 |
--------------------------------------------------------------------------------
/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | spring:
2 | datasource:
3 | url: ${POSTGRES_URL:jdbc:postgresql://37.27.0.220:5432/data-bitdive}
4 | username: ${POSTGRES_USER:citizix_user}
5 | password: ${POSTGRES_PASS:S3cret}
6 | driver-class-name: org.postgresql.Driver
7 | ai:
8 | mcp:
9 | server:
10 | request-timeout: 180
11 | enabled: true
12 | type: ASYNC
13 | name: bitdive-mcp # как будет называться сервер в списке Cursor
14 | version: 1.0.0
15 | instructions: |
16 | Этот сервер предоставляет инструменты для работы с системой мониторинга BitDive.
17 | # SSE-конечные точки (по умолчанию /sse и /mcp/message)
18 | sse-endpoint: /sse
19 | sse-message-endpoint: /mcp/message
20 |
21 |
22 | app:
23 | key-secret:
24 | token-secret: ${TOKEN_SECRET:2IC9hzeMOIPBCyv3Ew5BDCcRPBI8nwuSFQ/jXlQZ+1A=}
25 | vault:
26 | url: ${VAULT_URL:https://sandbox.bitdive.io/vault}
27 | login: ${VAULT_LOGIN:username}
28 | password: ${VAULT_PASSWORD:password123}
29 | certificationForDataBase:
30 | commonName: ${VAULT_CERTIFICATION_DB_COMMON_NAME:citizix_user}
31 | altNames: ${VAULT_CERTIFICATION_DB_ALT_NAME:localhost}
32 | ttl: ${VAULT_CERTIFICATION_DB_TTL:24h}
33 | server:
34 | netty:
35 | idle-timeout: -1 # отключить IdleTimeoutHandler
36 | port: 8089
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/HierarchyMethodUIDto.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method;
2 |
3 | import lombok.Builder;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 |
7 | import java.time.OffsetDateTime;
8 | import java.util.ArrayList;
9 | import java.util.List;
10 | import java.util.UUID;
11 |
12 | @Builder
13 | @Getter
14 | @Setter
15 | public class HierarchyMethodUIDto {
16 | private UUID messageId;
17 | private String className;
18 | private String methodName;
19 | private UUID spanId;
20 | private UUID traceId;
21 | private String args;
22 | private OffsetDateTime callTimeDateStart;
23 | private OffsetDateTime callTimeDateEnd;
24 | private Double callTimeDelta;
25 | private String methodReturn;
26 | private String errorCallMessage;
27 | private String moduleName;
28 | private String serviceName;
29 | private Boolean inPointFlag;
30 | private Integer codeResponse;
31 | private String url;
32 | private String operationType;
33 | private List sqlCalls = new ArrayList<>();
34 | private List restCalls = new ArrayList<>();
35 | private List queueCalls = new ArrayList<>();
36 | private List childCalls = new ArrayList<>();
37 | private String libraryVersion;
38 | private RestCall restCallMethod;
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/component/PiiMaskClientComponent.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.component;
2 |
3 | import com.fasterxml.jackson.annotation.JsonProperty;
4 | import org.springframework.beans.factory.annotation.Value;
5 | import org.springframework.http.HttpEntity;
6 | import org.springframework.http.HttpHeaders;
7 | import org.springframework.http.MediaType;
8 | import org.springframework.stereotype.Component;
9 | import org.springframework.web.client.RestTemplate;
10 |
11 | import java.util.List;
12 | import java.util.Map;
13 |
14 | @Component
15 | public class PiiMaskClientComponent {
16 | private final RestTemplate restTemplate = new RestTemplate();
17 |
18 | @Value("${pii.service.url:http://localhost:8888/mask}")
19 | private String maskEndpoint;
20 |
21 | public String maskText(String text) {
22 | // Заголовки
23 | HttpHeaders headers = new HttpHeaders();
24 | headers.setContentType(MediaType.APPLICATION_JSON);
25 |
26 | // Тело запроса
27 | MaskRequest request = new MaskRequest(text);
28 | HttpEntity entity = new HttpEntity<>(request, headers);
29 |
30 | var maskResponse= restTemplate.postForObject(maskEndpoint, entity, MaskResponse.class);
31 | // Отправка POST и получение MaskResponse
32 | return maskResponse.maskedText;
33 | }
34 |
35 | record MaskRequest (String text) {}
36 |
37 | static class MaskResponse {
38 | @JsonProperty("masked_text")
39 | private String maskedText;
40 |
41 | private Map> entities;
42 | }
43 | }
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/ModuleCallAnalytics.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Column;
4 | import jakarta.persistence.Entity;
5 | import jakarta.persistence.Id;
6 | import jakarta.persistence.Table;
7 | import lombok.Getter;
8 | import org.hibernate.annotations.JdbcTypeCode;
9 | import org.hibernate.type.SqlTypes;
10 |
11 | import java.time.OffsetDateTime;
12 | import java.util.UUID;
13 |
14 | @Entity
15 | @Table(name = "module_call_analytics")
16 | @Getter
17 | public class ModuleCallAnalytics {
18 | @Id
19 | @JdbcTypeCode(SqlTypes.CHAR)
20 | private UUID id;
21 | private Integer idReport;
22 | private String moduleName;
23 | private Integer errorCount;
24 | private Integer callCountWeb;
25 | private Double avgCallTimeWeb;
26 | private Integer callCountScheduler;
27 | private Double avgCallTimeScheduler;
28 | private Integer sqlCallCount;
29 | private Double avgSqlCallTime;
30 | private Integer sqlErrorCount;
31 | private Integer restCallCount;
32 | private Double avgRestCallTime;
33 | private Integer restErrorCount;
34 | @Column(name = "count_2xx")
35 | private Integer count2xx;
36 | @Column(name = "count_3xx")
37 | private Integer count3xx;
38 | @Column(name = "count_4xx")
39 | private Integer count4xx;
40 | @Column(name = "count_5xx")
41 | private Integer count5xx;
42 |
43 | private Integer queueSendCount;
44 | private Double avgQueueSendTime;
45 | private Integer queueSendErrorCount;
46 | private Integer queueConsumerCount;
47 | private Double queueConsumerAvgCallTime;
48 | private Integer queueConsumerErrorCount;
49 |
50 |
51 | private OffsetDateTime analysisTimestamp;
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/ServiceCallAnalytics.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Column;
4 | import jakarta.persistence.Entity;
5 | import jakarta.persistence.Id;
6 | import jakarta.persistence.Table;
7 | import lombok.Getter;
8 | import org.hibernate.annotations.JdbcTypeCode;
9 | import org.hibernate.type.SqlTypes;
10 |
11 | import java.time.OffsetDateTime;
12 | import java.util.UUID;
13 |
14 | @Entity
15 | @Table(name = "service_call_analytics")
16 | @Getter
17 | public class ServiceCallAnalytics {
18 | @Id
19 | @JdbcTypeCode(SqlTypes.CHAR)
20 | private UUID id;
21 |
22 | private Integer idReport;
23 | private String moduleName;
24 | private String serviceName;
25 | private Integer errorCount;
26 | private Integer callCountWeb;
27 | private Double avgCallTimeWeb;
28 | private Integer callCountScheduler;
29 | private Double avgCallTimeScheduler;
30 | private Integer sqlCallCount;
31 | private Double avgSqlCallTime;
32 | private Integer sqlErrorCount;
33 | private Integer restCallCount;
34 | private Double avgRestCallTime;
35 | private Integer restErrorCount;
36 | @Column(name = "count_2xx")
37 | private Integer count2xx;
38 | @Column(name = "count_3xx")
39 | private Integer count3xx;
40 | @Column(name = "count_4xx")
41 | private Integer count4xx;
42 | @Column(name = "count_5xx")
43 | private Integer count5xx;
44 |
45 | private Integer queueSendCount;
46 | private Double avgQueueSendTime;
47 | private Integer queueSendErrorCount;
48 | private Integer queueConsumerCount;
49 | private Double queueConsumerAvgCallTime;
50 | private Integer queueConsumerErrorCount;
51 |
52 | private OffsetDateTime analysisTimestamp;
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/ClassCallAnalytics.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Column;
4 | import jakarta.persistence.Entity;
5 | import jakarta.persistence.Id;
6 | import jakarta.persistence.Table;
7 | import lombok.Getter;
8 | import org.hibernate.annotations.JdbcTypeCode;
9 | import org.hibernate.type.SqlTypes;
10 |
11 | import java.time.OffsetDateTime;
12 | import java.util.UUID;
13 |
14 | @Entity
15 | @Table(name = "class_call_analytics")
16 | @Getter
17 | public class ClassCallAnalytics {
18 | @Id
19 | @JdbcTypeCode(SqlTypes.CHAR)
20 | private UUID id;
21 |
22 | private Integer idReport;
23 | private String moduleName;
24 | private String serviceName;
25 | private String className;
26 | private Integer errorCount;
27 | private Integer callCountWeb;
28 | private Double avgCallTimeWeb;
29 | private Integer callCountScheduler;
30 | private Double avgCallTimeScheduler;
31 | private Integer sqlCallCount;
32 | private Double avgSqlCallTime;
33 | private Integer sqlErrorCount;
34 | private Integer restCallCount;
35 | private Double avgRestCallTime;
36 | private Integer restErrorCount;
37 | @Column(name = "count_2xx")
38 | private Integer count2xx;
39 | @Column(name = "count_3xx")
40 | private Integer count3xx;
41 | @Column(name = "count_4xx")
42 | private Integer count4xx;
43 | @Column(name = "count_5xx")
44 | private Integer count5xx;
45 |
46 | private Integer queueSendCount;
47 | private Double avgQueueSendTime;
48 | private Integer queueSendErrorCount;
49 | private Integer queueConsumerCount;
50 | private Double queueConsumerAvgCallTime;
51 | private Integer queueConsumerErrorCount;
52 |
53 |
54 | private OffsetDateTime analysisTimestamp;
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/db/entity/InPointCallAnalytics.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.db.entity;
2 |
3 | import jakarta.persistence.Column;
4 | import jakarta.persistence.Entity;
5 | import jakarta.persistence.Id;
6 | import jakarta.persistence.Table;
7 | import lombok.Getter;
8 | import org.hibernate.annotations.JdbcTypeCode;
9 | import org.hibernate.type.SqlTypes;
10 |
11 | import java.time.OffsetDateTime;
12 | import java.util.UUID;
13 |
14 | @Entity
15 | @Table(name = "in_point_call_analytics")
16 | @Getter
17 | public class InPointCallAnalytics {
18 | @Id
19 | @JdbcTypeCode(SqlTypes.CHAR)
20 | private UUID id;
21 |
22 | private Integer idReport;
23 | private String moduleName;
24 | private String serviceName;
25 | private String className;
26 | private String methodName;
27 | private Integer errorCount;
28 | private Integer callCountWeb;
29 | private Double avgCallTimeWeb;
30 | private Integer callCountScheduler;
31 | private Double avgCallTimeScheduler;
32 | private Integer sqlCallCount;
33 | private Double avgSqlCallTime;
34 | private Integer sqlErrorCount;
35 | private Integer restCallCount;
36 | private Double avgRestCallTime;
37 | private Integer restErrorCount;
38 | @Column(name = "count_2xx")
39 | private Integer count2xx;
40 | @Column(name = "count_3xx")
41 | private Integer count3xx;
42 | @Column(name = "count_4xx")
43 | private Integer count4xx;
44 | @Column(name = "count_5xx")
45 | private Integer count5xx;
46 |
47 | private Integer queueSendCount;
48 | private Double avgQueueSendTime;
49 | private Integer queueSendErrorCount;
50 | private Integer queueConsumerCount;
51 | private Double queueConsumerAvgCallTime;
52 | private Integer queueConsumerErrorCount;
53 |
54 |
55 | private OffsetDateTime analysisTimestamp;
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/dto/hierarchy_method/heap_map/InPointAnalyticsDTO.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.dto.hierarchy_method.heap_map;
2 |
3 | import lombok.Getter;
4 | import lombok.NoArgsConstructor;
5 | import lombok.Setter;
6 |
7 | import java.time.OffsetDateTime;
8 | import java.util.List;
9 |
10 | @Getter
11 | @Setter
12 | @NoArgsConstructor
13 | public class InPointAnalyticsDTO extends AnalyticsBaseDTO {
14 | private String inPointName;
15 |
16 | public InPointAnalyticsDTO(
17 | String inPointName,
18 | OffsetDateTime timestamp,
19 | Integer errorCount,
20 | Integer callCountWeb,
21 | Double avgCallTimeWeb,
22 | Integer callCountScheduler,
23 | Double avgCallTimeScheduler,
24 | Integer sqlCallCount,
25 | Double avgSqlCallTime,
26 | Integer sqlErrorCount,
27 | Integer restCallCount,
28 | Double avgRestCallTime,
29 | Integer restErrorCount,
30 | Integer count2xx,
31 | Integer count3xx,
32 | Integer count4xx,
33 | Integer count5xx,
34 | Integer queueSendCount ,
35 | Double avgQueueSendTime ,
36 | Integer queueSendErrorCount ,
37 | Integer queueConsumerCount ,
38 | Double queueConsumerAvgCallTime ,
39 | Integer queueConsumerErrorCount
40 | ) {
41 |
42 | super(timestamp, errorCount, callCountWeb, avgCallTimeWeb, callCountScheduler,
43 | avgCallTimeScheduler, sqlCallCount, avgSqlCallTime, sqlErrorCount,
44 | restCallCount, avgRestCallTime, restErrorCount, count2xx, count3xx,
45 | count4xx, count5xx,queueSendCount ,avgQueueSendTime ,queueSendErrorCount ,
46 | queueConsumerCount ,queueConsumerAvgCallTime ,queueConsumerErrorCount);
47 |
48 | this.inPointName = inPointName;
49 | }
50 | }
--------------------------------------------------------------------------------
/src/main/java/io/bitdive/mcpserver/utils/FinalConvertObject.java:
--------------------------------------------------------------------------------
1 | package io.bitdive.mcpserver.utils;
2 |
3 | import com.fasterxml.jackson.core.type.TypeReference;
4 | import com.fasterxml.jackson.databind.ObjectMapper;
5 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
6 | import io.bitdive.mcpserver.dto.hierarchy_method.HierarchyMethodUIDto;
7 | import io.bitdive.mcpserver.dto.hierarchy_method.heap_map.ModuleAnalyticsDTO;
8 |
9 | import java.time.format.DateTimeFormatter;
10 | import java.util.List;
11 | import java.util.Map;
12 |
13 | public class FinalConvertObject {
14 | private static final ObjectMapper objectMapper = new ObjectMapper();
15 | private static final DateTimeFormatter fmt = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
16 |
17 | static {
18 | objectMapper.registerModule(new JavaTimeModule());
19 | }
20 |
21 | public static String getStringObjectString(Object objectsVal) {
22 | try {
23 | return objectMapper.writeValueAsString(objectsVal);
24 | } catch (Exception e) {
25 | throw new RuntimeException(e);
26 | }
27 | }
28 |
29 | public static Map getStringObject(Object objectsVal) {
30 | try {
31 | String inPointJson = objectMapper.writeValueAsString(objectsVal);
32 | return objectMapper.readValue(inPointJson, new TypeReference