Add statistics for Distribution Set (#1388)

* Add Statistics for Rollouts and Actions count by Status for a Distribution Set

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

* remove unused imports

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

* Refactoring and additional statistics for auto assignments

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

* Fixed review findings and added tests

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

* Added tests for the Management API

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

* Remove unused imports

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

* refactoring

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>

---------

Signed-off-by: Denislav Prinov <denislav.prinov@bosch.com>
This commit is contained in:
Denislav Prinov
2023-07-11 08:58:52 +03:00
committed by GitHub
parent 2fe73ee40c
commit 3402808ee9
11 changed files with 505 additions and 2 deletions

View File

@@ -15,6 +15,7 @@ import java.util.Optional;
import javax.persistence.EntityManager;
import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet;
import org.eclipse.hawkbit.repository.jpa.model.JpaStatistic;
import org.eclipse.hawkbit.repository.model.Action;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.Rollout;
@@ -50,6 +51,37 @@ public interface DistributionSetRepository
@Query(value = "Select Distinct ds from JpaDistributionSet ds join ds.tags dst where dst.id = :tag and ds.deleted = 0")
Page<JpaDistributionSet> findByTag(Pageable pageable, @Param("tag") Long tagId);
/**
* Count {@link Rollout}s by Status for Distribution set.
*
* @param dsId
* to be found
* @return map for {@link Rollout}s status counts
*/
@Query(value = "SELECT r.status as name, COUNT(r.status) as data FROM JpaRollout r WHERE r.distributionSet.id = :dsId GROUP BY r.status")
List<JpaStatistic> countRolloutsByStatusForDistributionSet(@Param("dsId") Long dsId);
/**
* Count {@link Action}s by Status for Distribution set.
*
* @param dsId
* to be found
* @return map for {@link Action}s status counts
*/
@Query(value = "SELECT a.status as name, COUNT(a.status) as data FROM JpaAction a WHERE a.distributionSet.id = :dsId GROUP BY a.status")
List<JpaStatistic> countActionsByStatusForDistributionSet(@Param("dsId") Long dsId);
/**
* Count total AutoAssignments for Distribution set.
*
* @param dsId
* to be found
* @return number of Auto Assignments for Distribution set
*/
@Query(value = "SELECT COUNT(f.autoAssignDistributionSet) FROM JpaTargetFilterQuery f WHERE f.autoAssignDistributionSet.id = :dsId GROUP BY f.autoAssignDistributionSet")
Long countAutoAssignmentsForDistributionSet(@Param("dsId") Long dsId);
/**
* deletes the {@link DistributionSet}s with the given IDs.
*

View File

@@ -57,6 +57,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult;
import org.eclipse.hawkbit.repository.model.DistributionSetType;
import org.eclipse.hawkbit.repository.model.MetaData;
import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.Statistic;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.hawkbit.repository.rsql.VirtualPropertyReplacer;
import org.eclipse.hawkbit.tenancy.TenantAware;
@@ -160,6 +161,21 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
return distributionSetRepository.countByTypeId(typeId);
}
@Override
public List<Statistic> countRolloutsByStatusForDistributionSet(Long dsId) {
return distributionSetRepository.countRolloutsByStatusForDistributionSet(dsId).stream().map(Statistic.class::cast).collect(Collectors.toList());
}
@Override
public List<Statistic> countActionsByStatusForDistributionSet(Long dsId) {
return distributionSetRepository.countActionsByStatusForDistributionSet(dsId).stream().map(Statistic.class::cast).collect(Collectors.toList());
}
@Override
public Long countAutoAssignmentsForDistributionSet(Long dsId) {
return distributionSetRepository.countAutoAssignmentsForDistributionSet(dsId);
}
@Override
@Transactional
@Retryable(include = {
@@ -664,6 +680,8 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
}
private void throwEntityNotFoundExceptionIfDsTagDoesNotExist(final Long tagId) {
if (!distributionSetTagRepository.existsById(tagId)) {
throw new EntityNotFoundException(DistributionSetTag.class, tagId);

View File

@@ -98,7 +98,6 @@ public class JpaRollout extends AbstractJpaNamedEntity implements Rollout, Event
@Convert("rolloutstatus")
@NotNull
private RolloutStatus status = RolloutStatus.CREATING;
@Column(name = "last_check")
private long lastCheck;

View File

@@ -0,0 +1,17 @@
/**
* Copyright (c) 2023 Bosch.IO GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.hawkbit.repository.jpa.model;
import org.eclipse.hawkbit.repository.model.Statistic;
public interface JpaStatistic extends Statistic {
}