Skip to content

Commit 54e27ab

Browse files
committed
support app-detail and app-service
1 parent 888f615 commit 54e27ab

File tree

19 files changed

+457
-82
lines changed

19 files changed

+457
-82
lines changed

opensergo-dashboard-server/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/MachineRegistryController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.alibaba.csp.sentinel.dashboard.domain.Result;
2121
import com.alibaba.csp.sentinel.util.StringUtil;
2222
import com.google.common.net.InetAddresses;
23-
import io.opensergo.dashboard.repository.application.ApplicationRepository;
2423
import io.opensergo.dashboard.service.application.ApplicationService;
2524
import org.slf4j.Logger;
2625
import org.slf4j.LoggerFactory;
@@ -83,7 +82,7 @@ public Result<?> receiveHeartBeat(String app,
8382
machineInfo.setVersion(sentinelVersion);
8483
appManagement.addMachine(machineInfo);
8584

86-
applicationService.createApplication(app);
85+
applicationService.createApplication(app, "");
8786

8887
return Result.ofSuccessMsg("success");
8988
} catch (Exception e) {

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/controller/application/ApplicationController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public Result<ApplicationItem> describeApplication(
5050
if (appEntity.isPresent()) {
5151
ApplicationItem appItem = new ApplicationItem();
5252
appItem.setAppName(appEntity.get().getName());
53+
appItem.setSha256(appEntity.get().getSha256());
5354
return Result.ofSuccess(appItem);
5455
}
5556
return Result.ofSuccess(null);
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package io.opensergo.dashboard.controller.service;
2+
3+
import com.alibaba.csp.sentinel.dashboard.domain.PagedResult;
4+
import com.alibaba.csp.sentinel.dashboard.domain.Result;
5+
import com.google.protobuf.InvalidProtocolBufferException;
6+
import com.google.protobuf.util.JsonFormat;
7+
import io.opensergo.dashboard.domain.application.MetadataEntity;
8+
import io.opensergo.dashboard.repository.application.ApplicationRepository;
9+
import io.opensergo.dashboard.repository.application.MetadataRepository;
10+
import io.opensergo.dashboard.vo.service.MethodItem;
11+
import io.opensergo.dashboard.vo.service.ServiceItem;
12+
import io.opensergo.proto.service_contract.v1.MethodDescriptor;
13+
import io.opensergo.proto.service_contract.v1.ReportMetadataRequest;
14+
import io.opensergo.proto.service_contract.v1.ServiceDescriptor;
15+
import io.opensergo.proto.service_contract.v1.ServiceMetadata;
16+
import org.springframework.beans.factory.annotation.Autowired;
17+
import org.springframework.data.domain.Pageable;
18+
import org.springframework.web.bind.annotation.GetMapping;
19+
import org.springframework.web.bind.annotation.RequestMapping;
20+
import org.springframework.web.bind.annotation.RestController;
21+
22+
import java.util.*;
23+
24+
/**
25+
* @author luyanbo
26+
*/
27+
@RestController
28+
@RequestMapping(value = "/api/service/")
29+
public class ServiceController {
30+
31+
@Autowired
32+
private ApplicationRepository applicationRepository;
33+
34+
@Autowired
35+
private MetadataRepository metadataRepository;
36+
37+
@GetMapping("/queryService")
38+
public PagedResult<List<ServiceItem>> queryService(
39+
String appName,
40+
String protocol,
41+
Pageable pageable
42+
) throws InvalidProtocolBufferException {
43+
Optional<MetadataEntity> metadataOptional = metadataRepository.findByAppName(appName);
44+
if (!metadataOptional.isPresent()) {
45+
return PagedResult.ofSuccess(new ArrayList<>());
46+
}
47+
MetadataEntity appEntity = metadataOptional.get();
48+
String metadataStr = appEntity.getMetadata();
49+
ReportMetadataRequest.Builder reqBuilder = ReportMetadataRequest.newBuilder();
50+
JsonFormat.parser().merge(metadataStr, reqBuilder);
51+
52+
List<ServiceItem> serviceItems = new ArrayList<>();
53+
for (ServiceMetadata serviceMetadata : reqBuilder.getServiceMetadataList()) {
54+
if (!serviceMetadata.getProtocolsList().contains(protocol)) {
55+
continue;
56+
}
57+
for (ServiceDescriptor serviceDescriptor : serviceMetadata.getServiceContract().getServicesList()) {
58+
ServiceItem serviceItem = new ServiceItem();
59+
serviceItem.setAppName(reqBuilder.getAppName());
60+
serviceItem.setServiceName(serviceDescriptor.getName());
61+
serviceItems.add(serviceItem);
62+
}
63+
}
64+
return PagedResult.ofSuccess(serviceItems);
65+
}
66+
67+
@GetMapping("/queryServiceMethod")
68+
public Result<List<MethodItem>> queryServiceMethod(
69+
String appName,
70+
String serviceName,
71+
String protocol,
72+
Pageable pageable
73+
) throws InvalidProtocolBufferException {
74+
Optional<MetadataEntity> metadataOptional = metadataRepository.findByAppName(appName);
75+
if (!metadataOptional.isPresent()) {
76+
return Result.ofSuccess(null);
77+
}
78+
MetadataEntity appEntity = metadataOptional.get();
79+
String metadataStr = appEntity.getMetadata();
80+
ReportMetadataRequest.Builder reqBuilder = ReportMetadataRequest.newBuilder();
81+
JsonFormat.parser().merge(metadataStr, reqBuilder);
82+
83+
List<MethodItem> methodItems = new ArrayList<>();
84+
Set<String> methodNames = new HashSet<>();
85+
for (ServiceMetadata serviceMetadata : reqBuilder.getServiceMetadataList()) {
86+
if (!serviceMetadata.getProtocolsList().contains(protocol)) {
87+
continue;
88+
}
89+
for (ServiceDescriptor serviceDescriptor : serviceMetadata.getServiceContract().getServicesList()) {
90+
if (serviceName.equals(serviceDescriptor.getName())) {
91+
for (MethodDescriptor methodDescriptor : serviceDescriptor.getMethodsList()) {
92+
if (methodNames.contains(methodDescriptor.getName())) {
93+
continue;
94+
}
95+
methodNames.add(methodDescriptor.getName());
96+
MethodItem methodItem = new MethodItem();
97+
methodItem.setMethodName(methodDescriptor.getName());
98+
methodItems.add(methodItem);
99+
}
100+
}
101+
}
102+
}
103+
return Result.ofSuccess(methodItems);
104+
}
105+
}

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/domain/application/ApplicationEntity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ public class ApplicationEntity {
1717
private Long id;
1818

1919
private String name;
20+
21+
private String sha256;
2022
}

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/domain/application/MetadataEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class MetadataEntity {
1616
@Id
1717
private Long id;
1818

19-
private String sha512;
19+
private String sha256;
2020

2121
private String appName;
2222

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/grpc/service/GrpcMetadataService.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.google.protobuf.util.JsonFormat;
44
import io.grpc.stub.StreamObserver;
5-
import io.opensergo.dashboard.domain.application.ApplicationEntity;
65
import io.opensergo.dashboard.domain.application.MetadataEntity;
76
import io.opensergo.dashboard.repository.application.MetadataRepository;
87
import io.opensergo.dashboard.service.application.ApplicationService;
@@ -43,17 +42,17 @@ public void reportMetadata(ReportMetadataRequest request, StreamObserver<ReportM
4342

4443
log.info("reportMetadata request: {}", metadata);
4544

46-
applicationService.createApplication(appName);
47-
recordMetadata(appName, metadataEntity, metadata);
45+
metadataEntity = recordMetadata(appName, metadataEntity, metadata);
46+
applicationService.createApplication(appName, metadataEntity.getSha256());
4847

4948
responseObserver.onNext(ReportMetadataReply.newBuilder().build());
5049
responseObserver.onCompleted();
5150
}
5251

53-
private void recordMetadata(String appName, MetadataEntity metadataEntity, String metadata) {
52+
private MetadataEntity recordMetadata(String appName, MetadataEntity metadataEntity, String metadata) {
5453
metadataEntity.setAppName(appName);
5554
metadataEntity.setMetadata(metadata);
56-
metadataEntity.setSha512(DigestUtils.sha512Hex(metadata));
57-
metadataRepository.save(metadataEntity);
55+
metadataEntity.setSha256(DigestUtils.sha256Hex(metadata));
56+
return metadataRepository.save(metadataEntity);
5857
}
5958
}

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/repository/application/MetadataRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ public interface MetadataRepository extends Repository<MetadataEntity, String> {
99
MetadataEntity save(MetadataEntity entity);
1010

1111
Optional<MetadataEntity> findByAppName(String appName);
12+
13+
Optional<MetadataEntity> findBySha256(String sha256);
1214
}

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/service/application/ApplicationService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ public class ApplicationService {
1313
@Autowired
1414
private ApplicationRepository applicationRepository;
1515

16-
public void createApplication(String appName) {
16+
public void createApplication(String appName, String sha256) {
1717
ApplicationEntity app = applicationRepository.findByName(appName).orElseGet(() ->
1818
ApplicationEntity.builder()
1919
.name(appName)
20+
.sha256(sha256)
2021
.build()
2122
);
2223
applicationRepository.save(app);

opensergo-dashboard-server/src/main/java/io/opensergo/dashboard/vo/application/ApplicationItem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@
77
@NoArgsConstructor
88
public class ApplicationItem {
99
String appName;
10+
11+
String sha256;
1012
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.opensergo.dashboard.vo.service;
2+
3+
import lombok.Data;
4+
import lombok.NoArgsConstructor;
5+
6+
@Data
7+
@NoArgsConstructor
8+
public class MethodItem {
9+
String methodName;
10+
}

0 commit comments

Comments
 (0)