Add commit timestamp and timestamp sorting
This commit is contained in:
parent
4c1aec0dae
commit
a5ff23a0a4
@ -53,9 +53,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.thingsboard.server.controller.ControllerConstants.NEW_LINE;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.*;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.SORT_ORDER_ALLOWABLE_VALUES;
|
||||
|
||||
@RestController
|
||||
@TbCoreComponent
|
||||
@ -131,10 +130,14 @@ public class EntitiesVersionControlController extends BaseController {
|
||||
@ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
|
||||
@RequestParam int pageSize,
|
||||
@ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true)
|
||||
@RequestParam int page) throws ThingsboardException {
|
||||
@RequestParam int page,
|
||||
@ApiParam(value = SORT_PROPERTY_DESCRIPTION, allowableValues = "timestamp")
|
||||
@RequestParam(required = false) String sortProperty,
|
||||
@ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES)
|
||||
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
|
||||
try {
|
||||
EntityId externalEntityId = EntityIdFactory.getByTypeAndUuid(entityType, externalEntityUuid);
|
||||
PageLink pageLink = new PageLink(pageSize, page);
|
||||
PageLink pageLink = createPageLink(pageSize, page, null, sortProperty, sortOrder);
|
||||
return wrapFuture(versionControlService.listEntityVersions(getTenantId(), branch, externalEntityId, pageLink));
|
||||
} catch (Exception e) {
|
||||
throw handleException(e);
|
||||
@ -154,9 +157,13 @@ public class EntitiesVersionControlController extends BaseController {
|
||||
@ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
|
||||
@RequestParam int pageSize,
|
||||
@ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true)
|
||||
@RequestParam int page) throws ThingsboardException {
|
||||
@RequestParam int page,
|
||||
@ApiParam(value = SORT_PROPERTY_DESCRIPTION, allowableValues = "timestamp")
|
||||
@RequestParam(required = false) String sortProperty,
|
||||
@ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES)
|
||||
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
|
||||
try {
|
||||
PageLink pageLink = new PageLink(pageSize, page);
|
||||
PageLink pageLink = createPageLink(pageSize, page, null, sortProperty, sortOrder);
|
||||
return wrapFuture(versionControlService.listEntityTypeVersions(getTenantId(), branch, entityType, pageLink));
|
||||
} catch (Exception e) {
|
||||
throw handleException(e);
|
||||
@ -183,9 +190,13 @@ public class EntitiesVersionControlController extends BaseController {
|
||||
@ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
|
||||
@RequestParam int pageSize,
|
||||
@ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true)
|
||||
@RequestParam int page) throws ThingsboardException {
|
||||
@RequestParam int page,
|
||||
@ApiParam(value = SORT_PROPERTY_DESCRIPTION, allowableValues = "timestamp")
|
||||
@RequestParam(required = false) String sortProperty,
|
||||
@ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES)
|
||||
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
|
||||
try {
|
||||
PageLink pageLink = new PageLink(pageSize, page);
|
||||
PageLink pageLink = createPageLink(pageSize, page, null, sortProperty, sortOrder);
|
||||
return wrapFuture(versionControlService.listVersions(getTenantId(), branch, pageLink));
|
||||
} catch (Exception e) {
|
||||
throw handleException(e);
|
||||
|
||||
@ -312,7 +312,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
|
||||
} else if (vcResponseMsg.hasCommitResponse()) {
|
||||
var commitResponse = vcResponseMsg.getCommitResponse();
|
||||
var commitResult = new VersionCreationResult();
|
||||
commitResult.setVersion(new EntityVersion(commitResponse.getCommitId(), commitResponse.getName()));
|
||||
commitResult.setVersion(new EntityVersion(commitResponse.getTs(), commitResponse.getCommitId(), commitResponse.getName()));
|
||||
commitResult.setAdded(commitResponse.getAdded());
|
||||
commitResult.setRemoved(commitResponse.getRemoved());
|
||||
commitResult.setModified(commitResponse.getModified());
|
||||
@ -344,7 +344,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
|
||||
}
|
||||
|
||||
private EntityVersion getEntityVersion(TransportProtos.EntityVersionProto proto) {
|
||||
return new EntityVersion(proto.getId(), proto.getName());
|
||||
return new EntityVersion(proto.getTs(), proto.getId(), proto.getName());
|
||||
}
|
||||
|
||||
private VersionedEntityInfo getVersionedEntityInfo(TransportProtos.VersionedEntityInfoProto proto) {
|
||||
|
||||
@ -689,11 +689,12 @@ message CommitRequestMsg {
|
||||
}
|
||||
|
||||
message CommitResponseMsg {
|
||||
string commitId = 1;
|
||||
string name = 2;
|
||||
int32 added = 3;
|
||||
int32 modified = 4;
|
||||
int32 removed = 5;
|
||||
int64 ts = 1;
|
||||
string commitId = 2;
|
||||
string name = 3;
|
||||
int32 added = 4;
|
||||
int32 modified = 5;
|
||||
int32 removed = 6;
|
||||
}
|
||||
|
||||
message PrepareMsg {
|
||||
|
||||
@ -23,6 +23,7 @@ import lombok.NoArgsConstructor;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class EntityVersion {
|
||||
private long timestamp;
|
||||
private String id;
|
||||
private String name;
|
||||
}
|
||||
|
||||
@ -245,7 +245,7 @@ public class DefaultClusterVersionControlService extends TbApplicationEventListe
|
||||
.setTotalElements(data.getTotalElements())
|
||||
.setHasNext(data.hasNext())
|
||||
.addAllVersions(data.getData().stream().map(
|
||||
v -> EntityVersionProto.newBuilder().setId(v.getId()).setName(v.getName()).build()
|
||||
v -> EntityVersionProto.newBuilder().setTs(v.getTimestamp()).setId(v.getId()).setName(v.getName()).build()
|
||||
).collect(Collectors.toList())))
|
||||
);
|
||||
}
|
||||
@ -364,6 +364,7 @@ public class DefaultClusterVersionControlService extends TbApplicationEventListe
|
||||
|
||||
private void reply(VersionControlRequestCtx ctx, VersionCreationResult result) {
|
||||
reply(ctx, Optional.empty(), builder -> builder.setCommitResponse(CommitResponseMsg.newBuilder()
|
||||
.setTs(result.getVersion().getTimestamp())
|
||||
.setCommitId(result.getVersion().getId())
|
||||
.setName(result.getVersion().getName())
|
||||
.setAdded(result.getAdded())
|
||||
|
||||
@ -259,7 +259,7 @@ public class DefaultGitRepositoryService implements GitRepositoryService {
|
||||
}
|
||||
|
||||
private EntityVersion toVersion(GitRepository.Commit commit) {
|
||||
return new EntityVersion(commit.getId(), commit.getMessage());
|
||||
return new EntityVersion(commit.getTimestamp(), commit.getId(), commit.getMessage());
|
||||
}
|
||||
|
||||
private EntityId fromRelativePath(String path) {
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
package org.thingsboard.server.service.sync.vc;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Ordering;
|
||||
import com.google.common.collect.Streams;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
@ -48,6 +49,7 @@ import org.eclipse.jgit.treewalk.TreeWalk;
|
||||
import org.eclipse.jgit.treewalk.filter.PathFilter;
|
||||
import org.thingsboard.server.common.data.page.PageData;
|
||||
import org.thingsboard.server.common.data.page.PageLink;
|
||||
import org.thingsboard.server.common.data.page.SortOrder;
|
||||
import org.thingsboard.server.common.data.sync.vc.EntitiesVersionControlSettings;
|
||||
import org.thingsboard.server.common.data.sync.vc.VersionControlAuthMethod;
|
||||
|
||||
@ -58,10 +60,7 @@ import java.net.InetSocketAddress;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.KeyPair;
|
||||
import java.security.PublicKey;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -180,7 +179,7 @@ public class GitRepository {
|
||||
command.addPath(path);
|
||||
}
|
||||
Iterable<RevCommit> commits = execute(command);
|
||||
return iterableToPageData(commits, this::toCommit, pageLink);
|
||||
return iterableToPageData(commits, this::toCommit, pageLink, revCommitComparatorFunction);
|
||||
}
|
||||
|
||||
public List<String> listFilesAtCommit(String commitId) throws IOException {
|
||||
@ -282,7 +281,7 @@ public class GitRepository {
|
||||
// }
|
||||
|
||||
private Commit toCommit(RevCommit revCommit) {
|
||||
return new Commit(revCommit.getName(), revCommit.getFullMessage(), revCommit.getAuthorIdent().getName());
|
||||
return new Commit(revCommit.getCommitTime() * 1000, revCommit.getName(), revCommit.getFullMessage(), revCommit.getAuthorIdent().getName());
|
||||
}
|
||||
|
||||
private RevCommit resolveCommit(String id) throws IOException {
|
||||
@ -300,11 +299,30 @@ public class GitRepository {
|
||||
return command.call();
|
||||
}
|
||||
|
||||
private static <T,R> PageData<R> iterableToPageData (Iterable<T> iterable, Function<? super T, ? extends R> mapper, PageLink pageLink) {
|
||||
private static Function<PageLink, Comparator<RevCommit>> revCommitComparatorFunction = pageLink -> {
|
||||
SortOrder sortOrder = pageLink.getSortOrder();
|
||||
if (sortOrder != null
|
||||
&& sortOrder.getProperty().equals("timestamp")
|
||||
&& SortOrder.Direction.ASC.equals(sortOrder.getDirection())) {
|
||||
return Comparator.comparingInt(RevCommit::getCommitTime);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
private static <T,R> PageData<R> iterableToPageData (Iterable<T> iterable,
|
||||
Function<? super T, ? extends R> mapper,
|
||||
PageLink pageLink,
|
||||
Function<PageLink, Comparator<T>> comparatorFunction) {
|
||||
int totalElements = Iterables.size(iterable);
|
||||
int totalPages = pageLink.getPageSize() > 0 ? (int) Math.ceil((float) totalElements / pageLink.getPageSize()) : 1;
|
||||
int startIndex = pageLink.getPageSize() * pageLink.getPage();
|
||||
int limit = startIndex + pageLink.getPageSize();
|
||||
if (comparatorFunction != null) {
|
||||
Comparator<T> comparator = comparatorFunction.apply(pageLink);
|
||||
if (comparator != null) {
|
||||
iterable = Ordering.from(comparator).immutableSortedCopy(iterable);
|
||||
}
|
||||
}
|
||||
iterable = Iterables.limit(iterable, limit);
|
||||
if (startIndex < totalElements) {
|
||||
iterable = Iterables.skip(iterable, startIndex);
|
||||
@ -374,6 +392,7 @@ public class GitRepository {
|
||||
|
||||
@Data
|
||||
public static class Commit {
|
||||
private final long timestamp;
|
||||
private final String id;
|
||||
private final String message;
|
||||
private final String authorName;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user