Skip to content

Commit

Permalink
Merge pull request #7 from opensergo/app-detail
Browse files Browse the repository at this point in the history
app detail page
  • Loading branch information
robberphex authored May 9, 2022
2 parents e11255e + dfc8553 commit 7dd7f6c
Show file tree
Hide file tree
Showing 32 changed files with 1,350 additions and 539 deletions.
6 changes: 0 additions & 6 deletions opensergo-dashboard-distribution/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@
<artifactId>opensergo-dashboard-distribution</artifactId>

<dependencies>
<dependency>
<groupId>io.opensergo</groupId>
<artifactId>opensergo-dashboard-ui</artifactId>
<version>${project.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>io.opensergo</groupId>
<artifactId>opensergo-dashboard-server</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import com.alibaba.csp.sentinel.dashboard.domain.Result;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.google.common.net.InetAddresses;
import io.opensergo.dashboard.repository.application.ApplicationRepository;
import io.opensergo.dashboard.service.application.ApplicationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -83,7 +82,7 @@ public Result<?> receiveHeartBeat(String app,
machineInfo.setVersion(sentinelVersion);
appManagement.addMachine(machineInfo);

applicationService.createApplication(app);
applicationService.createApplication(app, "");

return Result.ofSuccessMsg("success");
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.opensergo.dashboard.controller.application;

import com.alibaba.csp.sentinel.dashboard.domain.PagedResult;
import com.alibaba.csp.sentinel.dashboard.domain.Result;
import io.opensergo.dashboard.domain.application.ApplicationEntity;
import io.opensergo.dashboard.repository.application.ApplicationRepository;
import io.opensergo.dashboard.vo.application.ApplicationItem;
Expand All @@ -13,6 +14,7 @@
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
* @author luyanbo
Expand All @@ -38,4 +40,19 @@ public PagedResult<List<ApplicationItem>> getApplicationList(
}
return PagedResult.ofSuccess(appItemList);
}

@GetMapping("/describeApplication")
public Result<ApplicationItem> describeApplication(
HttpServletRequest request,
String appName
) {
Optional<ApplicationEntity> appEntity = applicationRepository.findByName(appName);
if (appEntity.isPresent()) {
ApplicationItem appItem = new ApplicationItem();
appItem.setAppName(appEntity.get().getName());
appItem.setSha256(appEntity.get().getSha256());
return Result.ofSuccess(appItem);
}
return Result.ofSuccess(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package io.opensergo.dashboard.controller.service;

import com.alibaba.csp.sentinel.dashboard.domain.PagedResult;
import com.alibaba.csp.sentinel.dashboard.domain.Result;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.util.JsonFormat;
import io.opensergo.dashboard.domain.application.MetadataEntity;
import io.opensergo.dashboard.repository.application.ApplicationRepository;
import io.opensergo.dashboard.repository.application.MetadataRepository;
import io.opensergo.dashboard.vo.service.MethodItem;
import io.opensergo.dashboard.vo.service.ServiceItem;
import io.opensergo.proto.service_contract.v1.MethodDescriptor;
import io.opensergo.proto.service_contract.v1.ReportMetadataRequest;
import io.opensergo.proto.service_contract.v1.ServiceDescriptor;
import io.opensergo.proto.service_contract.v1.ServiceMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

/**
* @author luyanbo
*/
@RestController
@RequestMapping(value = "/api/service/")
public class ServiceController {

@Autowired
private ApplicationRepository applicationRepository;

@Autowired
private MetadataRepository metadataRepository;

@GetMapping("/queryService")
public PagedResult<List<ServiceItem>> queryService(
String appName,
String protocol,
Pageable pageable
) throws InvalidProtocolBufferException {
Optional<MetadataEntity> metadataOptional = metadataRepository.findByAppName(appName);
if (!metadataOptional.isPresent()) {
return PagedResult.ofSuccess(new ArrayList<>());
}
MetadataEntity appEntity = metadataOptional.get();
String metadataStr = appEntity.getMetadata();
ReportMetadataRequest.Builder reqBuilder = ReportMetadataRequest.newBuilder();
JsonFormat.parser().merge(metadataStr, reqBuilder);

List<ServiceItem> serviceItems = new ArrayList<>();
for (ServiceMetadata serviceMetadata : reqBuilder.getServiceMetadataList()) {
if (!serviceMetadata.getProtocolsList().contains(protocol)) {
continue;
}
for (ServiceDescriptor serviceDescriptor : serviceMetadata.getServiceContract().getServicesList()) {
ServiceItem serviceItem = new ServiceItem();
serviceItem.setAppName(reqBuilder.getAppName());
serviceItem.setServiceName(serviceDescriptor.getName());
serviceItems.add(serviceItem);
}
}
return PagedResult.ofSuccess(serviceItems);
}

@GetMapping("/queryServiceMethod")
public Result<List<MethodItem>> queryServiceMethod(
String appName,
String serviceName,
String protocol,
Pageable pageable
) throws InvalidProtocolBufferException {
Optional<MetadataEntity> metadataOptional = metadataRepository.findByAppName(appName);
if (!metadataOptional.isPresent()) {
return Result.ofSuccess(null);
}
MetadataEntity appEntity = metadataOptional.get();
String metadataStr = appEntity.getMetadata();
ReportMetadataRequest.Builder reqBuilder = ReportMetadataRequest.newBuilder();
JsonFormat.parser().merge(metadataStr, reqBuilder);

List<MethodItem> methodItems = new ArrayList<>();
Set<String> methodNames = new HashSet<>();
for (ServiceMetadata serviceMetadata : reqBuilder.getServiceMetadataList()) {
if (!serviceMetadata.getProtocolsList().contains(protocol)) {
continue;
}
for (ServiceDescriptor serviceDescriptor : serviceMetadata.getServiceContract().getServicesList()) {
if (serviceName.equals(serviceDescriptor.getName())) {
for (MethodDescriptor methodDescriptor : serviceDescriptor.getMethodsList()) {
if (methodNames.contains(methodDescriptor.getName())) {
continue;
}
methodNames.add(methodDescriptor.getName());
MethodItem methodItem = new MethodItem();
methodItem.setMethodName(methodDescriptor.getName());
methodItems.add(methodItem);
}
}
}
}
return Result.ofSuccess(methodItems);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ public class ApplicationEntity {
private Long id;

private String name;

private String sha256;
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class MetadataEntity {
@Id
private Long id;

private String sha512;
private String sha256;

private String appName;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.google.protobuf.util.JsonFormat;
import io.grpc.stub.StreamObserver;
import io.opensergo.dashboard.domain.application.ApplicationEntity;
import io.opensergo.dashboard.domain.application.MetadataEntity;
import io.opensergo.dashboard.repository.application.MetadataRepository;
import io.opensergo.dashboard.service.application.ApplicationService;
Expand Down Expand Up @@ -43,17 +42,17 @@ public void reportMetadata(ReportMetadataRequest request, StreamObserver<ReportM

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

applicationService.createApplication(appName);
recordMetadata(appName, metadataEntity, metadata);
metadataEntity = recordMetadata(appName, metadataEntity, metadata);
applicationService.createApplication(appName, metadataEntity.getSha256());

responseObserver.onNext(ReportMetadataReply.newBuilder().build());
responseObserver.onCompleted();
}

private void recordMetadata(String appName, MetadataEntity metadataEntity, String metadata) {
private MetadataEntity recordMetadata(String appName, MetadataEntity metadataEntity, String metadata) {
metadataEntity.setAppName(appName);
metadataEntity.setMetadata(metadata);
metadataEntity.setSha512(DigestUtils.sha512Hex(metadata));
metadataRepository.save(metadataEntity);
metadataEntity.setSha256(DigestUtils.sha256Hex(metadata));
return metadataRepository.save(metadataEntity);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ public interface MetadataRepository extends Repository<MetadataEntity, String> {
MetadataEntity save(MetadataEntity entity);

Optional<MetadataEntity> findByAppName(String appName);

Optional<MetadataEntity> findBySha256(String sha256);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ public class ApplicationService {
@Autowired
private ApplicationRepository applicationRepository;

public void createApplication(String appName) {
public void createApplication(String appName, String sha256) {
ApplicationEntity app = applicationRepository.findByName(appName).orElseGet(() ->
ApplicationEntity.builder()
.name(appName)
.sha256(sha256)
.build()
);
applicationRepository.save(app);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@
@NoArgsConstructor
public class ApplicationItem {
String appName;

String sha256;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.opensergo.dashboard.vo.service;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class MethodItem {
String methodName;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.opensergo.dashboard.vo.service;

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class ServiceItem {
String appName;

String serviceName;
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ logging:
#auth settings
auth:
filter:
exclude-urls: /,/sentinel,/auth/login,/auth/logout,/registry/machine,/version,/api/application/**
exclude-urls: /,/sentinel,/auth/login,/auth/logout,/registry/machine,/version,/api/**
exclude-url-suffixes: htm,html,js,css,map,ico,ttf,woff,png
# If auth.enabled=false, Sentinel console disable login
username: sentinel
Expand Down
3 changes: 2 additions & 1 deletion opensergo-dashboard-server/src/main/resources/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ CREATE TABLE `application`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`sha256` char(64) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_name` (`name`)
) DEFAULT CHARSET=utf8mb4;

CREATE TABLE `metadata`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`sha512` char(128) NOT NULL,
`sha256` char(64) NOT NULL,
`app_name` varchar(100) NOT NULL,
`metadata` mediumtext NOT NULL,
PRIMARY KEY (`id`),
Expand Down
Loading

0 comments on commit 7dd7f6c

Please sign in to comment.