def __init__(self, name, description, gerrit, is_parent=False): self.description = description self.name = name self.gerrit = gerrit self.observations = OrderedDict() self.headings = OrderedDict(date='date') self.file_contents = StringIO() self.first_commit = gerrit.creation_date self.is_parent = is_parent self.metrics = ['waiting_first_review', 'waiting_plus2'] self.suffixes = ['total', 'staff', 'volunteer'] self.filename = ('%s.csv' % (self.determine_filename())) self.csv_directory = self.determine_directory(gerrit.csv_location) self.yaml_directory = self.determine_directory(gerrit.yaml_location) self.full_csv_path = os.path.join(self.csv_directory, self.filename) self.full_yaml_path = os.path.join(self.yaml_directory, self.filename) self.create_path() self.yesterday = determine_yesterday() self.wmf_extension = self.is_wikimedia_extension() self.extension = self.is_extension() self.parent_repos = self.determine_parent(gerrit)
def calculate_wait_first_review(self): values = [-2, -1, 1] reviews = {} for value in values: review = self.get_first_review_by_review_value(value) if review: reviews[review.granted] = review if reviews != {}: review = reviews[min(reviews.keys())] review.granted = determine_yesterday(review.granted) else: if self.merged is True: review = Review(granted=self.last_updated_on) review.granted = determine_yesterday(self.last_updated_on) else: review = Review(granted=self.yesterday) self.waiting_first_review = review
def main(): logging.info('Launching gerrit-stats') args = parse_commandline() settings = load_settings(args) gerrit = Gerrit(args, settings) cur = init_db(gerrit.my_cnf) gerrit.fetch_repos() start_date = settings.get('creation_date') yesterday = determine_yesterday() changesets = {} logging.info( 'Queries will span timeframe: %s - %s.' % (start_date, yesterday)) logging.info('Queries will always run up to \'yesterday\', so that we always have counts for full days.') changesets = load_commit_data(cur, changesets) changesets = load_patch_set_data(cur, changesets) changesets = load_review_data(cur, changesets) for changeset in changesets.itervalues(): changeset.is_all_positive_reviews() changeset.calculate_wait_first_review() changeset.calculate_wait_plus2() changeset.is_self_reviewed() repo = gerrit.repos.get(changeset.dest_project_name) if repo: repo.increment(changeset) else: logging.info('Repo %s does not exist, ignored repos are: %s' % (changeset.dest_project_name, ','.join(gerrit.ignore_repos))) logging.info('Successfully parsed changesets data.') # create datasets that are collections of repositories create_aggregate_dataset(gerrit) for repo in gerrit.repos.itervalues(): # if repo.name == 'mediawiki': # change_ids = list(repo.observations[yesterday.date()].changeset_ids) # change_ids.sort() # fh = open('/Users/diederik/Development/gerrit-stats/gerritstats/tests/backlog_gerrit-stats.txt','w') # for change_id in change_ids: # print change_id # fh.write('%s\n' % change_id) # fh.close() repo.fill_in_missing_days() repo.create_headings() repo.prune_observations() repo.write_dataset(gerrit) # save results for future use. successful_exit()
def __init__(self, **kwargs): self.created_on = kwargs.get("created_on") self.owner_account_id = kwargs.get("owner_account_id") self.dest_project_name = kwargs.get("dest_project_name") self.dest_branch_name = kwargs.get("dest_branch_name") self.change_id = kwargs.get("change_id") self.last_updated_on = kwargs.get("last_updated_on") self.change_key = kwargs.get("change_key") self.subject = kwargs.get("subject") self.nbr_patch_sets = kwargs.get("nbr_patch_sets") self.status = kwargs.get("status") self.patch_sets = OrderedDict() self.open = True if kwargs.get("open") == "Y" else False self.merged = True if kwargs.get("status") == "M" else False self.self_review = False self.repo_has_review = True self.yesterday = determine_yesterday() self.waiting_first_review = self.yesterday # wait time between creation and first review self.waiting_plus2 = self.yesterday # wait time between first plus 1 and plus 2 self.merge_review = None # this will become an instance of Review self.all_positive_reviews = None self.author = Developer(**kwargs) # this will become an instance of Developer