#89 -- Use git service api to create time series
parent
b8c6aaf9da
commit
0d43bf8ccd
@ -0,0 +1,13 @@
|
|||||||
|
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(String gitRepositoryUrl, String template);
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
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";
|
||||||
|
|
||||||
|
public GitAtheneApi(HttpService httpService) {
|
||||||
|
this.httpService = httpService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getBranchesCount(Branch branch) {
|
||||||
|
return httpService
|
||||||
|
.get(getFormattedUrl(branch.getGitRepository().getUrl(), BRANCHES_COUNT_URL))
|
||||||
|
.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getStarsCount(Branch branch) {
|
||||||
|
return httpService
|
||||||
|
.get(getFormattedUrl(branch.getGitRepository().getUrl(), STARS_COUNT_URL))
|
||||||
|
.getJSONObject(0)
|
||||||
|
.getInt("stars_count");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer getOpenIssuesCount(Branch branch) {
|
||||||
|
return httpService
|
||||||
|
.get(getFormattedUrl(branch.getGitRepository().getUrl(), OPEN_ISSUES_URL))
|
||||||
|
.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFormattedUrl(String gitRepositoryUrl, String template) {
|
||||||
|
String[] urlParts = gitRepositoryUrl.split("/");
|
||||||
|
return String.format(template, urlParts[0] + "/" + urlParts[1] + "/" + urlParts[2], urlParts[3], urlParts[4]);
|
||||||
|
}
|
||||||
|
}
|
@ -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,35 @@
|
|||||||
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.ulstu.extractor.branch.model.Branch;
|
||||||
|
import ru.ulstu.extractor.gitrepository.service.GitApi;
|
||||||
|
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 GitApi gitApi;
|
||||||
|
|
||||||
|
public BranchTS(TimeSeriesService timeSeriesService,
|
||||||
|
GitApi gitApi) {
|
||||||
|
this.timeSeriesService = timeSeriesService;
|
||||||
|
this.gitApi = gitApi;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesType getTimeSeriesType() {
|
||||||
|
return TimeSeriesType.BRANCHES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesService getTimeSeriesService() {
|
||||||
|
return timeSeriesService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesValue getNewTimeSeriesValue(Branch branch) {
|
||||||
|
return new TimeSeriesValue(gitApi.getBranchesCount(branch));
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package ru.ulstu.extractor.ts.creator;
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.ulstu.extractor.branch.service.BranchService;
|
import ru.ulstu.extractor.branch.service.BranchService;
|
||||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||||
|
import ru.ulstu.extractor.ts.creator.AbstractTimeSeriesCreator;
|
||||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
@ -1,9 +1,10 @@
|
|||||||
package ru.ulstu.extractor.ts.creator;
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.ulstu.extractor.branch.service.BranchService;
|
import ru.ulstu.extractor.branch.service.BranchService;
|
||||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||||
|
import ru.ulstu.extractor.ts.creator.AbstractTimeSeriesCreator;
|
||||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
@ -1,9 +1,10 @@
|
|||||||
package ru.ulstu.extractor.ts.creator;
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.ulstu.extractor.branch.service.BranchService;
|
import ru.ulstu.extractor.branch.service.BranchService;
|
||||||
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
import ru.ulstu.extractor.gitrepository.model.GitRepository;
|
||||||
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
import ru.ulstu.extractor.gitrepository.service.GitRepositoryService;
|
||||||
|
import ru.ulstu.extractor.ts.creator.AbstractTimeSeriesCreator;
|
||||||
import ru.ulstu.extractor.ts.model.TimeSeries;
|
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||||
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
import ru.ulstu.extractor.ts.model.TimeSeriesType;
|
||||||
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
import ru.ulstu.extractor.ts.service.TimeSeriesService;
|
@ -0,0 +1,35 @@
|
|||||||
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.ulstu.extractor.branch.model.Branch;
|
||||||
|
import ru.ulstu.extractor.gitrepository.service.GitApi;
|
||||||
|
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 GitApi gitApi;
|
||||||
|
|
||||||
|
public IssuesTS(TimeSeriesService timeSeriesService,
|
||||||
|
GitApi gitApi) {
|
||||||
|
this.timeSeriesService = timeSeriesService;
|
||||||
|
this.gitApi = gitApi;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesValue getNewTimeSeriesValue(Branch branch) {
|
||||||
|
return new TimeSeriesValue(gitApi.getOpenIssuesCount(branch));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesService getTimeSeriesService() {
|
||||||
|
return timeSeriesService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesType getTimeSeriesType() {
|
||||||
|
return TimeSeriesType.ISSUES;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import ru.ulstu.extractor.branch.model.Branch;
|
||||||
|
import ru.ulstu.extractor.ts.creator.AbstractTimeSeriesCreator;
|
||||||
|
import ru.ulstu.extractor.ts.model.TimeSeries;
|
||||||
|
import ru.ulstu.extractor.ts.model.TimeSeriesValue;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public abstract class ScheduledTimeSeriesCreator extends AbstractTimeSeriesCreator {
|
||||||
|
@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);
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package ru.ulstu.extractor.ts.creator.scheduled;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.ulstu.extractor.branch.model.Branch;
|
||||||
|
import ru.ulstu.extractor.gitrepository.service.GitApi;
|
||||||
|
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 GitApi gitApi;
|
||||||
|
|
||||||
|
public StarTS(TimeSeriesService timeSeriesService, GitApi gitApi) {
|
||||||
|
this.timeSeriesService = timeSeriesService;
|
||||||
|
this.gitApi = gitApi;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesService getTimeSeriesService() {
|
||||||
|
return timeSeriesService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesType getTimeSeriesType() {
|
||||||
|
return TimeSeriesType.STARS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimeSeriesValue getNewTimeSeriesValue(Branch branch) {
|
||||||
|
return new TimeSeriesValue(gitApi.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 */5 * * * *", zone = "Europe/Samara")
|
||||||
|
public void addTimeSeriesPoints() {
|
||||||
|
log.debug("ConferenceScheduler.checkDeadlineBeforeWeek started");
|
||||||
|
List<Branch> branches = branchService.findAll();
|
||||||
|
branches.forEach(branch -> {
|
||||||
|
scheduledTimeSeriesCreators.forEach(creator -> creator.addTimeSeriesValue(branch));
|
||||||
|
});
|
||||||
|
log.debug("ConferenceScheduler.checkDeadlineBeforeWeek finished");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue