def postprocessing(record): record = decorators.mark_finalize(record) if not (record["mark"] or record["review"] or record["commit"] or record["email"] or record["patch"]): return user = vault.get_user_from_runtime_storage(record["id"]) record["company"] = user["companies"][-1]["company_name"] record["core"] = get_core_engineer_branch(user, modules) return record
def postprocessing(record): record = decorators.mark_finalize(record) if not (record['mark'] or record['review'] or record['commit'] or record['email'] or record['patch_count']): return user = vault.get_user_from_runtime_storage(record['id']) record['company'] = user['companies'][-1]['company_name'] record['core'] = get_core_engineer_branch(user, modules) return record
def get_users_json(record_ids, **kwargs): user_ids = vault.get_memory_storage().get_index_keys_by_record_ids("user_id", record_ids) if kwargs["_params"]["user_id"]: user_ids.add(kwargs["_params"]["user_id"][0]) result = [ {"id": user_id, "text": (vault.get_user_from_runtime_storage(user_id)["user_name"])} for user_id in user_ids ] result.sort(key=lambda x: x["text"]) return result
def postprocessing(record): record = decorators.mark_finalize(record) if not (record['mark'] or record['review'] or record['commit'] or record['email'] or record['patch_count']): return user = vault.get_user_from_runtime_storage(record['id']) record['company'] = user['companies'][-1]['company_name'] record['core'] = is_engineer_core_in_modules(user, modules) return record
def get_users_json(record_ids, query_filter, **kwargs): user_ids = vault.get_memory_storage().get_index_keys_by_record_ids( 'user_id', record_ids) result = [] for user_id in user_ids: user_name = vault.get_user_from_runtime_storage(user_id)['user_name'] if query_filter(user_name): result.append({'id': user_id, 'text': user_name}) result.sort(key=lambda x: x['text']) return result
def user_activity(user_id): user = vault.get_user_from_runtime_storage(user_id) if not user: flask.abort(404) user = helpers.extend_user(user) memory_storage_inst = vault.get_memory_storage() result = _get_activity_summary( memory_storage_inst.get_record_ids_by_user_ids([user_id])) result['user'] = user return result
def get_users_json(record_ids, **kwargs): user_ids = vault.get_memory_storage().get_index_keys_by_record_ids( 'user_id', record_ids) if kwargs['_params']['user_id']: user_ids.add(kwargs['_params']['user_id'][0]) result = [{'id': user_id, 'text': (vault.get_user_from_runtime_storage(user_id) ['user_name'])} for user_id in user_ids] result.sort(key=lambda x: x['text']) return result
def man_days_filter(result, record, param_id): if record['record_type'] == 'commit': # commit is attributed with the date of the merge which is not an # effort of the author (author's effort is represented in patches) return day = utils.timestamp_to_day(record['date']) result_by_param = result[record[param_id]] if 'days' not in result_by_param: result_by_param['days'] = collections.defaultdict(set) user = vault.get_user_from_runtime_storage(record['user_id']) result_by_param['days'][day] |= set([user['seq']]) result_by_param['metric'] = 1
def man_days_filter(result, record, param_id): if record['record_type'] == 'commit': # commit is attributed with the date of the merge which is not an # effort of the author (author's effort is represented in patches) return day = record['date'] // (24 * 3600) result_by_param = result[record[param_id]] if 'days' not in result_by_param: result_by_param['days'] = collections.defaultdict(set) user = vault.get_user_from_runtime_storage(record['user_id']) result_by_param['days'][day] |= set([user['seq']]) result_by_param['metric'] = 1
def filter_core_users(record): user = vault.get_user_from_runtime_storage(record['id']) is_core = False for (module, branch) in user['core']: if module in modules: is_core = branch if branch == 'master': # we need master, but stables are ok break if exclude: if ((exclude == 'non-core' and is_core) or (exclude == 'core' and not is_core)): return record else: record['core'] = is_core return record
def user_activity(user_id): user = vault.get_user_from_runtime_storage(user_id) if not user: flask.abort(404) user = helpers.extend_user(user) memory_storage_inst = vault.get_memory_storage() records = memory_storage_inst.get_records( memory_storage_inst.get_record_ids_by_user_ids([user_id])) records = sorted(records, key=operator.itemgetter('date'), reverse=True) return { 'user': user, 'total_records': len(records), 'contribution': helpers.get_contribution_summary(records), 'punch_card_data': _get_punch_card_data(records), }
def make_page_title(company, user_id, module, release): if company: memory_storage = vault.get_memory_storage() company = memory_storage.get_original_company_name(company) if company or user_id: if user_id: s = vault.get_user_from_runtime_storage(user_id)['user_name'] if company: s += ' (%s)' % company else: s = company else: s = 'OpenStack community' s += ' contribution' if module: s += ' to %s' % module if release != 'all': s += ' in %s release' % release.capitalize() else: s += ' in all releases' return s
def postprocessing(record): if finalize_handler: record = finalize_handler(record) user = vault.get_user_from_runtime_storage(record['id']) record['core'] = get_core_engineer_branch(user, modules) return record
def record_filter_decorated_function(*args, **kwargs): memory_storage_inst = vault.get_memory_storage() record_ids = set(memory_storage_inst.get_record_ids()) # a copy params = _prepare_params(kwargs, ignore) release = params['release'] if release: if 'all' not in release: record_ids &= ( memory_storage_inst.get_record_ids_by_releases( c.lower() for c in release)) project_type = params['project_type'] if project_type: record_ids &= _filter_records_by_modules( memory_storage_inst, vault.resolve_project_types(project_type), release) module = params['module'] if module: record_ids &= _filter_records_by_modules( memory_storage_inst, module, release) user_id = params['user_id'] user_id = [u for u in user_id if vault.get_user_from_runtime_storage(u)] if user_id: record_ids &= ( memory_storage_inst.get_record_ids_by_user_ids(user_id)) company = params['company'] if company: record_ids &= ( memory_storage_inst.get_record_ids_by_companies(company)) metric = params['metric'] if 'all' not in metric: for metric in metric: if metric in parameters.METRIC_TO_RECORD_TYPE: record_ids &= ( memory_storage_inst.get_record_ids_by_type( parameters.METRIC_TO_RECORD_TYPE[metric])) if 'tm_marks' in metric: filtered_ids = [] review_nth = int(parameters.get_parameter( kwargs, 'review_nth')[0]) for record in memory_storage_inst.get_records(record_ids): parent = memory_storage_inst.get_record_by_primary_key( record['review_id']) if (parent and ('review_number' in parent) and (parent['review_number'] <= review_nth)): filtered_ids.append(record['record_id']) record_ids = filtered_ids blueprint_id = params['blueprint_id'] if blueprint_id: record_ids &= ( memory_storage_inst.get_record_ids_by_blueprint_ids( blueprint_id)) start_date = params['start_date'] end_date = params['end_date'] if start_date or end_date: record_ids &= _filter_records_by_days(start_date, end_date, memory_storage_inst) kwargs['record_ids'] = record_ids kwargs['records'] = memory_storage_inst.get_records(record_ids) return f(*args, **kwargs)
def record_filter_decorated_function(*args, **kwargs): memory_storage_inst = vault.get_memory_storage() record_ids = set(memory_storage_inst.get_record_ids()) # a copy releases = [] if 'release' not in ignore: releases = parameters.get_parameter(kwargs, 'release', 'releases', use_default) if releases: if 'all' not in releases: record_ids &= ( memory_storage_inst.get_record_ids_by_releases( c.lower() for c in releases)) modules = parameters.get_parameter(kwargs, 'module', 'modules', use_default) if 'project_type' not in ignore: param = parameters.get_parameter(kwargs, 'project_type', 'project_types', use_default) if param: record_ids &= _filter_records_by_modules( memory_storage_inst, vault.resolve_project_types(param), releases) if 'module' not in ignore: if modules: record_ids &= _filter_records_by_modules( memory_storage_inst, modules, releases) if 'user_id' not in ignore: param = parameters.get_parameter(kwargs, 'user_id', 'user_ids') param = [u for u in param if vault.get_user_from_runtime_storage(u)] if param: record_ids &= ( memory_storage_inst.get_record_ids_by_user_ids(param)) if 'company' not in ignore: param = parameters.get_parameter(kwargs, 'company', 'companies') if param: record_ids &= ( memory_storage_inst.get_record_ids_by_companies(param)) if 'metric' not in ignore: metrics = parameters.get_parameter(kwargs, 'metric') if 'all' not in metrics: for metric in metrics: if metric in parameters.METRIC_TO_RECORD_TYPE: record_ids &= ( memory_storage_inst.get_record_ids_by_type( parameters.METRIC_TO_RECORD_TYPE[metric])) if 'tm_marks' in metrics: filtered_ids = [] review_nth = int(parameters.get_parameter( kwargs, 'review_nth')[0]) for record in memory_storage_inst.get_records(record_ids): parent = memory_storage_inst.get_record_by_primary_key( record['review_id']) if (parent and ('review_number' in parent) and (parent['review_number'] <= review_nth)): filtered_ids.append(record['record_id']) record_ids = filtered_ids if 'blueprint_id' not in ignore: param = parameters.get_parameter(kwargs, 'blueprint_id') if param: record_ids &= ( memory_storage_inst.get_record_ids_by_blueprint_ids( param)) time_filter = _get_time_filter(kwargs, ignore) kwargs['records'] = time_filter( memory_storage_inst.get_records(record_ids)) return f(*args, **kwargs)
def record_filter_decorated_function(*args, **kwargs): memory_storage_inst = vault.get_memory_storage() record_ids = set(memory_storage_inst.get_record_ids()) # a copy params = _prepare_params(kwargs, ignore) release = params['release'] if release: if 'all' not in release: record_ids &= ( memory_storage_inst.get_record_ids_by_releases( c.lower() for c in release)) project_type = params['project_type'] if project_type: record_ids &= _filter_records_by_modules( memory_storage_inst, vault.resolve_project_types(project_type), release) module = params['module'] if module: record_ids &= _filter_records_by_modules( memory_storage_inst, module, release) user_id = params['user_id'] user_id = [ u for u in user_id if vault.get_user_from_runtime_storage(u) ] if user_id: record_ids &= ( memory_storage_inst.get_record_ids_by_user_ids(user_id)) company = params['company'] if company: record_ids &= ( memory_storage_inst.get_record_ids_by_companies(company)) metric = params['metric'] if 'all' not in metric: for metric in metric: if metric in parameters.METRIC_TO_RECORD_TYPE: record_ids &= ( memory_storage_inst.get_record_ids_by_type( parameters.METRIC_TO_RECORD_TYPE[metric])) if 'tm_marks' in metric: filtered_ids = [] review_nth = int( parameters.get_parameter(kwargs, 'review_nth')[0]) for record in memory_storage_inst.get_records(record_ids): parent = memory_storage_inst.get_record_by_primary_key( record['review_id']) if (parent and ('review_number' in parent) and (parent['review_number'] <= review_nth)): filtered_ids.append(record['record_id']) record_ids = filtered_ids blueprint_id = params['blueprint_id'] if blueprint_id: record_ids &= (memory_storage_inst. get_record_ids_by_blueprint_ids(blueprint_id)) start_date = params['start_date'] end_date = params['end_date'] if start_date or end_date: record_ids &= _filter_records_by_days(start_date, end_date, memory_storage_inst) kwargs['record_ids'] = record_ids kwargs['records'] = memory_storage_inst.get_records(record_ids) return f(*args, **kwargs)
def record_filter_decorated_function(*args, **kwargs): vault_inst = vault.get_vault() memory_storage_inst = vault.get_memory_storage() record_ids = set(memory_storage_inst.get_record_ids()) # a copy if 'module' not in ignore: param = parameters.get_parameter(kwargs, 'module', 'modules', use_default) if param: record_ids &= ( memory_storage_inst.get_record_ids_by_modules( vault.resolve_modules(param))) if 'project_type' not in ignore: param = parameters.get_parameter(kwargs, 'project_type', 'project_types', use_default) if param: ptgi = vault_inst['project_type_group_index'] modules = set() for project_type in param: project_type = project_type.lower() if project_type in ptgi: modules |= ptgi[project_type] record_ids &= ( memory_storage_inst.get_record_ids_by_modules(modules)) if 'user_id' not in ignore: param = parameters.get_parameter(kwargs, 'user_id', 'user_ids') param = [ u for u in param if vault.get_user_from_runtime_storage(u) ] if param: record_ids &= ( memory_storage_inst.get_record_ids_by_user_ids(param)) if 'company' not in ignore: param = parameters.get_parameter(kwargs, 'company', 'companies') if param: record_ids &= ( memory_storage_inst.get_record_ids_by_companies(param)) if 'release' not in ignore: param = parameters.get_parameter(kwargs, 'release', 'releases', use_default) if param: if 'all' not in param: record_ids &= ( memory_storage_inst.get_record_ids_by_releases( c.lower() for c in param)) if 'metric' not in ignore: metrics = parameters.get_parameter(kwargs, 'metric') if 'all' not in metrics: for metric in metrics: record_ids &= ( memory_storage_inst.get_record_ids_by_type( parameters.METRIC_TO_RECORD_TYPE[metric])) if 'tm_marks' in metrics: filtered_ids = [] review_nth = int( parameters.get_parameter(kwargs, 'review_nth')[0]) for record in memory_storage_inst.get_records(record_ids): parent = memory_storage_inst.get_record_by_primary_key( record['review_id']) if (parent and ('review_number' in parent) and (parent['review_number'] <= review_nth)): filtered_ids.append(record['record_id']) record_ids = filtered_ids if 'blueprint_id' not in ignore: param = parameters.get_parameter(kwargs, 'blueprint_id') if param: record_ids &= (memory_storage_inst. get_record_ids_by_blueprint_ids(param)) kwargs['records'] = memory_storage_inst.get_records(record_ids) return f(*args, **kwargs)
def timeline(records, **kwargs): # find start and end dates metric = parameters.get_parameter(kwargs, 'metric') start_date = int(parameters.get_single_parameter(kwargs, 'start_date') or 0) release_name = parameters.get_single_parameter(kwargs, 'release') or 'all' releases = vault.get_vault()['releases'] if 'all' in release_name: start_week = release_start_week = _get_week(kwargs, 'start_date') end_week = release_end_week = _get_week(kwargs, 'end_date') else: release = releases[release_name] start_week = release_start_week = utils.timestamp_to_week( release['start_date']) end_week = release_end_week = utils.timestamp_to_week( release['end_date']) now = utils.timestamp_to_week(int(time.time())) + 1 # expand start-end to year if needed if release_end_week - release_start_week < 52: expansion = (52 - (release_end_week - release_start_week)) // 2 if release_end_week + expansion < now: end_week += expansion else: end_week = now start_week = end_week - 52 # empty stats for all weeks in range weeks = range(start_week, end_week) week_stat_loc = dict((c, 0) for c in weeks) week_stat_commits = dict((c, 0) for c in weeks) week_stat_commits_hl = dict((c, 0) for c in weeks) if ('commits' in metric) or ('loc' in metric): handler = lambda record: record['loc'] else: handler = lambda record: 0 # fill stats with the data if 'man-days' in metric: # special case for man-day effort metric release_stat = collections.defaultdict(set) all_stat = collections.defaultdict(set) for record in records: if ((record['record_type'] == 'commit') or (record['week'] not in weeks)): continue day = record['date'] // (24 * 3600) user = vault.get_user_from_runtime_storage(record['user_id']) if record['release'] == release_name: release_stat[day] |= set([user['seq']]) all_stat[day] |= set([user['seq']]) for day, users in six.iteritems(release_stat): week = utils.timestamp_to_week(day * 24 * 3600) week_stat_commits_hl[week] += len(users) for day, users in six.iteritems(all_stat): week = utils.timestamp_to_week(day * 24 * 3600) week_stat_commits[week] += len(users) else: for record in records: week = record['week'] if week in weeks: week_stat_loc[week] += handler(record) week_stat_commits[week] += 1 if 'members' in metric: if record['date'] >= start_date: week_stat_commits_hl[week] += 1 else: if record['release'] == release_name: week_stat_commits_hl[week] += 1 if 'all' == release_name and 'members' not in metric: week_stat_commits_hl = week_stat_commits # form arrays in format acceptable to timeline plugin array_loc = [] array_commits = [] array_commits_hl = [] for week in weeks: week_str = utils.week_to_date(week) array_loc.append([week_str, week_stat_loc[week]]) array_commits.append([week_str, week_stat_commits[week]]) array_commits_hl.append([week_str, week_stat_commits_hl[week]]) return [array_commits, array_commits_hl, array_loc]
def get_user(user_id): user = vault.get_user_from_runtime_storage(user_id) if not user: flask.abort(404) user = helpers.extend_user(user) return user
def timeline(records, **kwargs): # find start and end dates metric = parameters.get_parameter(kwargs, "metric") start_date = int(parameters.get_single_parameter(kwargs, "start_date") or 0) release_name = parameters.get_single_parameter(kwargs, "release") or "all" releases = vault.get_vault()["releases"] if "all" in release_name: start_week = release_start_week = _get_week(kwargs, "start_date") end_week = release_end_week = _get_week(kwargs, "end_date") else: release = releases[release_name] start_week = release_start_week = utils.timestamp_to_week(release["start_date"]) end_week = release_end_week = utils.timestamp_to_week(release["end_date"]) now = utils.timestamp_to_week(int(time.time())) + 1 # expand start-end to year if needed if release_end_week - release_start_week < 52: expansion = (52 - (release_end_week - release_start_week)) // 2 if release_end_week + expansion < now: end_week += expansion else: end_week = now start_week = end_week - 52 # empty stats for all weeks in range weeks = range(start_week, end_week) week_stat_loc = dict((c, 0) for c in weeks) week_stat_commits = dict((c, 0) for c in weeks) week_stat_commits_hl = dict((c, 0) for c in weeks) if ("commits" in metric) or ("loc" in metric): handler = lambda record: record["loc"] else: handler = lambda record: 0 # fill stats with the data if "man-days" in metric: # special case for man-day effort metric release_stat = collections.defaultdict(set) all_stat = collections.defaultdict(set) for record in records: if (record["record_type"] == "commit") or (record["week"] not in weeks): continue day = utils.timestamp_to_day(record["date"]) user = vault.get_user_from_runtime_storage(record["user_id"]) if record["release"] == release_name: release_stat[day] |= set([user["seq"]]) all_stat[day] |= set([user["seq"]]) for day, users in six.iteritems(release_stat): week = utils.timestamp_to_week(day * 24 * 3600) week_stat_commits_hl[week] += len(users) for day, users in six.iteritems(all_stat): week = utils.timestamp_to_week(day * 24 * 3600) week_stat_commits[week] += len(users) else: for record in records: week = record["week"] if week in weeks: week_stat_loc[week] += handler(record) week_stat_commits[week] += 1 if "members" in metric: if record["date"] >= start_date: week_stat_commits_hl[week] += 1 else: if record["release"] == release_name: week_stat_commits_hl[week] += 1 if "all" == release_name and "members" not in metric: week_stat_commits_hl = week_stat_commits # form arrays in format acceptable to timeline plugin array_loc = [] array_commits = [] array_commits_hl = [] for week in weeks: week_str = utils.week_to_date(week) array_loc.append([week_str, week_stat_loc[week]]) array_commits.append([week_str, week_stat_commits[week]]) array_commits_hl.append([week_str, week_stat_commits_hl[week]]) return [array_commits, array_commits_hl, array_loc]
def timeline(records, **kwargs): # find start and end dates metric = parameters.get_parameter(kwargs, 'metric') start_date = int(parameters.get_single_parameter(kwargs, 'start_date') or 0) release_name = parameters.get_single_parameter(kwargs, 'release') or 'all' releases = vault.get_vault()['releases'] if 'all' in release_name: start_week = release_start_week = _get_week(kwargs, 'start_date') end_week = release_end_week = _get_week(kwargs, 'end_date') else: release = releases[release_name] start_week = release_start_week = utils.timestamp_to_week( release['start_date']) end_week = release_end_week = utils.timestamp_to_week( release['end_date']) now = utils.timestamp_to_week(int(time.time())) + 1 # expand start-end to year if needed if release_end_week - release_start_week < 52: expansion = (52 - (release_end_week - release_start_week)) // 2 if release_end_week + expansion < now: end_week += expansion else: end_week = now start_week = end_week - 52 # empty stats for all weeks in range weeks = range(start_week, end_week) week_stat_loc = dict((c, 0) for c in weeks) week_stat_commits = dict((c, 0) for c in weeks) week_stat_commits_hl = dict((c, 0) for c in weeks) if ('commits' in metric) or ('loc' in metric): handler = lambda record: record['loc'] else: handler = lambda record: 0 # fill stats with the data if 'man-days' in metric: # special case for man-day effort metric release_stat = collections.defaultdict(set) all_stat = collections.defaultdict(set) for record in records: if ((record['record_type'] == 'commit') or (record['week'] not in weeks)): continue day = utils.timestamp_to_day(record['date']) user = vault.get_user_from_runtime_storage(record['user_id']) if record['release'] == release_name: release_stat[day] |= set([user['seq']]) all_stat[day] |= set([user['seq']]) for day, users in six.iteritems(release_stat): week = utils.timestamp_to_week(day * 24 * 3600) week_stat_commits_hl[week] += len(users) for day, users in six.iteritems(all_stat): week = utils.timestamp_to_week(day * 24 * 3600) week_stat_commits[week] += len(users) else: for record in records: week = record['week'] if week in weeks: week_stat_loc[week] += handler(record) week_stat_commits[week] += 1 if 'members' in metric: if record['date'] >= start_date: week_stat_commits_hl[week] += 1 else: if record['release'] == release_name: week_stat_commits_hl[week] += 1 if 'all' == release_name and 'members' not in metric: week_stat_commits_hl = week_stat_commits # form arrays in format acceptable to timeline plugin array_loc = [] array_commits = [] array_commits_hl = [] for week in weeks: week_str = utils.week_to_date(week) array_loc.append([week_str, week_stat_loc[week]]) array_commits.append([week_str, week_stat_commits[week]]) array_commits_hl.append([week_str, week_stat_commits_hl[week]]) return [array_commits, array_commits_hl, array_loc]
def postprocessing(record): if finalize_handler: record = finalize_handler(record) user = vault.get_user_from_runtime_storage(record['id']) record['core'] = is_engineer_core_in_modules(user, modules) return record