001 package org.hackystat.telemetry.analyzer.reducer.impl; 002 003 import java.util.ArrayList; 004 import java.util.List; 005 006 import org.hackystat.dailyprojectdata.client.DailyProjectDataClient; 007 import org.hackystat.sensorbase.resource.projects.jaxb.Project; 008 import org.hackystat.sensorbase.resource.projects.jaxb.Property; 009 import org.hackystat.telemetry.analyzer.model.TelemetryStreamCollection; 010 import org.hackystat.telemetry.analyzer.reducer.TelemetryReducer; 011 import org.hackystat.telemetry.analyzer.reducer.TelemetryReducerException; 012 import org.hackystat.telemetry.service.server.ServerProperties; 013 import org.hackystat.utilities.time.interval.Interval; 014 015 /** 016 * Returns a set of streams providing Commit counts for each member of the project. 017 * <p> 018 * Options: 019 * <ol> 020 * <li> isCumulative: True or false. Default is false. 021 * </ol> 022 * 023 * @author Philip Johnson 024 */ 025 public class MemberCommitReducer implements TelemetryReducer { 026 private static CommitReducer genericCommitReducer = new CommitReducer(); 027 028 /** 029 * Computes and returns the required telemetry streams object. 030 * 031 * @param project The project. 032 * @param dpdClient The DPD Client. 033 * @param interval The interval. 034 * @param options The optional parameters. 035 * 036 * @return Telemetry stream collection. 037 * @throws TelemetryReducerException If there is any error. 038 */ 039 public TelemetryStreamCollection compute(Project project, DailyProjectDataClient dpdClient, 040 Interval interval, String[] options) throws TelemetryReducerException { 041 boolean isCumulative = false; 042 //process options 043 if (options.length > 1) { 044 throw new TelemetryReducerException("Commit reducer takes 1 optional parameter."); 045 } 046 if (options.length == 1) { 047 try { 048 isCumulative = Boolean.valueOf(options[0]); 049 } 050 catch (Exception e) { 051 throw new TelemetryReducerException("Illegal cumulative value.", e); 052 } 053 } 054 055 // Find out the DailyProjectData host, throw error if not found. 056 String dpdHost = System.getProperty(ServerProperties.DAILYPROJECTDATA_FULLHOST_KEY); 057 if (dpdHost == null) { 058 throw new TelemetryReducerException("Null DPD host in MemberCommitReducer"); 059 } 060 061 // now get the telemetry stream. 062 try { 063 TelemetryStreamCollection streams = new TelemetryStreamCollection(null, project, interval); 064 // Make a list of emails containing all members plus the owner. 065 List<String> emails = new ArrayList<String>(); 066 emails.addAll(project.getMembers().getMember()); 067 emails.add(project.getOwner()); 068 // Now remove any email that has been specified as an agent. 069 for (Property property : project.getProperties().getProperty()) { 070 if (property.getKey().equals("agent")) { 071 emails.remove(property.getValue()); 072 } 073 } 074 for (String email : emails) { 075 streams.add(genericCommitReducer.getStream(dpdClient, project, interval, email, 076 isCumulative, email)); 077 } 078 return streams; 079 } 080 catch (Exception e) { 081 throw new TelemetryReducerException(e); 082 } 083 } 084 }