Skip to content

Commit

Permalink
feat: numContractDefinitions in Dashboard (UI API, #560)
Browse files Browse the repository at this point in the history
  • Loading branch information
richardtreier authored Oct 6, 2023
1 parent da9cd4f commit 5ece112
Show file tree
Hide file tree
Showing 6 changed files with 161 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,27 @@
@RequiredArgsConstructor
public class DashboardPage {

@Schema(description = "Number of Assets", requiredMode = Schema.RequiredMode.REQUIRED)
private int numAssets;

@Schema(description = "Number of Policies", requiredMode = Schema.RequiredMode.REQUIRED)
private int numPolicies;

@Schema(description = "Number of Contract Definitions", requiredMode = Schema.RequiredMode.REQUIRED)
private int numContractDefinitions;

@Schema(description = "Number of consuming Contract Agreements", requiredMode = Schema.RequiredMode.REQUIRED)
private long numContractAgreementsConsuming;

@Schema(description = "Number of providing Contract Agreements", requiredMode = Schema.RequiredMode.REQUIRED)
private long numContractAgreementsProviding;

@Schema(description = "Consuming Transfer Process Amounts", requiredMode = Schema.RequiredMode.REQUIRED)
private DashboardTransferAmounts transferProcessesConsuming;

@Schema(description = "Providing Transfer Process Amounts", requiredMode = Schema.RequiredMode.REQUIRED)
private DashboardTransferAmounts transferProcessesProviding;

@Schema(description = "Your Connector's Connector Endpoint", requiredMode = Schema.RequiredMode.REQUIRED)
private String connectorEndpoint;

Expand Down Expand Up @@ -44,22 +65,4 @@ public class DashboardPage {

@Schema(description = "Your Connector's MIW Configuration (if present)", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private DashboardMiwConfig connectorMiwConfig;

@Schema(description = "Providing Transfer Process Amounts", requiredMode = Schema.RequiredMode.REQUIRED)
private DashboardTransferAmounts providingTransferProcesses;

@Schema(description = "Consuming Transfer Process Amounts", requiredMode = Schema.RequiredMode.REQUIRED)
private DashboardTransferAmounts consumingTransferProcesses;

@Schema(description = "Number of Assets", requiredMode = Schema.RequiredMode.REQUIRED)
private int numberOfAssets;

@Schema(description = "Number of Policies", requiredMode = Schema.RequiredMode.REQUIRED)
private int numberOfPolicies;

@Schema(description = "Number of consuming Contract Agreements", requiredMode = Schema.RequiredMode.REQUIRED)
private long numberOfConsumingAgreements;

@Schema(description = "Number of providing Contract Agreements", requiredMode = Schema.RequiredMode.REQUIRED)
private long numberOfProvidingAgreements;
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
@AllArgsConstructor
@RequiredArgsConstructor
public class DashboardTransferAmounts {
@Schema(description = "Number of Transfer Processes", requiredMode = Schema.RequiredMode.REQUIRED)
private long numTotal;

@Schema(description = "Number of running Transfer Processes", requiredMode = Schema.RequiredMode.REQUIRED)
private long numRunning;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,8 @@ public static WrapperExtensionContext buildContext(
contractNegotiationStore,
transferProcessService,
assetIndex,
policyDefinitionService
policyDefinitionService,
contractDefinitionService
);
var dashboardApiService = new DashboardPageApiService(
dashboardDataFetcher,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,21 @@
import de.sovity.edc.ext.wrapper.api.ui.pages.dashboard.services.SelfDescriptionService;
import de.sovity.edc.ext.wrapper.api.ui.pages.transferhistory.TransferProcessStateService;
import lombok.RequiredArgsConstructor;
import org.eclipse.edc.connector.contract.spi.types.agreement.ContractAgreement;
import org.eclipse.edc.connector.contract.spi.types.negotiation.ContractNegotiation;
import org.eclipse.edc.connector.transfer.spi.types.TransferProcess;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import static de.sovity.edc.ext.wrapper.api.ui.model.TransferProcessSimplifiedState.ERROR;
import static de.sovity.edc.ext.wrapper.api.ui.model.TransferProcessSimplifiedState.OK;
import static de.sovity.edc.ext.wrapper.api.ui.model.TransferProcessSimplifiedState.RUNNING;
import static java.util.stream.Collectors.toSet;

@RequiredArgsConstructor
public class DashboardPageApiService {
Expand All @@ -44,24 +49,33 @@ public class DashboardPageApiService {

@NotNull
public DashboardPage dashboardPage() {

var transferProcesses = dashboardDataFetcher.getTransferProcesses();
var negotiations = dashboardDataFetcher.getAllContractNegotiations();

var providingAgreements = negotiations.stream()
.filter(negotiation -> ContractAgreementDirection.fromType(negotiation.getType()).equals(ContractAgreementDirection.PROVIDING))
.filter(negotiation -> negotiation.getContractAgreement() != null)
.map(negotiation -> negotiation.getContractAgreement().getId())
.collect(Collectors.toSet());
.filter(it -> it.getType() == ContractNegotiation.Type.PROVIDER)
.map(ContractNegotiation::getContractAgreement)
.filter(Objects::nonNull)
.map(ContractAgreement::getId)
.collect(toSet());


var consumingAgreements = negotiations.stream()
.filter(negotiation -> ContractAgreementDirection.fromType(negotiation.getType()).equals(ContractAgreementDirection.CONSUMING))
.filter(negotiation -> negotiation.getContractAgreement() != null)
.map(negotiation -> negotiation.getContractAgreement().getId())
.collect(Collectors.toSet());
.filter(it -> it.getType() == ContractNegotiation.Type.CONSUMER)
.map(ContractNegotiation::getContractAgreement)
.filter(Objects::nonNull)
.map(ContractAgreement::getId)
.collect(toSet());

DashboardPage dashboardPage = new DashboardPage();
dashboardPage.setNumAssets(dashboardDataFetcher.getNumberOfAssets());
dashboardPage.setNumPolicies(dashboardDataFetcher.getNumberOfPolicies());
dashboardPage.setNumContractDefinitions(dashboardDataFetcher.getNumberOfContractDefinitions());
dashboardPage.setNumContractAgreementsProviding(providingAgreements.size());
dashboardPage.setNumContractAgreementsConsuming(consumingAgreements.size());
dashboardPage.setTransferProcessesProviding(getTransferAmounts(transferProcesses, providingAgreements));
dashboardPage.setTransferProcessesConsuming(getTransferAmounts(transferProcesses, consumingAgreements));

dashboardPage.setConnectorTitle(selfDescriptionService.getConnectorTitle());
dashboardPage.setConnectorDescription(selfDescriptionService.getConnectorDescription());
dashboardPage.setConnectorEndpoint(selfDescriptionService.getConnectorEndpoint());
Expand All @@ -74,34 +88,32 @@ public DashboardPage dashboardPage() {

dashboardPage.setConnectorMiwConfig(miwConfigService.buildMiwConfigOrNull());
dashboardPage.setConnectorDapsConfig(dapsConfigService.buildDapsConfigOrNull());
dashboardPage.setNumberOfAssets(dashboardDataFetcher.getNumberOfAssets());
dashboardPage.setNumberOfPolicies(dashboardDataFetcher.getNumberOfPolicies());
dashboardPage.setProvidingTransferProcesses(getTransferAmounts(transferProcesses, providingAgreements));
dashboardPage.setConsumingTransferProcesses(getTransferAmounts(transferProcesses, consumingAgreements));
dashboardPage.setNumberOfProvidingAgreements(providingAgreements.size());
dashboardPage.setNumberOfConsumingAgreements(consumingAgreements.size());
return dashboardPage;
}

DashboardTransferAmounts getTransferAmounts(
List<TransferProcess> transferProcesses,
Set<String> agreements
) {
var numTotal = transferProcesses.stream()
.filter(transferProcess -> agreements.contains(transferProcess.getDataRequest().getContractId()))
.count();

var numOk = transferProcesses.stream()
.filter(transferProcess -> transferProcessStateService.getSimplifiedState(transferProcess.getState()).equals(OK))
.filter(transferProcess -> agreements.contains(transferProcess.getDataRequest().getContractId()))
.filter(transferProcess -> transferProcessStateService.getSimplifiedState(transferProcess.getState()).equals(OK))
.count();

var numRunning = transferProcesses.stream()
.filter(transferProcess -> transferProcessStateService.getSimplifiedState(transferProcess.getState()).equals(RUNNING))
.filter(transferProcess -> agreements.contains(transferProcess.getDataRequest().getContractId()))
.filter(transferProcess -> transferProcessStateService.getSimplifiedState(transferProcess.getState()).equals(RUNNING))
.count();

var numError = transferProcesses.stream()
.filter(transferProcess -> transferProcessStateService.getSimplifiedState(transferProcess.getState()).equals(ERROR))
.filter(transferProcess -> agreements.contains(transferProcess.getDataRequest().getContractId()))
.filter(transferProcess -> transferProcessStateService.getSimplifiedState(transferProcess.getState()).equals(ERROR))
.count();

return new DashboardTransferAmounts(numRunning, numOk, numError);
return new DashboardTransferAmounts(numTotal, numRunning, numOk, numError);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import lombok.RequiredArgsConstructor;
import org.eclipse.edc.connector.contract.spi.negotiation.store.ContractNegotiationStore;
import org.eclipse.edc.connector.contract.spi.types.negotiation.ContractNegotiation;
import org.eclipse.edc.connector.spi.contractdefinition.ContractDefinitionService;
import org.eclipse.edc.connector.spi.policydefinition.PolicyDefinitionService;
import org.eclipse.edc.connector.spi.transferprocess.TransferProcessService;
import org.eclipse.edc.connector.transfer.spi.types.TransferProcess;
Expand All @@ -33,6 +34,7 @@ public class DashboardDataFetcher {
private final TransferProcessService transferProcessService;
private final AssetIndex assetIndex;
private final PolicyDefinitionService policyDefinitionService;
private final ContractDefinitionService contractDefinitionService;

public int getNumberOfAssets() {
return assetIndex.queryAssets(QuerySpec.max()).toList().size();
Expand All @@ -44,6 +46,12 @@ public int getNumberOfPolicies() {
.count());
}

public int getNumberOfContractDefinitions() {
return Math.toIntExact(contractDefinitionService.query(QuerySpec.max())
.orElseThrow(ServiceException::new)
.count());
}

@NotNull
public List<ContractNegotiation> getAllContractNegotiations() {
return contractNegotiationStore.queryNegotiations(QuerySpec.max()).toList();
Expand Down
Loading

0 comments on commit 5ece112

Please sign in to comment.