Skip to content

Commit

Permalink
Update release metrics fields
Browse files Browse the repository at this point in the history
Signed-off-by: Prudhvi Godithi <[email protected]>
  • Loading branch information
prudhvigodithi committed Aug 20, 2024
1 parent e359325 commit dfa017c
Show file tree
Hide file tree
Showing 10 changed files with 301 additions and 29 deletions.
5 changes: 3 additions & 2 deletions src/main/java/org/opensearchmetrics/dagger/MetricsModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.opensearchmetrics.metrics.general.*;
import org.opensearchmetrics.metrics.label.LabelMetrics;
import org.opensearchmetrics.metrics.release.ReleaseBranchChecker;
import org.opensearchmetrics.metrics.release.ReleaseIssueChecker;
import org.opensearchmetrics.metrics.release.ReleaseLabelIssuesFetcher;
import org.opensearchmetrics.metrics.release.ReleaseLabelPullsFetcher;
import org.opensearchmetrics.metrics.release.ReleaseMetrics;
Expand Down Expand Up @@ -143,7 +144,7 @@ public LabelMetrics getLabelMetrics() {
public ReleaseMetrics getReleaseMetrics(OpenSearchUtil openSearchUtil, ObjectMapper objectMapper,
ReleaseRepoFetcher releaseRepoFetcher, ReleaseLabelIssuesFetcher releaseLabelIssuesFetcher,
ReleaseLabelPullsFetcher releaseLabelPullsFetcher, ReleaseVersionIncrementChecker releaseVersionIncrementChecker,
ReleaseBranchChecker releaseBranchChecker, ReleaseNotesChecker releaseNotesChecker) {
return new ReleaseMetrics(openSearchUtil, objectMapper, releaseRepoFetcher, releaseLabelIssuesFetcher, releaseLabelPullsFetcher, releaseVersionIncrementChecker, releaseBranchChecker, releaseNotesChecker);
ReleaseBranchChecker releaseBranchChecker, ReleaseNotesChecker releaseNotesChecker, ReleaseIssueChecker releaseIssueChecker) {
return new ReleaseMetrics(openSearchUtil, objectMapper, releaseRepoFetcher, releaseLabelIssuesFetcher, releaseLabelPullsFetcher, releaseVersionIncrementChecker, releaseBranchChecker, releaseNotesChecker, releaseIssueChecker);

Check warning on line 148 in src/main/java/org/opensearchmetrics/dagger/MetricsModule.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/dagger/MetricsModule.java#L148

Added line #L148 was not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -153,6 +154,7 @@ public void generateReleaseMetrics() {

Map<String, String> metricFinalData =
Arrays.stream(releaseInputs)
.filter(ReleaseInputs::getTrack)

Check warning on line 157 in src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java#L157

Added line #L157 was not covered by tests
.flatMap(releaseInput -> releaseMetrics.getReleaseRepos(releaseInput.getVersion()).stream()
.flatMap(repo -> {
ReleaseMetricsData releaseMetricsData = new ReleaseMetricsData();
Expand All @@ -166,6 +168,7 @@ public void generateReleaseMetrics() {
throw new RuntimeException(e);
}
releaseMetricsData.setReleaseVersion(releaseInput.getVersion());
releaseMetricsData.setVersion(releaseInput.getVersion());

Check warning on line 171 in src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java#L171

Added line #L171 was not covered by tests
releaseMetricsData.setReleaseState(releaseInput.getState());
releaseMetricsData.setIssuesOpen(releaseMetrics.getReleaseLabelIssues(releaseInput.getVersion(), repo, "open", false));
releaseMetricsData.setAutocutIssuesOpen(releaseMetrics.getReleaseLabelIssues(releaseInput.getVersion(), repo, "open", true));
Expand All @@ -175,6 +178,16 @@ public void generateReleaseMetrics() {
releaseMetricsData.setVersionIncrement(releaseMetrics.getReleaseVersionIncrement(releaseInput.getVersion(), repo, releaseInput.getBranch()));
releaseMetricsData.setReleaseNotes(releaseMetrics.getReleaseNotes(releaseInput.getVersion(), repo, releaseInput.getBranch()));
releaseMetricsData.setReleaseBranch(releaseMetrics.getReleaseBranch(releaseInput.getVersion(), repo));
String[] releaseOwners = releaseMetrics.getReleaseOwners(releaseInput.getVersion(), repo);
releaseMetricsData.setReleaseOwners(releaseOwners);
releaseMetricsData.setReleaseOwnerExists(Optional.ofNullable(releaseOwners)

Check warning on line 183 in src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java#L181-L183

Added lines #L181 - L183 were not covered by tests
.map(owners -> owners.length > 0)
.orElse(false));
String releaseIssue = releaseMetrics.getReleaseIssue(releaseInput.getVersion(), repo);
releaseMetricsData.setReleaseIssue(releaseIssue);
releaseMetricsData.setReleaseIssueExists(Optional.ofNullable(releaseIssue)

Check warning on line 188 in src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java#L185-L188

Added lines #L185 - L188 were not covered by tests
.map(str -> !str.isEmpty())
.orElse(false));

Check warning on line 190 in src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/MetricsCalculation.java#L190

Added line #L190 was not covered by tests
return Stream.of(releaseMetricsData);
}))
.collect(Collectors.toMap(ReleaseMetricsData::getId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
package org.opensearchmetrics.metrics.release;

public enum ReleaseInputs {
VERSION_3_0_0("3.0.0", "open", "main"),
VERSION_2_12_0("2.12.0", "closed", "2.12"),
VERSION_2_13_0("2.13.0", "closed", "2.13"),
VERSION_2_14_0("2.14.0", "closed", "2.14"),
VERSION_2_15_0("2.15.0", "closed", "2.15"),
VERSION_2_16_0("2.16.0", "closed", "2.16"),
VERSION_2_17_0("2.17.0", "open", "2.x"),
VERSION_1_3_15("1.3.15", "closed", "1.3"),
VERSION_1_3_16("1.3.16", "closed", "1.3"),
VERSION_1_3_17("1.3.17", "closed", "1.3"),
VERSION_1_3_18("1.3.18", "closed", "1.3"),
VERSION_1_3_19("1.3.19", "open", "1.3");
VERSION_3_0_0("3.0.0", "open", "main", true),
VERSION_2_12_0("2.12.0", "closed", "2.12", false),
VERSION_2_13_0("2.13.0", "closed", "2.13", false),
VERSION_2_14_0("2.14.0", "closed", "2.14", false),
VERSION_2_15_0("2.15.0", "closed", "2.15", true),
VERSION_2_16_0("2.16.0", "closed", "2.16", true),
VERSION_2_17_0("2.17.0", "open", "2.x", true),
VERSION_1_3_15("1.3.15", "closed", "1.3", false),
VERSION_1_3_16("1.3.16", "closed", "1.3", false),
VERSION_1_3_17("1.3.17", "closed", "1.3", false),
VERSION_1_3_18("1.3.18", "closed", "1.3", true),
VERSION_1_3_19("1.3.19", "open", "1.3", true);

private final String version;
private final String state;
private final String branch;

ReleaseInputs(String version, String state, String branch) {
private final boolean track;

ReleaseInputs(String version, String state, String branch, boolean track) {
this.version = version;
this.state = state;
this.branch = branch;
this.track = track;
}

public String getVersion() {
return version;
}
public String getVersion() { return version; }

public String getState() {
return state;
Expand All @@ -35,6 +36,10 @@ public String getState() {
public String getBranch() {
return branch;
}

public boolean getTrack() {
return track;
}
public static ReleaseInputs[] getAllReleaseInputs() {
return values();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.opensearchmetrics.metrics.release;

import org.opensearch.action.search.SearchRequest;
import org.opensearch.action.search.SearchResponse;
import org.opensearch.index.query.BoolQueryBuilder;
import org.opensearch.index.query.QueryBuilders;
import org.opensearch.search.SearchHit;
import org.opensearch.search.aggregations.AggregationBuilders;
import org.opensearch.search.aggregations.bucket.terms.Terms;
import org.opensearch.search.builder.SearchSourceBuilder;
import org.opensearchmetrics.util.OpenSearchUtil;

import javax.inject.Inject;
import java.util.Arrays;

public class ReleaseIssueChecker {

@Inject
public ReleaseIssueChecker() {}

public String[] releaseOwners(String releaseVersion, String repo, OpenSearchUtil openSearchUtil) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("repository.keyword", repo));
boolQueryBuilder.must(QueryBuilders.matchQuery("title.keyword", "[RELEASE] Release version " + releaseVersion));
boolQueryBuilder.must(QueryBuilders.matchQuery("issue_pull_request", false));
SearchRequest searchRequest = new SearchRequest("github_issues");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.size(9000);
searchSourceBuilder.aggregation(
AggregationBuilders.terms("issue_assignees")
.field("issue_assignees.keyword")
.size(50)
);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = openSearchUtil.search(searchRequest);
Terms termsAgg = searchResponse.getAggregations().get("issue_assignees");
return termsAgg.getBuckets().stream()
.map(Terms.Bucket::getKeyAsString)
.toArray(String[]::new);
}

public String releaseIssue(String releaseVersion, String repo, OpenSearchUtil openSearchUtil) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("repository.keyword", repo));
boolQueryBuilder.must(QueryBuilders.matchQuery("title.keyword", "[RELEASE] Release version " + releaseVersion));
boolQueryBuilder.must(QueryBuilders.matchQuery("issue_pull_request", false));
SearchRequest searchRequest = new SearchRequest("github_issues");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.size(9000);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = openSearchUtil.search(searchRequest);
SearchHit[] hits = searchResponse.getHits().getHits();
return Arrays.stream(hits)
.findFirst()
.map(hit -> (String) hit.getSourceAsMap().get("html_url"))
.orElse(null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ public class ReleaseMetrics {

private final ReleaseNotesChecker releaseNotesChecker;

private final ReleaseIssueChecker releaseIssueChecker;

@Inject
public ReleaseMetrics(OpenSearchUtil openSearchUtil, ObjectMapper objectMapper, ReleaseRepoFetcher releaseRepoFetcher,
ReleaseLabelIssuesFetcher releaseLabelIssuesFetcher, ReleaseLabelPullsFetcher releaseLabelPullsFetcher,
ReleaseVersionIncrementChecker releaseVersionIncrementChecker, ReleaseBranchChecker releaseBranchChecker,
ReleaseNotesChecker releaseNotesChecker) {
ReleaseNotesChecker releaseNotesChecker, ReleaseIssueChecker releaseIssueChecker) {

Check warning on line 30 in src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java#L30

Added line #L30 was not covered by tests
this.openSearchUtil = openSearchUtil;
this.objectMapper = objectMapper;
this.releaseRepoFetcher = releaseRepoFetcher;
Expand All @@ -35,41 +36,40 @@ public ReleaseMetrics(OpenSearchUtil openSearchUtil, ObjectMapper objectMapper,
this.releaseVersionIncrementChecker = releaseVersionIncrementChecker;
this.releaseBranchChecker = releaseBranchChecker;
this.releaseNotesChecker = releaseNotesChecker;
this.releaseIssueChecker = releaseIssueChecker;

Check warning on line 39 in src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java#L39

Added line #L39 was not covered by tests
}


public List<String> getReleaseRepos(String releaseVersion) {
return releaseRepoFetcher.getReleaseRepos(releaseVersion);
}


public Long getReleaseLabelIssues(String releaseVersion, String repo, String issueState, boolean autoCut) {
return releaseLabelIssuesFetcher.releaseLabelIssues(releaseVersion, repo, issueState, autoCut, openSearchUtil);
}



public Long getReleaseLabelPulls(String releaseVersion, String repo, String pullState) {
return releaseLabelPullsFetcher.releaseLabelPulls(releaseVersion, repo, pullState, openSearchUtil);
}




public boolean getReleaseVersionIncrement (String releaseVersion, String repo, String branch) {
return releaseVersionIncrementChecker.releaseVersionIncrement(releaseVersion, repo, branch, objectMapper, openSearchUtil);
}


public Boolean getReleaseNotes (String releaseVersion, String repo, String releaseBranch) {
return releaseNotesChecker.releaseNotes(releaseVersion, repo, releaseBranch);
}



public Boolean getReleaseBranch (String releaseVersion, String repo) {
return releaseBranchChecker.releaseBranch(releaseVersion, repo);
}

public String[] getReleaseOwners (String releaseVersion, String repo) {
return releaseIssueChecker.releaseOwners(releaseVersion, repo, openSearchUtil);

Check warning on line 67 in src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java#L67

Added line #L67 was not covered by tests
}

public String getReleaseIssue (String releaseVersion, String repo) {
return releaseIssueChecker.releaseIssue(releaseVersion, repo, openSearchUtil);

Check warning on line 71 in src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java

View check run for this annotation

Codecov / codecov/patch

src/main/java/org/opensearchmetrics/metrics/release/ReleaseMetrics.java#L71

Added line #L71 was not covered by tests
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import lombok.Data;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
Expand All @@ -23,6 +24,9 @@ public class ReleaseMetricsData {
@JsonProperty("release_version")
private String releaseVersion;

@JsonProperty("version")
private String version;

@JsonProperty("release_state")
private String releaseState;

Expand All @@ -49,12 +53,25 @@ public class ReleaseMetricsData {
@JsonProperty("release_branch")
private boolean releaseBranch;

@JsonProperty("release_owners")
private String[] releaseOwners;

@JsonProperty("release_owner_exists")
private boolean releaseOwnerExists;

@JsonProperty("release_issue")
private String releaseIssue;

@JsonProperty("release_issue_exists")
private boolean releaseIssueExists;

public String toJson(ObjectMapper mapper) throws JsonProcessingException {
Map<String, Object> data = new HashMap<>();
data.put("id", id);
data.put("current_date", currentDate);
data.put("repository", repository);
data.put("release_version", releaseVersion);
data.put("version", version);
data.put("release_state", releaseState);
data.put("issues_open", issuesOpen);
data.put("autocut_issues_open", autocutIssuesOpen);
Expand All @@ -64,6 +81,10 @@ public String toJson(ObjectMapper mapper) throws JsonProcessingException {
data.put("version_increment", versionIncrement);
data.put("release_notes", releaseNotes);
data.put("release_branch", releaseBranch);
data.put("release_owners", releaseOwners);
data.put("release_owner_exists", releaseOwnerExists);
data.put("release_issue", releaseIssue);
data.put("release_issue_exists", releaseIssueExists);

return mapper.writeValueAsString(data);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,22 @@ public void testGetBranch() {
assertEquals("1.3", ReleaseInputs.VERSION_1_3_19.getBranch());
}

@Test
public void testGetTrack() {
assertEquals(true, ReleaseInputs.VERSION_3_0_0.getTrack());
assertEquals(false, ReleaseInputs.VERSION_2_12_0.getTrack());
assertEquals(false, ReleaseInputs.VERSION_2_13_0.getTrack());
assertEquals(false, ReleaseInputs.VERSION_2_14_0.getTrack());
assertEquals(true, ReleaseInputs.VERSION_2_15_0.getTrack());
assertEquals(true, ReleaseInputs.VERSION_2_16_0.getTrack());
assertEquals(true, ReleaseInputs.VERSION_2_17_0.getTrack());
assertEquals(false, ReleaseInputs.VERSION_1_3_15.getTrack());
assertEquals(false, ReleaseInputs.VERSION_1_3_16.getTrack());
assertEquals(false, ReleaseInputs.VERSION_1_3_17.getTrack());
assertEquals(true, ReleaseInputs.VERSION_1_3_18.getTrack());
assertEquals(true, ReleaseInputs.VERSION_1_3_19.getTrack());
}

@Test
public void testGetAllReleaseInputs() {
ReleaseInputs[] releaseInputs = ReleaseInputs.getAllReleaseInputs();
Expand Down
Loading

0 comments on commit dfa017c

Please sign in to comment.