Parent: [a7bb5d] (diff)

Download this file

InactiveCommitters.rsc    52 lines (41 with data), 1.8 kB

module InactiveCommitters

import org::ossmeter::metricprovider::ProjectDelta;

import ValueIO;
import IO;
import Map;
import Set;
import List;
import DateTime;

@metric{inactiveCommitters}
@doc{inactiveCommitters}
@friendlyName{inactiveCommitters}
@appliesTo{generic()}
list[str] inactiveCommitters(ProjectDelta delta = \empty()) {
  set[str] threeMonthsActive = {};
  set[str] activeBeforeThreeMonths = {};
  datetime today = delta.date;
  writeBinaryValueFile(|home:///ossmeter/<delta.project.name>/activecommitters_<printDate(today.justDate, "YYYYMMdd")>.am3|, [ commit.author | /VcsCommit commit <- delta ]);
  datetime threeMonthsAgo = decrementMonths(delta.date, 3);
  list[datetime] activePeriod = dateRangeByDay(createInterval(threeMonthsAgo, today));
  
  for (datetime d <- activePeriod) {
    loc activeCommittersForDay = |home:///ossmeter/<delta.project.name>/activecommitters_<printDate(d.justDate, "YYYYMMdd")>.am3|;
    
    if (exists(activeCommittersForDay)) {
      threeMonthsActive += { *readBinaryValueFile(#list[str], activeCommittersForDay) };
    }
  }
  
  activePeriod = dateRangeByDay(createInterval(decrementMonths(threeMonthsAgo, 6), threeMonthsAgo));
  
  for (datetime d <- activePeriod) {
    loc activeCommittersForDay = |home:///ossmeter/<delta.project.name>/activecommitters_<printDate(d.justDate, "YYYYMMdd")>.am3|;
    
    if (exists(activeCommittersForDay)) {
      activeBeforeThreeMonths += { *readBinaryValueFile(#list[str], activeCommittersForDay) };
    }
  }
  
  return [*(activeBeforeThreeMonths - threeMonthsActive)];
}

@metric{numberofinactivecommitters}
@doc{numbrofinactivecommitters}
@friendlyName{numberofinactivecommitters}
@appliesTo{generic()}
int numberOfInactiveCommitters(ProjectDelta delta = \empty()) {
  return size(inactiveCommitters(delta = delta));
}