Skip to content

Commit 7dd7f6c

Browse files
authored
Merge pull request #7 from opensergo/app-detail
app detail page
2 parents e11255e + dfc8553 commit 7dd7f6c

File tree

32 files changed

+1350
-539
lines changed

32 files changed

+1350
-539
lines changed

opensergo-dashboard-distribution/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@
1212
<artifactId>opensergo-dashboard-distribution</artifactId>
1313

1414
<dependencies>
15-
<dependency>
16-
<groupId>io.opensergo</groupId>
17-
<artifactId>opensergo-dashboard-ui</artifactId>
18-
<version>${project.version}</version>
19-
<type>pom</type>
20-
</dependency>
2115
<dependency>
2216
<groupId>io.opensergo</groupId>
2317
<artifactId>opensergo-dashboard-server</artifactId>

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: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.opensergo.dashboard.controller.application;
22

33
import com.alibaba.csp.sentinel.dashboard.domain.PagedResult;
4+
import com.alibaba.csp.sentinel.dashboard.domain.Result;
45
import io.opensergo.dashboard.domain.application.ApplicationEntity;
56
import io.opensergo.dashboard.repository.application.ApplicationRepository;
67
import io.opensergo.dashboard.vo.application.ApplicationItem;
@@ -13,6 +14,7 @@
1314
import javax.servlet.http.HttpServletRequest;
1415
import java.util.ArrayList;
1516
import java.util.List;
17+
import java.util.Optional;
1618

1719
/**
1820
* @author luyanbo
@@ -38,4 +40,19 @@ public PagedResult<List<ApplicationItem>> getApplicationList(
3840
}
3941
return PagedResult.ofSuccess(appItemList);
4042
}
43+
44+
@GetMapping("/describeApplication")
45+
public Result<ApplicationItem> describeApplication(
46+
HttpServletRequest request,
47+
String appName
48+
) {
49+
Optional<ApplicationEntity> appEntity = applicationRepository.findByName(appName);
50+
if (appEntity.isPresent()) {
51+
ApplicationItem appItem = new ApplicationItem();
52+
appItem.setAppName(appEntity.get().getName());
53+
appItem.setSha256(appEntity.get().getSha256());
54+
return Result.ofSuccess(appItem);
55+
}
56+
return Result.ofSuccess(null);
57+
}
4158
}
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
}

0 commit comments

Comments
 (0)