diff --git a/src/main/java/ru/ulstu/extractor/GitExtractorApplication.java b/src/main/java/ru/ulstu/extractor/GitExtractorApplication.java index 425424f..f9a272d 100644 --- a/src/main/java/ru/ulstu/extractor/GitExtractorApplication.java +++ b/src/main/java/ru/ulstu/extractor/GitExtractorApplication.java @@ -2,8 +2,10 @@ package ru.ulstu.extractor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableScheduling public class GitExtractorApplication { public static void main(String[] args) { SpringApplication.run(GitExtractorApplication.class, args); diff --git a/src/main/java/ru/ulstu/extractor/branch/BranchRepository.java b/src/main/java/ru/ulstu/extractor/branch/BranchRepository.java new file mode 100644 index 0000000..6034cb3 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/branch/BranchRepository.java @@ -0,0 +1,21 @@ +package ru.ulstu.extractor.branch; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import ru.ulstu.extractor.model.Branch; +import ru.ulstu.extractor.model.Repository; + +import java.util.List; + +public interface BranchRepository extends JpaRepository { + Branch findByRepositoryAndName(Repository repository, String name); + + @Query("select count(c) from Commit c LEFT JOIN c.branch b LEFT JOIN Repository r where r.id = ?1 AND b.name = ?2") + int getCommitsCount(Integer repositoryId, String name); + + List findByRepositoryId(Integer repositoryId); + + Page findByRepository(Repository repository, Pageable pageable); +} diff --git a/src/main/java/ru/ulstu/extractor/service/BranchService.java b/src/main/java/ru/ulstu/extractor/branch/BranchService.java similarity index 78% rename from src/main/java/ru/ulstu/extractor/service/BranchService.java rename to src/main/java/ru/ulstu/extractor/branch/BranchService.java index 8ce9353..8cae8e6 100644 --- a/src/main/java/ru/ulstu/extractor/service/BranchService.java +++ b/src/main/java/ru/ulstu/extractor/branch/BranchService.java @@ -3,16 +3,19 @@ * You may use, distribute and modify this code, please write to: romanov73@gmail.com. */ -package ru.ulstu.extractor.service; +package ru.ulstu.extractor.branch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import ru.ulstu.extractor.model.BaseEntity; import ru.ulstu.extractor.model.Branch; import ru.ulstu.extractor.model.Commit; import ru.ulstu.extractor.model.Repository; -import ru.ulstu.extractor.repository.BranchRepository; +import ru.ulstu.extractor.service.CommitService; import java.util.List; import java.util.stream.Collectors; @@ -29,6 +32,7 @@ public class BranchService { this.commitService = commitService; } + @Transactional public Branch save(Branch branch, List commits) { LOG.debug("Start save {} branch with {} commits ", branch.getName(), commits.size()); List commitsToRemoveIds = branch.getCommits().stream().map(BaseEntity::getId).collect(Collectors.toList()); @@ -52,6 +56,14 @@ public class BranchService { return branchRepository.findByRepositoryAndName(repository, branchName); } + public int getCommitsCount(Integer repositoryId, String branchName) { + return branchRepository.getCommitsCount(repositoryId, branchName); + } + + public Page findByRepository(Repository repository, Pageable pageable) { + return branchRepository.findByRepository(repository, pageable); + } + public List findAll() { return branchRepository.findAll(); } diff --git a/src/main/java/ru/ulstu/extractor/controller/BranchController.java b/src/main/java/ru/ulstu/extractor/controller/BranchController.java index 5e0f845..64ccecc 100644 --- a/src/main/java/ru/ulstu/extractor/controller/BranchController.java +++ b/src/main/java/ru/ulstu/extractor/controller/BranchController.java @@ -9,8 +9,8 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; -import ru.ulstu.extractor.repository.BranchRepository; -import ru.ulstu.extractor.repository.RepositoryRepository; +import ru.ulstu.extractor.branch.BranchRepository; +import ru.ulstu.extractor.gitrepository.GitRepositoryRepository; import springfox.documentation.annotations.ApiIgnore; import static ru.ulstu.extractor.controller.Route.DELETE_BRANCH; @@ -19,11 +19,11 @@ import static ru.ulstu.extractor.controller.Route.LIST_REPOSITORY_BRANCHES; @Controller @ApiIgnore public class BranchController { - private final RepositoryRepository repositoryRepository; + private final GitRepositoryRepository gitRepositoryRepository; private final BranchRepository branchRepository; - public BranchController(RepositoryRepository repositoryRepository, BranchRepository branchRepository) { - this.repositoryRepository = repositoryRepository; + public BranchController(GitRepositoryRepository gitRepositoryRepository, BranchRepository branchRepository) { + this.gitRepositoryRepository = gitRepositoryRepository; this.branchRepository = branchRepository; } @@ -32,7 +32,7 @@ public class BranchController { Model model, @RequestParam int repositoryId) { model.addAttribute("branches", branchRepository.findByRepositoryId(repositoryId)); - model.addAttribute("repository", repositoryRepository.findById(repositoryId).get()); + model.addAttribute("repository", gitRepositoryRepository.findById(repositoryId).get()); return LIST_REPOSITORY_BRANCHES; } @@ -42,7 +42,7 @@ public class BranchController { @RequestParam Integer id) { branchRepository.deleteById(id); model.addAttribute("branches", branchRepository.findByRepositoryId(repositoryId)); - model.addAttribute("repository", repositoryRepository.findById(repositoryId).get()); + model.addAttribute("repository", gitRepositoryRepository.findById(repositoryId).get()); return LIST_REPOSITORY_BRANCHES; } } diff --git a/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java b/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java index ce2433f..3102ba5 100644 --- a/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java +++ b/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java @@ -15,10 +15,10 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import ru.ulstu.extractor.gitrepository.GitRepositoryService; import ru.ulstu.extractor.model.Branch; import ru.ulstu.extractor.model.mvc.FilterForm; import ru.ulstu.extractor.model.mvc.RepoForm; -import ru.ulstu.extractor.service.GitRepositoryService; import ru.ulstu.extractor.service.IndexService; import springfox.documentation.annotations.ApiIgnore; diff --git a/src/main/java/ru/ulstu/extractor/controller/RepoController.java b/src/main/java/ru/ulstu/extractor/controller/RepoController.java index 9be6c93..847003d 100644 --- a/src/main/java/ru/ulstu/extractor/controller/RepoController.java +++ b/src/main/java/ru/ulstu/extractor/controller/RepoController.java @@ -12,8 +12,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import ru.ulstu.extractor.gitrepository.GitRepositoryService; import ru.ulstu.extractor.model.Commit; -import ru.ulstu.extractor.service.GitRepositoryService; import ru.ulstu.extractor.service.IndexService; import ru.ulstu.extractor.util.HttpUtils; diff --git a/src/main/java/ru/ulstu/extractor/controller/RepositoryController.java b/src/main/java/ru/ulstu/extractor/controller/RepositoryController.java index dd58781..ee5de82 100644 --- a/src/main/java/ru/ulstu/extractor/controller/RepositoryController.java +++ b/src/main/java/ru/ulstu/extractor/controller/RepositoryController.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; -import ru.ulstu.extractor.repository.RepositoryRepository; +import ru.ulstu.extractor.gitrepository.GitRepositoryRepository; import springfox.documentation.annotations.ApiIgnore; import static ru.ulstu.extractor.controller.Route.DELETE_INDEXED_REPOSITORY; @@ -18,23 +18,23 @@ import static ru.ulstu.extractor.controller.Route.LIST_INDEXED_REPOSITORIES; @Controller @ApiIgnore public class RepositoryController { - private final RepositoryRepository repositoryRepository; + private final GitRepositoryRepository gitRepositoryRepository; - public RepositoryController(RepositoryRepository repositoryRepository) { - this.repositoryRepository = repositoryRepository; + public RepositoryController(GitRepositoryRepository gitRepositoryRepository) { + this.gitRepositoryRepository = gitRepositoryRepository; } @GetMapping(LIST_INDEXED_REPOSITORIES) public String indexNewRepo(Model model) { - model.addAttribute("repositories", repositoryRepository.findAll()); + model.addAttribute("repositories", gitRepositoryRepository.findAll()); return LIST_INDEXED_REPOSITORIES; } @GetMapping(DELETE_INDEXED_REPOSITORY) public String deleteRepo(Model model, @RequestParam Integer id) { - repositoryRepository.deleteById(id); - model.addAttribute("repositories", repositoryRepository.findAll()); + gitRepositoryRepository.deleteById(id); + model.addAttribute("repositories", gitRepositoryRepository.findAll()); return "redirect:/" + LIST_INDEXED_REPOSITORIES; } } diff --git a/src/main/java/ru/ulstu/extractor/controller/StatisticController.java b/src/main/java/ru/ulstu/extractor/controller/StatisticController.java index e522c04..fd729ef 100644 --- a/src/main/java/ru/ulstu/extractor/controller/StatisticController.java +++ b/src/main/java/ru/ulstu/extractor/controller/StatisticController.java @@ -9,9 +9,9 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import ru.ulstu.extractor.branch.BranchService; import ru.ulstu.extractor.model.mvc.FilterForm; import ru.ulstu.extractor.repository.CommitRepository; -import ru.ulstu.extractor.service.BranchService; import ru.ulstu.extractor.service.FilteringService; import springfox.documentation.annotations.ApiIgnore; diff --git a/src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java b/src/main/java/ru/ulstu/extractor/gitrepository/GitRepositoryRepository.java similarity index 53% rename from src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java rename to src/main/java/ru/ulstu/extractor/gitrepository/GitRepositoryRepository.java index 21263f4..a94a59a 100644 --- a/src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java +++ b/src/main/java/ru/ulstu/extractor/gitrepository/GitRepositoryRepository.java @@ -1,8 +1,8 @@ -package ru.ulstu.extractor.repository; +package ru.ulstu.extractor.gitrepository; import org.springframework.data.jpa.repository.JpaRepository; import ru.ulstu.extractor.model.Repository; -public interface RepositoryRepository extends JpaRepository { +public interface GitRepositoryRepository extends JpaRepository { Repository findByUrl(String url); } diff --git a/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java b/src/main/java/ru/ulstu/extractor/gitrepository/GitRepositoryService.java similarity index 91% rename from src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java rename to src/main/java/ru/ulstu/extractor/gitrepository/GitRepositoryService.java index 6f85552..61eebf9 100644 --- a/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java +++ b/src/main/java/ru/ulstu/extractor/gitrepository/GitRepositoryService.java @@ -1,9 +1,4 @@ -/* - * Copyright (C) 2021 Anton Romanov - All Rights Reserved - * You may use, distribute and modify this code, please write to: romanov73@gmail.com. - */ - -package ru.ulstu.extractor.service; +package ru.ulstu.extractor.gitrepository; import org.apache.commons.io.FileUtils; import org.eclipse.jgit.api.CreateBranchCommand; @@ -15,12 +10,13 @@ import org.eclipse.jgit.internal.storage.file.FileRepository; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.ObjectReader; -import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.treewalk.TreeWalk; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import ru.ulstu.extractor.heuristic.model.BusinessLogicUnit; import ru.ulstu.extractor.heuristic.model.EntityUnit; @@ -31,6 +27,7 @@ import ru.ulstu.extractor.model.Branch; import ru.ulstu.extractor.model.Commit; import ru.ulstu.extractor.model.FileChange; import ru.ulstu.extractor.model.LineChange; +import ru.ulstu.extractor.model.Repository; import java.io.ByteArrayOutputStream; import java.io.File; @@ -61,18 +58,20 @@ public class GitRepositoryService { private String customProjectsDir; private final ExecutorService executorService = Executors.newFixedThreadPool(4); private final ExecutorService executorServiceCommits = Executors.newFixedThreadPool(4); - private final StructuralUnitService structuralUnitService; + private final GitRepositoryRepository gitRepositoryRepository; - public GitRepositoryService(StructuralUnitService structuralUnitService) { + public GitRepositoryService(StructuralUnitService structuralUnitService, + GitRepositoryRepository gitRepositoryRepository) { this.structuralUnitService = structuralUnitService; + this.gitRepositoryRepository = gitRepositoryRepository; } public List getRemoteBranches(String url) throws GitAPIException, IOException { LOG.debug("Get remote branches of {}. Clone", url); cloneOrUpdateRepo(url); LOG.debug("Get remote branches of {}. Get branches", url); - Repository localRepo = new FileRepository(getProjectGitDirectory(url)); + org.eclipse.jgit.lib.Repository localRepo = new FileRepository(getProjectGitDirectory(url)); Git git = new Git(localRepo); List branches = git.branchList().setListMode(ListBranchCommand.ListMode.REMOTE) .call() @@ -88,7 +87,7 @@ public class GitRepositoryService { LOG.debug("Get local branches of {}. Clone", url); cloneOrUpdateRepo(url); LOG.debug("Get local branches of {}. Get branches", url); - Repository localRepo = new FileRepository(getProjectGitDirectory(url)); + org.eclipse.jgit.lib.Repository localRepo = new FileRepository(getProjectGitDirectory(url)); Git git = new Git(localRepo); List branches = git.branchList() .call() @@ -105,7 +104,7 @@ public class GitRepositoryService { if (needUpdate) { cloneOrUpdateRepo(repositoryUrl, branchName); } - Repository localRepo = new FileRepository(getProjectGitDirectory(repositoryUrl)); + org.eclipse.jgit.lib.Repository localRepo = new FileRepository(getProjectGitDirectory(repositoryUrl)); Git git = new Git(localRepo); List commits = new ArrayList<>(); @@ -144,7 +143,7 @@ public class GitRepositoryService { return list; } - private void checkoutBranch(String repositoryUrl, Git git, Repository localRepo, String branchName) throws GitAPIException, IOException { + private void checkoutBranch(String repositoryUrl, Git git, org.eclipse.jgit.lib.Repository localRepo, String branchName) throws GitAPIException, IOException { LOG.debug("Checkout branch {} {}", repositoryUrl, branchName); git.pull().call(); if (!localRepo.getBranch().equals(branchName)) { @@ -192,7 +191,7 @@ public class GitRepositoryService { private void cloneOrUpdateRepo(String repositoryUrl, String branchName) throws GitAPIException, IOException { Git git; - Repository localRepo; + org.eclipse.jgit.lib.Repository localRepo; if (projectDirExists(getProjectDirectoryFile(repositoryUrl))) { localRepo = new FileRepository(getProjectGitDirectory(repositoryUrl)); git = new Git(localRepo); @@ -240,7 +239,7 @@ public class GitRepositoryService { return file.exists(); } - private List findDiffBetweenTwoRevisions(RevCommit laterCommit, RevCommit earlierCommit, Repository localRepo) { + private List findDiffBetweenTwoRevisions(RevCommit laterCommit, RevCommit earlierCommit, org.eclipse.jgit.lib.Repository localRepo) { if (laterCommit == null || earlierCommit == null) { return null; } @@ -256,7 +255,7 @@ public class GitRepositoryService { return parseOutputDiff(output, localRepo, laterCommit); } - private List parseOutputDiff(String output, Repository repository, RevCommit commit) { + private List parseOutputDiff(String output, org.eclipse.jgit.lib.Repository repository, RevCommit commit) { List changes = new ArrayList<>(); String[] strings = output.split("\n"); FileChange fileChange = new FileChange(); @@ -322,7 +321,7 @@ public class GitRepositoryService { return changes; } - private String getContent(Repository repository, RevCommit commit, String path) { + private String getContent(org.eclipse.jgit.lib.Repository repository, RevCommit commit, String path) { try (TreeWalk treeWalk = TreeWalk.forPath(repository, path, commit.getTree())) { if (treeWalk != null) { ObjectId blobId = treeWalk.getObjectId(0); @@ -346,4 +345,8 @@ public class GitRepositoryService { } return Optional.empty(); } + + public Page findAll(Pageable pageable) { + return gitRepositoryRepository.findAll(pageable); + } } diff --git a/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java b/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java index 0939e08..ccedc05 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java @@ -11,10 +11,10 @@ import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import ru.ulstu.extractor.gitrepository.GitRepositoryService; import ru.ulstu.extractor.heuristic.model.BusinessLogicUnit; import ru.ulstu.extractor.heuristic.model.EntityUnit; import ru.ulstu.extractor.heuristic.model.ResourceUnit; -import ru.ulstu.extractor.service.GitRepositoryService; import ru.ulstu.extractor.util.HttpUtils; import javax.servlet.http.HttpServletRequest; diff --git a/src/main/java/ru/ulstu/extractor/loader/GitScheduler.java b/src/main/java/ru/ulstu/extractor/loader/GitScheduler.java new file mode 100644 index 0000000..4a16fdc --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/loader/GitScheduler.java @@ -0,0 +1,69 @@ +package ru.ulstu.extractor.loader; + +import org.eclipse.jgit.api.errors.GitAPIException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import ru.ulstu.extractor.branch.BranchService; +import ru.ulstu.extractor.gitrepository.GitRepositoryService; +import ru.ulstu.extractor.model.Branch; +import ru.ulstu.extractor.model.OffsetablePageRequest; +import ru.ulstu.extractor.model.Repository; +import ru.ulstu.extractor.service.IndexService; +import ru.ulstu.extractor.ts.AbstractTSExtractor; + +import java.io.IOException; +import java.util.List; + +@Service +public class GitScheduler { + private final static int DEFAULT_PAGE_SIZE = 100; + private final Logger log = LoggerFactory.getLogger(GitScheduler.class); + private final GitRepositoryService gitRepositoryService; + private final BranchService branchService; + private final IndexService indexService; + private final List tsExtractors; + + public GitScheduler(GitRepositoryService gitRepositoryService, + BranchService branchService, + IndexService indexService, + List tsExtractors) { + this.gitRepositoryService = gitRepositoryService; + this.branchService = branchService; + this.indexService = indexService; + this.tsExtractors = tsExtractors; + } + + @Scheduled(cron = "* */5 * * * *") + public void getCommitsCount() { + log.debug("Load commits count started"); + int repositoryPageNumber = 0; + Page repositoryPage; + do { + int branchPageNumber = 0; + repositoryPage = gitRepositoryService.findAll( + new OffsetablePageRequest(repositoryPageNumber, DEFAULT_PAGE_SIZE)); + Page branchPage; + for (Repository repository : repositoryPage.getContent()) { + do { + branchPage = branchService.findByRepository(repository, + new OffsetablePageRequest(branchPageNumber, DEFAULT_PAGE_SIZE)); + for (Branch branch : branchPage.getContent()) { + try { + indexService.index(repository.getUrl(), branch.getName()); + tsExtractors.forEach(tsExtractor -> tsExtractor.addPoint(repository.getId(), branch.getName())); + } catch (GitAPIException | IOException ex) { + log.warn(ex.getMessage()); + ex.printStackTrace(); + } + } + branchPageNumber++; + } while (!branchPage.isEmpty()); + } + repositoryPageNumber++; + } while (!repositoryPage.isEmpty()); + log.debug("Load commits count finished"); + } +} diff --git a/src/main/java/ru/ulstu/extractor/repository/BranchRepository.java b/src/main/java/ru/ulstu/extractor/repository/BranchRepository.java deleted file mode 100644 index d16b1a2..0000000 --- a/src/main/java/ru/ulstu/extractor/repository/BranchRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.ulstu.extractor.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.ulstu.extractor.model.Branch; -import ru.ulstu.extractor.model.Repository; - -import java.util.List; - -public interface BranchRepository extends JpaRepository { - Branch findByRepositoryAndName(Repository repository, String name); - - List findByRepositoryId(Integer repositoryId); -} diff --git a/src/main/java/ru/ulstu/extractor/repository/TimeSeriesValueRepository.java b/src/main/java/ru/ulstu/extractor/repository/TimeSeriesValueRepository.java index 8289b55..cad99ca 100644 --- a/src/main/java/ru/ulstu/extractor/repository/TimeSeriesValueRepository.java +++ b/src/main/java/ru/ulstu/extractor/repository/TimeSeriesValueRepository.java @@ -1,13 +1,10 @@ package ru.ulstu.extractor.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ru.ulstu.extractor.model.TimeSeries; import ru.ulstu.extractor.model.TimeSeriesValue; -import java.util.List; - public interface TimeSeriesValueRepository extends JpaRepository { - TimeSeriesValue findByTimeSeriesAndName(TimeSeries timeSeries, String name); + //TimeSeriesValue findByTimeSeriesAndName(TimeSeries timeSeries, String name); - List findTimeSeriesValueById(Integer repositoryId); + //List findTimeSeriesValueById(Integer repositoryId); } diff --git a/src/main/java/ru/ulstu/extractor/service/FilteringService.java b/src/main/java/ru/ulstu/extractor/service/FilteringService.java index 221f133..51802aa 100644 --- a/src/main/java/ru/ulstu/extractor/service/FilteringService.java +++ b/src/main/java/ru/ulstu/extractor/service/FilteringService.java @@ -9,10 +9,10 @@ import com.sun.istack.NotNull; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import ru.ulstu.extractor.gitrepository.GitRepositoryRepository; import ru.ulstu.extractor.model.Commit; import ru.ulstu.extractor.repository.AuthorRepository; import ru.ulstu.extractor.repository.CommitRepository; -import ru.ulstu.extractor.repository.RepositoryRepository; import java.util.List; import java.util.Map; @@ -21,20 +21,20 @@ import java.util.Map; public class FilteringService { private final AuthorRepository authorRepository; private final CommitRepository commitRepository; - private final RepositoryRepository repositoryRepository; + private final GitRepositoryRepository gitRepositoryRepository; public FilteringService(AuthorRepository authorRepository, CommitRepository commitRepository, - RepositoryRepository repositoryRepository) { + GitRepositoryRepository gitRepositoryRepository) { this.authorRepository = authorRepository; this.commitRepository = commitRepository; - this.repositoryRepository = repositoryRepository; + this.gitRepositoryRepository = gitRepositoryRepository; } public List getRepositoryAuthors(@NotNull String repositoryUrl, @NotNull String branchName) { return authorRepository.findByRepositoryAndBranch( - repositoryRepository.findByUrl(repositoryUrl), + gitRepositoryRepository.findByUrl(repositoryUrl), branchName ); } @@ -51,7 +51,7 @@ public class FilteringService { Pageable pageable) { return commitRepository.findByRepositoryAndBranch( pageable, - repositoryRepository.findByUrl(repositoryUrl), + gitRepositoryRepository.findByUrl(repositoryUrl), branchName, author, filter, diff --git a/src/main/java/ru/ulstu/extractor/service/IndexService.java b/src/main/java/ru/ulstu/extractor/service/IndexService.java index 3cd9644..86f9454 100644 --- a/src/main/java/ru/ulstu/extractor/service/IndexService.java +++ b/src/main/java/ru/ulstu/extractor/service/IndexService.java @@ -10,10 +10,13 @@ import org.eclipse.jgit.api.errors.GitAPIException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ru.ulstu.extractor.branch.BranchService; +import ru.ulstu.extractor.gitrepository.GitRepositoryRepository; +import ru.ulstu.extractor.gitrepository.GitRepositoryService; import ru.ulstu.extractor.model.Branch; import ru.ulstu.extractor.model.Commit; import ru.ulstu.extractor.model.Repository; -import ru.ulstu.extractor.repository.RepositoryRepository; import java.io.IOException; import java.util.Collections; @@ -24,21 +27,22 @@ public class IndexService { private final static Logger LOG = LoggerFactory.getLogger(IndexService.class); private final static int COMMITS_PAGE_SIZE = 10; private final GitRepositoryService gitRepositoryService; - private final RepositoryRepository repositoryRepository; + private final GitRepositoryRepository gitRepositoryRepository; private final BranchService branchService; public IndexService(GitRepositoryService gitRepositoryService, - RepositoryRepository repositoryRepository, + GitRepositoryRepository gitRepositoryRepository, BranchService branchService) { this.gitRepositoryService = gitRepositoryService; - this.repositoryRepository = repositoryRepository; + this.gitRepositoryRepository = gitRepositoryRepository; this.branchService = branchService; } + @Transactional public void index(@NotNull String repositoryUrl, @NotNull String branchName) throws GitAPIException, IOException { - Repository repository = repositoryRepository.findByUrl(repositoryUrl); + Repository repository = gitRepositoryRepository.findByUrl(repositoryUrl); if (repository == null) { - repository = repositoryRepository.save(new Repository(repositoryUrl)); + repository = gitRepositoryRepository.save(new Repository(repositoryUrl)); } Branch branch = branchService.findByRepositoryAndName(repository, branchName); if (branch == null) { diff --git a/src/main/java/ru/ulstu/extractor/service/TimeSeriesService.java b/src/main/java/ru/ulstu/extractor/service/TimeSeriesService.java index 1054ce9..5653c3e 100644 --- a/src/main/java/ru/ulstu/extractor/service/TimeSeriesService.java +++ b/src/main/java/ru/ulstu/extractor/service/TimeSeriesService.java @@ -64,10 +64,10 @@ public class TimeSeriesService { TimeSeries timeSeries = findOrCreate(timeSeriesName); timeSeriesValueRepository.save(new TimeSeriesValue(timeSeries, date, value)); } - - public TimeSeriesValue findByTimeSeriesAndName(TimeSeries timeSeries, String name) { - return timeSeriesValueRepository.findByTimeSeriesAndName(timeSeries, name); - } +// +// public TimeSeriesValue findByTimeSeriesAndName(TimeSeries timeSeries, String name) { +// return timeSeriesValueRepository.findByTimeSeriesAndName(timeSeries, name); +// } public List findAll() { return timeSeriesValueRepository.findAll(); diff --git a/src/main/java/ru/ulstu/extractor/ts/AbstractTSExtractor.java b/src/main/java/ru/ulstu/extractor/ts/AbstractTSExtractor.java index e460ba4..14271ee 100644 --- a/src/main/java/ru/ulstu/extractor/ts/AbstractTSExtractor.java +++ b/src/main/java/ru/ulstu/extractor/ts/AbstractTSExtractor.java @@ -1,22 +1,21 @@ package ru.ulstu.extractor.ts; -import ru.ulstu.extractor.model.TimeSeriesValue; import ru.ulstu.extractor.service.TimeSeriesService; -import java.util.List; +import java.util.Date; public abstract class AbstractTSExtractor { public abstract String getTSName(); - public abstract TimeSeriesService getTimeSeriesService(); + public abstract int getNewTSValue(Integer repositoryId, String branchName); - public void addPoint(int value) { - } + public abstract TimeSeriesService getTimeSeriesService(); - public void addTS(List values) { - getTimeSeriesService().findOrCreate(getTSName()); + public void addPoint(Integer repositoryId, String branchName) { + getTimeSeriesService().addTimeSeriesValue( + String.format("%s %s %s", getTSName(), repositoryId, branchName), + new Date(), + getNewTSValue(repositoryId, branchName)); } - - } diff --git a/src/main/java/ru/ulstu/extractor/ts/CommitsTS.java b/src/main/java/ru/ulstu/extractor/ts/CommitsTS.java index af15290..a50f988 100644 --- a/src/main/java/ru/ulstu/extractor/ts/CommitsTS.java +++ b/src/main/java/ru/ulstu/extractor/ts/CommitsTS.java @@ -1,14 +1,18 @@ package ru.ulstu.extractor.ts; import org.springframework.stereotype.Component; +import ru.ulstu.extractor.branch.BranchService; import ru.ulstu.extractor.service.TimeSeriesService; @Component public class CommitsTS extends AbstractTSExtractor { private final TimeSeriesService timeSeriesService; + private final BranchService branchService; - public CommitsTS(TimeSeriesService timeSeriesService) { + public CommitsTS(TimeSeriesService timeSeriesService, + BranchService branchService) { this.timeSeriesService = timeSeriesService; + this.branchService = branchService; } @Override @@ -16,6 +20,11 @@ public class CommitsTS extends AbstractTSExtractor { return "Количество коммитов во времени"; } + @Override + public int getNewTSValue(Integer repositoryId, String branchName) { + return branchService.getCommitsCount(repositoryId, branchName); + } + @Override public TimeSeriesService getTimeSeriesService() { return timeSeriesService;