89-time-series-by-cron
#90
Merged
romanov73
merged 5 commits from 89-time-series-by-cron
into master
1 year ago
@ -0,0 +1,15 @@
|
||||
package ru.ulstu.extractor.gitrepository.service;
|
||||
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
|
||||
public interface GitApi {
|
||||
Integer getBranchesCount(Branch branch);
|
||||
|
||||
Integer getStarsCount(Branch branch);
|
||||
|
||||
Integer getOpenIssuesCount(Branch branch);
|
||||
|
||||
String getFormattedUrl(Branch branch, String template);
|
||||
|
||||
Integer getAuthorsCompletedIssues(Branch branch);
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package ru.ulstu.extractor.gitrepository.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.http.HttpService;
|
||||
|
||||
@Service
|
||||
public class GitAtheneApi implements GitApi {
|
||||
private final HttpService httpService;
|
||||
private static final String BRANCHES_COUNT_URL = "%s/api/v1/repos/%s/%s/branches";
|
||||
private static final String STARS_COUNT_URL = "%s/api/v1/repos/%s/%s";
|
||||
private static final String OPEN_ISSUES_URL = "%s/api/v1/repos/%s/%s/issues?state=open";
|
||||
private static final String COMPLETED_ISSUES_URL = "%s/api/v1/repos/%s/%s/issues?state=closed";
|
||||
|
||||
public GitAtheneApi(HttpService httpService) {
|
||||
this.httpService = httpService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getBranchesCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, BRANCHES_COUNT_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getStarsCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, STARS_COUNT_URL))
|
||||
.getJSONObject(0)
|
||||
.getInt("stars_count");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getOpenIssuesCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, OPEN_ISSUES_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFormattedUrl(Branch branch, String template) {
|
||||
String[] urlParts = branch.getGitRepository().getUrl().split("/");
|
||||
return String.format(template, urlParts[0] + "/" + urlParts[1] + "/" + urlParts[2], urlParts[3], urlParts[4]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getAuthorsCompletedIssues(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, COMPLETED_ISSUES_URL))
|
||||
.length();
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package ru.ulstu.extractor.gitrepository.service;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.http.HttpService;
|
||||
|
||||
@Service
|
||||
public class GithubApi implements GitApi {
|
||||
private final HttpService httpService;
|
||||
private static final String BRANCHES_COUNT_URL = "https://api.github.com/repos/%s/%s/branches";
|
||||
private static final String STARS_COUNT_URL = "https://api.github.com/repos/%s/%s";
|
||||
private static final String OPEN_ISSUES_URL = "https://api.github.com/repos/%s/%s/issues?state=open";
|
||||
private static final String AUTHOR_COMPLETED_ISSUES_URL = "https://api.github.com/repos/%s/%s/issues?state=open";
|
||||
|
||||
public GithubApi(HttpService httpService) {
|
||||
this.httpService = httpService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getBranchesCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, BRANCHES_COUNT_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getStarsCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, STARS_COUNT_URL))
|
||||
.getJSONObject(0)
|
||||
.getInt("watchers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getOpenIssuesCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, OPEN_ISSUES_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFormattedUrl(Branch branch, String template) {
|
||||
String[] urlParts = branch.getGitRepository().getUrl().split("/");
|
||||
return String.format(template, urlParts[3], urlParts[4]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getAuthorsCompletedIssues(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, AUTHOR_COMPLETED_ISSUES_URL))
|
||||
.length();
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package ru.ulstu.extractor.gitrepository.service;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.http.HttpService;
|
||||
|
||||
@Service
|
||||
public class GitlabApi implements GitApi {
|
||||
private final HttpService httpService;
|
||||
private static final String BRANCHES_COUNT_URL = "%s/api/v4/projects/%s/repository/branches";
|
||||
private final static String PROJECT_ID_URL = "https://gitlab.com/api/v4/users/%s/projects?search=%s";
|
||||
private static final String PROJECT_INFO_URL = "%s/api/v4/projects/%s";
|
||||
private static final String OPEN_ISSUES_URL = "%s/api/v4/projects/%s/issues?state=opened";
|
||||
private static final String COMPLETED_ISSUES_URL = "%s/api/v4/projects/%s/issues?state=closed";
|
||||
|
||||
public GitlabApi(HttpService httpService) {
|
||||
this.httpService = httpService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getBranchesCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, BRANCHES_COUNT_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getStarsCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, PROJECT_INFO_URL))
|
||||
.getJSONObject(0)
|
||||
.getInt("star_count");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getOpenIssuesCount(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, OPEN_ISSUES_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFormattedUrl(Branch branch, String template) {
|
||||
String[] urlParts = branch.getGitRepository().getUrl().split("/");
|
||||
return String.format(template, urlParts[0] + "/" + urlParts[1] + "/" + urlParts[2], getProjectId(branch));
|
||||
}
|
||||
|
||||
public String getFormattedUrlForProjectId(Branch branch, String template) {
|
||||
String[] urlParts = branch.getGitRepository().getUrl().split("/");
|
||||
// получаем корректное название репозитория, gitlab всегда добавляет .git в конец
|
||||
return String.format(template, urlParts[3], branch.getGitRepository().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getAuthorsCompletedIssues(Branch branch) {
|
||||
return httpService
|
||||
.get(getFormattedUrl(branch, COMPLETED_ISSUES_URL))
|
||||
.length();
|
||||
}
|
||||
|
||||
private String getProjectId(Branch branch) {
|
||||
JSONArray projects = httpService.get(getFormattedUrlForProjectId(branch, PROJECT_ID_URL));
|
||||
for (int i = 0; i < projects.length(); i++) {
|
||||
if (projects.getJSONObject(i).get("name").equals(branch.getGitRepository().getName())) {
|
||||
return String.valueOf(projects.getJSONObject(i).getInt("id"));
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("Id проекта не найден: " + branch.getGitRepository().getName());
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
package ru.ulstu.extractor.ts.creator;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.author.model.Author;
|
||||
import ru.ulstu.extractor.author.service.AuthorService;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.commit.model.Commit;
|
||||
import ru.ulstu.extractor.commit.service.CommitService;
|
||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesValue;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class AuthorTS extends AbstractTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final CommitService commitService;
|
||||
private final AuthorService authorService;
|
||||
private final GitRepositoryService gitRepositoryService;
|
||||
private final BranchService branchService;
|
||||
|
||||
public AuthorTS(TimeSeriesService timeSeriesService,
|
||||
CommitService commitService,
|
||||
AuthorService authorService,
|
||||
GitRepositoryService gitRepositoryService,
|
||||
BranchService branchService) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.commitService = commitService;
|
||||
this.authorService = authorService;
|
||||
this.gitRepositoryService = gitRepositoryService;
|
||||
this.branchService = branchService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.AUTHORS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TimeSeries> getTimeSeries(Integer repositoryId, String branchName) {
|
||||
List<TimeSeries> timeSeriesResult = new ArrayList<>();
|
||||
List<Author> authors = authorService.findAll();
|
||||
GitRepository gitRepository = gitRepositoryService.findById(repositoryId);
|
||||
List<Commit> commits = new ArrayList<>(commitService.findByRepositoryIdAndName(repositoryId, branchName));
|
||||
for (Author author : authors) {
|
||||
TimeSeries timeSeries = new TimeSeries(
|
||||
String.format("%s %s %s %s",
|
||||
gitRepository.getName(),
|
||||
branchName,
|
||||
author.getName(),
|
||||
getTimeSeriesType().getDescription()),
|
||||
branchService.findByRepositoryAndName(gitRepository, branchName),
|
||||
getTimeSeriesType());
|
||||
for (Commit commit : commits) {
|
||||
if (commit.getAuthor().equals(author)) {
|
||||
timeSeries.getValues().add(new TimeSeriesValue(commit.getDate(), 1.0));
|
||||
}
|
||||
}
|
||||
if (!timeSeries.getValues().isEmpty()) {
|
||||
timeSeriesResult.add(timeSeries);
|
||||
}
|
||||
}
|
||||
return timeSeriesResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
package ru.ulstu.extractor.ts.creator;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
import ru.ulstu.extractor.ts.util.Dummy;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class AuthorsCompletedIssueTS extends AbstractTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final BranchService branchService;
|
||||
|
||||
private final GitRepositoryService gitRepositoryService;
|
||||
|
||||
public AuthorsCompletedIssueTS(TimeSeriesService timeSeriesService,
|
||||
BranchService branchService,
|
||||
GitRepositoryService gitRepositoryService) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.branchService = branchService;
|
||||
this.gitRepositoryService = gitRepositoryService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TimeSeries> getTimeSeries(Integer repositoryId, String branchName) {
|
||||
GitRepository gitRepository = gitRepositoryService.findById(repositoryId);
|
||||
//TODO: добавить постраничное чтение
|
||||
return Collections.singletonList(
|
||||
new TimeSeries(
|
||||
String.format("%s %s %s",
|
||||
gitRepository.getName(),
|
||||
branchName,
|
||||
getTimeSeriesType().getDescription()),
|
||||
branchService.findByRepositoryAndName(gitRepository, branchName),
|
||||
getTimeSeriesType(),
|
||||
Dummy.getDefaultTimeSeries()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.AUTHOR_COMPLETED_ISSUES;
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
package ru.ulstu.extractor.ts.creator;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
import ru.ulstu.extractor.ts.util.Dummy;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class AuthorsIssueTS extends AbstractTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final BranchService branchService;
|
||||
|
||||
private final GitRepositoryService gitRepositoryService;
|
||||
|
||||
public AuthorsIssueTS(TimeSeriesService timeSeriesService,
|
||||
BranchService branchService,
|
||||
GitRepositoryService gitRepositoryService) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.branchService = branchService;
|
||||
this.gitRepositoryService = gitRepositoryService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TimeSeries> getTimeSeries(Integer repositoryId, String branchName) {
|
||||
GitRepository gitRepository = gitRepositoryService.findById(repositoryId);
|
||||
return Collections.singletonList(
|
||||
new TimeSeries(
|
||||
String.format("%s %s %s",
|
||||
gitRepository.getName(),
|
||||
branchName,
|
||||
getTimeSeriesType().getDescription()),
|
||||
branchService.findByRepositoryAndName(gitRepository, branchName),
|
||||
getTimeSeriesType(),
|
||||
Dummy.getDefaultTimeSeries()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.AUTHOR_ISSUES;
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
package ru.ulstu.extractor.ts.creator;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
import ru.ulstu.extractor.ts.util.Dummy;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class BranchTS extends AbstractTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final BranchService branchService;
|
||||
|
||||
private final GitRepositoryService gitRepositoryService;
|
||||
|
||||
public BranchTS(TimeSeriesService timeSeriesService,
|
||||
BranchService branchService,
|
||||
GitRepositoryService gitRepositoryService) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.branchService = branchService;
|
||||
this.gitRepositoryService = gitRepositoryService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.BRANCHES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TimeSeries> getTimeSeries(Integer repositoryId, String branchName) {
|
||||
GitRepository gitRepository = gitRepositoryService.findById(repositoryId);
|
||||
return Collections.singletonList(
|
||||
new TimeSeries(
|
||||
String.format("%s %s %s",
|
||||
gitRepository.getName(),
|
||||
branchName,
|
||||
getTimeSeriesType().getDescription()),
|
||||
branchService.findByRepositoryAndName(gitRepository, branchName),
|
||||
getTimeSeriesType(),
|
||||
Dummy.getDefaultTimeSeries()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
package ru.ulstu.extractor.ts.creator;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
import ru.ulstu.extractor.ts.util.Dummy;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class IssuesTS extends AbstractTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final BranchService branchService;
|
||||
|
||||
private final GitRepositoryService gitRepositoryService;
|
||||
|
||||
public IssuesTS(TimeSeriesService timeSeriesService,
|
||||
BranchService branchService,
|
||||
GitRepositoryService gitRepositoryService) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.branchService = branchService;
|
||||
this.gitRepositoryService = gitRepositoryService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TimeSeries> getTimeSeries(Integer repositoryId, String branchName) {
|
||||
GitRepository gitRepository = gitRepositoryService.findById(repositoryId);
|
||||
return Collections.singletonList(
|
||||
new TimeSeries(
|
||||
String.format("%s %s %s",
|
||||
gitRepository.getName(),
|
||||
branchName,
|
||||
getTimeSeriesType().getDescription()),
|
||||
branchService.findByRepositoryAndName(gitRepository, branchName),
|
||||
getTimeSeriesType(),
|
||||
Dummy.getDefaultTimeSeries()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.ISSUES;
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
package ru.ulstu.extractor.ts.creator;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
import ru.ulstu.extractor.ts.util.Dummy;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class StarTS extends AbstractTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final BranchService branchService;
|
||||
|
||||
private final GitRepositoryService gitRepositoryService;
|
||||
|
||||
public StarTS(TimeSeriesService timeSeriesService,
|
||||
BranchService branchService,
|
||||
GitRepositoryService gitRepositoryService) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.branchService = branchService;
|
||||
this.gitRepositoryService = gitRepositoryService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TimeSeries> getTimeSeries(Integer repositoryId, String branchName) {
|
||||
GitRepository gitRepository = gitRepositoryService.findById(repositoryId);
|
||||
return Collections.singletonList(
|
||||
new TimeSeries(
|
||||
String.format("%s %s %s",
|
||||
gitRepository.getName(),
|
||||
branchName,
|
||||
getTimeSeriesType().getDescription()),
|
||||
branchService.findByRepositoryAndName(gitRepository, branchName),
|
||||
getTimeSeriesType(),
|
||||
Dummy.getDefaultTimeSeries()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.STARS;
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesValue;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
|
||||
@Component
|
||||
public class BranchTS extends ScheduledTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final ApplicationContext applicationContext;
|
||||
|
||||
public BranchTS(TimeSeriesService timeSeriesService,
|
||||
ApplicationContext applicationContext) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.BRANCHES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesValue getNewTimeSeriesValue(Branch branch) {
|
||||
return new TimeSeriesValue(applicationContext.getBean(getGitApiServiceClass(branch))
|
||||
.getBranchesCount(branch));
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesValue;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
|
||||
@Component
|
||||
public class IssuesTS extends ScheduledTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final ApplicationContext applicationContext;
|
||||
|
||||
public IssuesTS(TimeSeriesService timeSeriesService,
|
||||
ApplicationContext applicationContext) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesValue getNewTimeSeriesValue(Branch branch) {
|
||||
return new TimeSeriesValue(applicationContext.getBean(getGitApiServiceClass(branch))
|
||||
.getOpenIssuesCount(branch));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.ISSUES;
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitApi;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitAtheneApi;
|
||||
import ru.ulstu.extractor.gitrepository.service.GithubApi;
|
||||
import ru.ulstu.extractor.gitrepository.service.GitlabApi;
|
||||
import ru.ulstu.extractor.ts.creator.AbstractTimeSeriesCreator;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesValue;
|
||||
import ru.ulstu.extractor.util.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class ScheduledTimeSeriesCreator extends AbstractTimeSeriesCreator {
|
||||
private final Map<String, Class<? extends GitApi>> gitApiServiceHolder = Map.of(
|
||||
"git.athene.tech", GitAtheneApi.class,
|
||||
"github.com", GithubApi.class,
|
||||
"gitlab.com", GitlabApi.class);
|
||||
|
||||
@Transactional
|
||||
public void addTimeSeriesValue(Branch branch) {
|
||||
TimeSeries timeSeries = getTimeSeriesService().findByBranchAndTypeOrCreate(branch, getTimeSeriesType());
|
||||
timeSeries.getValues().add(getNewTimeSeriesValue(branch));
|
||||
getTimeSeriesService().save(Collections.singletonList(timeSeries), branch);
|
||||
}
|
||||
|
||||
public abstract TimeSeriesValue getNewTimeSeriesValue(Branch branch);
|
||||
|
||||
public Class<? extends GitApi> getGitApiServiceClass(Branch branch) {
|
||||
return gitApiServiceHolder.get(StringUtils.getServerDomain(branch.getGitRepository().getUrl()));
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||
import ru.ulstu.extractor.ts.model.TimeSeriesValue;
|
||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
||||
|
||||
@Component
|
||||
public class StarTS extends ScheduledTimeSeriesCreator {
|
||||
private final TimeSeriesService timeSeriesService;
|
||||
private final ApplicationContext applicationContext;
|
||||
|
||||
public StarTS(TimeSeriesService timeSeriesService,
|
||||
ApplicationContext applicationContext) {
|
||||
this.timeSeriesService = timeSeriesService;
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesService getTimeSeriesService() {
|
||||
return timeSeriesService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesType getTimeSeriesType() {
|
||||
return TimeSeriesType.STARS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeSeriesValue getNewTimeSeriesValue(Branch branch) {
|
||||
return new TimeSeriesValue(applicationContext.getBean(getGitApiServiceClass(branch))
|
||||
.getStarsCount(branch));
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package ru.ulstu.extractor.ts.service;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.ulstu.extractor.branch.model.Branch;
|
||||
import ru.ulstu.extractor.branch.service.BranchService;
|
||||
import ru.ulstu.extractor.ts.creator.scheduled.ScheduledTimeSeriesCreator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class ScheduledTimeSeriesService {
|
||||
private final Logger log = LoggerFactory.getLogger(ScheduledTimeSeriesService.class);
|
||||
private final List<ScheduledTimeSeriesCreator> scheduledTimeSeriesCreators;
|
||||
private final BranchService branchService;
|
||||
|
||||
public ScheduledTimeSeriesService(List<ScheduledTimeSeriesCreator> scheduledTimeSeriesCreators,
|
||||
BranchService branchService) {
|
||||
this.scheduledTimeSeriesCreators = scheduledTimeSeriesCreators;
|
||||
this.branchService = branchService;
|
||||
}
|
||||
|
||||
@Scheduled(cron = "0 0 * * * *", zone = "Europe/Samara")
|
||||
public void addTimeSeriesPoints() {
|
||||
log.debug("Старт добавления новых точек временного ряда");
|
||||
List<Branch> branches = branchService.findAll();
|
||||
branches.forEach(branch -> {
|
||||
scheduledTimeSeriesCreators.forEach(creator -> creator.addTimeSeriesValue(branch));
|
||||
});
|
||||
log.debug("Завершение добавления новых точек временного ряда");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue