diff --git a/build.gradle b/build.gradle index c356675..d5ab502 100644 --- a/build.gradle +++ b/build.gradle @@ -64,6 +64,7 @@ dependencies { compile group: 'org.webjars', name: 'bootstrap', version: '4.6.0' compile group: 'org.webjars', name: 'bootstrap-select', version: '1.13.8' compile group: 'org.webjars', name: 'font-awesome', version: '4.7.0' + compile group: 'org.webjars', name: 'highcharts', version: '7.0.0' testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test' } diff --git a/src/main/java/ru/ulstu/extractor/controller/Route.java b/src/main/java/ru/ulstu/extractor/controller/Route.java index 34853a5..8a0282e 100644 --- a/src/main/java/ru/ulstu/extractor/controller/Route.java +++ b/src/main/java/ru/ulstu/extractor/controller/Route.java @@ -13,6 +13,7 @@ public class Route { public static final String LIST_REPOSITORY_BRANCHES = "listBranches"; public static final String INDEXING_NEW_REPOSITORY = "indexNewRepository"; public static final String FILTER_COMMITS = "filterCommits"; + public static final String STATISTIC = "statistic"; public static String getLIST_INDEXED_REPOSITORIES() { return LIST_INDEXED_REPOSITORIES; @@ -29,4 +30,8 @@ public class Route { public static String getFILTER_COMMITS() { return FILTER_COMMITS; } + + public static String getSTATISTIC() { + return STATISTIC; + } } diff --git a/src/main/java/ru/ulstu/extractor/controller/StatisticController.java b/src/main/java/ru/ulstu/extractor/controller/StatisticController.java new file mode 100644 index 0000000..55f1f33 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/controller/StatisticController.java @@ -0,0 +1,53 @@ +/* + * 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.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import ru.ulstu.extractor.repository.CommitRepository; + +import java.util.List; +import java.util.stream.Collectors; + +import static ru.ulstu.extractor.controller.Route.STATISTIC; + +@Controller +public class StatisticController { + private final CommitRepository commitRepository; + + public StatisticController(CommitRepository commitRepository) { + this.commitRepository = commitRepository; + } + + @GetMapping(STATISTIC) + public String indexBranch(Model model) { + List authorCommits = commitRepository.getCommitAuthorStatistic().stream() + .map(stat -> new Object[]{stat.getAuthor(), stat.getCountCommit()}) + .collect(Collectors.toList()); + model.addAttribute("commitAuthorData", authorCommits); + List urlCommits = commitRepository.getCommitUrlStatistic().stream() + .map(stat -> new Object[]{stat.getUrl(), stat.getCountCommit()}) + .collect(Collectors.toList()); + model.addAttribute("commitUrlData", urlCommits); + List timeCommits = commitRepository.getCommitTimeStatistic().stream() + .map(stat -> new Object[]{stat.getDate(), stat.getCountCommit()}) + .collect(Collectors.toList()); + model.addAttribute("commitTimeData", timeCommits); + String[] date = new String[timeCommits.size()]; + for (int i = 0; i < timeCommits.size(); i++) { + date[i] = timeCommits.get(i)[0].toString(); + } + model.addAttribute("dates", date); + String[] url = new String[urlCommits.size()]; + for (int i = 0; i < urlCommits.size(); i++) { + url[i] = urlCommits.get(i)[0].toString().substring(urlCommits.get(i)[0].toString().lastIndexOf("/") + 1); + } + model.addAttribute("urls", url); + + return STATISTIC; + } +} diff --git a/src/main/java/ru/ulstu/extractor/model/CommitAuthorStatistic.java b/src/main/java/ru/ulstu/extractor/model/CommitAuthorStatistic.java new file mode 100644 index 0000000..5587cb2 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/model/CommitAuthorStatistic.java @@ -0,0 +1,20 @@ +package ru.ulstu.extractor.model; + +public class CommitAuthorStatistic { + private String author; + private Long countCommit; + + public CommitAuthorStatistic(String author, Long countCommit) { + this.author = author; + this.countCommit = countCommit; + } + + public String getAuthor() { + return author; + } + + public Long getCountCommit() { + return countCommit; + } + +} diff --git a/src/main/java/ru/ulstu/extractor/model/CommitTimeStatistic.java b/src/main/java/ru/ulstu/extractor/model/CommitTimeStatistic.java new file mode 100644 index 0000000..7828896 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/model/CommitTimeStatistic.java @@ -0,0 +1,22 @@ +package ru.ulstu.extractor.model; + +import java.util.Date; + +public class CommitTimeStatistic { + private Date date; + private Long countCommit; + + public CommitTimeStatistic(Date date, Long countCommit) { + this.date = date; + this.countCommit = countCommit; + } + + public Date getDate() { + return date; + } + + public Long getCountCommit() { + return countCommit; + } + +} diff --git a/src/main/java/ru/ulstu/extractor/model/CommitUrlStatistic.java b/src/main/java/ru/ulstu/extractor/model/CommitUrlStatistic.java new file mode 100644 index 0000000..3eb4b37 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/model/CommitUrlStatistic.java @@ -0,0 +1,20 @@ +package ru.ulstu.extractor.model; + +public class CommitUrlStatistic { + private String url; + private Long countCommit; + + public CommitUrlStatistic(String url, Long countCommit) { + this.url = url; + this.countCommit = countCommit; + } + + public String getUrl() { + return url; + } + + public Long getCountCommit() { + return countCommit; + } + +} diff --git a/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java b/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java index 3c32439..6569450 100644 --- a/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java +++ b/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java @@ -1,3 +1,8 @@ +/* + * 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.repository; import org.springframework.data.domain.Page; @@ -6,9 +11,24 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import ru.ulstu.extractor.model.Commit; +import ru.ulstu.extractor.model.CommitAuthorStatistic; +import ru.ulstu.extractor.model.CommitTimeStatistic; +import ru.ulstu.extractor.model.CommitUrlStatistic; import ru.ulstu.extractor.model.Repository; +import java.util.List; + public interface CommitRepository extends JpaRepository { @Query("SELECT c FROM Commit c, Repository r, Branch b WHERE c.branch = b AND r = b.repository AND r = :repository AND b.name = :branchName") Page findByRepositoryAndBranch(Pageable pageable, @Param("repository") Repository repository, @Param("branchName") String branchName); + + @Query("SELECT new ru.ulstu.extractor.model.CommitAuthorStatistic(c.author.name, COUNT(DISTINCT c.hash)) FROM Commit c GROUP by c.author.name") + List getCommitAuthorStatistic(); + + @Query("SELECT new ru.ulstu.extractor.model.CommitUrlStatistic(c.branch.repository.url, COUNT(DISTINCT c.hash)) FROM Commit c GROUP by c.branch.repository.url") + List getCommitUrlStatistic(); + + @Query("SELECT new ru.ulstu.extractor.model.CommitTimeStatistic(cast(c.date as date), COUNT(DISTINCT c.hash)) FROM Commit c GROUP by cast(c.date as date) ORDER by cast(c.date as date)") + List getCommitTimeStatistic(); + } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 34bbcb8..e6edf95 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -1,4 +1,10 @@ +# +# Copyright (C) 2021 Anton Romanov - All Rights Reserved +# You may use, distribute and modify this code, please write to: romanov73@gmail.com. +# + messages.app-name=GitExtractor v0.1.0 messages.menu.home=Main messages.menu.indexed-repos=List of indexed repos -messages.menu.new-repo=Analyse new repo \ No newline at end of file +messages.menu.new-repo=Analyse new repo +messages.menu.statistic=Statistic \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 34bbcb8..e6edf95 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -1,4 +1,10 @@ +# +# Copyright (C) 2021 Anton Romanov - All Rights Reserved +# You may use, distribute and modify this code, please write to: romanov73@gmail.com. +# + messages.app-name=GitExtractor v0.1.0 messages.menu.home=Main messages.menu.indexed-repos=List of indexed repos -messages.menu.new-repo=Analyse new repo \ No newline at end of file +messages.menu.new-repo=Analyse new repo +messages.menu.statistic=Statistic \ No newline at end of file diff --git a/src/main/resources/messages_ru.properties b/src/main/resources/messages_ru.properties index dfda9c7..30c525b 100644 --- a/src/main/resources/messages_ru.properties +++ b/src/main/resources/messages_ru.properties @@ -1,4 +1,10 @@ +# +# Copyright (C) 2021 Anton Romanov - All Rights Reserved +# You may use, distribute and modify this code, please write to: romanov73@gmail.com. +# + messages.app-name=GitЁxtractor v0.1.0 messages.menu.home=На главную messages.menu.indexed-repos=Список проиндексированных репозиториев -messages.menu.new-repo=Анализ нового репозитория \ No newline at end of file +messages.menu.new-repo=Анализ нового репозитория +messages.menu.statistic=Статистика \ No newline at end of file diff --git a/src/main/resources/templates/default.html b/src/main/resources/templates/default.html index 5628b88..254f42c 100644 --- a/src/main/resources/templates/default.html +++ b/src/main/resources/templates/default.html @@ -34,6 +34,9 @@ Link + diff --git a/src/main/resources/templates/statistic.html b/src/main/resources/templates/statistic.html new file mode 100644 index 0000000..fd2107b --- /dev/null +++ b/src/main/resources/templates/statistic.html @@ -0,0 +1,183 @@ + + + + + + Простая обработка формы на Spring MVC + + +
+ + + + +
+
+
+
+
+
+