Skip to content

Commit

Permalink
updated collect to remove members from csv that are no longer github …
Browse files Browse the repository at this point in the history
…members
  • Loading branch information
garethahealy committed Sep 10, 2024
1 parent 861b2e1 commit 3226359
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public List<String> toArray() {

@Override
public int compareTo(Members o) {
return new CompareToBuilder().append(getRedHatUserId(), o.getRedHatUserId()).toComparison();
return new CompareToBuilder()
.append(getRedHatUserId(), o.getRedHatUserId())
.append(getTimestamp(), o.getTimestamp()).toComparison();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,10 @@ public Map<String, Members> getKnownMembers(String membersCsv) throws IOExceptio
return answer;
}

public void writeLdapMembersCsv(String output, List<Members> members, boolean isCsvEmpty) throws IOException {
public void writeLdapMembersCsv(String output, List<Members> members) throws IOException {
if (!members.isEmpty()) {
CSVFormat.Builder csvFormat = CSVFormat.Builder.create(CSVFormat.DEFAULT);
if (isCsvEmpty) {
csvFormat.setHeader(Members.Headers.class);
}

try (CSVPrinter csvPrinter = new CSVPrinter(Files.newBufferedWriter(Paths.get(output), StandardOpenOption.APPEND), csvFormat.build())) {
CSVFormat.Builder csvFormat = CSVFormat.Builder.create(CSVFormat.DEFAULT).setHeader(Members.Headers.class);
try (CSVPrinter csvPrinter = new CSVPrinter(Files.newBufferedWriter(Paths.get(output), StandardOpenOption.TRUNCATE_EXISTING), csvFormat.build())) {
for (Members current : members) {
csvPrinter.printRecord(current.toArray());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import freemarker.template.TemplateException;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.ldap.client.api.LdapConnection;
import org.jboss.logging.Logger;
Expand All @@ -21,6 +20,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;

@ApplicationScoped
Expand All @@ -44,31 +44,32 @@ public CollectMembersFromRedHatLdapService(GitHubService gitHubService, CsvServi

public void run(String organization, String output, String ldapMembersCsv, String supplementaryCsv, boolean shouldGuess, boolean failNoVpn) throws IOException, LdapException, TemplateException, ExecutionException, InterruptedException {
GHOrganization org = gitHubService.getOrganization(gitHubService.getGitHub(), organization);
List<GHUser> githubMembers = gitHubService.listMembers(org);

List<GHUser> githubMembers = gitHubService.listMembers(org);
Map<String, Members> ldapMembers = csvService.getKnownMembers(ldapMembersCsv);
Map<String, Members> supplementaryMembers = csvService.getKnownMembers(supplementaryCsv);

Pair<List<Members>, List<GHUser>> membersPair = collectMembers(githubMembers, ldapMembers, failNoVpn);
List<Members> foundMembers = membersPair.getLeft();
List<GHUser> attemptToGuess = membersPair.getRight();
List<GHUser> attemptToGuess = collectMembersAndBuildGuessList(githubMembers, ldapMembers, failNoVpn);

csvService.writeLdapMembersCsv(output, foundMembers, ldapMembers.isEmpty());
ldapGuessService.attemptToGuess(ldapMembers, attemptToGuess, shouldGuess, failNoVpn, org);
removeFromLdapOrSupplementaryIfNotGitHubMember(githubMembers, ldapMembers, supplementaryMembers);
removeLdapFromSupplementary(ldapMembers, supplementaryMembers);

csvService.writeLdapMembersCsv(output, new ArrayList<>(ldapMembers.values()));
csvService.writeSupplementaryMembersCsv(supplementaryCsv, new ArrayList<>(supplementaryMembers.values()));

removeFoundFromSupplementary(ldapMembers, foundMembers, supplementaryCsv);
ldapGuessService.attemptToGuess(ldapMembers, attemptToGuess, shouldGuess, failNoVpn, org);

logger.info("Finished.");
}

private Pair<List<Members>, List<GHUser>> collectMembers(List<GHUser> githubMembers, Map<String, Members> ldapMembers, boolean failNoVpn) throws IOException, LdapException {
List<Members> foundMembers = new ArrayList<>();
private List<GHUser> collectMembersAndBuildGuessList(List<GHUser> githubMembers, Map<String, Members> ldapMembers, boolean failNoVpn) throws IOException, LdapException {
List<GHUser> attemptToGuess = new ArrayList<>();

if (ldapService.canConnect()) {
try (LdapConnection connection = ldapService.open()) {
String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"));
String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"));
if (!ldapMembers.containsKey("redhat-cop-ci-bot")) {
foundMembers.add(new Members(date, "[email protected]", "redhat-cop-ci-bot"));
ldapMembers.put("redhat-cop-ci-bot", new Members(date, "[email protected]", "redhat-cop-ci-bot"));
}

for (GHUser user : githubMembers) {
Expand All @@ -77,7 +78,7 @@ private Pair<List<Members>, List<GHUser>> collectMembers(List<GHUser> githubMemb
if (rhEmail.isEmpty()) {
attemptToGuess.add(user);
} else {
foundMembers.add(new Members(date, rhEmail, user.getLogin()));
ldapMembers.put(user.getLogin(), new Members(date, rhEmail, user.getLogin()));
}
}
}
Expand All @@ -90,31 +91,37 @@ private Pair<List<Members>, List<GHUser>> collectMembers(List<GHUser> githubMemb

logger.info("--> Collect DONE");

return Pair.of(foundMembers, attemptToGuess);
return attemptToGuess;
}

private void removeFoundFromSupplementary(Map<String, Members> ldapMembers, List<Members> foundMembers, String supplementaryCsv) throws IOException {
Map<String, Members> supplementaryMembers = csvService.getKnownMembers(supplementaryCsv);
int oldSize = supplementaryMembers.size();

for (Members current : ldapMembers.values()) {
if (supplementaryMembers.containsKey(current.getWhatIsYourGitHubUsername())) {
logger.infof("%s is in supplementary from LDAP", current.getEmailAddress());
private void removeFromLdapOrSupplementaryIfNotGitHubMember(List<GHUser> githubMembers, Map<String, Members> ldapMembers, Map<String, Members> supplementaryMembers) {
removeFromIfNotGitHubMember(githubMembers, ldapMembers);
removeFromIfNotGitHubMember(githubMembers, supplementaryMembers);
}

supplementaryMembers.remove(current.getWhatIsYourGitHubUsername());
private void removeFromIfNotGitHubMember(List<GHUser> githubMembers, Map<String, Members> foundMembers) {
List<String> ldapKeysToRemove = new ArrayList<>();
for (Map.Entry<String, Members> member : foundMembers.entrySet()) {
Optional<GHUser> found = githubMembers.stream().filter((e) -> e.getLogin().equals(member.getKey())).findFirst();
if (found.isEmpty()) {
ldapKeysToRemove.add(member.getKey());
}
}

for (Members current : foundMembers) {
for (String remove : ldapKeysToRemove) {
logger.infof("%s is in a CSV but no-longer a GitHub member", remove);

foundMembers.remove(remove);
}
}

private void removeLdapFromSupplementary(Map<String, Members> ldapMembers, Map<String, Members> supplementaryMembers) {
for (Members current : ldapMembers.values()) {
if (supplementaryMembers.containsKey(current.getWhatIsYourGitHubUsername())) {
logger.infof("%s is in supplementary from newly found", current.getEmailAddress());
logger.infof("%s is in LDAP and Supplementary CSV, removing from Supplementary", current.getEmailAddress());

supplementaryMembers.remove(current.getWhatIsYourGitHubUsername());
}
}

if (supplementaryMembers.size() != oldSize) {
csvService.writeSupplementaryMembersCsv(supplementaryCsv, new ArrayList<>(supplementaryMembers.values()));
}
}
}

0 comments on commit 3226359

Please sign in to comment.