diff --git a/.gitignore b/.gitignore
index 469e17fbe..eb65f0d6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*~
*.pyc
+*.local
AUTHORS
ChangeLog
MANIFEST
diff --git a/bin/stackalytics-dashboard b/bin/dashboard
similarity index 78%
rename from bin/stackalytics-dashboard
rename to bin/dashboard
index 63f184008..d7862984c 100755
--- a/bin/stackalytics-dashboard
+++ b/bin/dashboard
@@ -5,7 +5,7 @@ import os
import sys
sys.path.insert(0, os.getcwd())
-from dashboard.dashboard import app
+from dashboard.web import app
app.run()
diff --git a/bin/full-update b/bin/full-update
deleted file mode 100755
index c6d290cb7..000000000
--- a/bin/full-update
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-if [[ -z $STACKALYTICS_HOME ]]; then
-echo "Variable STACKALYTICS_HOME must be specified"
-exit
-fi
-
-echo "Analytics home is $STACKALYTICS_HOME"
-
-DASHBOARD_CONF='$STACKALYTICS_HOME/conf/dashboard.conf'
-
-TOP_DIR=$(cd $(dirname "$0") && pwd)
-
-DB_FILE=`mktemp -u --tmpdir=$STACKALYTICS_HOME/data stackalytics-XXXXXXXXXXXX.sqlite`
-TEMP_CONF=`mktemp -u`
-
-cd $TOP_DIR/../scripts/
-./pull-repos.sh
-
-cd $TOP_DIR/../
-./bin/stackalytics --config-file $STACKALYTICS_HOME/conf/analytics.conf --db-database $DB_FILE --verbose
-
-DATE=`date -u +'%d-%b-%y %H:%M %Z'`
-
-echo DATABASE = \'$DB_FILE\' >> $TEMP_CONF
-echo LAST_UPDATE = \'$DATE\' >> $TEMP_CONF
-
-#rm $DASHBOARD_CONF
-#mv $TEMP_CONF $DASHBOARD_CONF
-
-echo "Data is refreshed, please restart service"
diff --git a/bin/grab-unmapped b/bin/grab-unmapped
deleted file mode 100755
index ea1f54071..000000000
--- a/bin/grab-unmapped
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-TOP_DIR=$(cd $(dirname "$0") && pwd)
-
-./tools/with_venv.sh python scripts/launchpad/grab-unmapped-launchpad-ids.py
\ No newline at end of file
diff --git a/bin/stackalytics b/bin/processor
similarity index 73%
rename from bin/stackalytics
rename to bin/processor
index 253fd9334..415b67946 100755
--- a/bin/stackalytics
+++ b/bin/processor
@@ -5,7 +5,7 @@ import os
import sys
sys.path.insert(0, os.getcwd())
-from pycvsanaly2.main import main
+from stackalytics.processor.main import main
main()
diff --git a/bin/update b/bin/update
deleted file mode 100755
index d6f1ae358..000000000
--- a/bin/update
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-if [[ -z $STACKALYTICS_HOME ]]; then
- echo "Variable STACKALYTICS_HOME must be specified"
- exit
-fi
-
-echo "Analytics home is $STACKALYTICS_HOME"
-
-CONF="$STACKALYTICS_HOME/conf/analytics.conf"
-
-TOP_DIR=$(cd $(dirname "$0") && pwd)
-cd $TOP_DIR/../scripts/
-./pull-repos.sh
-
-echo "Updating data"
-cd $TOP_DIR/../
-./bin/stackalytics --config-file $CONF --db-database $STACKALYTICS_HOME/data/stackalyticss.sqlite --verbose
diff --git a/dashboard/memory_storage.py b/dashboard/memory_storage.py
new file mode 100644
index 000000000..769e54818
--- /dev/null
+++ b/dashboard/memory_storage.py
@@ -0,0 +1,100 @@
+from stackalytics.processor import user_utils
+
+MEMORY_STORAGE_CACHED = 0
+
+
+class MemoryStorage(object):
+ def __init__(self, records):
+ pass
+
+
+class CachedMemoryStorage(MemoryStorage):
+ def __init__(self, records):
+ super(CachedMemoryStorage, self).__init__(records)
+
+ self.records = {}
+ self.company_index = {}
+ self.date_index = {}
+ self.module_index = {}
+ self.launchpad_id_index = {}
+ self.release_index = {}
+ self.dates = []
+ for record in records:
+ self.records[record['record_id']] = record
+ self.index(record)
+ self.dates = sorted(self.date_index)
+ self.company_name_mapping = dict((c.lower(), c)
+ for c in self.company_index.keys())
+
+ def index(self, record):
+
+ self._add_to_index(self.company_index, record, 'company_name')
+ self._add_to_index(self.module_index, record, 'module')
+ self._add_to_index(self.launchpad_id_index, record, 'launchpad_id')
+ self._add_to_index(self.release_index, record, 'release')
+ self._add_to_index(self.date_index, record, 'date')
+
+ record['week'] = user_utils.timestamp_to_week(record['date'])
+ record['loc'] = record['lines_added'] + record['lines_deleted']
+
+ def _add_to_index(self, record_index, record, key):
+ record_key = record[key]
+ if record_key in record_index:
+ record_index[record_key].add(record['record_id'])
+ else:
+ record_index[record_key] = set([record['record_id']])
+
+ def _get_record_ids_from_index(self, items, index):
+ record_ids = set()
+ for item in items:
+ if item not in index:
+ raise Exception('Parameter %s not valid' % item)
+ record_ids |= index[item]
+ return record_ids
+
+ def get_record_ids_by_modules(self, modules):
+ return self._get_record_ids_from_index(modules, self.module_index)
+
+ def get_record_ids_by_companies(self, companies):
+ return self._get_record_ids_from_index(
+ map(self._get_company_name, companies),
+ self.company_index)
+
+ def get_record_ids_by_launchpad_ids(self, launchpad_ids):
+ return self._get_record_ids_from_index(launchpad_ids,
+ self.launchpad_id_index)
+
+ def get_record_ids_by_releases(self, releases):
+ return self._get_record_ids_from_index(releases, self.release_index)
+
+ def get_record_ids(self):
+ return set(self.records.keys())
+
+ def get_records(self, record_ids):
+ for i in record_ids:
+ yield self.records[i]
+
+ def _get_company_name(self, company_name):
+ normalized = company_name.lower()
+ if normalized not in self.company_name_mapping:
+ raise Exception('Unknown company name %s' % company_name)
+ return self.company_name_mapping[normalized]
+
+ def get_companies(self):
+ return self.company_index.keys()
+
+ def get_modules(self):
+ return self.module_index.keys()
+
+ def get_launchpad_ids(self):
+ return self.launchpad_id_index.keys()
+
+
+class MemoryStorageFactory(object):
+
+ @staticmethod
+ def get_storage(memory_storage_type, records):
+ if memory_storage_type == MEMORY_STORAGE_CACHED:
+ return CachedMemoryStorage(records)
+ else:
+ raise Exception('Unknown memory storage type')
diff --git a/dashboard/dashboard.py b/dashboard/old_dashboard.py
similarity index 100%
rename from dashboard/dashboard.py
rename to dashboard/old_dashboard.py
diff --git a/dashboard/static/css/style.css b/dashboard/static/css/style.css
index bf93fe8f1..345ca542e 100644
--- a/dashboard/static/css/style.css
+++ b/dashboard/static/css/style.css
@@ -94,7 +94,7 @@ div.drops label {
color: #909cb5;
}
-span.drop_period {
+span.drop_release {
margin-top: 6px;
display: block;
height: 30px;
diff --git a/dashboard/templates/base.html b/dashboard/templates/base.html
index 2b01e6cad..6d8d55b4e 100644
--- a/dashboard/templates/base.html
+++ b/dashboard/templates/base.html
@@ -34,9 +34,9 @@
-
-
-
+
+
+
{# #}
@@ -49,21 +49,21 @@
{% block head %}{% endblock %}
-
+{# #}
diff --git a/dashboard/templates/company_details.html b/dashboard/templates/company_details.html
index 2889e32cc..2257f67e5 100644
--- a/dashboard/templates/company_details.html
+++ b/dashboard/templates/company_details.html
@@ -4,16 +4,19 @@
{{ company }}
{% endblock %}
+{% block scripts %}
+
+{% endblock %}
+
+
{% block left_frame %}
Contribution by engineers
-
-
@@ -35,11 +38,6 @@
Contribution by modules
-
-
@@ -59,10 +57,10 @@
{% if blueprints %}
Blueprints:
- {% for one in blueprints %}
+ {% for rec in blueprints %}
-
- {{ one[0] }}
- {{ one[1] }}
+ {{ rec['id'] }}
+ {{ rec['module'] }}
{% endfor %}
@@ -70,12 +68,18 @@
{% endif %}
{% if bugs %}
-
Bug fixes:
{{ bugs|length }}
+
{% endif %}
-
Total commits: {{ commits|length }}, among them {{ code_commits }} commits in code,
- among them {{ test_only_commits }} test only commits
+
Total commits: {{ commits|length }}
Total LOC: {{ loc }}
{% endblock %}
diff --git a/dashboard/templates/engineer_details.html b/dashboard/templates/engineer_details.html
index 8b7c8fad3..811047abc 100644
--- a/dashboard/templates/engineer_details.html
+++ b/dashboard/templates/engineer_details.html
@@ -1,25 +1,26 @@
{% extends "layout.html" %}
{% block title %}
- {{ details.name }}
+ {{ user.user_name }}
+{% endblock %}
+
+{% block scripts %}
+
{% endblock %}
{% block left_frame %}
-
-
-
-
 }})
+
-
{{ details.name }}
- {% if details.company %}
-
Company: {{ link('/companies/' + details.company, details.company) }}
+
{{ user.user_name }}
+ {% if user.companies %}
+
Company: {{ user.companies[-1].company_name|link('/companies/' + user.companies[-1].company_name)|safe }}
{% endif %}
-
-{#
Email: {{ details.email }}
#}
+
Commits history
@@ -28,15 +29,13 @@
There are no commits for selected period or project type.
{% endif %}
- {% for message in commits %}
+ {% for rec in commits %}
-
{{ message.date|datetimeformat }} to {{ message.module }}
- {% if message.is_code %} code {% endif %}
- {% if message.is_test %} test {% endif %}
+ {{ rec.date|datetimeformat }} to {{ rec.module }}
-
{{ message.message|safe }}
- + {{ message.added_loc }}
- - {{ message.removed_loc }}
+ {{ rec|commit_message|safe }}
+ + {{ rec.lines_added }}
+ - {{ rec.lines_deleted }}
{% endfor %}
@@ -47,11 +46,6 @@
{% if commits %}
Contribution by modules
-
-
@@ -71,10 +65,10 @@
{% if blueprints %}
Blueprints:
- {% for one in blueprints %}
+ {% for rec in blueprints %}
-
- {{ one[0] }}
- {{ one[1] }}
+ {{ rec['id'] }}
+ {{ rec['module'] }}
{% endfor %}
@@ -82,23 +76,18 @@
{% endif %}
{% if bugs %}
-
Bug fixes:
+
Bugs:
- {% for one in bugs %}
+ {% for rec in bugs %}
-
- {{ one[0] }}
-
- {% if one[1] %} C {% endif %}
- {% if one[2] %} T {% endif %}
-
+ {{ rec['id'] }}
{% endfor %}
{% endif %}
-
Total commits: {{ commits|length }}, among them {{ code_commits }} commits in code,
- among them {{ test_only_commits }} test only commits
+
Total commits: {{ commits|length }}
Total LOC: {{ loc }}
{% endif %}
diff --git a/dashboard/templates/layout.html b/dashboard/templates/layout.html
index c88f948cc..314976293 100644
--- a/dashboard/templates/layout.html
+++ b/dashboard/templates/layout.html
@@ -18,159 +18,173 @@
+{% block scripts %}{% endblock %}
+
{% endblock %}
{% block body %}
@@ -244,10 +260,9 @@
-
-
{% endblock %}
-
-{% macro link(base, title) -%}
-
{{ title }}
-{%- endmacro %}
diff --git a/dashboard/templates/module_details.html b/dashboard/templates/module_details.html
index 9dea8edf6..271820eb7 100644
--- a/dashboard/templates/module_details.html
+++ b/dashboard/templates/module_details.html
@@ -4,16 +4,17 @@
{{ module }}
{% endblock %}
+{% block scripts %}
+
+{% endblock %}
+
{% block left_frame %}
Contribution by companies
-
-
@@ -38,30 +39,25 @@
{% for rec in commits %}
-
 }})
+
- {{ link('/engineers/' + rec.launchpad_id, rec.name) }}
-{#
{{ rec.name }}#}
+ {% if rec.launchpad_id %}
+ {{ rec.author|link('/engineers/' + rec.launchpad_id)|safe }}
+ {% else %}
+ {{ rec.author }}
+ {% endif %}
{% if rec.company %}
(
- {{ link('/companies/' + rec.company, rec.company) }}
-{#
{{ rec.company }}#}
+ {{ rec.company|link('/companies/' + rec.company)|safe }}
)
{% endif %}
{{ rec.date|datetimeformat }}
- {% if rec.ref %}
-
{{ rec.ref|safe }}
- {% endif %}
-
{{ rec.text }}
- {% if rec.change_id %}
-
- {% endif %}
+
{{ rec.subject }}
+
{{ rec|commit_message|safe }}
{% endfor %}
diff --git a/dashboard/templates/companies.html b/dashboard/templates/overview.html
similarity index 72%
rename from dashboard/templates/companies.html
rename to dashboard/templates/overview.html
index 5a640e4a4..ddb67d346 100644
--- a/dashboard/templates/companies.html
+++ b/dashboard/templates/overview.html
@@ -4,16 +4,18 @@
Overview
{% endblock %}
+{% block scripts %}
+
+{% endblock %}
+
{% block left_frame %}
Contribution by companies
-
-
@@ -35,11 +37,6 @@
Contribution by modules
-
-
diff --git a/dashboard/web.py b/dashboard/web.py
new file mode 100644
index 000000000..79ca50946
--- /dev/null
+++ b/dashboard/web.py
@@ -0,0 +1,452 @@
+import cgi
+import datetime
+import functools
+import json
+import os
+import re
+import urllib
+
+import flask
+from flask.ext import gravatar as gravatar_ext
+import time
+
+from dashboard import memory_storage
+from stackalytics.processor.persistent_storage import PersistentStorageFactory
+from stackalytics.processor.runtime_storage import RuntimeStorageFactory
+from stackalytics.processor import user_utils
+
+DEBUG = True
+RUNTIME_STORAGE_URI = 'memcached://127.0.0.1:11211'
+PERSISTENT_STORAGE_URI = 'mongodb://localhost'
+
+# create our little application :)
+app = flask.Flask(__name__)
+app.config.from_object(__name__)
+app.config.from_envvar('DASHBOARD_CONF', silent=True)
+
+
+def get_vault():
+ vault = getattr(app, 'stackalytics_vault', None)
+ if not vault:
+ vault = {}
+ vault['runtime_storage'] = RuntimeStorageFactory.get_storage(
+ RUNTIME_STORAGE_URI)
+ vault['persistent_storage'] = PersistentStorageFactory.get_storage(
+ PERSISTENT_STORAGE_URI)
+ vault['memory_storage'] = (
+ memory_storage.MemoryStorageFactory.get_storage(
+ memory_storage.MEMORY_STORAGE_CACHED,
+ vault['runtime_storage'].get_update(os.getpid())))
+
+ releases = vault['persistent_storage'].get_releases()
+ vault['releases'] = dict((r['release_name'].lower(), r)
+ for r in releases)
+ app.stackalytics_vault = vault
+ return vault
+
+
+def get_memory_storage():
+ return get_vault()['memory_storage']
+
+
+def record_filter(parameter_getter=lambda x: flask.request.args.get(x)):
+ def decorator(f):
+ @functools.wraps(f)
+ def decorated_function(*args, **kwargs):
+
+ vault = get_vault()
+ memory_storage = vault['memory_storage']
+ record_ids = memory_storage.get_record_ids()
+
+ param = parameter_getter('modules')
+ if param:
+ record_ids &= memory_storage.get_record_ids_by_modules(
+ param.split(','))
+
+ if 'launchpad_id' in kwargs:
+ param = kwargs['launchpad_id']
+ else:
+ param = (parameter_getter('launchpad_id') or
+ parameter_getter('launchpad_ids'))
+ if param:
+ record_ids &= memory_storage.get_record_ids_by_launchpad_ids(
+ param.split(','))
+
+ if 'company' in kwargs:
+ param = kwargs['company']
+ else:
+ param = (parameter_getter('company') or
+ parameter_getter('companies'))
+ if param:
+ record_ids &= memory_storage.get_record_ids_by_companies(
+ param.split(','))
+
+ param = parameter_getter('release') or parameter_getter('releases')
+ if param:
+ if param != 'all':
+ record_ids &= memory_storage.get_record_ids_by_releases(
+ c.lower() for c in param.split(','))
+
+ kwargs['records'] = memory_storage.get_records(record_ids)
+ return f(*args, **kwargs)
+
+ return decorated_function
+
+ return decorator
+
+
+def aggregate_filter():
+ def decorator(f):
+ @functools.wraps(f)
+ def decorated_function(*args, **kwargs):
+
+ metric_filter = lambda r: r['loc']
+ metric_param = flask.request.args.get('metric')
+ if metric_param:
+ metric = metric_param.lower()
+ if metric == 'commits':
+ metric_filter = lambda r: 1
+ elif metric != 'loc':
+ raise Exception('Invalid metric %s' % metric)
+
+ kwargs['metric_filter'] = metric_filter
+ return f(*args, **kwargs)
+
+ return decorated_function
+
+ return decorator
+
+
+def exception_handler():
+ def decorator(f):
+ @functools.wraps(f)
+ def decorated_function(*args, **kwargs):
+ try:
+ return f(*args, **kwargs)
+ except Exception as e:
+ print e
+ flask.abort(404)
+
+ return decorated_function
+
+ return decorator
+
+
+DEFAULT_METRIC = 'loc'
+DEFAULT_RELEASE = 'havana'
+DEFAULT_PROJECT_TYPE = 'incubation'
+
+INDEPENDENT = '*independent'
+
+METRIC_LABELS = {
+ 'loc': 'Lines of code',
+ 'commits': 'Commits',
+}
+
+PROJECT_TYPES = {
+ 'core': ['core'],
+ 'incubation': ['core', 'incubation'],
+ 'all': ['core', 'incubation', 'dev'],
+}
+
+ISSUE_TYPES = ['bug', 'blueprint']
+
+DEFAULT_RECORDS_LIMIT = 10
+
+
+def templated(template=None):
+ def decorator(f):
+ @functools.wraps(f)
+ def decorated_function(*args, **kwargs):
+
+ vault = get_vault()
+ template_name = template
+ if template_name is None:
+ template_name = (flask.request.endpoint.replace('.', '/') +
+ '.html')
+ ctx = f(*args, **kwargs)
+ if ctx is None:
+ ctx = {}
+
+ # put parameters into template
+ metric = flask.request.args.get('metric')
+ if metric not in METRIC_LABELS:
+ metric = None
+ ctx['metric'] = metric or DEFAULT_METRIC
+ ctx['metric_label'] = METRIC_LABELS[ctx['metric']]
+
+ release = flask.request.args.get('release')
+ releases = vault['releases']
+ if release:
+ release = release.lower()
+ if release not in releases:
+ release = None
+ else:
+ release = releases[release]['release_name']
+ ctx['release'] = (release or DEFAULT_RELEASE).lower()
+
+ return flask.render_template(template_name, **ctx)
+
+ return decorated_function
+
+ return decorator
+
+
+@app.route('/')
+@templated()
+def overview():
+ pass
+
+
+def contribution_details(records, limit=DEFAULT_RECORDS_LIMIT):
+ blueprints_map = {}
+ bugs_map = {}
+ commits = []
+ loc = 0
+
+ for record in records:
+ loc += record['loc']
+ commits.append(record)
+ blueprint = record['blueprint_id']
+ if blueprint:
+ if blueprint in blueprints_map:
+ blueprints_map[blueprint].append(record)
+ else:
+ blueprints_map[blueprint] = [record]
+
+ bug = record['bug_id']
+ if bug:
+ if bug in bugs_map:
+ bugs_map[bug].append(record)
+ else:
+ bugs_map[bug] = [record]
+
+ blueprints = sorted([{'id': key,
+ 'module': value[0]['module'],
+ 'records': value}
+ for key, value in blueprints_map.iteritems()],
+ key=lambda x: x['id'])
+ bugs = sorted([{'id': key, 'records': value}
+ for key, value in bugs_map.iteritems()],
+ key=lambda x: x['id'])
+ commits.sort(key=lambda x: x['date'], reverse=True)
+
+ result = {
+ 'blueprints': blueprints,
+ 'bugs': bugs,
+ 'commits': commits[0:limit],
+ 'loc': loc,
+ }
+ return result
+
+
+@app.route('/companies/')
+@exception_handler()
+@templated()
+@record_filter()
+def company_details(company, records):
+ details = contribution_details(records)
+ details['company'] = company
+ return details
+
+
+@app.route('/modules/')
+@exception_handler()
+@templated()
+@record_filter()
+def module_details(module, records):
+ details = contribution_details(records)
+ details['module'] = module
+ return details
+
+
+@app.route('/engineers/')
+@exception_handler()
+@templated()
+@record_filter()
+def engineer_details(launchpad_id, records):
+ persistent_storage = get_vault()['persistent_storage']
+ user = list(persistent_storage.get_users(launchpad_id=launchpad_id))[0]
+
+ details = contribution_details(records)
+ details['launchpad_id'] = launchpad_id
+ details['user'] = user
+ return details
+
+
+@app.errorhandler(404)
+def page_not_found(e):
+ return flask.render_template('404.html'), 404
+
+
+def _get_aggregated_stats(records, metric_filter, keys, param_id,
+ param_title=None):
+ param_title = param_title or param_id
+ result = dict((c, 0) for c in keys)
+ titles = {}
+ for record in records:
+ result[record[param_id]] += metric_filter(record)
+ titles[record[param_id]] = record[param_title]
+
+ response = [{'id': r, 'metric': result[r], 'name': titles[r]}
+ for r in result if result[r]]
+ response.sort(key=lambda x: x['metric'], reverse=True)
+ return response
+
+
+@app.route('/data/companies')
+@exception_handler()
+@record_filter()
+@aggregate_filter()
+def get_companies(records, metric_filter):
+ response = _get_aggregated_stats(records, metric_filter,
+ get_memory_storage().get_companies(),
+ 'company_name')
+ return json.dumps(response)
+
+
+@app.route('/data/modules')
+@exception_handler()
+@record_filter()
+@aggregate_filter()
+def get_modules(records, metric_filter):
+ response = _get_aggregated_stats(records, metric_filter,
+ get_memory_storage().get_modules(),
+ 'module')
+ return json.dumps(response)
+
+
+@app.route('/data/engineers')
+@exception_handler()
+@record_filter()
+@aggregate_filter()
+def get_engineers(records, metric_filter):
+ response = _get_aggregated_stats(records, metric_filter,
+ get_memory_storage().get_launchpad_ids(),
+ 'launchpad_id', 'author')
+ return json.dumps(response)
+
+
+@app.route('/data/timeline')
+@exception_handler()
+@record_filter(parameter_getter=lambda x: flask.request.args.get(x)
+ if (x != "release") and (x != "releases") else None)
+def timeline(records):
+
+ # find start and end dates
+ release_name = flask.request.args.get('release')
+
+ if not release_name:
+ release_name = DEFAULT_RELEASE
+ else:
+ release_name = release_name.lower()
+
+ releases = get_vault()['releases']
+ if release_name not in releases:
+ flask.abort(404)
+ release = releases[release_name]
+
+ start_date = release_start_date = user_utils.timestamp_to_week(
+ user_utils.date_to_timestamp(release['start_date']))
+ end_date = release_end_date = user_utils.timestamp_to_week(
+ user_utils.date_to_timestamp(release['end_date']))
+ now = user_utils.timestamp_to_week(int(time.time()))
+
+ # expand start-end to year if needed
+ if release_end_date - release_start_date < 52:
+ expansion = (52 - (release_end_date - release_start_date)) // 2
+ if release_end_date + expansion < now:
+ end_date += expansion
+ else:
+ end_date = now
+ start_date = end_date - 52
+
+ # empty stats for all weeks in range
+ weeks = range(start_date, end_date)
+ week_stat_loc = dict((c, 0) for c in weeks)
+ week_stat_commits = dict((c, 0) for c in weeks)
+
+ # fill stats with the data
+ for record in records:
+ week = record['week']
+ if week in weeks:
+ week_stat_loc[week] += record['loc']
+ week_stat_commits[week] += 1
+
+ # form arrays in format acceptable to timeline plugin
+ array_loc = []
+ array_commits = []
+ array_commits_hl = []
+
+ for week in weeks:
+ week_str = user_utils.week_to_date(week)
+ array_loc.append([week_str, week_stat_loc[week]])
+ if release_start_date <= week <= release_end_date:
+ array_commits_hl.append([week_str, week_stat_commits[week]])
+ array_commits.append([week_str, week_stat_commits[week]])
+
+ return json.dumps([array_commits, array_commits_hl, array_loc])
+
+
+# Jinja Filters
+
+@app.template_filter('datetimeformat')
+def format_datetime(timestamp):
+ return datetime.datetime.utcfromtimestamp(
+ timestamp).strftime('%d %b %Y @ %H:%M')
+
+
+@app.template_filter('launchpadmodule')
+def format_launchpad_module_link(module):
+ return '%s' % (module, module)
+
+
+@app.template_filter('encode')
+def safe_encode(s):
+ return urllib.quote_plus(s)
+
+
+@app.template_filter('link')
+def make_link(title, uri=None):
+ return '%(title)s' % {'uri': uri, 'title': title}
+
+
+def clear_text(s):
+ return cgi.escape(re.sub(r'\n{2,}', '\n', s, flags=re.MULTILINE))
+
+
+def link_blueprint(s, module):
+ return re.sub(r'(blueprint\s+)([\w-]+)',
+ r'\1\2',
+ s, flags=re.IGNORECASE)
+
+
+def link_bug(s):
+ return re.sub(r'(bug\s+)#?([\d]{5,7})',
+ r'\1\2',
+ s, flags=re.IGNORECASE)
+
+
+def link_change_id(s):
+ return re.sub(r'\s+(I[0-9a-f]{40})',
+ r' \1',
+ s)
+
+
+@app.template_filter('commit_message')
+def make_commit_message(record):
+
+ return link_change_id(link_bug(link_blueprint(clear_text(
+ record['message']), record['module'])))
+
+
+gravatar = gravatar_ext.Gravatar(app,
+ size=100,
+ rating='g',
+ default='wavatar',
+ force_default=False,
+ force_lower=False)
+
+if __name__ == '__main__':
+ app.run('0.0.0.0')
diff --git a/etc/default_data.json b/etc/default_data.json
new file mode 100644
index 000000000..41061f73f
--- /dev/null
+++ b/etc/default_data.json
@@ -0,0 +1,13549 @@
+{
+ "meta": {
+ "last_update": "09-Jul-2013"
+ },
+
+ "users": [
+ {
+ "launchpad_id": "akamyshnikova",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ann Kamyshnikova",
+ "emails": [
+ "akamyshnikova@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "berrange",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Daniel Berrange",
+ "emails": [
+ "berrange@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "hzwangpan",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "wangpan",
+ "emails": [
+ "hzwangpan@corp.netease.com"
+ ]
+ },
+ {
+ "launchpad_id": "fabien-boucher",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Fabien Boucher",
+ "emails": [
+ "fabien.boucher@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "treinish",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthew Treinish",
+ "emails": [
+ "treinish@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "neoshades",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andy Hill",
+ "emails": [
+ "hillad@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "lianhao-lu",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lianhao Lu",
+ "emails": [
+ "lianhao.lu@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "lcui",
+ "companies": [
+ {
+ "company_name": "VMware",
+ "end_date": null
+ }
+ ],
+ "user_name": "Leon",
+ "emails": [
+ "lcui@vmware.com"
+ ]
+ },
+ {
+ "launchpad_id": "litong01",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tong Li",
+ "emails": [
+ "litong01@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "kvdveer",
+ "companies": [
+ {
+ "company_name": "CloudVPS",
+ "end_date": null
+ }
+ ],
+ "user_name": "Koert van der Veer",
+ "emails": [
+ "koert@cloudvps.com"
+ ]
+ },
+ {
+ "launchpad_id": "iosctr",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian D. Burns",
+ "emails": [
+ "iosctr@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "hvolkmer",
+ "companies": [
+ {
+ "company_name": "Cloudbau",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hendrik Volkmer",
+ "emails": [
+ "h.volkmer@cloudbau.de"
+ ]
+ },
+ {
+ "launchpad_id": "zulcss",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chuck Short",
+ "emails": [
+ "chuck.short@canonical.com",
+ "zulcss@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "pauldbourke",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Paul Bourke",
+ "emails": [
+ "paul-david.bourke@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "hodong-hwang",
+ "companies": [
+ {
+ "company_name": "KT Corporation",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hodong Hwang",
+ "emails": [
+ "hodong.hwang@kt.com"
+ ]
+ },
+ {
+ "launchpad_id": "bao-mingyan",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mingyan Bao",
+ "emails": [
+ "bao.mingyan@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "michaeltchapman",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Chapman",
+ "emails": [
+ "michchap@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "carlos-marin-d",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Carlos Marin",
+ "emails": [
+ "carlos.marin@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "renier-h",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Renier Morales",
+ "emails": [
+ "renierm@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "cgoncalves",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Carlos Gon\u00e7alves",
+ "emails": [
+ "cgoncalves@av.it.pt"
+ ]
+ },
+ {
+ "launchpad_id": "truijllo",
+ "companies": [
+ {
+ "company_name": "CRS4",
+ "end_date": null
+ }
+ ],
+ "user_name": "truijllo",
+ "emails": [
+ "truijllo@crs4.it"
+ ]
+ },
+ {
+ "launchpad_id": "aglenyoung",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Glen-Young",
+ "emails": [
+ "andrew.glen-young@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "fifieldt",
+ "companies": [
+ {
+ "company_name": "University of Melbourne",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tom Fifield",
+ "emails": [
+ "fifieldt@unimelb.edu.au",
+ "tom@openstack.org"
+ ]
+ },
+ {
+ "launchpad_id": "daeskp",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dae S. Kim",
+ "emails": [
+ "dae@velatum.com"
+ ]
+ },
+ {
+ "launchpad_id": "jbresnah",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Bresnahan",
+ "emails": [
+ "jbresnah@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "prykhodchenko",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Roman Prykhodchenko",
+ "emails": [
+ "rprikhodchenko@mirantis.com",
+ "me@romcheg.me"
+ ]
+ },
+ {
+ "launchpad_id": "stephen-mulcahy",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "stephen mulcahy",
+ "emails": [
+ "stephen.mulcahy@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "jrd-q",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Dunning",
+ "emails": [
+ "jrd@jrd.org"
+ ]
+ },
+ {
+ "launchpad_id": "kgriffs",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kurt Griffiths",
+ "emails": [
+ "kurt.griffiths@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "changbl",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Changbin Liu",
+ "emails": [
+ "changbin.liu@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "yunshen",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yun Shen",
+ "emails": [
+ "yun.shen@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "n0ano-ddd",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Donald Dugger",
+ "emails": [
+ "donald.d.dugger@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "nachiappan-veerappan-nachiappan",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nachiappan",
+ "emails": [
+ "nachiappan.veerappan-nachiappan@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "zyluo",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhongyue Luo",
+ "emails": [
+ "lzyeval@gmail.com",
+ "zhongyue.nah@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "mikeyp-3",
+ "companies": [
+ {
+ "company_name": "La Honda Research",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mike Pittaro",
+ "emails": [
+ "mikeyp@LaHondaResearch.org",
+ "mikeyp@lahondaresearch.org"
+ ]
+ },
+ {
+ "launchpad_id": "zedshaw",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zed A. Shaw",
+ "emails": [
+ "zedshaw@zedshaw.com"
+ ]
+ },
+ {
+ "launchpad_id": "enikanorov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eugene Nikanorov",
+ "emails": [
+ "enikanorov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "mriedem",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Riedemann",
+ "emails": [
+ "mriedem@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "flaviamissi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "flaviamissi",
+ "emails": [
+ "flaviamissi@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-martin",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Martin",
+ "emails": [
+ "dmartls1@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rwsu",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Richard Su",
+ "emails": [
+ "rwsu@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "chendi-xue",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "XueChendi",
+ "emails": [
+ "chendi.xue@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "mandarvaze",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mandar Vaze",
+ "emails": [
+ "mandar.vaze@vertex.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "motonobu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Motonobu Ichimura",
+ "emails": [
+ "motonobu@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "novel",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Roman Bogorodskiy",
+ "emails": [
+ "bogorodskiy@gmail.com",
+ "rbogorodskiy@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "vsergeyev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Victor Sergeyev",
+ "emails": [
+ "vsergeyev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "constantine-q",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Constantine Peresypkin",
+ "emails": [
+ "constantine@litestack.com"
+ ]
+ },
+ {
+ "launchpad_id": "yanglyy",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "YangLei",
+ "emails": [
+ "yanglyy@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "ziad-sawalha",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ziad Sawalha",
+ "emails": [
+ "ziad.sawalha@rackspace.com",
+ "github@highbridgellc.com",
+ "gihub@highbridgellc.com"
+ ]
+ },
+ {
+ "launchpad_id": "vishvananda",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vish Ishaya",
+ "emails": [
+ "vishvananda@yahoo.com",
+ "root@ubuntu",
+ "vishvananda@gmail.com",
+ "root@mirror.nasanebula.net"
+ ]
+ },
+ {
+ "launchpad_id": "tsedovic",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tomas Sedovic",
+ "emails": [
+ "tomas@sedovic.cz"
+ ]
+ },
+ {
+ "launchpad_id": "eafonichev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Evgeniy Afonichev",
+ "emails": [
+ "eafonichev@mirantis.com",
+ "evgeniy@afonichev.com"
+ ]
+ },
+ {
+ "launchpad_id": "joshua-mckenty",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joshua McKenty",
+ "emails": [
+ "jmckenty@yyj-dhcp171.corp.flock.com",
+ "joshua@pistoncloud.com",
+ "joshua.mckenty@nasa.gov",
+ "jmckenty@joshua-mckentys-macbook-pro.local",
+ "jmckenty@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "scott-dangelo",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Scott DAngelo",
+ "emails": [
+ "scott.dangelo@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "reynolds.chin",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Reynolds Chin",
+ "emails": [
+ "benzwt@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "xyj-asmy",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yejia Xu",
+ "emails": [
+ "yejia@unitedstack.com",
+ "xyj.asmy@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "scollins",
+ "companies": [
+ {
+ "company_name": "Comcast",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sean M. Collins",
+ "emails": [
+ "sean@coreitpro.com"
+ ]
+ },
+ {
+ "launchpad_id": "darragh-oreilly",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Darragh O'Reilly",
+ "emails": [
+ "dara2002-openstack@yahoo.com"
+ ]
+ },
+ {
+ "launchpad_id": "hyphon-zh",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hyphon Zhang",
+ "emails": [
+ "ghj114@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "usrleon",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lvov Maxim",
+ "emails": [
+ "usrleon@gmail.com",
+ "mlvov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "kaiwei-fan",
+ "companies": [
+ {
+ "company_name": "VMware",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kaiwei Fan",
+ "emails": [
+ "fank@vmware.com"
+ ]
+ },
+ {
+ "launchpad_id": "lklrmn",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Leah Klearman",
+ "emails": [
+ "lklrmn@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "starmer",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Starmer",
+ "emails": [
+ "starmer@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "racb",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robie Basak",
+ "emails": [
+ "robie.basak@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "thomas-spatzier",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thomas Spatzier",
+ "emails": [
+ "thomas.spatzier@de.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "henry-nash",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Henry Nash",
+ "emails": [
+ "henryn@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "kelsey-tripp",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kelsey Tripp",
+ "emails": [
+ "kelsey.tripp@nebula.com"
+ ]
+ },
+ {
+ "launchpad_id": "erikzaadi",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Erik Zaadi",
+ "emails": [
+ "erikz@il.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "swann-w",
+ "companies": [
+ {
+ "company_name": "Bull",
+ "end_date": null
+ }
+ ],
+ "user_name": "Swann Croiset",
+ "emails": [
+ "swann.croiset@bull.net",
+ "swann@oopss.org"
+ ]
+ },
+ {
+ "launchpad_id": "eday",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eric Day",
+ "emails": [
+ "eday@oddments.org"
+ ]
+ },
+ {
+ "launchpad_id": "rcurran",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rich Curran",
+ "emails": [
+ "rcurran@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "tpatil",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tushar Patil",
+ "emails": [
+ "tpatil@vertex.co.in",
+ "tushar.vitthal.patil@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "a-koppad",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Annapoornima Koppad",
+ "emails": [
+ "a.koppad@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-brzozowski",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Jason Brzozowski",
+ "emails": [
+ "jjmb@jjmb.com"
+ ]
+ },
+ {
+ "launchpad_id": "zhiteng-huang",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Huang Zhiteng",
+ "emails": [
+ "zhiteng.huang@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "aloga",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alvaro Lopez",
+ "emails": [
+ "Lopez",
+ "aloga@ifca.unican.es"
+ ]
+ },
+ {
+ "launchpad_id": "kanaderohan",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rohan",
+ "emails": [
+ "rohan.kanade@nttdata.com"
+ ]
+ },
+ {
+ "launchpad_id": "sylvain-afchain",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sylvain Afchain",
+ "emails": [
+ "sylvain.afchain@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "njohnston",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Neil Johnston",
+ "emails": [
+ "onewheeldrive.net@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "terriyu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Terri Yu",
+ "emails": [
+ "teryu@alum.mit.edu"
+ ]
+ },
+ {
+ "launchpad_id": "pksunkara",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pavan Kumar Sunkara",
+ "emails": [
+ "pavan.sss1991@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "johannes.erdfelt",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Johannes Erdfelt",
+ "emails": [
+ "johannes@erdfelt.com",
+ "johannes.erdfelt@rackspace.com",
+ "johannes@compute3.221.st"
+ ]
+ },
+ {
+ "launchpad_id": "jerome-gallard",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "J\u00e9r\u00f4me Gallard",
+ "emails": [
+ "jerome.david.gallard@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "gtt116",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "TianTian Gao",
+ "emails": [
+ "gtt116@gmail.com",
+ "gtt116@126.com"
+ ]
+ },
+ {
+ "launchpad_id": "shrinand",
+ "companies": [
+ {
+ "company_name": "Maginatics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shri Javadekar",
+ "emails": [
+ "shrinand@maginatics.com"
+ ]
+ },
+ {
+ "launchpad_id": "asomya",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Arvind Somya",
+ "emails": [
+ "asomya@cisco.com",
+ "Somya"
+ ]
+ },
+ {
+ "launchpad_id": "chungg",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "gordon chung",
+ "emails": [
+ "chungg@ca.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "rjuvvadi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ramana Juvvadi",
+ "emails": [
+ "rjuvvadi@hcl.com",
+ "rrjuvvadi@gmail.com",
+ "ramana@venus.lekha.org"
+ ]
+ },
+ {
+ "launchpad_id": "anotherjesse",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jesse Andrews",
+ "emails": [
+ "jesse@gigantor.local",
+ "jesse@aire.local",
+ "jesse@ubuntu",
+ "jesse@dancelamb",
+ "anotherjesse@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "luis-fernandez-alvarez",
+ "companies": [
+ {
+ "company_name": "CERN",
+ "end_date": null
+ }
+ ],
+ "user_name": "Luis Fernandez",
+ "emails": [
+ "luis.fernandez.alvarez@cern.ch"
+ ]
+ },
+ {
+ "launchpad_id": "sgordon",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stephen Gordon",
+ "emails": [
+ "sgordon@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jbryce",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jonathan Bryce",
+ "emails": [
+ "jbryce@jbryce.com"
+ ]
+ },
+ {
+ "launchpad_id": "alexhandle",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alex Handle",
+ "emails": [
+ "ah@mynet.at"
+ ]
+ },
+ {
+ "launchpad_id": "alatynskaya",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anastasia Latynskaya",
+ "emails": [
+ "alatynskaya@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "rtb",
+ "companies": [
+ {
+ "company_name": "CERN",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rainer Toebbicke",
+ "emails": [
+ "rainer.toebbicke@cern.ch"
+ ]
+ },
+ {
+ "launchpad_id": "mattt416",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Thompson",
+ "emails": [
+ "mattt@defunct.ca"
+ ]
+ },
+ {
+ "launchpad_id": "juergh",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Juerg Haefliger",
+ "emails": [
+ "juerg.haefliger@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "rcc",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ricardo Carrillo Cruz",
+ "emails": [
+ "emaildericky@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ilyaalekseyev",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ilya Alekseyev",
+ "emails": [
+ "ialekseev@griddynamics.com",
+ "ilya@oscloud.ru",
+ "ilyaalekseyev@acm.org"
+ ]
+ },
+ {
+ "launchpad_id": "sgran",
+ "companies": [
+ {
+ "company_name": "The Guardian",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stephen Gran",
+ "emails": [
+ "stephen.gran@guardian.co.uk"
+ ]
+ },
+ {
+ "launchpad_id": "joe-topjian-v",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joe T",
+ "emails": [
+ "joe@topjian.net"
+ ]
+ },
+ {
+ "launchpad_id": "zzs",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason Zhang",
+ "emails": [
+ "zhesen@nttmcl.com"
+ ]
+ },
+ {
+ "launchpad_id": "yuxcer",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yuxingchao",
+ "emails": [
+ "yuxcer@126.com",
+ "yuxcer@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "wanglong",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "drabbit",
+ "emails": [
+ "wl3617@qq.com"
+ ]
+ },
+ {
+ "launchpad_id": "nick-craig-wood",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nick Craig-Wood",
+ "emails": [
+ "nick@craig-wood.com"
+ ]
+ },
+ {
+ "launchpad_id": "mattstep",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Stephenson",
+ "emails": [
+ "mattstep@mattstep.net"
+ ]
+ },
+ {
+ "launchpad_id": "eap-x",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eric Pendergrass",
+ "emails": [
+ "eap@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "k.c.wang",
+ "companies": [
+ {
+ "company_name": "Big Switch Networks",
+ "end_date": null
+ }
+ ],
+ "user_name": "KC Wang",
+ "emails": [
+ "kc.wang@bigswitch.com"
+ ]
+ },
+ {
+ "launchpad_id": "justin-fathomdb",
+ "companies": [
+ {
+ "company_name": "FathomDB",
+ "end_date": null
+ }
+ ],
+ "user_name": "justinsb",
+ "emails": [
+ "justinsb@justinsb-desktop",
+ "justin@fathomdb.com",
+ "SB",
+ "superstack@superstack.org"
+ ]
+ },
+ {
+ "launchpad_id": "vash-vasiliyshlykov",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vasiliy Shlykov",
+ "emails": [
+ "vash@vasiliyshlykov.org"
+ ]
+ },
+ {
+ "launchpad_id": "nicolas.simonds",
+ "companies": [
+ {
+ "company_name": "Metacloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicolas Simonds",
+ "emails": [
+ "nic@metacloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "xiaoxi-chen",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "xiaoxi_chen",
+ "emails": [
+ "xiaoxi.chen@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "wenjianhn",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jian Wen",
+ "emails": [
+ "jian.wen@canonical.com",
+ "wenjianhn@gmail.com",
+ "jian.wen@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "mate-lakat",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mate Lakat",
+ "emails": [
+ "mate.lakat@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "chiradeep",
+ "companies": [
+ {
+ "company_name": "Citrix Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chiradeep Vittal",
+ "emails": [
+ "chiradeep@chiradeep-lt2",
+ "chiradeep@cloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "dheidler",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dominik Heidler",
+ "emails": [
+ "dheidler@suse.de"
+ ]
+ },
+ {
+ "launchpad_id": "ekirpichov",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eugene Kirpichov",
+ "emails": [
+ "ekirpichov@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "alaski",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Laski",
+ "emails": [
+ "andrew.laski@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jens-christian-fischer",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jens-Christian Fischer",
+ "emails": [
+ "jens-christian.fischer@switch.ch"
+ ]
+ },
+ {
+ "launchpad_id": "entropyworks",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yazz Atlas",
+ "emails": [
+ "yazz.atlas@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "ewindisch",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eric Windisch",
+ "emails": [
+ "eric@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-wilde-rackspace",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dave Wilde",
+ "emails": [
+ "david.wilde@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "lauria",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Giampaolo Lauria",
+ "emails": [
+ "lauria@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "bob-melander",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bob Melander",
+ "emails": [
+ "bob.melander@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "paul-mcmillan",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Paul McMillan",
+ "emails": [
+ "paul.mcmillan@nebula.com"
+ ]
+ },
+ {
+ "launchpad_id": "vkhomenko",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vasyl Khomenko",
+ "emails": [
+ "vasiliyk@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "matt-nycresistor",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Joyce",
+ "emails": [
+ "matt.joyce@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "ykaneko0929",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yoshihiro Kaneko",
+ "emails": [
+ "ykaneko0929@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "vvechkanov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vladimir Vechkanov",
+ "emails": [
+ "vvechkanov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "berendt",
+ "companies": [
+ {
+ "company_name": "B1 Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christian Berendt",
+ "emails": [
+ "berendt@b1-systems.de"
+ ]
+ },
+ {
+ "launchpad_id": "rajarammallya",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rajaram Mallya",
+ "emails": [
+ "rajarammallya@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "thingee",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mike Perez",
+ "emails": [
+ "thingee@gmail.com",
+ "mike.perez@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "markgius",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark Gius",
+ "emails": [
+ "launchpad@markgius.com"
+ ]
+ },
+ {
+ "launchpad_id": "dricco",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Cian O'Driscoll",
+ "emails": [
+ "cian@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "venkateshsampath",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Venkatesh Sampath",
+ "emails": [
+ "venkatesh.sampath@outlook.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-postlethwait",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Postlethwait",
+ "emails": [
+ "john.postlethwait@nebula.com"
+ ]
+ },
+ {
+ "launchpad_id": "weiyuanke123",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "weiyuanke",
+ "emails": [
+ "weiyuanke123@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "leseb",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sebastien Han",
+ "emails": [
+ "sebastien.han@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "jajohnson",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason Johnson",
+ "emails": [
+ "jajohnson@softlayer.com"
+ ]
+ },
+ {
+ "launchpad_id": "ladquin",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Laura Alves",
+ "emails": [
+ "laura.adq@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "chris-ricker",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Ricker",
+ "emails": [
+ "chris.ricker@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "tim-miller-0",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tim Miller",
+ "emails": [
+ "tim.miller.0@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "gpernot",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Guillaume Pernot",
+ "emails": [
+ "gpernot@praksys.org"
+ ]
+ },
+ {
+ "launchpad_id": "sirisha-devineni",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sirisha Devineni",
+ "emails": [
+ "sirisha_devineni@persistent.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "nobodycam",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Krelle",
+ "emails": [
+ "nobodycam@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "cbjchen",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Liang Chen",
+ "emails": [
+ "cbjchen@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "russell",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Russell Cloran",
+ "emails": [
+ "russell@nimbula.com"
+ ]
+ },
+ {
+ "launchpad_id": "slukjanov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sergey Lukjanov",
+ "emails": [
+ "me@frostman.ru",
+ "slukjanov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "tr3buchet",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Trey Morris",
+ "emails": [
+ "trey.morris@rackspace.com",
+ "treyemorris@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jiyou09",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "You Ji",
+ "emails": [
+ "jiyou09@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "lapgoon",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "LiangAiping",
+ "emails": [
+ "lapgoon@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ajames",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew James",
+ "emails": [
+ "andrew.james@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "james-meredith",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "James Meredith",
+ "emails": [
+ "james.meredith@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "lmatter",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Larry Matter",
+ "emails": [
+ "lmatter@coraid.com"
+ ]
+ },
+ {
+ "launchpad_id": "bfschott",
+ "companies": [
+ {
+ "company_name": "Information Sciences Institute",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Schott",
+ "emails": [
+ "bschott@isi.edu",
+ "bfschott@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "gblomqui",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Greg Blomquist",
+ "emails": [
+ "gblomqui@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "rushiagr",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rushi Agrawal",
+ "emails": [
+ "rushi.agr@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "derekh",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Derek Higgins",
+ "emails": [
+ "higginsd@gmail.com",
+ "derekh@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "iberezovskiy",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ivan Berezovskiy",
+ "emails": [
+ "iberezovskiy@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "rellerreller",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nathan Reller",
+ "emails": [
+ "nathan.reller@jhuapl.edu"
+ ]
+ },
+ {
+ "launchpad_id": "bmcconne",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brad McConnell",
+ "emails": [
+ "McConnell",
+ "bmcconne@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "bilalakhtar",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bilal Akhtar",
+ "emails": [
+ "bilalakhtar@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "tamura-yoshiaki",
+ "companies": [
+ {
+ "company_name": "Midokura",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yoshiaki Tamura",
+ "emails": [
+ "yoshi@midokura.jp"
+ ]
+ },
+ {
+ "launchpad_id": "ishii-hisaharu",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hisaharu Ishii",
+ "emails": [
+ "ishii@nttmcl.com",
+ "ishii.hisaharu@lab.ntt.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "john-lenihan",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Lenihan",
+ "emails": [
+ "john.lenihan@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "jk0",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Josh Kearney",
+ "emails": [
+ "jkearney@nova.(none)",
+ "josh.kearney@pistoncloud.com",
+ "josh@jk0.org",
+ "josh.kearney@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jasonstraw",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason Straw",
+ "emails": [
+ "jason.straw@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "retr0h",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Dewey",
+ "emails": [
+ "john@dewey.ws"
+ ]
+ },
+ {
+ "launchpad_id": "liyingjun",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Liyingjun",
+ "emails": [
+ "liyingjun1988@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "izbyshev",
+ "companies": [
+ {
+ "company_name": "ISP RAS",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexey Izbyshev",
+ "emails": [
+ "izbyshev@ispras.ru"
+ ]
+ },
+ {
+ "launchpad_id": "christophe.sauthier",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christophe Sauthier",
+ "emails": [
+ "christophe@sauthier.com",
+ "christophe.sauthier@objectif-libre.com"
+ ]
+ },
+ {
+ "launchpad_id": "lars-gellrich",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lars Gellrich",
+ "emails": [
+ "lars.gellrich@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "darrellb",
+ "companies": [
+ {
+ "company_name": "SwiftStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Darrell Bishop",
+ "emails": [
+ "darrell@swiftstack.com"
+ ]
+ },
+ {
+ "launchpad_id": "kiran-kumar-vaddi",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kiran Kumar Vaddi",
+ "emails": [
+ "kiran-kumar.vaddi@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "mkkang",
+ "companies": [
+ {
+ "company_name": "Information Sciences Institute",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mikyung Kang",
+ "emails": [
+ "mkkang@isi.edu"
+ ]
+ },
+ {
+ "launchpad_id": "prem-karat",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Prem Karat",
+ "emails": [
+ "prem.karat@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "francine-ransy",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Francine Ransy",
+ "emails": [
+ "francine.ransy@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jhenner",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jaroslav Henner",
+ "emails": [
+ "jhenner@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "nerminamiller",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nermina Miller",
+ "emails": [
+ "nerminamiller@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "epavlova",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Katrin Pavlova",
+ "emails": [
+ "epavlova@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "yportnova",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yuliya Portnova",
+ "emails": [
+ "yportnova@griddynamics.com",
+ "yportnov@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "han-sebastien",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "S\u00e9bastien Han",
+ "emails": [
+ "han.sebastien@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "arata776",
+ "companies": [
+ {
+ "company_name": "Virtualtech",
+ "end_date": null
+ }
+ ],
+ "user_name": "Arata Notsu",
+ "emails": [
+ "notsu@virtualtech.jp"
+ ]
+ },
+ {
+ "launchpad_id": "gundlach",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Gundlach",
+ "emails": [
+ "michael.gundlach@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "rloo",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ruby Loo",
+ "emails": [
+ "rloo@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "cp16net",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "cp16net",
+ "emails": [
+ "cp16net@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ning",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "ning_zhang",
+ "emails": [
+ "ning@zmanda.com"
+ ]
+ },
+ {
+ "launchpad_id": "mdragon",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Monsyne Dragon",
+ "emails": [
+ "mdragon@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "rohitagarwalla",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rohit Agarwalla",
+ "emails": [
+ "rohitgarwalla@gmail.com",
+ "rohitagarwalla@gmail.com",
+ "roagarwa@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "ebballon",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Natale Vinto",
+ "emails": [
+ "ebballon@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "russell-sim",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Russell Sim",
+ "emails": [
+ "russell.sim@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "naehring",
+ "companies": [
+ {
+ "company_name": "B1 Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andre Naehring",
+ "emails": [
+ "naehring@b1-systems.de"
+ ]
+ },
+ {
+ "launchpad_id": "bswartz",
+ "companies": [
+ {
+ "company_name": "NetApp",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ben Swartzlander",
+ "emails": [
+ "bswartz@netapp.com"
+ ]
+ },
+ {
+ "launchpad_id": "rpodolyaka",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Roman Podolyaka",
+ "emails": [
+ "rpodolyaka@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "liquid-x",
+ "companies": [
+ {
+ "company_name": "KT Corporation",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eohyung Lee",
+ "emails": [
+ "liquid@kt.com"
+ ]
+ },
+ {
+ "launchpad_id": "jkleinpeter",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Josh Kleinpeter",
+ "emails": [
+ "josh@kleinpeter.org"
+ ]
+ },
+ {
+ "launchpad_id": "kaushikc",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kaushik Chandrashekar",
+ "emails": [
+ "kaushik.chand@gmail.com",
+ "kaushik.chandrashekar@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "stanislaw-pitucha",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stanislaw Pitucha",
+ "emails": [
+ "stanislaw.pitucha@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "lrqrun",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "lrqrun",
+ "emails": [
+ "lrqrun@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "krt",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ken Thomas",
+ "emails": [
+ "krt@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "spn",
+ "companies": [
+ {
+ "company_name": "Dell",
+ "end_date": null
+ }
+ ],
+ "user_name": "Surya Prabhakar",
+ "emails": [
+ "surya_prabhakar@dell.com"
+ ]
+ },
+ {
+ "launchpad_id": "bknowles",
+ "companies": [
+ {
+ "company_name": "MomentumSI",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brad Knowles",
+ "emails": [
+ "bknowles@momentumsi.com"
+ ]
+ },
+ {
+ "launchpad_id": "pmezard",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Patrick Mezard",
+ "emails": [
+ "patrick@mezard.eu"
+ ]
+ },
+ {
+ "launchpad_id": "yolanda.robla",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yolanda Robla",
+ "emails": [
+ "yolanda.robla@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrew-mccrae",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andy McCrae",
+ "emails": [
+ "andy.mccrae@gmail.com",
+ "andy.mccrae@googlemail.com"
+ ]
+ },
+ {
+ "launchpad_id": "victor-lowther",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Victor Lowther",
+ "emails": [
+ "victor.lowther@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "lemonlatte",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jim Yeh",
+ "emails": [
+ "lemonlatte@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ncode",
+ "companies": [
+ {
+ "company_name": "Locaweb",
+ "end_date": null
+ }
+ ],
+ "user_name": "Juliano Martinez",
+ "emails": [
+ "juliano.martinez@locaweb.com.br"
+ ]
+ },
+ {
+ "launchpad_id": "lmorchard",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Les Orchard",
+ "emails": [
+ "me@lmorchard.com"
+ ]
+ },
+ {
+ "launchpad_id": "salvatore-orlando",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "Salvatore Orlando",
+ "emails": [
+ "salv.orlando@gmail.com",
+ "sorlando@nicira.com",
+ "salvatore.orlando@eu.citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "cfb-n",
+ "companies": [
+ {
+ "company_name": "Metacloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chet Burgess",
+ "emails": [
+ "cfb@metacloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "jpichon",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Julie Pichon",
+ "emails": [
+ "julie.pichon@gmail.com",
+ "jpichon@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jcannava",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason Cannavale",
+ "emails": [
+ "jason@cannavale.com",
+ "jason.cannavale@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jamielennox",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jamie Lennox",
+ "emails": [
+ "jlennox@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "vickymsee",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Victoria Mart\u00ednez de la Cruz",
+ "emails": [
+ "vickymsee@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ewanmellor",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ewan Mellor",
+ "emails": [
+ "emellor@silver",
+ "ewan.mellor@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "ed-leafe",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ed Leafe",
+ "emails": [
+ "ed@leafe.com"
+ ]
+ },
+ {
+ "launchpad_id": "thomas-goirand",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thomas Goirand",
+ "emails": [
+ "thomas@goirand.fr"
+ ]
+ },
+ {
+ "launchpad_id": "sarob",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sean Roberts",
+ "emails": [
+ "seanrob@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "iryoung",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Iryoung Jeong",
+ "emails": [
+ "iryoung@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mat-o",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mat Grove",
+ "emails": [
+ "mat@grove.me.uk"
+ ]
+ },
+ {
+ "launchpad_id": "andy-southgate",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andy Southgate",
+ "emails": [
+ "andy.southgate@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "kravchenko-pavel",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kravchenko Pavel",
+ "emails": [
+ "kpavel@il.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "abhiabhi-sr",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Abhinav Srivastava",
+ "emails": [
+ "abhiabhi.sr@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "briancline",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Cline",
+ "emails": [
+ "bcline@softlayer.com"
+ ]
+ },
+ {
+ "launchpad_id": "xiaoquqi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ray",
+ "emails": [
+ "xiaoquqi@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "justin-hopper",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Justin Hopper",
+ "emails": [
+ "justin.hopper@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "kylin7-sg",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kylin CG",
+ "emails": [
+ "kylin7.sg@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "amotoki",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Akihiro Motoki",
+ "emails": [
+ "motoki@da.jp.nec.com"
+ ]
+ },
+ {
+ "launchpad_id": "ityaptin",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ilya Tyaptin",
+ "emails": [
+ "ityaptin@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "chris-allnutt",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Allnutt",
+ "emails": [
+ "chris.allnutt@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "nanjj",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "JunJie Nan",
+ "emails": [
+ "nanjj@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "jianingy",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jianing Yang",
+ "emails": [
+ "jianingy@unitedstack.com"
+ ]
+ },
+ {
+ "launchpad_id": "antonym",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Antony Messerli",
+ "emails": [
+ "root@debian.ohthree.com",
+ "ant@openstack.org",
+ "amesserl@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "leblancd",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dane LeBlanc",
+ "emails": [
+ "leblancd@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-hill",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Hill",
+ "emails": [
+ "david.hill@ubisoft.com"
+ ]
+ },
+ {
+ "launchpad_id": "phongdly",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Phong Doan Ly",
+ "emails": [
+ "phongdly@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "yzveryanskyy",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yuriy Zveryanskyy",
+ "emails": [
+ "yzveryanskyy@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "fungi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jeremy Stanley",
+ "emails": [
+ "fungi@yuggoth.org"
+ ]
+ },
+ {
+ "launchpad_id": "ayasakov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Artem Yasakov",
+ "emails": [
+ "ayasakov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "dolph",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dolph Mathews",
+ "emails": [
+ "dolph.mathews@gmail.com",
+ "dolph.mathews@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "phil-hopkins-a",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Phil Hopkins",
+ "emails": [
+ "phil.hopkins@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "pierre-freund",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pierre Freund",
+ "emails": [
+ "pierre.freund@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "belliott",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Elliott",
+ "emails": [
+ "brian.elliott@rackspace.com",
+ "bdelliott@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "chen-li",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "li,chen",
+ "emails": [
+ "chen.li@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "vivekys",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "vivek.ys",
+ "emails": [
+ "YS",
+ "vivek.ys@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jtomasek",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jiri Tomasek",
+ "emails": [
+ "jtomasek@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "bill-rich",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bill Rich",
+ "emails": [
+ "bill.rich@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "daisy-ycguo",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ying Chun Guo",
+ "emails": [
+ "daisy.ycguo@gmail.com",
+ "guoyingc@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "ttx",
+ "companies": [
+ {
+ "company_name": "OpenStack Foundation",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thierry Carrez",
+ "emails": [
+ "thierry@openstack.org"
+ ]
+ },
+ {
+ "launchpad_id": "oldsharp",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ray Chen",
+ "emails": [
+ "oldsharp@163.com"
+ ]
+ },
+ {
+ "launchpad_id": "dshrews",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Shrewsbury",
+ "emails": [
+ "shrewsbury.dave@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrew-tranquada",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Tranquada",
+ "emails": [
+ "andrew.tranquada@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "habukao",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Osamu Habuka",
+ "emails": [
+ "xiu.yushen@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "woprandi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "William Oprandi",
+ "emails": [
+ "william.oprandi@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "cleverdevil",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jonathan LaCour",
+ "emails": [
+ "jonathan@cleverdevil.org"
+ ]
+ },
+ {
+ "launchpad_id": "lorinh",
+ "companies": [
+ {
+ "company_name": "Nimbis Services",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lorin Hochstein",
+ "emails": [
+ "lorin@isi.edu",
+ "lorin@nimbisservices.com"
+ ]
+ },
+ {
+ "launchpad_id": "redbo",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mike Barton",
+ "emails": [
+ "michael.barton@rackspace.com",
+ "mike@weirdlooking.com",
+ "mike-launchpad@weirdlooking.com"
+ ]
+ },
+ {
+ "launchpad_id": "luiz-ozaki",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Luiz Ozaki",
+ "emails": [
+ "luiz.ozaki@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "pandemicsyn",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Florian Hines",
+ "emails": [
+ "syn@ronin.io",
+ "florian.hines@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mgagne",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mathieu Gagn\u00e9",
+ "emails": [
+ "mgagne@iweb.com"
+ ]
+ },
+ {
+ "launchpad_id": "greg-ball",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Greg Ball",
+ "emails": [
+ "greg.ball@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jeff-d-halter",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jeff Halter",
+ "emails": [
+ "jeff.d.halter@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "psiwczak",
+ "companies": [
+ {
+ "company_name": "Internap",
+ "end_date": null
+ }
+ ],
+ "user_name": "Piotr Siwczak",
+ "emails": [
+ "psiwczak@internap.com",
+ "psiwczak@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "mvidner",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Martin Vidner",
+ "emails": [
+ "mvidner@suse.cz"
+ ]
+ },
+ {
+ "launchpad_id": "rohitkarajgi",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rohit Karajgi",
+ "emails": [
+ "rohit.karajgi@nttdata.com"
+ ]
+ },
+ {
+ "launchpad_id": "dweimer",
+ "companies": [
+ {
+ "company_name": "San Diego Supercomputer Center",
+ "end_date": null
+ }
+ ],
+ "user_name": "Doug Weimer",
+ "emails": [
+ "dweimer@gmail.com",
+ "dougw@sdsc.edu"
+ ]
+ },
+ {
+ "launchpad_id": "sdague",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sean Dague",
+ "emails": [
+ "sean@dague.net",
+ "sdague@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "niuwl586-v",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tony NIU",
+ "emails": [
+ "niuwl586@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "guang-yee",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Guang Yee",
+ "emails": [
+ "guang.yee@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "amalabasha",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Amala Basha",
+ "emails": [
+ "princessbasha@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "serge-maskalik",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Serge Maskalik",
+ "emails": [
+ "serge_maskalik@yahoo.com"
+ ]
+ },
+ {
+ "launchpad_id": "kanzhe-jiang",
+ "companies": [
+ {
+ "company_name": "Big Switch Networks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kanzhe Jiang",
+ "emails": [
+ "kanzhe.jiang@bigswitch.com",
+ "kanzhe@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "senhuang",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Senhua Huang",
+ "emails": [
+ "senhuang@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "rkhardalian",
+ "companies": [
+ {
+ "company_name": "Metacloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rafi Khardalian",
+ "emails": [
+ "rafi@metacloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "zhigang",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhigang Wang",
+ "emails": [
+ "w1z2g3@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "hzguanqiang",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "QiangGuan",
+ "emails": [
+ "hzguanqiang@corp.netease.com"
+ ]
+ },
+ {
+ "launchpad_id": "leamhall",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Leam",
+ "emails": [
+ "leam.hall@mailtrust.com"
+ ]
+ },
+ {
+ "launchpad_id": "markmc",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark McLoughlin",
+ "emails": [
+ "markmc@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "dims-v",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Davanum Srinivas",
+ "emails": [
+ "dims@linux.vnet.ibm.com",
+ "davanum@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "long-wang",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "wanglong",
+ "emails": [
+ "long.wang@bj.cs2c.com.cn"
+ ]
+ },
+ {
+ "launchpad_id": "chnm-kulkarni",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chinmay Kulkarni",
+ "emails": [
+ "chnm.kulkarni@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "afazekas",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Attila Fazekas",
+ "emails": [
+ "afazekas@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jvarlamova",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Julia Varlamova",
+ "emails": [
+ "jvarlamova@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "jennchen",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jennifer Chen",
+ "emails": [
+ "jennchen@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "alex-meade",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alex Meade",
+ "emails": [
+ "alex.meade@rackspace.com",
+ "hatboy112@yahoo.com"
+ ]
+ },
+ {
+ "launchpad_id": "ken-pepple",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ken Pepple",
+ "emails": [
+ "ken.pepple@cloudtp.com",
+ "ken@pepple.info",
+ "ken.pepple@rabbityard.com",
+ "ken.pepple@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mkerrin",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Kerrin",
+ "emails": [
+ "michael.kerrin@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "reldan",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eldar Nugaev",
+ "emails": [
+ "eldr@ya.ru",
+ "enugaev@griddynamics.com",
+ "reldan@oscloud.ru"
+ ]
+ },
+ {
+ "launchpad_id": "guochbo",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chang Bo Guo",
+ "emails": [
+ "guochbo@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "ylobankov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yaroslav Lobankov",
+ "emails": [
+ "ylobankov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "yunmao",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yun Mao",
+ "emails": [
+ "yunmao@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "yusuke",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "MURAOKA Yusuke",
+ "emails": [
+ "yusuke@nttmcl.com"
+ ]
+ },
+ {
+ "launchpad_id": "aarti-kriplani",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Aarti Kriplani",
+ "emails": [
+ "aarti.kriplani@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "zaneb",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zane Bitter",
+ "emails": [
+ "zbitter@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "pamor",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Patrick Amor",
+ "emails": [
+ "pamor@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "dzhou121",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dongdong Zhou",
+ "emails": [
+ "dzhou121@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "teselkin-d",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dmitry Teselkin",
+ "emails": [
+ "dteselkin@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "yuzawataka",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yuzawa Takahiko",
+ "emails": [
+ "yuzawataka@intellilink.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "david-thingbag",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Cramer",
+ "emails": [
+ "david.cramer@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "bartos",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nick Bartos",
+ "emails": [
+ "nick@pistoncloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "imelnikov",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ivan Melnikov",
+ "emails": [
+ "imelnikov@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "r-thorsten",
+ "companies": [
+ {
+ "company_name": "Atomia",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thorsten Tarrach",
+ "emails": [
+ "thorsten@atomia.com"
+ ]
+ },
+ {
+ "launchpad_id": "alex-gaynor",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alex Gaynor",
+ "emails": [
+ "alex.gaynor@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jason-koelker",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason K\u00f6lker",
+ "emails": [
+ "jason@koelker.net",
+ "jkoelker@rackspace.com",
+ "K\u00f6lker"
+ ]
+ },
+ {
+ "launchpad_id": "akscram",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ilya Kharin",
+ "emails": [
+ "ikharin@mirantis.com",
+ "akscram@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "zhoudongshu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "zhoudonshu",
+ "emails": [
+ "zhoudshu@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "guanxiaohua2k6",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Xiaohua Guan",
+ "emails": [
+ "guanxiaohua2k6@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ctennis",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Caleb Tennis",
+ "emails": [
+ "caleb.tennis@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mcgrue",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ben McGraw",
+ "emails": [
+ "ben@pistoncloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "endre-karlson",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Endre Karlson",
+ "emails": [
+ "endre.karlson@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "motokentsai",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "MotoKen",
+ "emails": [
+ "motokentsai@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rkukura",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Kukura",
+ "emails": [
+ "rkukura@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "dekehn",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "dkehn",
+ "emails": [
+ "dekehn@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sreshetniak",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sergey Reshetnyak",
+ "emails": [
+ "sreshetniak@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "christoph-gysin",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christoph Gysin",
+ "emails": [
+ "christoph.gysin@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "nprivalova",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nadya Privalova",
+ "emails": [
+ "nprivalova@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "mihgen",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mike Scherbakov",
+ "emails": [
+ "mihgen@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "joelbm24",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "joelbm24",
+ "emails": [
+ "Moore",
+ "joelbm24@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ppouliot",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Peter Pouliot",
+ "emails": [
+ "peter@pouliot.net"
+ ]
+ },
+ {
+ "launchpad_id": "viraj-hardikar-n",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Viraj Hardikar",
+ "emails": [
+ "viraj.hardikar@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "reese-sm",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stephanie Reese",
+ "emails": [
+ "reese.sm@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sylvain-bauza",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sylvain Bauza",
+ "emails": [
+ "sbauza@free.fr"
+ ]
+ },
+ {
+ "launchpad_id": "blak111",
+ "companies": [
+ {
+ "company_name": "Big Switch Networks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kevin Benton",
+ "emails": [
+ "kevin.benton@bigswitch.com"
+ ]
+ },
+ {
+ "launchpad_id": "tom-hancock",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tom Hancock",
+ "emails": [
+ "tom.hancock@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "hiroaki-kawai",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hiroaki Kawai",
+ "emails": [
+ "hiroaki.kawai@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "dbelova",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dina Belova",
+ "emails": [
+ "dbelova@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "jean-marc-saffroy",
+ "companies": [
+ {
+ "company_name": "Scality",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jean-Marc Saffroy",
+ "emails": [
+ "jean.marc.saffroy@scality.com"
+ ]
+ },
+ {
+ "launchpad_id": "tatyana-leontovich",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ },
+ {
+ "company_name": "Mirantis",
+ "end_date": "2013-Jun-10"
+ }
+ ],
+ "user_name": "Tatyana Leontovich",
+ "emails": [
+ "tleontov@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "dragosm",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dragos Manolescu",
+ "emails": [
+ "dragosm@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "hisaki",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hisaki Ohara",
+ "emails": [
+ "hisaki.ohara@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "sdeaton2",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Steven Deaton",
+ "emails": [
+ "sdeaton2@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "darren-birkett",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Darren Birkett",
+ "emails": [
+ "darren.birkett@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "yuan-zhou",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhou Yuan",
+ "emails": [
+ "yuan.zhou@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "harlowja",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joshua Harlow",
+ "emails": [
+ "harlowja@gmail.com",
+ "harlowja@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "esker",
+ "companies": [
+ {
+ "company_name": "NetApp",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Esker",
+ "emails": [
+ "esker@netapp.com"
+ ]
+ },
+ {
+ "launchpad_id": "scott-devoid",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Scott Devoid",
+ "emails": [
+ "devoid@anl.gov"
+ ]
+ },
+ {
+ "launchpad_id": "colin-nicholson",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Colin Nicholson",
+ "emails": [
+ "colin.nicholson@iomart.com"
+ ]
+ },
+ {
+ "launchpad_id": "jan-provaznik",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jan Provaznik",
+ "emails": [
+ "jprovazn@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "nickshobe",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicholas Shobe",
+ "emails": [
+ "nickshobe@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sean-mccully",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sean McCully",
+ "emails": [
+ "sean.mccully@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "iccha-sethi",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Iccha Sethi",
+ "emails": [
+ "iccha.sethi@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "joe-arnold",
+ "companies": [
+ {
+ "company_name": "SwiftStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joe Arnold",
+ "emails": [
+ "joe@swiftstack.com",
+ "joe@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "morita-kazutaka",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kazutaka Morita",
+ "emails": [
+ "morita.kazutaka@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "maheshp",
+ "companies": [
+ {
+ "company_name": "ThoughtWorks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mahesh Panchaksharaiah",
+ "emails": [
+ "maheshp@thoughtworks.com"
+ ]
+ },
+ {
+ "launchpad_id": "shh",
+ "companies": [
+ {
+ "company_name": "Brocade",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shiv Haris",
+ "emails": [
+ "sharis@brocade.com"
+ ]
+ },
+ {
+ "launchpad_id": "danwent",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "dan wendlandt",
+ "emails": [
+ "danwent@dan-xs3-cs",
+ "danwent@gmail.com",
+ "dan@nicira.com"
+ ]
+ },
+ {
+ "launchpad_id": "xychu2008",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ethan Chu",
+ "emails": [
+ "xychu2008@gmail.com",
+ "xchu@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "bradjones",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bradley Jones",
+ "emails": [
+ "jones.bradley@me.com"
+ ]
+ },
+ {
+ "launchpad_id": "vaddi-kiran",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "sasikiran",
+ "emails": [
+ "vaddi_kiran@persistent.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "akuznetsov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexander Kuznetsov",
+ "emails": [
+ "akuznetsov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "stuart-mclaren",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stuart McLaren",
+ "emails": [
+ "stuart.mclaren@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrea-rosa-m",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrea Rosa",
+ "emails": [
+ "andrea.rosa@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-m-kennedy",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Kennedy",
+ "emails": [
+ "john.m.kennedy@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "jakez",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jake Zukowski",
+ "emails": [
+ "jake@ponyloaf.com"
+ ]
+ },
+ {
+ "launchpad_id": "jaypipes",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jay Pipes",
+ "emails": [
+ "jpipes@serialcoder",
+ "jpipes@uberbox.gateway.2wire.net",
+ "jaypipes@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "eyuzlikeev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eduard Yuzlikeev",
+ "emails": [
+ "eyuzlikeev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "dripton",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Ripton",
+ "emails": [
+ "dripton@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "morellon",
+ "companies": [
+ {
+ "company_name": "Locaweb",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thiago Morello",
+ "emails": [
+ "thiago.morello@locaweb.com.br"
+ ]
+ },
+ {
+ "launchpad_id": "a-gordeev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexander Gordeev",
+ "emails": [
+ "agordeev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "yacine-b",
+ "companies": [
+ {
+ "company_name": "Alyseo",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yacine Kheddache",
+ "emails": [
+ "yacine@alyseo.com"
+ ]
+ },
+ {
+ "launchpad_id": "zhhuabj",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hua Zhang",
+ "emails": [
+ "zhhuabj@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "y-yamagata",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "You Yamagata",
+ "emails": [
+ "bi.yamagata@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "egallen",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "Erwan Gallen",
+ "emails": [
+ "erwan.gallen@cloudwatt.com",
+ "dev@zinux.com"
+ ]
+ },
+ {
+ "launchpad_id": "malini-k-bhandaru",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Malini Bhandaru",
+ "emails": [
+ "malini.k.bhandaru@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "hanlind",
+ "companies": [
+ {
+ "company_name": "Kungliga Tekniska h\u00f6gskolan",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hans Lindgren",
+ "emails": [
+ "hanlind@kth.se"
+ ]
+ },
+ {
+ "launchpad_id": "rconradharris",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rick Harris",
+ "emails": [
+ "rick.harris@rackspace.com",
+ "rick@quasar.racklabs.com",
+ "rconradharris@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "kurt-f-martin",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kurt Martin",
+ "emails": [
+ "kurt.f.martin@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "cyeoh-0",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christopher Yeoh",
+ "emails": [
+ "cyeoh@au1.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "vodmat-news",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mattieu Puel",
+ "emails": [
+ "vodmat.news@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "houshengbo",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vincent Hou",
+ "emails": [
+ "sbhou@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "jogo",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joe Gordon",
+ "emails": [
+ "joe.gordon0@gmail.com",
+ "jogo@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "iida-koji",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Koji Iida",
+ "emails": [
+ "iida.koji@lab.ntt.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "opencompute",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sean Chen",
+ "emails": [
+ "xuchenx@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "matthias-sigxcpu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthias Schmitz",
+ "emails": [
+ "matthias@sigxcpu.org"
+ ]
+ },
+ {
+ "launchpad_id": "tmazur",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tatiana Mazur",
+ "emails": [
+ "tmazur@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "snaiksat",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sumit Naiksatam",
+ "emails": [
+ "sumitnaiksatam@gmail.com",
+ "snaiksat@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "avinash-prasad",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Avinash Prasad",
+ "emails": [
+ "avinash.prasad@nttdata.com"
+ ]
+ },
+ {
+ "launchpad_id": "termie",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "termie",
+ "emails": [
+ "Smith",
+ "termie@preciousroy.local",
+ "github@anarkystic.com",
+ "code@term.ie"
+ ]
+ },
+ {
+ "launchpad_id": "laurence-miao",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Laurence Miao",
+ "emails": [
+ "laurence.miao@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sklimoff",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stan Klimoff",
+ "emails": [
+ "sklimoff@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "emilienm",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Emilien Macchi",
+ "emails": [
+ "emilien.macchi@stackops.com",
+ "emilien.macchi@enovance.com",
+ "emilien@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "jbrendel",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Juergen Brendel",
+ "emails": [
+ "jbrendel@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "saschpe",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sascha Peilicke",
+ "emails": [
+ "saschpe@suse.de",
+ "saschpe@gmx.de"
+ ]
+ },
+ {
+ "launchpad_id": "jking-6",
+ "companies": [
+ {
+ "company_name": "Internap",
+ "end_date": null
+ }
+ ],
+ "user_name": "James King",
+ "emails": [
+ "jking@internap.com"
+ ]
+ },
+ {
+ "launchpad_id": "dmitry-x",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dmitry Spikhalskiy",
+ "emails": [
+ "dmitry@spikhalskiy.com"
+ ]
+ },
+ {
+ "launchpad_id": "mana-62-1-11",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mana Kaneko",
+ "emails": [
+ "mana.62.1.11@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "diego-parrilla-santamaria",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Diego Parrilla",
+ "emails": [
+ "diego.parrilla@stackops.com"
+ ]
+ },
+ {
+ "launchpad_id": "mail-zhang-yee",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yee",
+ "emails": [
+ "mail.zhang.yee@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "nkonovalov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikita Konovalov",
+ "emails": [
+ "nkonovalov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "burt-t",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Burt Holzman",
+ "emails": [
+ "burt@fnal.gov"
+ ]
+ },
+ {
+ "launchpad_id": "asalkeld",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Angus Salkeld",
+ "emails": [
+ "angus@salkeld.id.au",
+ "asalkeld@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "wbatterson",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Walter Batterson",
+ "emails": [
+ "wbatterson@brinkster.com"
+ ]
+ },
+ {
+ "launchpad_id": "nati-ueno-s",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nachi Ueno",
+ "emails": [
+ "nova@u4",
+ "openstack@lab.ntt.co.jp",
+ "nati.ueno@gmail.com",
+ "Ueno",
+ "ueno.nachi@lab.ntt.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "clint-fewbar",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Clint Byrum",
+ "emails": [
+ "clint@fewbar.com",
+ "clint.byrum@hp.com",
+ "clint@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "devananda",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Devananda van der Veen",
+ "emails": [
+ "devananda.vdv@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "arathi-darshanam",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Arathi",
+ "emails": [
+ "arathi_darshanam@persistent.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "k3vinmcdonald",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kevin McDonald",
+ "emails": [
+ "k3vinmcdonald@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ericpeterson-l",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eric Peterson",
+ "emails": [
+ "ericpeterson@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "kashivreddy",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kashi Reddy",
+ "emails": [
+ "kashi.reddy@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "soren",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Soren Hansen",
+ "emails": [
+ "soren.hansen@rackspace.com",
+ "soren@openstack.org",
+ "sorenhansen@rackspace.com",
+ "soren@linux2go.dk",
+ "sorhanse@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "wayne-walls",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Wayne A. Walls",
+ "emails": [
+ "wayne.walls@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jola-mirecka",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jola Mirecka",
+ "emails": [
+ "jola.mirecka@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "sergey.vilgelm",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sergey Vilgelm",
+ "emails": [
+ "sergey.vilgelm@gmail.com",
+ "svilgelm@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "shiju-p",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shiju",
+ "emails": [
+ "shiju.p@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ethuleau",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "\u00c9douard Thuleau",
+ "emails": [
+ "edouard.thuleau@orange.com",
+ "thuleau@gmail.com",
+ "edouard.thuleau@cloudwatt.com",
+ "edouard1.thuleau@orange.com"
+ ]
+ },
+ {
+ "launchpad_id": "zhangchao010",
+ "companies": [
+ {
+ "company_name": "Huawei",
+ "end_date": null
+ }
+ ],
+ "user_name": "zhangchao",
+ "emails": [
+ "zhangchao010@huawei.com"
+ ]
+ },
+ {
+ "launchpad_id": "mouad-benchchaoui",
+ "companies": [
+ {
+ "company_name": "Cloudbau",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mouad Benchchaoui",
+ "emails": [
+ "m.benchchaoui@cloudbau.de"
+ ]
+ },
+ {
+ "launchpad_id": "sateesh-chodapuneedi",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sateesh",
+ "emails": [
+ "sateesh.chodapuneedi@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "lyda.google",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kevin Lyda",
+ "emails": [
+ "kevin@ie.suberic.net"
+ ]
+ },
+ {
+ "launchpad_id": "ijw-ubuntu",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ian Wells",
+ "emails": [
+ "iawells@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "guohliu",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "GuoHui LIu",
+ "emails": [
+ "guohliu@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "cweidenkeller",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Conrad Weidenkeller",
+ "emails": [
+ "conrad.weidenkeller@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "rackerhacker",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Major Hayden",
+ "emails": [
+ "major.hayden@rackspace.com",
+ "major@mhtx.net"
+ ]
+ },
+ {
+ "launchpad_id": "kyle-r",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kai Zhang",
+ "emails": [
+ "kyle@zelin.io"
+ ]
+ },
+ {
+ "launchpad_id": "malini-kamalambal",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Malini Kamalambal",
+ "emails": [
+ "malini.kamalambal@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "tres",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tres Henry",
+ "emails": [
+ "tres@treshenry.net"
+ ]
+ },
+ {
+ "launchpad_id": "kjharke",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "K Jonathan Harker",
+ "emails": [
+ "k.jonathan.harker@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "stephen-ma",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stephen Ma",
+ "emails": [
+ "stephen.ma@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "ryan-petrello",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryan Petrello",
+ "emails": [
+ "ryan.petrello@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "selvait90",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Selvakumar Arumugam",
+ "emails": [
+ "selvait90@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "kshileev",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kirill Shileev",
+ "emails": [
+ "kshileev@griddynamics.com",
+ "kshileev@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "noguchimn",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Muneyuki Noguchi",
+ "emails": [
+ "noguchimn@nttdata.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "joe-hakim-rahme",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joe Hakim Rahme",
+ "emails": [
+ "joe.hakim.rahme@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "yuyuehill",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "hill",
+ "emails": [
+ "yuyuehill@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "tim-simpson",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tim Simpson",
+ "emails": [
+ "tim.simpson@rackspace.com",
+ "tim.simpson4@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "diopter",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Evan Callicoat",
+ "emails": [
+ "diopter@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "a-gorodnev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexander Gorodnev",
+ "emails": [
+ "a.gorodnev@gmail.com",
+ "agorodnev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "haneef",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Haneef Ali",
+ "emails": [
+ "haneef.ali@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "simon-pasquier",
+ "companies": [
+ {
+ "company_name": "Bull",
+ "end_date": null
+ }
+ ],
+ "user_name": "Simon Pasquier",
+ "emails": [
+ "simon.pasquier@bull.net",
+ "pasquier.simon@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "danms",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dan Smith",
+ "emails": [
+ "danms@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "msinhore",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "msinhore",
+ "emails": [
+ "msinhore@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-eo",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Eo",
+ "emails": [
+ "joon.eo@gmail.com",
+ "john.eo@gmail.com",
+ "john.eo@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jsuh",
+ "companies": [
+ {
+ "company_name": "Information Sciences Institute",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jinwoo 'Joseph' Suh",
+ "emails": [
+ "jsuh@bespin",
+ "jsuh@isi.edu"
+ ]
+ },
+ {
+ "launchpad_id": "andreserl",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andres Rodriguez",
+ "emails": [
+ "andres.rodriguez@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "laksharm",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lakshmi Sharma",
+ "emails": [
+ "laksharm@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "gessau",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Henry Gessau",
+ "emails": [
+ "gessau@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "mordred",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Monty Taylor",
+ "emails": [
+ "mordred@inaugust.com",
+ "mordred@hudson"
+ ]
+ },
+ {
+ "launchpad_id": "krtaylor",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kurt Taylor",
+ "emails": [
+ "krtaylor@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "crobinso",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Cole Robinson",
+ "emails": [
+ "crobinso@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "itoumsn",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Masanori Itoh",
+ "emails": [
+ "itoumsn@nttdata.co.jp",
+ "itoumsn@shayol"
+ ]
+ },
+ {
+ "launchpad_id": "victor-r-howard",
+ "companies": [
+ {
+ "company_name": "Comcast",
+ "end_date": null
+ }
+ ],
+ "user_name": "Victor Howard",
+ "emails": [
+ "victor.r.howard@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "brimstone-q",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Robinson",
+ "emails": [
+ "brimstone@the.narro.ws"
+ ]
+ },
+ {
+ "launchpad_id": "avishay-il",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Avishay Traeger",
+ "emails": [
+ "avishay@il.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "p-draigbrady",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "P\u00e1draig Brady",
+ "emails": [
+ "p@draigbrady.com",
+ "pbrady@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "dazworrall",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Darren Worrall",
+ "emails": [
+ "daz@dwuk.net",
+ "darren@iweb.co.uk"
+ ]
+ },
+ {
+ "launchpad_id": "adriansmith",
+ "companies": [
+ {
+ "company_name": "Dell",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adrian Smith",
+ "emails": [
+ "adrian@17od.com",
+ "adrian_f_smith@dell.com"
+ ]
+ },
+ {
+ "launchpad_id": "pmsangal",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Puneet Sangal",
+ "emails": [
+ "puneet@inmovi.net"
+ ]
+ },
+ {
+ "launchpad_id": "starodubcevna",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikolay Starodubtsev",
+ "emails": [
+ "nstarodubtsev@mirantis.com",
+ "starodubcevna@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "pengyuwei",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Peng YuWei",
+ "emails": [
+ "pengyuwei@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ldbragst",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lance Bragstad",
+ "emails": [
+ "ldbragst@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "leo-toyoda",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Leo Toyoda",
+ "emails": [
+ "toyoda-reo@cnt.mxw.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "mnaser",
+ "companies": [
+ {
+ "company_name": "VexxHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mohammed Naser",
+ "emails": [
+ "mnaser@vexxhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "mjfork",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Fork",
+ "emails": [
+ "mjfork@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "d1b",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dmitriy Budnik",
+ "emails": [
+ "dmitriy.budnik@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "bhuvan",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bhuvaneswaran A",
+ "emails": [
+ "bhuvan@apache.org"
+ ]
+ },
+ {
+ "launchpad_id": "liemmn",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Liem Nguyen",
+ "emails": [
+ "liem.m.nguyen@hp.com",
+ "liem_m_nguyen@hp.com",
+ "liem.m.nguyen@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "matt-sherborne",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthew Sherborne",
+ "emails": [
+ "msherborne@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "cody-somerville",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Cody A.W. Somerville",
+ "emails": [
+ "cody.somerville@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "cperz",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "HeinMueck",
+ "emails": [
+ "cperz@gmx.net"
+ ]
+ },
+ {
+ "launchpad_id": "kspear",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kieran Spear",
+ "emails": [
+ "kispear@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "dce3062",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Syed Armani",
+ "emails": [
+ "dce3062@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sshturm",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shturm Svetlana",
+ "emails": [
+ "sshturm@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "alexpilotti",
+ "companies": [
+ {
+ "company_name": "Cloudbase Solutions",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alessandro Pilotti",
+ "emails": [
+ "ap@pilotti.it"
+ ]
+ },
+ {
+ "launchpad_id": "jose-castro-leon",
+ "companies": [
+ {
+ "company_name": "CERN",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jose Castro Leon",
+ "emails": [
+ "jose.castro.leon@cern.ch"
+ ]
+ },
+ {
+ "launchpad_id": "deevi-rani",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "D LALITHA RANI",
+ "emails": [
+ "deevi_rani@persistent.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "everett-toews",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Everett Toews",
+ "emails": [
+ "everett.toews@gmail.com",
+ "everett.toews@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "cschwede",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christian Schwede",
+ "emails": [
+ "info@cschwede.de"
+ ]
+ },
+ {
+ "launchpad_id": "sthaha",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sunil Thaha",
+ "emails": [
+ "sthaha@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "mrunge",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthias Runge",
+ "emails": [
+ "mrunge@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "novas0x2a",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mike Lundy",
+ "emails": [
+ "mike@fluffypenguin.org",
+ "mike@pistoncloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-griffith",
+ "companies": [
+ {
+ "company_name": "SolidFire",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Griffith",
+ "emails": [
+ "john.griffith@solidfire.com",
+ "john.griffith8@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "andycjw",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andy Chong",
+ "emails": [
+ "andycjw@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "gerardo8a",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Gerardo Porras",
+ "emails": [
+ "gporras@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "ronenkat",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "RonenKat",
+ "emails": [
+ "ronenkat@il.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "donal-lafferty",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Donal Lafferty",
+ "emails": [
+ "donal.lafferty@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "ivoks",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ante Karamati\u0107",
+ "emails": [
+ "ivoks@ubuntu.com",
+ "ante.karamatic@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "yhasan",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yousuf Hasan",
+ "emails": [
+ "yhasan@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "dkang",
+ "companies": [
+ {
+ "company_name": "Information Sciences Institute",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Kang",
+ "emails": [
+ "dkang@isi.edu"
+ ]
+ },
+ {
+ "launchpad_id": "rafadurancastaneda",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rafael Dur\u00e1n Casta\u00f1eda",
+ "emails": [
+ "rafadurancastaneda@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "breu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joseph W. Breu",
+ "emails": [
+ "breu@breu.org"
+ ]
+ },
+ {
+ "launchpad_id": "hovyakov",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dmitry Khovyakov",
+ "emails": [
+ "hovyakov@gmail.com",
+ "hovyakov@griddynamics.com",
+ "dkhovyakov@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "gholt",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "gholt",
+ "emails": [
+ "z-launchpad@brim.net",
+ "gholt@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "xinxin-shu",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "shu, xinxin",
+ "emails": [
+ "xinxin.shu@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "mgius7096",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark Gius",
+ "emails": [
+ "mgius7096@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "radix",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christopher Armstrong",
+ "emails": [
+ "chris.armstrong@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "xqueralt",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Xavier Queralt",
+ "emails": [
+ "xqueralt@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "shakhat",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ilya Shakhat",
+ "emails": [
+ "ishakhat@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "janisg",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Janis Gengeris",
+ "emails": [
+ "janis.gengeris@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "markwash",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark Washenberger",
+ "emails": [
+ "mark.washenberger@rackspace.com",
+ "mark.washenberger@markwash.net"
+ ]
+ },
+ {
+ "launchpad_id": "nakamura-h",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hidekazu Nakamura",
+ "emails": [
+ "nakamura-h@mxd.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "m-koderer",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Marc Koderer",
+ "emails": [
+ "m.koderer@telekom.de"
+ ]
+ },
+ {
+ "launchpad_id": "therve",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thomas Herve",
+ "emails": [
+ "therve@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rsokolkov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Roman Sokolkov",
+ "emails": [
+ "rsokolkov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "jokcylou",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "loutc",
+ "emails": [
+ "jokcylou@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "the-william-kelly",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "William Kelly",
+ "emails": [
+ "the.william.kelly@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "512-francois-o63",
+ "companies": [
+ {
+ "company_name": "Alyseo",
+ "end_date": null
+ }
+ ],
+ "user_name": "Francois Billard",
+ "emails": [
+ "francois@alyseo.com"
+ ]
+ },
+ {
+ "launchpad_id": "freedomhui",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hui Cheng",
+ "emails": [
+ "freedomhui@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "c-kassen",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christoph Kassen",
+ "emails": [
+ "c.kassen@telekom.de"
+ ]
+ },
+ {
+ "launchpad_id": "igawa",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Masayuki Igawa",
+ "emails": [
+ "igawa@mxs.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "jian-zhang",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jian Zhang",
+ "emails": [
+ "jian.zhang@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "brian-haley",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Haley",
+ "emails": [
+ "brian.haley@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "shweta-ap05",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shweta P",
+ "emails": [
+ "shpadubi@cisco.com",
+ "shweta.ap05@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "genggjh",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Geng",
+ "emails": [
+ "gengjh@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "sogabe",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Takashi Sogabe",
+ "emails": [
+ "sogabe@iij.ad.jp"
+ ]
+ },
+ {
+ "launchpad_id": "meizu647",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "dk647",
+ "emails": [
+ "meizu647@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "gregory-althaus",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Greg Althaus",
+ "emails": [
+ "galthaus@austin.rr.com"
+ ]
+ },
+ {
+ "launchpad_id": "steven-berler",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Steven Berler",
+ "emails": [
+ "steven.berler@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "yuyangbj",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yang Yu",
+ "emails": [
+ "yuyangbj@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "ram-nalluri",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "rampradeep",
+ "emails": [
+ "ram_nalluri@persistent.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "mdrnstm",
+ "companies": [
+ {
+ "company_name": "Metacloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Morgan Fainberg",
+ "emails": [
+ "m@metacloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "yosshy",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Akira Yoshiyama",
+ "emails": [
+ "a-yoshiyama@bu.jp.nec.com",
+ "akirayoshiyama@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrew-plunk",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Plunk",
+ "emails": [
+ "andrew.plunk@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "cerberus",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Dietz",
+ "emails": [
+ "matt.dietz@rackspace.com",
+ "matthew.dietz@gmail.com",
+ "Dietz",
+ "matthewdietz@Matthew-Dietzs-MacBook-Pro.local",
+ "mdietz@openstack"
+ ]
+ },
+ {
+ "launchpad_id": "blamar",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Lamar",
+ "emails": [
+ "brian.lamar@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jan-grant",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jan Grant",
+ "emails": [
+ "jan.grant@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrea-frittoli",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrea Frittoli",
+ "emails": [
+ "andrea.frittoli@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "jesse-pretorius",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jesse Pretorius",
+ "emails": [
+ "jesse.pretorius@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "psedlak",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pavel Sedl\u00e1k",
+ "emails": [
+ "psedlak@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "sirish-bitra-gmail",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "sirish chandra bitra",
+ "emails": [
+ "root@bsirish.(none)",
+ "sirish.bitra@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "nealph",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Phil Neal",
+ "emails": [
+ "phil.neal@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "fujita-tomonori-lab",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tomo",
+ "emails": [
+ "fujita.tomonori@lab.ntt.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "pekowski",
+ "companies": [
+ {
+ "company_name": "Dell",
+ "end_date": null
+ }
+ ],
+ "user_name": "Raymond Pekowski",
+ "emails": [
+ "raymond_pekowski@dell.com",
+ "pekowski@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "bruno-semperlotti",
+ "companies": [
+ {
+ "company_name": "Dassault Syst\u00e8mes",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bruno Semperlotti",
+ "emails": [
+ "bruno.semperlotti@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rcritten",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rob Crittenden",
+ "emails": [
+ "rcritten@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "r-mibu",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryota Mibu",
+ "emails": [
+ "r-mibu@cq.jp.nec.com"
+ ]
+ },
+ {
+ "launchpad_id": "dscannell",
+ "companies": [
+ {
+ "company_name": "Gridcentric",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Scannell",
+ "emails": [
+ "dscannell@gridcentric.com"
+ ]
+ },
+ {
+ "launchpad_id": "randall-burt",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Randall Burt",
+ "emails": [
+ "randall.burt@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "deepak.garg",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Deepak Garg",
+ "emails": [
+ "deepak.garg@citrix.com",
+ "deepakgarg.iitg@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "soulascedric",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "C\u00e9dric Soulas",
+ "emails": [
+ "soulascedric@gmail.com",
+ "cedric.soulas@cloudwatt.com"
+ ]
+ },
+ {
+ "launchpad_id": "beagles",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brent Eagles",
+ "emails": [
+ "beagles@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "mathieu-rohon",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "mathieu rohon",
+ "emails": [
+ "mathieu.rohon@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "otherwiseguy",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Terry Wilson",
+ "emails": [
+ "twilson@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "siyingchun",
+ "companies": [
+ {
+ "company_name": "SINA",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yingchun Si",
+ "emails": [
+ "siyingchun@sina.com"
+ ]
+ },
+ {
+ "launchpad_id": "aditirav",
+ "companies": [
+ {
+ "company_name": "ThoughtWorks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Aditi Raveesh",
+ "emails": [
+ "aditirav@thoughtworks.com"
+ ]
+ },
+ {
+ "launchpad_id": "lucasagomes",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lucas Alvares Gomes",
+ "emails": [
+ "lucasagomes@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ema",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Emanuele Rocca",
+ "emails": [
+ "ema@linux.it"
+ ]
+ },
+ {
+ "launchpad_id": "xbsd-nikolay",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikolay Sobolevsky",
+ "emails": [
+ "nsobolevsky@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "oubiwann",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Duncan McGreggor",
+ "emails": [
+ "duncan@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "dendrobates",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rick Clark",
+ "emails": [
+ "rick@openstack.org",
+ "rclark@chat-blanc"
+ ]
+ },
+ {
+ "launchpad_id": "ivan-zhu",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ivan-Zhu",
+ "emails": [
+ "bozhu@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "eglynn",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eoghan Glynn",
+ "emails": [
+ "eglynn@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "ke-wu",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ke Wu",
+ "emails": [
+ "ke.wu@nebula.com",
+ "ke.wu@ibeca.me"
+ ]
+ },
+ {
+ "launchpad_id": "fghaas",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Florian Haas",
+ "emails": [
+ "florian@hastexo.com"
+ ]
+ },
+ {
+ "launchpad_id": "lakhindr",
+ "companies": [
+ {
+ "company_name": "Hitachi",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lakhinder Walia",
+ "emails": [
+ "lakhindr@hotmail.com",
+ "lakhinder.walia@hds.com"
+ ]
+ },
+ {
+ "launchpad_id": "mikalstill",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Still",
+ "emails": [
+ "michael.still@canonical.com",
+ "mikal@stillhq.com"
+ ]
+ },
+ {
+ "launchpad_id": "kevin-carter",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kevin Carter",
+ "emails": [
+ "kevin.carter@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "rhafer",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ralf Haferkamp",
+ "emails": [
+ "rhafer@suse.de"
+ ]
+ },
+ {
+ "launchpad_id": "rainya-mosher-m",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rainya Mosher",
+ "emails": [
+ "rainya.mosher@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "ubuntubmw",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bernhard M. Wiedemann",
+ "emails": [
+ "bwiedemann@suse.de"
+ ]
+ },
+ {
+ "launchpad_id": "jiataotj",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Jia",
+ "emails": [
+ "jiataotj@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "lsmola",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ladislav Smola",
+ "emails": [
+ "lsmola@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "baoli",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Baodong (Robert) Li",
+ "emails": [
+ "baoli@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "stef-ummon",
+ "companies": [
+ {
+ "company_name": "Internap",
+ "end_date": null
+ }
+ ],
+ "user_name": "stelford",
+ "emails": [
+ "stelford@internap.com"
+ ]
+ },
+ {
+ "launchpad_id": "smelikyan",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Serg Melikyan",
+ "emails": [
+ "smelikyan@mirantis.com",
+ "serg.melikyan@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "maurosr",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mauro Sergio Martins Rodrigues",
+ "emails": [
+ "maurosr@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "jsavak",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joe Savak",
+ "emails": [
+ "joe.savak@rackspace.com",
+ "jsavak@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sandy-walsh",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sandy Walsh",
+ "emails": [
+ "sandy.walsh@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "james-morgan",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "James Morgan",
+ "emails": [
+ "james.morgan@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "5-suzuki",
+ "companies": [
+ {
+ "company_name": "Midokura",
+ "end_date": null
+ }
+ ],
+ "user_name": "Takaaki Suzuki",
+ "emails": [
+ "suzuki@midokura.com"
+ ]
+ },
+ {
+ "launchpad_id": "0x44",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christopher MacGown",
+ "emails": [
+ "ignoti+github@gmail.com",
+ "chris@pistoncloud.com",
+ "chris@slicehost.com"
+ ]
+ },
+ {
+ "launchpad_id": "matt-wagner",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matt Wagner",
+ "emails": [
+ "matt.wagner@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "anastasia-karpinska",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anastasia Karpinska",
+ "emails": [
+ "akarpinska@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "torandu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sean Gallagher",
+ "emails": [
+ "sean@torandu.com"
+ ]
+ },
+ {
+ "launchpad_id": "tagami-keisuke",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Keisuke Tagami",
+ "emails": [
+ "tagami.keisuke@lab.ntt.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "david-besen",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Besen",
+ "emails": [
+ "david.besen@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "pvo",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Paul Voccio",
+ "emails": [
+ "paul@openstack.org",
+ "paul@substation9.com",
+ "pvoccio@castor.local",
+ "paul.voccio@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "toabctl",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thomas Bechtold",
+ "emails": [
+ "thomasbechtold@jpberlin.de"
+ ]
+ },
+ {
+ "launchpad_id": "yamamoto",
+ "companies": [
+ {
+ "company_name": "VA Linux",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yamamoto Takashi",
+ "emails": [
+ "yamamoto@valinux.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "emagana",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Edgar Magana",
+ "emails": [
+ "emagana@gmail.com",
+ "eperdomo@dhcp-171-71-119-164.cisco.com",
+ "eperdomo@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "mdegerne",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mandell",
+ "emails": [
+ "mdegerne@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "aaron-lee",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Aaron Lee",
+ "emails": [
+ "wwkeyboard@gmail.com",
+ "aaron.lee@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-davidge",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Davidge",
+ "emails": [
+ "jodavidg@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "yorik-sar",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yuriy Taraday",
+ "emails": [
+ "yorik@ytaraday",
+ "yorik.sar@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "corystone",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Cory Stone",
+ "emails": [
+ "corystone@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "chris-fattarsi",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Fattarsi",
+ "emails": [
+ "chris.fattarsi@pistoncloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "amir-sadoughi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Amir Sadoughi",
+ "emails": [
+ "amir.sadoughi@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "abrindeyev",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrey Brindeyev",
+ "emails": [
+ "abrindeyev@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "sammiestoel",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sam Stoelinga",
+ "emails": [
+ "sammiestoel@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "dougdoan",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Doug",
+ "emails": [
+ "dougdoan@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "debo",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Debo~ Dutta",
+ "emails": [
+ "dedutta@cisco.com",
+ "ddutta@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-wittman",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Wittman",
+ "emails": [
+ "david.wittman@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "sagar-r-nikam",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sagar Nikam",
+ "emails": [
+ "sagar.r.nikam@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "endeepak",
+ "companies": [
+ {
+ "company_name": "ThoughtWorks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Deepak N",
+ "emails": [
+ "deepak.n@thoughtworks.com"
+ ]
+ },
+ {
+ "launchpad_id": "gabriel-hurley",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Gabriel Hurley",
+ "emails": [
+ "gabriel@strikeawe.com"
+ ]
+ },
+ {
+ "launchpad_id": "heckj",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joseph Heck",
+ "emails": [
+ "heckj@mac.com"
+ ]
+ },
+ {
+ "launchpad_id": "mszilagyi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Szilagyi",
+ "emails": [
+ "mszilagyi@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "justin-hammond",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Justin Hammond",
+ "emails": [
+ "justin.hammond@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "forrest-r",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Forrest",
+ "emails": [
+ "forrest@research.att.com"
+ ]
+ },
+ {
+ "launchpad_id": "xu-haiwei",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Haiwei Xu",
+ "emails": [
+ "xu-haiwei@mxw.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "kwadronaut",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kwadronaut",
+ "emails": [
+ "kwadronaut@autistici.org"
+ ]
+ },
+ {
+ "launchpad_id": "jaegerandi",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andreas Jaeger",
+ "emails": [
+ "aj@suse.de"
+ ]
+ },
+ {
+ "launchpad_id": "vladimir.p",
+ "companies": [
+ {
+ "company_name": "Zadara Storage",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vladimir Popovski",
+ "emails": [
+ "vladimir@zadarastorage.com"
+ ]
+ },
+ {
+ "launchpad_id": "mhu-s",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthieu Huin",
+ "emails": [
+ "mhu@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "hubcap",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Basnight",
+ "emails": [
+ "mbasnigh@rackspace.com",
+ "mbasnight@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "kiall",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kiall Mac Innes",
+ "emails": [
+ "kiall@managedit.ie",
+ "kiall@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "markmcclain",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark McClain",
+ "emails": [
+ "mark.mcclain@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "notmyname",
+ "companies": [
+ {
+ "company_name": "SwiftStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Dickinson",
+ "emails": [
+ "john.dickinson@rackspace.com",
+ "me@not.mn"
+ ]
+ },
+ {
+ "launchpad_id": "santhoshkumar",
+ "companies": [
+ {
+ "company_name": "ThoughtWorks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Santhosh Kumar Muniraj",
+ "emails": [
+ "santhom@thoughtworks.com",
+ "santhosh.m@thoughtworks.com"
+ ]
+ },
+ {
+ "launchpad_id": "johndescs",
+ "companies": [
+ {
+ "company_name": "IGBMC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jonathan Michalon",
+ "emails": [
+ "michalon@igbmc.fr"
+ ]
+ },
+ {
+ "launchpad_id": "satish-0",
+ "companies": [
+ {
+ "company_name": "Arista Networks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Satish Mohan",
+ "emails": [
+ "satish@aristanetworks.com"
+ ]
+ },
+ {
+ "launchpad_id": "emmasteimann",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Emma Grace Steimann",
+ "emails": [
+ "emmasteimann@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "armando-migliaccio",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "armando-migliaccio",
+ "emails": [
+ "amigliaccio@nicira.com",
+ "Armando.Migliaccio@eu.citrix.com",
+ "amigliaccio@internap.com",
+ "armamig@gmail.com",
+ "armando.migliaccio@citrix.com",
+ "armando.migliaccio@eu.citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "nijaba",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": "2013-Jan-01"
+ },
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicolas Barcet",
+ "emails": [
+ "nicolas@barcet.com",
+ "nick@enovance.com",
+ "nijaba@ubuntu.com",
+ "nick.barcet@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "yufang521247",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yufang Zhang",
+ "emails": [
+ "yufang521247@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "vito-ordaz",
+ "companies": [
+ {
+ "company_name": "Nexenta",
+ "end_date": null
+ }
+ ],
+ "user_name": "Victor Rodionov",
+ "emails": [
+ "vito.ordaz@gmail.com",
+ "victor.rodionov@nexenta.com"
+ ]
+ },
+ {
+ "launchpad_id": "pednape",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pedro Navarro Perez",
+ "emails": [
+ "pednape@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ymzk37",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mitsuhiko Yamazaki",
+ "emails": [
+ "yamazaki-mitsuhiko@cnt.mxc.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "btopol",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brad Topol",
+ "emails": [
+ "btopol@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "tpot",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tim Potter",
+ "emails": [
+ "tpot@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "dbailey-k",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Darragh Bailey",
+ "emails": [
+ "dbailey@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "fujioka-yuuichi-d",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "fujioka yuuichi",
+ "emails": [
+ "fujioka-yuuichi@zx.mxh.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "winson-c-chan",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Winson Chan",
+ "emails": [
+ "winson.c.chan@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "franciscosouza",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Francisco Souza",
+ "emails": [
+ "f@souza.cc"
+ ]
+ },
+ {
+ "launchpad_id": "azilli",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Marharyta Kislinska",
+ "emails": [
+ "mkislins@yahoo-inc.com",
+ "mkislinska@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "jproulx",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jonathan Proulx",
+ "emails": [
+ "jon@csail.mit.edu",
+ "jon@jonproulx.com"
+ ]
+ },
+ {
+ "launchpad_id": "zealot0630",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zang MingJie",
+ "emails": [
+ "zealot0630@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "locke105",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mathew Odden",
+ "emails": [
+ "mrodden@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "sthakkar",
+ "companies": [
+ {
+ "company_name": "VMware",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sachin Thakkar",
+ "emails": [
+ "sthakkar@vmware.com"
+ ]
+ },
+ {
+ "launchpad_id": "steve-stevebaker",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Steve Baker",
+ "emails": [
+ "sbaker@redhat.com",
+ "steve@stevebaker.org"
+ ]
+ },
+ {
+ "launchpad_id": "littleidea",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Clay Shafer",
+ "emails": [
+ "andrew@cloudscaling.com",
+ "acs@parvuscaptus.com"
+ ]
+ },
+ {
+ "launchpad_id": "yamahata",
+ "companies": [
+ {
+ "company_name": "VA Linux",
+ "end_date": null
+ }
+ ],
+ "user_name": "Isaku Yamahata",
+ "emails": [
+ "yamahata@valinux.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "klmitch",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kevin L. Mitchell",
+ "emails": [
+ "kevin.mitchell@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "sheeprine",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "St\u00e9phane Albert",
+ "emails": [
+ "sheeprine@nullplace.com"
+ ]
+ },
+ {
+ "launchpad_id": "akuno",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anita Kuno",
+ "emails": [
+ "akuno@lavabit.com",
+ "anita.kuno@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "rizumu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Thomas Schreiber",
+ "emails": [
+ "tom@rizu.mu"
+ ]
+ },
+ {
+ "launchpad_id": "tsuyuzaki-kota",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kota Tsuyuzaki",
+ "emails": [
+ "tsuyuzaki.kota@lab.ntt.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "arosen",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "Aaron Rosen",
+ "emails": [
+ "arosen@nicira.com"
+ ]
+ },
+ {
+ "launchpad_id": "greglange",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Greg Lange",
+ "emails": [
+ "greglange+launchpad@gmail.com",
+ "greglange@gmail.com",
+ "glange@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "johngarbutt",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": "2013-Feb-01"
+ },
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Garbutt",
+ "emails": [
+ "john@johngarbutt.com",
+ "john.garbutt@rackspace.com",
+ "john.garbutt@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "simplylizz",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anton V. Yanchenko",
+ "emails": [
+ "simplylizz@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-herndon",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Herndon",
+ "emails": [
+ "john.herndon@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "edward-hope-morley",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Edward Hope-Morley",
+ "emails": [
+ "edward.hope-morley@canonical.com",
+ "opentastic@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "salgado",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Guilherme Salgado",
+ "emails": [
+ "gsalgado@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "yosef-4",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yosef Berman",
+ "emails": [
+ "yosef@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "xchenum",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Simon",
+ "emails": [
+ "xchenum@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rvaknin",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rami Vaknin",
+ "emails": [
+ "rvaknin@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "toan-nguyen",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Toan Nguyen",
+ "emails": [
+ "toan.nguyen@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "vrovachev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vadim Rovachev",
+ "emails": [
+ "vrovachev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "moreira-belmiro-email-lists",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Belmiro Moreira",
+ "emails": [
+ "moreira.belmiro.email.lists@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "johannes",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Johannes Erdfelt",
+ "emails": [
+ "johannes@squeeze.(none)"
+ ]
+ },
+ {
+ "launchpad_id": "maru",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Maru Newby",
+ "emails": [
+ "marun@redhat.com",
+ "mnewby@internap.com"
+ ]
+ },
+ {
+ "launchpad_id": "awoods-0",
+ "companies": [
+ {
+ "company_name": "Internap",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anthony Woods",
+ "emails": [
+ "awoods@internap.com"
+ ]
+ },
+ {
+ "launchpad_id": "btorch",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Marcelo Martins",
+ "emails": [
+ "btorch@gmail.com",
+ "marcelo.martins@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "e0ne",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ivan Kolodyazhny",
+ "emails": [
+ "e0ne@e0ne.info",
+ "ikolodyazhny@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "zrzhit",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rongze Zhu",
+ "emails": [
+ "zrzhit@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "stevemar",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Steve Martinelli",
+ "emails": [
+ "stevemar@ca.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "aignatov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexander Ignatov",
+ "emails": [
+ "aignatov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "bkjones",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "jonesy",
+ "emails": [
+ "bkjones@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "derek-chiang",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Derek Chiang",
+ "emails": [
+ "derek.chiang@nebula.com"
+ ]
+ },
+ {
+ "launchpad_id": "306455645-b",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "ShichaoXu",
+ "emails": [
+ "gudujianjsk@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "pcm",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Paul Michali",
+ "emails": [
+ "pcm@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "jenny-shieh",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jenny Shieh",
+ "emails": [
+ "jenny.shieh@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "linuxjedi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Hutchings",
+ "emails": [
+ "andrew@linuxjedi.co.uk"
+ ]
+ },
+ {
+ "launchpad_id": "nidonato",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicholas Donato",
+ "emails": [
+ "nidonato@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "maksimov",
+ "companies": [
+ {
+ "company_name": "Dell",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stas Maksimov",
+ "emails": [
+ "stanislav_m@dell.com"
+ ]
+ },
+ {
+ "launchpad_id": "ejkern",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ed Kern",
+ "emails": [
+ "ejkern@mac.com"
+ ]
+ },
+ {
+ "launchpad_id": "vinkeshb",
+ "companies": [
+ {
+ "company_name": "ThoughtWorks",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vinkesh Banka",
+ "emails": [
+ "vinkeshb@thoughtworks.com"
+ ]
+ },
+ {
+ "launchpad_id": "unicell",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "unicell",
+ "emails": [
+ "unicell@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "flaper87",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Flavio Percoco Premoli",
+ "emails": [
+ "fpercoco@redhat.com",
+ "flaper87@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "bdpayne",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bryan D. Payne",
+ "emails": [
+ "bdpayne@acm.org"
+ ]
+ },
+ {
+ "launchpad_id": "adri2000",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adrien Cunin",
+ "emails": [
+ "acunin@linagora.com"
+ ]
+ },
+ {
+ "launchpad_id": "irsxyp",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "irsxyp",
+ "emails": [
+ "irsxyp@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mandoonandy",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andy McCallum",
+ "emails": [
+ "andy@aptira.com"
+ ]
+ },
+ {
+ "launchpad_id": "jdillaman",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason Dillaman",
+ "emails": [
+ "dillaman@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "john-dunning",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Dunning",
+ "emails": [
+ "jrd@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "dlapsley",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Lapsley",
+ "emails": [
+ "dlapsley@nicira.com"
+ ]
+ },
+ {
+ "launchpad_id": "razique",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Razique Mahroua",
+ "emails": [
+ "razique.mahroua@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ron-pedde",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ron Pedde",
+ "emails": [
+ "ron@pedde.com"
+ ]
+ },
+ {
+ "launchpad_id": "vijaya-erukala",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vijaya Erukala",
+ "emails": [
+ "vijaya_erukala@persistent.co.in"
+ ]
+ },
+ {
+ "launchpad_id": "wenhao-x",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Wenhao Xu",
+ "emails": [
+ "xuwenhao2008@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rnirmal",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nirmal Ranganathan",
+ "emails": [
+ "nirmal.ranganathan@rackspace.com",
+ "nirmal.ranganathan@rackspace.coom",
+ "rnirmal@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-hadas",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Hadas",
+ "emails": [
+ "davidh@il.ibm.com",
+ "david.hadas@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jpeeler-z",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jeff Peeler",
+ "emails": [
+ "jpeeler@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrewsmedina",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrews Medina",
+ "emails": [
+ "andrewsmedina@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jonathan-abdiel",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jonathan Gonzalez V.",
+ "emails": [
+ "jonathan.abdiel@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sadasu",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sandhya Dasu",
+ "emails": [
+ "sadasu@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "haomai",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Haomai Wang",
+ "emails": [
+ "haomai@unitedstack.com"
+ ]
+ },
+ {
+ "launchpad_id": "carlos-garza",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Carlos Garza",
+ "emails": [
+ "carlos.garza@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "aovchinnikov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexey Ovchinnikov",
+ "emails": [
+ "aovchinnikov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "khussein",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Khaled Hussein",
+ "emails": [
+ "khaled.hussein@rackspace.com",
+ "khaled.hussein@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "flepied",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Frederic Lepied",
+ "emails": [
+ "frederic.lepied@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "jimmy-sigint",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jimmy Bergman",
+ "emails": [
+ "jimmy@sigint.se"
+ ]
+ },
+ {
+ "launchpad_id": "gpocentek",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Gauvain Pocentek",
+ "emails": [
+ "gauvain@pocentek.net",
+ "gauvain.pocentek@objectif-libre.com"
+ ]
+ },
+ {
+ "launchpad_id": "pkilambi",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pradeep Kilambi",
+ "emails": [
+ "pkilambi@cisco.com",
+ "praddevel@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jemartin",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "JC Martin",
+ "emails": [
+ "jcmartin@ebaysf.com"
+ ]
+ },
+ {
+ "launchpad_id": "ryu-midokura",
+ "companies": [
+ {
+ "company_name": "Midokura",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryu Ishimoto",
+ "emails": [
+ "ryu@midokura.jp",
+ "ryu@midokura.com"
+ ]
+ },
+ {
+ "launchpad_id": "jiangwt100",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jim Jiang",
+ "emails": [
+ "wentian@unitedstack.com",
+ "jiangwt100@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "donagh-mccabe",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Donagh McCabe",
+ "emails": [
+ "donagh.mccabe@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "anniec",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Annie Cheng",
+ "emails": [
+ "anniec@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "tzn",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tomasz 'Zen' Napierala",
+ "emails": [
+ "tomasz@napierala.org"
+ ]
+ },
+ {
+ "launchpad_id": "jolyon",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jolyon Brown",
+ "emails": [
+ "git@limilo.com"
+ ]
+ },
+ {
+ "launchpad_id": "sdake",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Steven Dake",
+ "emails": [
+ "sdake@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "broskos",
+ "companies": [
+ {
+ "company_name": "Internap",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brent Roskos",
+ "emails": [
+ "broskos@internap.com"
+ ]
+ },
+ {
+ "launchpad_id": "devdeep-singh",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Devdeep Singh",
+ "emails": [
+ "devdeep.singh@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "jasondunsmore",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jason Dunsmore",
+ "emails": [
+ "jasondunsmore@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "chmouel",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chmouel Boudjnah",
+ "emails": [
+ "chmouel@chmouel.com",
+ "launchpad@chmouel.com",
+ "chmouel.boudjnah@rackspace.co.uk",
+ "chmouel@openstack.org",
+ "chmouel@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "therese-mchale",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Therese McHale",
+ "emails": [
+ "therese.mchale@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "fujioka-yuuichi",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "fujioka yuuichi",
+ "emails": [
+ "fujioka.yuuichi@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jruzicka",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jakub Ruzicka",
+ "emails": [
+ "jruzicka@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "hudayou",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hengqing Hu",
+ "emails": [
+ "hudayou@hotmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "alekibango",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Pravec",
+ "emails": [
+ "david.pravec@danix.org"
+ ]
+ },
+ {
+ "launchpad_id": "madhav-puri",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Madhav Puri",
+ "emails": [
+ "madhav.puri@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "niu-zglinux",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhenguo Niu (\u725b\u632f\u56fd)",
+ "emails": [
+ "niu.zglinux@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "kbringard",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kevin Bringard",
+ "emails": [
+ "kbringard@attinteractive.com",
+ "kbringard@att.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrew-melton",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Melton",
+ "emails": [
+ "andrew.melton@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "ayoung",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adam Young",
+ "emails": [
+ "ayoung@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "9-sa",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stephane ANGOT",
+ "emails": [
+ "sa@hydre.org"
+ ]
+ },
+ {
+ "launchpad_id": "flwang",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Fei Long Wang",
+ "emails": [
+ "flwang@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "mark-seger",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark Seger",
+ "emails": [
+ "mark.seger@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "gongysh",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": "2013-Jun-15"
+ },
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yong Sheng Gong",
+ "emails": [
+ "gongysh@unitedstack.com",
+ "gongysh@cn.ibm.com",
+ "gongysh@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "lin-hua-cheng",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lin Hua Cheng",
+ "emails": [
+ "lin-hua.cheng@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "bartosz-gorski",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bartosz G\u00f3rski",
+ "emails": [
+ "bartosz.gorski@nttmcl.com",
+ "bartosz.gorski@ntti3.com"
+ ]
+ },
+ {
+ "launchpad_id": "ttrifonov",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tihomir Trifonov",
+ "emails": [
+ "t.trifonov@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mukul18",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mukul Patel",
+ "emails": [
+ "mukul18@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "wu-wenxiang",
+ "companies": [
+ {
+ "company_name": "99cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Wu Wenxiang",
+ "emails": [
+ "wu.wenxiang@99cloud.net"
+ ]
+ },
+ {
+ "launchpad_id": "jjmartinez",
+ "companies": [
+ {
+ "company_name": "Memset",
+ "end_date": null
+ }
+ ],
+ "user_name": "Juan J. Mart\u00ednez",
+ "emails": [
+ "juan@memset.com"
+ ]
+ },
+ {
+ "launchpad_id": "matthew-macdonald-wallace",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthew Macdonald-Wallace",
+ "emails": [
+ "matthew.macdonald-wallace@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "thedodd",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anthony Dodd",
+ "emails": [
+ "adodd@vbridges.com"
+ ]
+ },
+ {
+ "launchpad_id": "jdsn",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "J. Daniel Schmidt",
+ "emails": [
+ "jdsn@suse.de"
+ ]
+ },
+ {
+ "launchpad_id": "alexyang",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alex Yang",
+ "emails": [
+ "alex890714@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ed-bak2",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ed Bak",
+ "emails": [
+ "ed.bak2@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "talkain",
+ "companies": [
+ {
+ "company_name": "Ravello Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tal Kain",
+ "emails": [
+ "tal.kain@ravellosystems.com"
+ ]
+ },
+ {
+ "launchpad_id": "jean-baptiste-ransy",
+ "companies": [
+ {
+ "company_name": "Alyseo",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jean-Baptiste Ransy",
+ "emails": [
+ "jean-baptiste.ransy@alyseo.com"
+ ]
+ },
+ {
+ "launchpad_id": "brian-lamar",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Lamar",
+ "emails": [
+ "brian.lamar@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "rlane",
+ "companies": [
+ {
+ "company_name": "Wikimedia Foundation",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryan Lane",
+ "emails": [
+ "laner@controller",
+ "rlane@wikimedia.org"
+ ]
+ },
+ {
+ "launchpad_id": "rpothier",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Pothier",
+ "emails": [
+ "rpothier@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "jay-lau-513",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jay Lau",
+ "emails": [
+ "jay.lau.513@gmail.com",
+ "liugya@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "francois-charlier",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Fran\u00e7ois Charlier",
+ "emails": [
+ "francois.charlier@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "fmanco",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Filipe Manco",
+ "emails": [
+ "filipe.manco@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "woodspa",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Patrick Woods",
+ "emails": [
+ "woodspa@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "mr-rods",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Rosario Di Somma",
+ "emails": [
+ "rosario.disomma@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "melwitt",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Melanie Witt",
+ "emails": [
+ "melwitt@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "ppyy",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Peng Yong",
+ "emails": [
+ "ppyy@pubyun.com"
+ ]
+ },
+ {
+ "launchpad_id": "frossigneux",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Fran\u00e7ois Rossigneux",
+ "emails": [
+ "francois.rossigneux@inria.fr"
+ ]
+ },
+ {
+ "launchpad_id": "gfidente",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Giulio Fidente",
+ "emails": [
+ "gfidente@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "enakai",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Etsuji Nakai",
+ "emails": [
+ "enakai@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "cthier",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chuck Thier",
+ "emails": [
+ "cthier@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jmatt",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "J. Matt Peterson",
+ "emails": [
+ "jmatt@jmatt.org"
+ ]
+ },
+ {
+ "launchpad_id": "singn",
+ "companies": [
+ {
+ "company_name": "NetApp",
+ "end_date": null
+ }
+ ],
+ "user_name": "Navneet",
+ "emails": [
+ "singn@netapp.com"
+ ]
+ },
+ {
+ "launchpad_id": "parthipan",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Loganathan Parthipan",
+ "emails": [
+ "parthipan@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "pjz",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Paul Jimenez",
+ "emails": [
+ "pj@place.org"
+ ]
+ },
+ {
+ "launchpad_id": "bryan-davidson",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bryan Davidson",
+ "emails": [
+ "bryan.davidson@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "alexei-kornienko",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexei Kornienko",
+ "emails": [
+ "alexei.kornienko@gmail.com",
+ "akornienko@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "westmaas",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Gabe Westmaas",
+ "emails": [
+ "gabe.westmaas@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "glikson",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alex Glikson",
+ "emails": [
+ "glikson@il.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "liam-kelleher",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Liam Kelleher",
+ "emails": [
+ "liam.kelleher@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "yazirian",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dan Dillinger",
+ "emails": [
+ "dan.dillinger@sonian.net"
+ ]
+ },
+ {
+ "launchpad_id": "xuhanp",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Xuhan Peng",
+ "emails": [
+ "xuhanp@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "bob-ball",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Bob Ball",
+ "emails": [
+ "bob.ball@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "james-page",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "James Page",
+ "emails": [
+ "james.page@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "jafletch",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jack Peter Fletcher",
+ "emails": [
+ "jafletch@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "redheadflyundershadow",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Lei Zhang",
+ "emails": [
+ "sneezezhang@cienet.com.cn"
+ ]
+ },
+ {
+ "launchpad_id": "mapleoin",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ionu\u021b Ar\u021b\u0103ri\u0219i",
+ "emails": [
+ "iartarisi@suse.cz"
+ ]
+ },
+ {
+ "launchpad_id": "dhersam",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dan Hersam",
+ "emails": [
+ "dan.hersam@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "troy-toman",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Troy Toman",
+ "emails": [
+ "ttcl@mac.com",
+ "troy.toman@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "hazmat",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kapil Thangavelu",
+ "emails": [
+ "kapil.foss@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "b-maguire",
+ "companies": [
+ {
+ "company_name": "Dell",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brendan Maguire",
+ "emails": [
+ "b_maguire@dell.com"
+ ]
+ },
+ {
+ "launchpad_id": "nickchase",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicholas Chase",
+ "emails": [
+ "nchase@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "gmb",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Graham Binns",
+ "emails": [
+ "graham.binns@gmail.com",
+ "graham@grahambinns.com",
+ "graham.binns@canonical.com",
+ "graham@canonical.com",
+ "gmb@canonical.com",
+ "gmb@grahambinns.com"
+ ]
+ },
+ {
+ "launchpad_id": "jonesld",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Daniel Jones",
+ "emails": [
+ "jonesld@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "apevec",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alan Pevec",
+ "emails": [
+ "apevec@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "ahmad-hassan-q",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ahmad Hassan",
+ "emails": [
+ "ahmad.hassan@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "jcherkas",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jacob Cherkas",
+ "emails": [
+ "jcherkas@nicira.com"
+ ]
+ },
+ {
+ "launchpad_id": "ripal-nathuji",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ripal Nathuji",
+ "emails": [
+ "ripal.nathuji@calxeda.com"
+ ]
+ },
+ {
+ "launchpad_id": "divakar-padiyar-nandavar",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Divakar Padiyar Nandavar",
+ "emails": [
+ "divakar.padiyar-nandavar@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "asbjorn-sannes",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Asbj\u00f8rn Sannes",
+ "emails": [
+ "asbjorn.sannes@interhost.no"
+ ]
+ },
+ {
+ "launchpad_id": "epatro",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eduardo Patrocinio",
+ "emails": [
+ "epatro@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jcallicoat",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jordan Callicoat",
+ "emails": [
+ "jordan.callicoat@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "pps-pranav",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pranav Salunke",
+ "emails": [
+ "pps.pranav@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "throughnothing",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "William Wolf",
+ "emails": [
+ "will.wolf@rackspace.com",
+ "throughnothing@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "thrawn01",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Derrick Wippler",
+ "emails": [
+ "thrawn01@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "lzy-dev",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhi Yan Liu",
+ "emails": [
+ "lzy.dev@gmail.com",
+ "zhiyanl@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "annegentle",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": "2013-Apr-01"
+ },
+ {
+ "company_name": "OpenStack Foundation",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anne Gentle",
+ "emails": [
+ "anne@openstack.org",
+ "anne.gentle@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "anton0",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anton Frolov",
+ "emails": [
+ "anfrolov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "wugc",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Guang Chun Wu",
+ "emails": [
+ "wugc@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "diane-fleming",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Diane Fleming",
+ "emails": [
+ "diane.fleming@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "dtroyer",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dean Troyer",
+ "emails": [
+ "dt-github@xr7.org",
+ "dtroyer@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "imsplitbit",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Daniel Salinas",
+ "emails": [
+ "imsplitbit@gmail.com",
+ "dsalinas@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "sorrison",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sam Morrison",
+ "emails": [
+ "sorrison@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "geekinutah",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael H Wilson",
+ "emails": [
+ "geekinutah@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "vijendar-komalla",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vijendar Komalla",
+ "emails": [
+ "vijendar.komalla@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "davewalker",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dave Walker",
+ "emails": [
+ "Dave.Walker@canonical.com",
+ "DaveWalker@ubuntu.com",
+ "davewalker@ubuntu.com",
+ "dave.walker@canonical.com",
+ "Dave.Walker@Canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "satya-patibandla",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Satyanarayana Patibandla",
+ "emails": [
+ "satya.patibandla@tcs.com"
+ ]
+ },
+ {
+ "launchpad_id": "simo-x",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Simo Sorce",
+ "emails": [
+ "simo@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jsbryant",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jay S. Bryant",
+ "emails": [
+ "jsbryant@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "jordan-pittier",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jordan Pittier",
+ "emails": [
+ "jordan.pittier-ext@cloudwatt.com",
+ "jordan.pittier@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "unmesh-gurjar",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Unmesh Gurjar",
+ "emails": [
+ "unmesh.gurjar@vertex.co.in",
+ "unmesh.gurjar@nttdata.com"
+ ]
+ },
+ {
+ "launchpad_id": "dmitrymex",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dmitry Mescheryakov",
+ "emails": [
+ "dmescheryakov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "yuanotes",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brooklyn",
+ "emails": [
+ "brooklyn.chen@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "cboylan",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Clark Boylan",
+ "emails": [
+ "clark.boylan@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "dmllr",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dirk Mueller",
+ "emails": [
+ "dirk@dmllr.de"
+ ]
+ },
+ {
+ "launchpad_id": "karin-levenstein",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Karin Levenstein",
+ "emails": [
+ "karin.levenstein@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "peter-a-portante",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Peter Portante",
+ "emails": [
+ "peter.portante@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "nicholaskuechler",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicholas Kuechler",
+ "emails": [
+ "nkuechler@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-goetz",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Goetz",
+ "emails": [
+ "david.goetz@rackspace.com",
+ "dpgoetz@gmail.com",
+ "david.goetz@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "freyes",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Felipe Reyes",
+ "emails": [
+ "freyes@tty.cl"
+ ]
+ },
+ {
+ "launchpad_id": "timjr",
+ "companies": [
+ {
+ "company_name": "Yahoo!",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tim Daly Jr.",
+ "emails": [
+ "timjr@yahoo-inc.com"
+ ]
+ },
+ {
+ "launchpad_id": "yogesh-srikrishnan",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yogeshwar Srikrishnan",
+ "emails": [
+ "yogesh.srikrishnan@rackspace.com",
+ "yoga80@yahoo.com"
+ ]
+ },
+ {
+ "launchpad_id": "jordanrinke",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jordan Rinke",
+ "emails": [
+ "jordan@openstack.org"
+ ]
+ },
+ {
+ "launchpad_id": "hzzhoushaoyu",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhou ShaoYu",
+ "emails": [
+ "hzzhoushaoyu@corp.netease.com"
+ ]
+ },
+ {
+ "launchpad_id": "walter-boring",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Walt Boring",
+ "emails": [
+ "walter.boring@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "eamonn-otoole",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eamonn O'Toole",
+ "emails": [
+ "eamonn.otoole@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "pshkitin",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pavel Shkitin",
+ "emails": [
+ "pshkitin@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "cthiel-suse",
+ "companies": [
+ {
+ "company_name": "DE Telekom",
+ "end_date": null
+ }
+ ],
+ "user_name": "Christoph Thiel",
+ "emails": [
+ "c.thiel@telekom.de",
+ "cthiel@suse.com"
+ ]
+ },
+ {
+ "launchpad_id": "adam.spiers",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adam Spiers",
+ "emails": [
+ "aspiers@suse.com"
+ ]
+ },
+ {
+ "launchpad_id": "mathrock",
+ "companies": [
+ {
+ "company_name": "National Security Agency",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nathanael Burton",
+ "emails": [
+ "nathanael.i.burton@gmail.com",
+ "nathanael.i.burton.work@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "lichray",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhihao Yuan",
+ "emails": [
+ "lichray@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "justin-lund",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Justin Lund",
+ "emails": [
+ "justin.lund@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "fengqian-gao",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Fengqian.Gao",
+ "emails": [
+ "fengqian.gao@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "dukov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dmitry Ukov",
+ "emails": [
+ "dukov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "academicgareth",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kun Huang",
+ "emails": [
+ "gareth@unitedstack.com",
+ "academicgareth@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "devcamcar",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Devin Carlen",
+ "emails": [
+ "devcamcar@illian.local",
+ "devin.carlen@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sileht",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mehdi Abaakouk",
+ "emails": [
+ "mehdi.abaakouk@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "blk-u",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brant Knudson",
+ "emails": [
+ "bknudson@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "nicholas-mistry",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nicholas Mistry",
+ "emails": [
+ "nmistry@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sandy-sandywalsh",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sandy Walsh",
+ "emails": [
+ "sandy@darksecretsoftware.com",
+ "sandy@sandywalsh.com"
+ ]
+ },
+ {
+ "launchpad_id": "adjohn",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adam Johnson",
+ "emails": [
+ "adjohn@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "nikhil-komawar",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "nikhil komawar",
+ "emails": [
+ "nikhil.komawar@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrewsben",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "andrewsben",
+ "emails": [
+ "andrewsben@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "xing-yang",
+ "companies": [
+ {
+ "company_name": "EMC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Xing Yang",
+ "emails": [
+ "xing.yang@emc.com"
+ ]
+ },
+ {
+ "launchpad_id": "fzylogic",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jeremy Hanmer",
+ "emails": [
+ "jeremy@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "calfonso",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Alfonso",
+ "emails": [
+ "calfonso@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "tpaszkowski",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tomasz Paszkowski",
+ "emails": [
+ "tpaszkowski@suse.com"
+ ]
+ },
+ {
+ "launchpad_id": "cbehrens",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Behrens",
+ "emails": [
+ "chris.behrens@rackspace.com",
+ "cbehrens@codestud.com",
+ "cbehrens+github@codestud.com"
+ ]
+ },
+ {
+ "launchpad_id": "sulochan-acharya",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sulochan Acharya",
+ "emails": [
+ "sulochan@gmail.com",
+ "sulochan.acharya@rackspace.co.uk"
+ ]
+ },
+ {
+ "launchpad_id": "mestery",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kyle Mestery",
+ "emails": [
+ "kmestery@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "jshepher",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Justin Shepherd",
+ "emails": [
+ "galstrom21@gmail.com",
+ "jshepher@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "tfukushima",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Taku Fukushima",
+ "emails": [
+ "tfukushima@dcl.info.waseda.ac.jp"
+ ]
+ },
+ {
+ "launchpad_id": "krum-spencer",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Spencer Krum",
+ "emails": [
+ "nibz@cat.pdx.edu"
+ ]
+ },
+ {
+ "launchpad_id": "boris-42",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": "2013-Apr-10"
+ },
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Boris Pavlovic",
+ "emails": [
+ "boris@pavlovic.me"
+ ]
+ },
+ {
+ "launchpad_id": "renukaapte",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Renuka Apte",
+ "emails": [
+ "renuka.apte@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "xuhj",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alex Xu",
+ "emails": [
+ "xuhj@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "michael-ogorman",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael O'Gorman",
+ "emails": [
+ "michael.ogorman@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "philip-day",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Phil Day",
+ "emails": [
+ "philip.day@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "brian-rosmaita",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Rosmaita",
+ "emails": [
+ "brian.rosmaita@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "pete5",
+ "companies": [
+ {
+ "company_name": "Gridcentric",
+ "end_date": null
+ }
+ ],
+ "user_name": "Peter Feiner",
+ "emails": [
+ "peter@gridcentric.ca"
+ ]
+ },
+ {
+ "launchpad_id": "yinliu2",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ying Liu",
+ "emails": [
+ "yinliu2@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-perez5",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Subiros Perez",
+ "emails": [
+ "david.perez5@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "sross-7",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Solly Ross",
+ "emails": [
+ "sross@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "dave-mcnally",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "David McNally",
+ "emails": [
+ "dave.mcnally@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "ruhe",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ruslan Kamaldinov",
+ "emails": [
+ "rkamaldinov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "dvaleriani",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Daniele Valeriani",
+ "emails": [
+ "daniele@dvaleriani.net"
+ ]
+ },
+ {
+ "launchpad_id": "ifarkas",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Imre Farkas",
+ "emails": [
+ "ifarkas@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "doug-hellmann",
+ "companies": [
+ {
+ "company_name": "DreamHost",
+ "end_date": null
+ }
+ ],
+ "user_name": "Doug Hellmann",
+ "emails": [
+ "doug.hellmann@gmail.com",
+ "doug.hellmann@dreamhost.com"
+ ]
+ },
+ {
+ "launchpad_id": "shardy",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Steven Hardy",
+ "emails": [
+ "shardy@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "bgh",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brad Hall",
+ "emails": [
+ "brad@nicira.com",
+ "bhall@nicira.com"
+ ]
+ },
+ {
+ "launchpad_id": "hughsaunders",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Hugh Saunders",
+ "emails": [
+ "hugh@wherenow.org"
+ ]
+ },
+ {
+ "launchpad_id": "dtynan",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dermot Tynan",
+ "emails": [
+ "tynan@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "dflorea",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dan Florea",
+ "emails": [
+ "dflorea@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "prasad-tanay",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Harsh Prasad",
+ "emails": [
+ "prasad.tanay@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "carl-baldwin",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Carl Baldwin",
+ "emails": [
+ "carl.baldwin@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "lifeless",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Collins",
+ "emails": [
+ "robertc@robertcollins.net",
+ "rbtcollins@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "shrutiranade38",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shruti Ranade",
+ "emails": [
+ "shrutiranade38@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "spzala",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sahdev Zala",
+ "emails": [
+ "spzala@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "sathish-nagappan",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sathish Nagappan",
+ "emails": [
+ "sathish.nagappan@nebula.com"
+ ]
+ },
+ {
+ "launchpad_id": "james-slagle",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "James Slagle",
+ "emails": [
+ "james.slagle@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jfehlig",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jim Fehlig",
+ "emails": [
+ "jfehlig@suse.com"
+ ]
+ },
+ {
+ "launchpad_id": "skraynev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sergey Kraynev",
+ "emails": [
+ "skraynev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "slagun",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Stan Lagun",
+ "emails": [
+ "slagun@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "corywright",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Cory Wright",
+ "emails": [
+ "corywright@gmail.com",
+ "cory.wright@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jdanjou",
+ "companies": [
+ {
+ "company_name": "eNovance",
+ "end_date": null
+ }
+ ],
+ "user_name": "Julien Danjou",
+ "emails": [
+ "julien@danjou.info",
+ "julien.danjou@enovance.com"
+ ]
+ },
+ {
+ "launchpad_id": "yugsuo",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Guangyu Suo",
+ "emails": [
+ "yugsuo@gmail.com",
+ "guangyu@unitedstack.com"
+ ]
+ },
+ {
+ "launchpad_id": "iwienand",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ian Wienand",
+ "emails": [
+ "iwienand@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jtran",
+ "companies": [
+ {
+ "company_name": "AT&T",
+ "end_date": null
+ }
+ ],
+ "user_name": "John Tran",
+ "emails": [
+ "Tran",
+ "jtran@attinteractive.com",
+ "jhtran@att.com"
+ ]
+ },
+ {
+ "launchpad_id": "hartsock",
+ "companies": [
+ {
+ "company_name": "VMware",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shawn Hartsock",
+ "emails": [
+ "hartsocks@vmware.com"
+ ]
+ },
+ {
+ "launchpad_id": "masumotok",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kei Masumoto",
+ "emails": [
+ "masumotok@nttdata.co.jp",
+ "root@openstack2-api",
+ "masumoto"
+ ]
+ },
+ {
+ "launchpad_id": "jeffmilstea",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jeff Milstead",
+ "emails": [
+ "jeffmilstea@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "shane-wang",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shane Wang",
+ "emails": [
+ "shane.wang@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "dan-prince",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dan Prince",
+ "emails": [
+ "dprince@redhat.com",
+ "dan.prince@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "dperaza",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Peraza",
+ "emails": [
+ "dperaza@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "robin-norwood",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robin Norwood",
+ "emails": [
+ "robin.norwood@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "jay-clark",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jay Clark",
+ "emails": [
+ "jay.clark@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "farrellee",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthew Farrellee",
+ "emails": [
+ "matt@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jiajun-xu",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "jiajun xu",
+ "emails": [
+ "jiajun.xu@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "y-derek",
+ "companies": [
+ {
+ "company_name": "University of Maryland",
+ "end_date": null
+ }
+ ],
+ "user_name": "Derek Yarnell",
+ "emails": [
+ "derek@umiacs.umd.edu"
+ ]
+ },
+ {
+ "launchpad_id": "letterj",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jay Payne",
+ "emails": [
+ "letterj@racklabs.com",
+ "letterj@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ironcamel",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Naveed Massjouni",
+ "emails": [
+ "naveedm9@gmail.com",
+ "naveed.massjouni@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "slicknik",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikhil Manchanda",
+ "emails": [
+ "slicknik@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "somikbehera",
+ "companies": [
+ {
+ "company_name": "Nicira",
+ "end_date": null
+ }
+ ],
+ "user_name": "Somik Behera",
+ "emails": [
+ "somikbehera@gmail.com",
+ "somik@nicira.com"
+ ]
+ },
+ {
+ "launchpad_id": "krishna1256",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sai Krishna Sripada",
+ "emails": [
+ "krishna1256@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "colinmcnamara",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Colin McNamara",
+ "emails": [
+ "colin@2cups.com"
+ ]
+ },
+ {
+ "launchpad_id": "rmoore08",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryan Moore",
+ "emails": [
+ "rmoore08@gmail.com",
+ "ryan.moore@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "nati-ueno",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nachi Ueno",
+ "emails": [
+ "nachi@nttmcl.com",
+ "nachi@ntti3.com"
+ ]
+ },
+ {
+ "launchpad_id": "alyseo",
+ "companies": [
+ {
+ "company_name": "Alyseo",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alyseo",
+ "emails": [
+ "openstack@alyseo.com"
+ ]
+ },
+ {
+ "launchpad_id": "ahaldin",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anton Haldin",
+ "emails": [
+ "ahaldin@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "corcornelisse",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Cor Cornelisse",
+ "emails": [
+ "cor@hyves.nl"
+ ]
+ },
+ {
+ "launchpad_id": "milner",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mike Milner",
+ "emails": [
+ "mike.milner@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "eyerediskin",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Sergey Skripnick",
+ "emails": [
+ "sskripnick@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "zyuan",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Zhihao Yuan",
+ "emails": [
+ "zhihao.yuan@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "obondarev",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Oleg Bondarev",
+ "emails": [
+ "obondarev@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "bnemec",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ben Nemec",
+ "emails": [
+ "bnemec@us.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "ashwini-shukla",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ashwini Shukla",
+ "emails": [
+ "ashwini.shukla@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "0xffea",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "David H\u00f6ppner",
+ "emails": [
+ "0xffea@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "derek-morton",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Derek Morton",
+ "emails": [
+ "derek.morton25@gmail.com",
+ "derek@networkwhisperer.com"
+ ]
+ },
+ {
+ "launchpad_id": "jdurgin",
+ "companies": [
+ {
+ "company_name": "Inktank",
+ "end_date": null
+ }
+ ],
+ "user_name": "Josh Durgin",
+ "emails": [
+ "joshd@hq.newdream.net",
+ "josh.durgin@dreamhost.com",
+ "josh.durgin@inktank.com"
+ ]
+ },
+ {
+ "launchpad_id": "aababilov",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alessio Ababilov",
+ "emails": [
+ "aababilo@yahoo-inc.com",
+ "ilovegnulinux@gmail.com",
+ "aababilov@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "ghe.rivero",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ghe Rivero",
+ "emails": [
+ "ghe.rivero@hp.com",
+ "ghe@debian.org",
+ "ghe.rivero@gmail.com",
+ "ghe.rivero@stackops.com"
+ ]
+ },
+ {
+ "launchpad_id": "frodenas",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ferran Rodenas",
+ "emails": [
+ "frodenas@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "ljjjustin",
+ "companies": [
+ {
+ "company_name": "UnitedStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jiajun Liu",
+ "emails": [
+ "iamljj@gmail.com",
+ "jiajun@unitedstack.com"
+ ]
+ },
+ {
+ "launchpad_id": "gz",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Martin Packman",
+ "emails": [
+ "martin.packman@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "torgomatic",
+ "companies": [
+ {
+ "company_name": "SwiftStack",
+ "end_date": null
+ }
+ ],
+ "user_name": "Samuel Merritt",
+ "emails": [
+ "spam@andcheese.org",
+ "sam@swiftstack.com"
+ ]
+ },
+ {
+ "launchpad_id": "corvus",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "James E. Blair",
+ "emails": [
+ "corvus@gnu.org",
+ "corvus@inaugust.com",
+ "jeblair@hp.com",
+ "james.blair@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "learnerever",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "TengLi",
+ "emails": [
+ "learnerever@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "cmsj",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Chris Jones",
+ "emails": [
+ "cmsj@tenshu.net"
+ ]
+ },
+ {
+ "launchpad_id": "rlucio",
+ "companies": [
+ {
+ "company_name": "Internap",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryan Lucio",
+ "emails": [
+ "rlucio@internap.com"
+ ]
+ },
+ {
+ "launchpad_id": "robert-myers",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Myers",
+ "emails": [
+ "robert_myers@earthlink.net",
+ "robert.myers@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "zhang-hare",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Edward",
+ "emails": [
+ "zhuadl@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "dmodium",
+ "companies": [
+ {
+ "company_name": "Information Sciences Institute",
+ "end_date": null
+ }
+ ],
+ "user_name": "Devendra",
+ "emails": [
+ "dmodium@isi.edu"
+ ]
+ },
+ {
+ "launchpad_id": "leekelby",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "leekelby",
+ "emails": [
+ "leekelby@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "bcwaldon",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Brian Waldon",
+ "emails": [
+ "brian.waldon@rackspace.com",
+ "bcwaldon@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "smoser",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Scott Moser",
+ "emails": [
+ "smoser@brickies.net",
+ "smoser@canonical.com",
+ "scott.moser@canonical.com",
+ "ssmoser2@gmail.com",
+ "smoser@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "robert-van-leeuwen",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert van Leeuwen",
+ "emails": [
+ "robert.vanleeuwen@spilgames.com"
+ ]
+ },
+ {
+ "launchpad_id": "duncan-thomas",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Duncan Thomas",
+ "emails": [
+ "duncan.thomas@hp.com",
+ "duncan.thomas@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "sasimpson",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Scott Simpson",
+ "emails": [
+ "sasimpson@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "xingzhou",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "xingzhou",
+ "emails": [
+ "xingzhou@cn.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "roland-hochmuth-s",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Roland Hochmuth",
+ "emails": [
+ "roland.hochmuth@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "xtoddx",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Todd Willey",
+ "emails": [
+ "todd@lapex",
+ "todd@ansolabs.com",
+ "todd@rubidine.com",
+ "xtoddx@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mvoelker",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Mark T. Voelker",
+ "emails": [
+ "mvoelker@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "dradez",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Dan Radez",
+ "emails": [
+ "dradez@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "andrewbogott",
+ "companies": [
+ {
+ "company_name": "Wikimedia Foundation",
+ "end_date": null
+ }
+ ],
+ "user_name": "Andrew Bogott",
+ "emails": [
+ "abogott@wikimedia.org",
+ "Bogott"
+ ]
+ },
+ {
+ "launchpad_id": "seif",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Seif Lotfy",
+ "emails": [
+ "s.lotfy@telekom.de"
+ ]
+ },
+ {
+ "launchpad_id": "oliver-leahy-l",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ollie Leahy",
+ "emails": [
+ "oliver.leahy@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "rohara",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ryan O'Hara",
+ "emails": [
+ "rohara@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "tmello",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tiago Rodrigues de Mello",
+ "emails": [
+ "tmello@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "james-branen",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jim Branen",
+ "emails": [
+ "james.branen@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "bfilippov",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Boris Filippov",
+ "emails": [
+ "bfilippov@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-lyle",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Lyle",
+ "emails": [
+ "david.lyle@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "gagupta",
+ "companies": [
+ {
+ "company_name": "Denali Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Gaurav Gupta",
+ "emails": [
+ "gaurav@denali-systems.com"
+ ]
+ },
+ {
+ "launchpad_id": "eddie-sheffield",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eddie Sheffield",
+ "emails": [
+ "eddie.sheffield@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "sleepsonthefloor",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "Anthony Young",
+ "emails": [
+ "sleepsonthefloor@gmail.com",
+ "root@tonbuntu"
+ ]
+ },
+ {
+ "launchpad_id": "kannan",
+ "companies": [
+ {
+ "company_name": "Rightscale",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kannan Manickam",
+ "emails": [
+ "arangamani.kannan@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "russellb",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Russell Bryant",
+ "emails": [
+ "russell@russellbryant.net",
+ "rbryant@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "jake-hyperboledesign",
+ "companies": [
+ {
+ "company_name": "Nebula",
+ "end_date": null
+ }
+ ],
+ "user_name": "jakedahn",
+ "emails": [
+ "admin@jakedahn.com",
+ "jake@ansolabs.com"
+ ]
+ },
+ {
+ "launchpad_id": "v-joseph",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Joseph Glanville",
+ "emails": [
+ "joseph@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "tagliapietra.alessandro",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alessandro Tagliapietra",
+ "emails": [
+ "tagliapietra.alessandro@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "eharney",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Eric Harney",
+ "emails": [
+ "eharney@redhat.com",
+ "eharney@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "garyk",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Gary Kotton",
+ "emails": [
+ "gkotton@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "shengjie-min",
+ "companies": [
+ {
+ "company_name": "Dell",
+ "end_date": null
+ }
+ ],
+ "user_name": "Shengjie Min",
+ "emails": [
+ "shengjie_min@dell.com"
+ ]
+ },
+ {
+ "launchpad_id": "u-matt-h",
+ "companies": [
+ {
+ "company_name": "Cloudscaling",
+ "end_date": null
+ }
+ ],
+ "user_name": "Matthew Hooker",
+ "emails": [
+ "matt@cloudscaling.com"
+ ]
+ },
+ {
+ "launchpad_id": "jiangy",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jiang Yong",
+ "emails": [
+ "jiangyong.hn@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "bkerensa",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Benjamin Kerensa",
+ "emails": [
+ "bkerensa@ubuntu.com"
+ ]
+ },
+ {
+ "launchpad_id": "pschaef",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Patrick Schaefer",
+ "emails": [
+ "pschaef@de.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "avishayb",
+ "companies": [
+ {
+ "company_name": "Radware",
+ "end_date": null
+ }
+ ],
+ "user_name": "Avishay Balderman",
+ "emails": [
+ "avishayb@radware.com"
+ ]
+ },
+ {
+ "launchpad_id": "chemikadze",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikolay Sokolov",
+ "emails": [
+ "Sokolov",
+ "nsokolov@griddynamics.com",
+ "nsokolov@griddynamics.net",
+ "chemikadze@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "imain",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ian Main",
+ "emails": [
+ "imain@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "likitha-shetty",
+ "companies": [
+ {
+ "company_name": "Citrix",
+ "end_date": null
+ }
+ ],
+ "user_name": "Likitha Shetty",
+ "emails": [
+ "likitha.shetty@citrix.com"
+ ]
+ },
+ {
+ "launchpad_id": "wdec-ietf",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Wojciech Dec",
+ "emails": [
+ "wdec.ietf@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "asakhnov",
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "end_date": null
+ }
+ ],
+ "user_name": "Alexander Sakhnov",
+ "emails": [
+ "asakhnov@mirantis.com"
+ ]
+ },
+ {
+ "launchpad_id": "clay-gerrard",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "clayg",
+ "emails": [
+ "clay.gerrard@rackspace.com",
+ "clayg@clayg-desktop",
+ "clay.gerrard@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "soheil-h-y",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Soheil Hassas Yeganeh",
+ "emails": [
+ "soheil@cs.toronto.edu"
+ ]
+ },
+ {
+ "launchpad_id": "ywang19",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "yaguang wang",
+ "emails": [
+ "yaguang.wang@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "danehans",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Daneyon Hansen",
+ "emails": [
+ "danehans@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "heut2008",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Yaguang Tang",
+ "emails": [
+ "yaguang.tang@canonical.com",
+ "heut2008@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "crayz",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Allan Feid",
+ "emails": [
+ "allanfeid@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "yunhong-jiang",
+ "companies": [
+ {
+ "company_name": "Intel",
+ "end_date": null
+ }
+ ],
+ "user_name": "jiang, yunhong",
+ "emails": [
+ "yunhong.jiang@intel.com"
+ ]
+ },
+ {
+ "launchpad_id": "david-kranz",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "David Kranz",
+ "emails": [
+ "david.kranz@qrclab.com"
+ ]
+ },
+ {
+ "launchpad_id": "tzumainn",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tzu-Mainn Chen",
+ "emails": [
+ "tzumainn@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "adalbas",
+ "companies": [
+ {
+ "company_name": "IBM",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adalberto Medeiros",
+ "emails": [
+ "adalbas@linux.vnet.ibm.com"
+ ]
+ },
+ {
+ "launchpad_id": "skuicloud",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kui Shi",
+ "emails": [
+ "skuicloud@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "philip-knouff",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Philip Knouff",
+ "emails": [
+ "philip.knouff@mailtrust.com",
+ "Knouff"
+ ]
+ },
+ {
+ "launchpad_id": "jamesli-olsf",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "James Li",
+ "emails": [
+ "yueli.m@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mshuler",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Michael Shuler",
+ "emails": [
+ "mshuler@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "tomoe",
+ "companies": [
+ {
+ "company_name": "Midokura",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tomoe Sugihara",
+ "emails": [
+ "tomoe@midokura.com"
+ ]
+ },
+ {
+ "launchpad_id": "nsavin",
+ "companies": [
+ {
+ "company_name": "Grid Dynamics",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikita Savin",
+ "emails": [
+ "nsavin@griddynamics.com"
+ ]
+ },
+ {
+ "launchpad_id": "jakedahn",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jake Dahn",
+ "emails": [
+ "jake@markupisart.com"
+ ]
+ },
+ {
+ "launchpad_id": "jdenisco",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "John DeNisco",
+ "emails": [
+ "jdenisco@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "hayashi",
+ "companies": [
+ {
+ "company_name": "NTT",
+ "end_date": null
+ }
+ ],
+ "user_name": "Toshiyuki Hayashi",
+ "emails": [
+ "hayashi@nttmcl.com"
+ ]
+ },
+ {
+ "launchpad_id": "ndipanov",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Nikola \u0110ipanov",
+ "emails": [
+ "ndipanov@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "oomichi",
+ "companies": [
+ {
+ "company_name": "NEC",
+ "end_date": null
+ }
+ ],
+ "user_name": "Ken'ichi Ohmichi",
+ "emails": [
+ "oomichi@mxs.nes.nec.co.jp"
+ ]
+ },
+ {
+ "launchpad_id": "tylern-u",
+ "companies": [
+ {
+ "company_name": "Piston Cloud",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tyler North",
+ "emails": [
+ "tylern@pistoncloud.com"
+ ]
+ },
+ {
+ "launchpad_id": "hyerle",
+ "companies": [
+ {
+ "company_name": "HP",
+ "end_date": null
+ }
+ ],
+ "user_name": "Robert Hyerle",
+ "emails": [
+ "hyerle@hp.com"
+ ]
+ },
+ {
+ "launchpad_id": "leanderbb",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Leander Beernaert",
+ "emails": [
+ "leanderbb@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "kost-isi",
+ "companies": [
+ {
+ "company_name": "Information Sciences Institute",
+ "end_date": null
+ }
+ ],
+ "user_name": "Kost",
+ "emails": [
+ "kost@isi.edu"
+ ]
+ },
+ {
+ "launchpad_id": "jorgew",
+ "companies": [
+ {
+ "company_name": "Rackspace",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jorge L. Williams",
+ "emails": [
+ "jorge.williams@rackspace.com"
+ ]
+ },
+ {
+ "launchpad_id": "jeffjapan",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Jeffrey Wilcox",
+ "emails": [
+ "jeffjapan@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "gandelman-a",
+ "companies": [
+ {
+ "company_name": "Canonical",
+ "end_date": null
+ }
+ ],
+ "user_name": "Adam Gandelman",
+ "emails": [
+ "adam.gandelman@canonical.com",
+ "adamg@canonical.com"
+ ]
+ },
+ {
+ "launchpad_id": "tylesmit",
+ "companies": [
+ {
+ "company_name": "Cisco Systems",
+ "end_date": null
+ }
+ ],
+ "user_name": "Tyler Smith",
+ "emails": [
+ "tylesmit@cisco.com"
+ ]
+ },
+ {
+ "launchpad_id": "vuntz",
+ "companies": [
+ {
+ "company_name": "SUSE",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vincent Untz",
+ "emails": [
+ "vuntz@suse.com"
+ ]
+ },
+ {
+ "launchpad_id": "irenab",
+ "companies": [
+ {
+ "company_name": "Mellanox",
+ "end_date": null
+ }
+ ],
+ "user_name": "Irena Berezovsky",
+ "emails": [
+ "irenab@mellanox.com"
+ ]
+ },
+ {
+ "launchpad_id": "vipuls",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Vipul Sabhaya",
+ "emails": [
+ "vipuls@gmail.com"
+ ]
+ },
+ {
+ "launchpad_id": "mtaylor-s",
+ "companies": [
+ {
+ "company_name": "Red Hat",
+ "end_date": null
+ }
+ ],
+ "user_name": "Martyn Taylor",
+ "emails": [
+ "mtaylor@redhat.com"
+ ]
+ },
+ {
+ "launchpad_id": "nelson-crynwr",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Russ Nelson",
+ "emails": [
+ "nelson@nelson-laptop",
+ "nelson@crynwr.com",
+ "russ@crynwr.com"
+ ]
+ },
+ {
+ "launchpad_id": "zaitcev",
+ "companies": [
+ {
+ "company_name": "*independent",
+ "end_date": null
+ }
+ ],
+ "user_name": "Pete Zaitcev",
+ "emails": [
+ "zaitcev@kotori.zaitcev.us"
+ ]
+ }
+ ],
+
+ "companies": [
+ {
+ "company_name": "*independent",
+ "domains": [""]
+ },
+ {
+ "domains": ["99cloud.net"],
+ "company_name": "99cloud"
+ },
+ {
+ "domains": ["attinteractive.com", "att.com"],
+ "company_name": "AT&T"
+ },
+ {
+ "domains": ["alyseo.com"],
+ "company_name": "Alyseo"
+ },
+ {
+ "domains": ["aristanetworks.com"],
+ "company_name": "Arista Networks"
+ },
+ {
+ "domains": ["atomia.com"],
+ "company_name": "Atomia"
+ },
+ {
+ "domains": ["b1-systems.de"],
+ "company_name": "B1 Systems"
+ },
+ {
+ "domains": ["bigswitch.com"],
+ "company_name": "Big Switch Networks"
+ },
+ {
+ "domains": ["brocade.com"],
+ "company_name": "Brocade"
+ },
+ {
+ "domains": ["bull.net"],
+ "company_name": "Bull"
+ },
+ {
+ "domains": ["cern.ch"],
+ "company_name": "CERN"
+ },
+ {
+ "domains": ["crs4.it"],
+ "company_name": "CRS4"
+ },
+ {
+ "domains": ["canonical.com"],
+ "company_name": "Canonical"
+ },
+ {
+ "domains": ["cisco.com"],
+ "company_name": "Cisco Systems"
+ },
+ {
+ "domains": ["citrix.com"],
+ "company_name": "Citrix"
+ },
+ {
+ "domains": ["cloud.com"],
+ "company_name": "Citrix Systems"
+ },
+ {
+ "domains": ["cloudvps.com"],
+ "company_name": "CloudVPS"
+ },
+ {
+ "domains": ["cloudbau.de"],
+ "company_name": "Cloudbau"
+ },
+ {
+ "domains": ["cloudscaling.com"],
+ "company_name": "Cloudscaling"
+ },
+ {
+ "domains": ["3ds.com"],
+ "company_name": "Dassault Syst\u00e8mes"
+ },
+ {
+ "domains": ["Dell.com", "software.dell.com", "dell.com"],
+ "company_name": "Dell"
+ },
+ {
+ "domains": ["denali-systems.com"],
+ "company_name": "Denali Systems"
+ },
+ {
+ "domains": ["dreamhost.com"],
+ "company_name": "DreamHost"
+ },
+ {
+ "domains": ["emc.com"],
+ "company_name": "EMC"
+ },
+ {
+ "domains": ["fathomdb.com"],
+ "company_name": "FathomDB"
+ },
+ {
+ "domains": ["griddynamics.com"],
+ "company_name": "Grid Dynamics"
+ },
+ {
+ "domains": ["gridcentric.ca", "gridcentric.com"],
+ "company_name": "Gridcentric"
+ },
+ {
+ "domains": ["hp.com"],
+ "company_name": "HP"
+ },
+ {
+ "domains": ["hds.com"],
+ "company_name": "Hitachi"
+ },
+ {
+ "domains": ["huawei.com"],
+ "company_name": "Huawei"
+ },
+ {
+ "domains": ["linux.vnet.ibm.com", "ibm.com"],
+ "company_name": "IBM"
+ },
+ {
+ "domains": ["igbmc.fr"],
+ "company_name": "IGBMC"
+ },
+ {
+ "domains": ["ispras.ru"],
+ "company_name": "ISP RAS"
+ },
+ {
+ "domains": ["isi.edu"],
+ "company_name": "Information Sciences Institute"
+ },
+ {
+ "domains": ["inktank.com"],
+ "company_name": "Inktank"
+ },
+ {
+ "domains": ["intel.com"],
+ "company_name": "Intel"
+ },
+ {
+ "domains": ["internap.com"],
+ "company_name": "Internap"
+ },
+ {
+ "domains": ["kt.com"],
+ "company_name": "KT Corporation"
+ },
+ {
+ "domains": ["kth.se"],
+ "company_name": "Kungliga Tekniska h\u00f6gskolan"
+ },
+ {
+ "domains": ["lahondaresearch.org"],
+ "company_name": "La Honda Research"
+ },
+ {
+ "domains": ["locaweb.com.br"],
+ "company_name": "Locaweb"
+ },
+ {
+ "domains": ["maginatics.com"],
+ "company_name": "Maginatics"
+ },
+ {
+ "domains": ["managedit.ie"],
+ "company_name": "Managed IT"
+ },
+ {
+ "domains": ["mellanox.com"],
+ "company_name": "Mellanox"
+ },
+ {
+ "domains": ["memset.com"],
+ "company_name": "Memset"
+ },
+ {
+ "domains": ["metacloud.com"],
+ "company_name": "Metacloud"
+ },
+ {
+ "domains": ["midokura.com", "midokura.jp"],
+ "company_name": "Midokura"
+ },
+ {
+ "domains": ["mirantis.com", "mirantis.ru"],
+ "company_name": "Mirantis"
+ },
+ {
+ "domains": ["momentumsi.com"],
+ "company_name": "MomentumSI"
+ },
+ {
+ "domains": ["nasa.gov"],
+ "company_name": "NASA"
+ },
+ {
+ "domains": ["cq.jp.nec.com", "da.jp.nec.com", "mxw.nes.nec.co.jp", "nec.co.jp", "mxd.nes.nec.co.jp"],
+ "company_name": "NEC"
+ },
+ {
+ "domains": ["nttmcl.com", "nttdata.co.jp", "ntt.com", "ntt.co.jp", "nttdata.com", "vertex.co.in"],
+ "company_name": "NTT"
+ },
+ {
+ "domains": ["nebula.com", "ansolabs.com"],
+ "company_name": "Nebula"
+ },
+ {
+ "domains": ["netapp.com"],
+ "company_name": "NetApp"
+ },
+ {
+ "domains": ["nexenta.com"],
+ "company_name": "Nexenta"
+ },
+ {
+ "domains": ["nicira.com"],
+ "company_name": "Nicira"
+ },
+ {
+ "domains": ["nimbisservices.com"],
+ "company_name": "Nimbis Services"
+ },
+ {
+ "domains": ["pistoncloud.com"],
+ "company_name": "Piston Cloud"
+ },
+ {
+ "domains": ["rackspace.co.uk", "rackspace.com"],
+ "company_name": "Rackspace"
+ },
+ {
+ "domains": ["radware.com"],
+ "company_name": "Radware"
+ },
+ {
+ "domains": ["ravellosystems.com"],
+ "company_name": "Ravello Systems"
+ },
+ {
+ "domains": ["gluster.com", "redhat.com"],
+ "company_name": "Red Hat"
+ },
+ {
+ "domains": ["sina.com"],
+ "company_name": "SINA"
+ },
+ {
+ "domains": ["suse.cz", "suse.de", "suse.com"],
+ "company_name": "SUSE"
+ },
+ {
+ "domains": ["sdsc.edu"],
+ "company_name": "San Diego Supercomputer Center"
+ },
+ {
+ "domains": ["scality.com"],
+ "company_name": "Scality"
+ },
+ {
+ "domains": ["solidfire.com"],
+ "company_name": "SolidFire"
+ },
+ {
+ "domains": ["pednape"],
+ "company_name": "StackOps"
+ },
+ {
+ "domains": ["swiftstack.com"],
+ "company_name": "SwiftStack"
+ },
+ {
+ "domains": ["guardian.co.uk"],
+ "company_name": "The Guardian"
+ },
+ {
+ "domains": ["thoughtworks.com"],
+ "company_name": "ThoughtWorks"
+ },
+ {
+ "domains": ["ustack.com", "unitedstack.com"],
+ "company_name": "UnitedStack"
+ },
+ {
+ "domains": ["umd.edu"],
+ "company_name": "University of Maryland"
+ },
+ {
+ "domains": ["unimelb.edu.au"],
+ "company_name": "University of Melbourne"
+ },
+ {
+ "domains": ["valinux.co.jp"],
+ "company_name": "VA Linux"
+ },
+ {
+ "domains": ["vmware.com"],
+ "company_name": "VMware"
+ },
+ {
+ "domains": ["vexxhost.com"],
+ "company_name": "VexxHost"
+ },
+ {
+ "domains": ["virtualtech.jp"],
+ "company_name": "Virtualtech"
+ },
+ {
+ "domains": ["wikimedia.org"],
+ "company_name": "Wikimedia Foundation"
+ },
+ {
+ "domains": ["yahoo-inc.com"],
+ "company_name": "Yahoo!"
+ },
+ {
+ "domains": ["zadarastorage.com"],
+ "company_name": "Zadara Storage"
+ },
+ {
+ "domains": ["enovance.com"],
+ "company_name": "eNovance"
+ }
+ ],
+
+ "repos": [
+ {
+ "branches": ["master"],
+ "name": "Neutron Client",
+ "type": "core",
+ "uri": "git://github.com/openstack/python-neutronclient.git",
+ "releases": [
+ {
+ "release_name": "Folsom",
+ "tag_from": "folsom-1",
+ "tag_to": "2.1"
+ },
+ {
+ "release_name": "Grizzly",
+ "tag_from": "2.1",
+ "tag_to": "2.2.1"
+ },
+ {
+ "release_name": "Havana",
+ "tag_from": "2.2.1",
+ "tag_to": "HEAD"
+ }
+ ]
+ },
+ {
+ "branches": ["master"],
+ "name": "Keystone",
+ "type": "core",
+ "uri": "git://github.com/openstack/keystone.git",
+ "releases": [
+ {
+ "release_name": "Essex",
+ "tag_from": "2011.3",
+ "tag_to": "2012.1"
+ },
+ {
+ "release_name": "Folsom",
+ "tag_from": "2012.1",
+ "tag_to": "2012.2"
+ },
+ {
+ "release_name": "Grizzly",
+ "tag_from": "2012.2",
+ "tag_to": "2013.1"
+ },
+ {
+ "release_name": "Havana",
+ "tag_from": "2013.1",
+ "tag_to": "HEAD"
+ }
+ ]
+ },
+ {
+ "branches": ["master"],
+ "name": "Murano API",
+ "type": "stackforge",
+ "uri": "git://github.com/stackforge/murano-api.git",
+ "releases": [
+ {
+ "release_name": "Havana",
+ "tag_from": "0.1",
+ "tag_to": "HEAD"
+ }
+ ]
+ }
+ ],
+
+ "releases": [
+ {
+ "release_name": "ALL",
+ "start_date": "2010-May-01",
+ "end_date": "now"
+ },
+ {
+ "release_name": "Essex",
+ "start_date": "2011-Oct-01",
+ "end_date": "2012-Apr-01"
+ },
+ {
+ "release_name": "Folsom",
+ "start_date": "2012-Apr-01",
+ "end_date": "2012-Oct-01"
+ },
+ {
+ "release_name": "Grizzly",
+ "start_date": "2012-Oct-01",
+ "end_date": "2013-Apr-01"
+ },
+ {
+ "release_name": "Havana",
+ "start_date": "2013-Apr-01",
+ "end_date": "now"
+ }
+ ]
+
+}
\ No newline at end of file
diff --git a/etc/domain-company b/etc/domain-company
deleted file mode 100644
index 5b428140a..000000000
--- a/etc/domain-company
+++ /dev/null
@@ -1,94 +0,0 @@
-# domain employer [< yyyy-mm-dd]
-3ds.com Dassault Systèmes
-99cloud.net 99cloud
-alyseo.com Alyseo
-ansolabs.com Rackspace < 2012-07-20
-ansolabs.com Nebula
-atomia.com Atomia
-att.com AT&T
-attinteractive.com AT&T
-bigswitch.com Big Switch Networks
-b1-systems.de BL Systems
-brocade.com Brocade
-bull.net Bull
-canonical.com Canonical
-cern.ch CERN
-cisco.com Cisco Systems
-citrix.com Citrix
-cloud.com Citrix Systems
-cloudbau.de Cloudbau
-cloudscaling.com Cloudscaling
-dell.com Dell
-Dell.com Dell
-denali-systems.com Denali Systems
-dreamhost.com DreamHost
-emc.com EMC
-enovance.com eNovance
-fathomdb.com FathomDB
-gluster.com Red Hat
-griddynamics.com Grid Dynamics
-guardian.co.uk The Guardian
-hds.com Hitachi
-hp.com HP
-huawei.com Huawei
-ibm.com IBM
-inktank.com Inktank
-intel.com Intel
-internap.com Internap
-isi.edu University of Southern Carolina
-ispras.ru ISP RAS
-kt.com KT Corporation
-kth.se Kungliga Tekniska högskolan
-linux.vnet.ibm.com IBM
-locaweb.com.br Locaweb
-lahondaresearch.org La Honda Research
-managedit.ie Managed IT
-mellanox.com Mellanox
-memset.com Memset
-metacloud.com Metacloud
-midokura.com Midokura
-midokura.jp Midokura
-mirantis.com Mirantis
-mirantis.ru Mirantis
-nasa.gov NASA
-nebula.com Nebula
-nexenta.com Nexenta
-nec.co.jp NEC
-cq.jp.nec.com NEC
-da.jp.nec.com NEC
-mxw.nes.nec.co.jp NEC
-mxd.nes.nec.co.jp NEC
-netapp.com NetApp
-nicira.com Nicira
-nimbisservices.com Nimbis Services
-ntt.co.jp NTT
-ntt.com NTT
-nttdata.com NTT
-nttdata.co.jp NTT
-nttmcl.com NTT
-vertex.co.in NTT
-pednape StackOps
-pistoncloud.com Piston Cloud
-rackspace.co.uk Rackspace
-rackspace.com Rackspace
-radware.com Radware
-redhat.com Red Hat
-scality.com Scality
-sdsc.edu San Diego Supercomputer Center
-sina.com SINA
-software.dell.com Dell
-solidfire.com SolidFire
-suse.de SUSE
-suse.com SUSE
-suse.cz SUSE
-swiftstack.com SwiftStack
-thoughtworks.com ThoughtWorks
-umd.edu University of Maryland
-unimelb.edu.au University of Melbourne
-valinux.co.jp VA Linux
-vexxhost.com VexxHost
-virtualtech.jp Virtualtech
-vmware.com VMware
-wikimedia.org Wikimedia Foundation
-yahoo-inc.com Yahoo!
-zadarastorage.com Zadara Storage
diff --git a/etc/email-aliases b/etc/email-aliases
deleted file mode 100644
index 94e2a0090..000000000
--- a/etc/email-aliases
+++ /dev/null
@@ -1,257 +0,0 @@
-armamig@gmail.com Armando.Migliaccio@eu.citrix.com
-yogesh.srikrishnan@rackspace.com yogesh.srikrishnan@rackspace.com
-emagana@gmail.com eperdomo@cisco.com eperdomo@dhcp-171-71-119-164.cisco.com
-jeblair@hp.com jeblair@openstack.org
-rohitgarwalla@gmail.com roagarwa@cisco.com
-shweta.ap05@gmail.com shpadubi@cisco.com
-e0ne@e0ne.info ikolodyazhny@mirantis.com
-santhosh.m@thoughtworks.com santhom@thoughtworks.com
-john.garbutt@citrix.com john.garbutt@rackspace.com
-thingee@gmail.com mike.perez@dreamhost.com
-duncan.thomas@gmail.com duncan.thomas@hp.com
-adamg@canonical.com adam.gandelman@canonical.com
-admin@jakedahn.com jake@ansolabs.com
-amesserl@rackspace.com ant@openstack.org
-amigliaccio@internap.com Armando.Migliaccio@eu.citrix.com
-andrew@cloudscaling.com acs@parvuscaptus.com
-anne.gentle@rackspace.com anne@openstack.org
-anne@openstack.org anne@openstack.org
-armando.migliaccio@citrix.com Armando.Migliaccio@eu.citrix.com
-asomya@cisco.com asomya@cisco.com
-bcwaldon@gmail.com brian.waldon@rackspace.com
-bfschott@gmail.com bschott@isi.edu
-Bogott abogott@wikimedia.org
-brian.lamar@gmail.com brian.lamar@rackspace.com
-brian.lamar@rackspace.com brian.lamar@rackspace.com
-cbehrens@codestud.com cbehrens+github@codestud.com
-cbehrens+github@codestud.com cbehrens+github@codestud.com
-chiradeep@chiradeep-lt2 chiradeep@cloud.com
-chmouel@chmouel.com chmouel.boudjnah@rackspace.co.uk
-chmouel@enovance.com chmouel@chmouel.com
-chris.behrens@rackspace.com cbehrens@codestud.com
-chris@slicehost.com chris@pistoncloud.com
-chuck.short@canonical.com zulcss@ubuntu.com
-clayg@clayg-desktop clay.gerrard@gmail.com
-clay.gerrard@gmail.com clay.gerrard@gmail.com
-clay.gerrard@rackspace.com clay.gerrard@gmail.com
-code@term.ie code@term.ie
-corvus@gnu.org jeblair@hp.com
-corvus@inaugust.com jeblair@hp.com
-corywright@gmail.com cory.wright@rackspace.com
-cory.wright@rackspace.com corywright@gmail.com
-dan@nicira.com dan@nicira.com
-dan.prince@rackspace.com dprince@redhat.com
-danwent@dan-xs3-cs dan@nicira.com
-danwent@gmail.com dan@nicira.com
-Dave.Walker@Canonical.com dave.walker@canonical.com
-DaveWalker@ubuntu.com dave.walker@canonical.com
-DaveWalker@ubuntu.com Dave.Walker@canonical.com
-david.goetz@gmail.com david.goetz@rackspace.com
-david.hadas@gmail.com davidh@il.ibm.com
-devcamcar@illian.local devin.carlen@gmail.com
-devnull@brim.net gholt@rackspace.com
-Dietz matt.dietz@rackspace.com
-dolph.mathews@gmail.com dolph.mathews@rackspace.com
-doug.hellmann@gmail.com doug.hellmann@dreamhost.com
-dougw@sdsc.edu dweimer@gmail.com
-dpgoetz@gmail.com david.goetz@rackspace.com
-dt-github@xr7.org dtroyer@gmail.com
-Édouard edouard.thuleau@orange.com
-emellor@silver ewan.mellor@citrix.com
-enugaev@griddynamics.com reldan@oscloud.ru
-florian.hines@gmail.com syn@ronin.io
-gaurav@gluster.com gaurav@gluster.com
-ghe.rivero@gmail.com ghe@debian.org
-ghe.rivero@stackops.com ghe@debian.org
-gholt@brim.net gholt@rackspace.com
-gihub@highbridgellc.com github@highbridgellc.com
-github@anarkystic.com code@term.ie
-github@anarkystic.com github@anarkystic.com
-glange@rackspace.com greglange@gmail.com
-greglange+launchpad@gmail.com greglange@gmail.com
-heut2008@gmail.com yaguang.tang@canonical.com
-higginsd@gmail.com derekh@redhat.com
-ialekseev@griddynamics.com ilyaalekseyev@acm.org
-ilya@oscloud.ru ilyaalekseyev@acm.org
-itoumsn@shayol itoumsn@nttdata.co.jp
-jake@ansolabs.com jake@ansolabs.com
-jake@markupisart.com jake@ansolabs.com
-james.blair@rackspace.com jeblair@hp.com
-jaypipes@gmail.com jaypipes@gmail.com
-jesse@aire.local anotherjesse@gmail.com
-jesse@dancelamb anotherjesse@gmail.com
-jesse@gigantor.local anotherjesse@gmail.com
-jesse@ubuntu anotherjesse@gmail.com
-jian.wen@ubuntu.com jian.wen@canonical.com
-jkearney@nova.(none) josh@jk0.org
-jkearney@nova.(none) josh.kearney@pistoncloud.com
-jmckenty@joshua-mckentys-macbook-pro.local jmckenty@gmail.com
-jmckenty@yyj-dhcp171.corp.flock.com jmckenty@gmail.com
-joe@cloudscaling.com joe@swiftstack.com
-johannes@compute3.221.st johannes.erdfelt@rackspace.com
-johannes@erdfelt.com johannes.erdfelt@rackspace.com
-john.dickinson@rackspace.com me@not.mn
-john.eo@gmail.com john.eo@rackspace.com
-john.griffith8@gmail.com john.griffith@solidfire.com
-john.griffith@solidfire.com john.griffith@solidfire.com
-josh@jk0.org josh.kearney@pistoncloud.com
-josh.kearney@rackspace.com josh@jk0.org
-josh.kearney@rackspace.com josh.kearney@pistoncloud.com
-joshua.mckenty@nasa.gov jmckenty@gmail.com
-jpipes@serialcoder jaypipes@gmail.com
-jpipes@uberbox.gateway.2wire.net jaypipes@gmail.com
-jsuh@bespin jsuh@isi.edu
-jtran@attinteractive.com jhtran@att.com
-julien.danjou@enovance.com julien@danjou.info
-justin@fathomdb.com justin@fathomdb.com
-justinsb@justinsb-desktop justin@fathomdb.com
-kapil.foss@gmail.com kapil.foss@gmail.com
-ken.pepple@rabbityard.com ken.pepple@gmail.com
-ke.wu@nebula.com ke.wu@ibeca.me
-khaled.hussein@gmail.com khaled.hussein@rackspace.com
-Knouff philip.knouff@mailtrust.com
-Kölker jason@koelker.net
-kshileev@griddynamics.com kshileev@gmail.com
-laner@controller rlane@wikimedia.org
-letterj@racklabs.com letterj@gmail.com
-liem.m.nguyen@gmail.com liem_m_nguyen@hp.com
-liem.m.nguyen@hp.com liem_m_nguyen@hp.com
-Lopez aloga@ifca.unican.es
-lorin@isi.edu lorin@nimbisservices.com
-lrqrun@gmail.com lrqrun@gmail.com
-lzyeval@gmail.com zhongyue.nah@intel.com
-marcelo.martins@rackspace.com btorch@gmail.com
-masumotok@nttdata.co.jp masumotok@nttdata.co.jp
-masumoto masumotok@nttdata.co.jp
-matt.dietz@rackspace.com matt.dietz@rackspace.com
-matthew.dietz@gmail.com matt.dietz@rackspace.com
-matthewdietz@Matthew-Dietzs-MacBook-Pro.local matt.dietz@rackspace.com
-McConnell bmcconne@rackspace.com
-mdietz@openstack matt.dietz@rackspace.com
-mgius7096@gmail.com launchpad@markgius.com
-michael.barton@rackspace.com mike@weirdlooking.com
-michael.still@canonical.com mikal@stillhq.com
-mike-launchpad@weirdlooking.com mike@weirdlooking.com
-Moore joelbm24@gmail.com
-mordred@hudson mordred@inaugust.com
-nati.ueno@gmail.com ueno.nachi@lab.ntt.co.jp
-naveed.massjouni@rackspace.com naveedm9@gmail.com
-nelson@nelson-laptop russ@crynwr.com
-nirmal.ranganathan@rackspace.com rnirmal@gmail.com
-nirmal.ranganathan@rackspace.coom rnirmal@gmail.com
-nova@u4 ueno.nachi@lab.ntt.co.jp
-nsokolov@griddynamics.net nsokolov@griddynamics.com
-openstack@lab.ntt.co.jp ueno.nachi@lab.ntt.co.jp
-paul@openstack.org paul@openstack.org
-paul@substation9.com paul@openstack.org
-paul.voccio@rackspace.com paul@openstack.org
-pvoccio@castor.local paul@openstack.org
-ramana@venus.lekha.org rjuvvadi@hcl.com
-rclark@chat-blanc rick@openstack.org
-renuka.apte@citrix.com renuka.apte@citrix.com
-rick.harris@rackspace.com rconradharris@gmail.com
-rick@quasar.racklabs.com rconradharris@gmail.com
-root@bsirish.(none) sirish.bitra@gmail.com
-root@debian.ohthree.com amesserl@rackspace.com
-root@mirror.nasanebula.net vishvananda@gmail.com
-root@openstack2-api masumotok@nttdata.co.jp
-root@tonbuntu sleepsonthefloor@gmail.com
-root@ubuntu vishvananda@gmail.com
-rrjuvvadi@gmail.com rjuvvadi@hcl.com
-salv.orlando@gmail.com salvatore.orlando@eu.citrix.com
-sandy@sandywalsh.com sandy@darksecretsoftware.com
-sandy@sandywalsh.com sandy.walsh@rackspace.com
-sandy.walsh@rackspace.com sandy@darksecretsoftware.com
-sandy.walsh@rackspace.com sandy.walsh@rackspace.com
-sateesh.chodapuneedi@citrix.com sateesh.chodapuneedi@citrix.com
-SB justin@fathomdb.com
-sirish.bitra@gmail.com sirish.bitra@gmail.com
-sleepsonthefloor@gmail.com sleepsonthefloor@gmail.com
-Smith code@term.ie
-Sokolov nsokolov@griddynamics.com
-Somya asomya@cisco.com
-soren.hansen@rackspace.com soren@linux2go.dk
-soren@linux2go.dk soren.hansen@rackspace.com
-soren@openstack.org soren.hansen@rackspace.com
-sorhanse@cisco.com sorenhansen@rackspace.com
-sorlando@nicira.com salvatore.orlando@eu.citrix.com
-spam@andcheese.org sam@swiftstack.com
-superstack@superstack.org justin@fathomdb.com
-termie@preciousroy.local code@term.ie
-thuleau@gmail.com edouard1.thuleau@orange.com
-thuleau@gmail.com edouard.thuleau@orange.com
-tim.simpson4@gmail.com tim.simpson@rackspace.com
-todd@lapex todd@ansolabs.com
-todd@rubidine.com todd@ansolabs.com
-todd@rubidine.com xtoddx@gmail.com
-tpatil@vertex.co.in tushar.vitthal.patil@gmail.com
-Tran jtran@attinteractive.com
-treyemorris@gmail.com trey.morris@rackspace.com
-ttcl@mac.com troy.toman@rackspace.com
-Ueno ueno.nachi@lab.ntt.co.jp
-vishvananda@yahoo.com vishvananda@gmail.com
-vito.ordaz@gmail.com victor.rodionov@nexenta.com
-wenjianhn@gmail.com jian.wen@canonical.com
-will.wolf@rackspace.com throughnothing@gmail.com
-wwkeyboard@gmail.com aaron.lee@rackspace.com
-xchu@redhat.com xychu2008@gmail.com
-xtoddx@gmail.com todd@ansolabs.com
-xyj.asmy@gmail.com xyj.asmy@gmail.com
-yorik@ytaraday yorik.sar@gmail.com
-YS vivek.ys@gmail.com
-z-github@brim.net gholt@rackspace.com
-ziad.sawalha@rackspace.com github@highbridgellc.com
-z-launchpad@brim.net gholt@rackspace.com
-derek.morton25@gmail.com derek@networkwhisperer.com
-bartosz.gorski@ntti3.com bartosz.gorski@nttmcl.com
-launchpad@chmouel.com chmouel@chmouel.com
-launchpad@chmouel.com chmouel@enovance.com
-launchpad@chmouel.com chmouel@openstack.org
-imsplitbit@gmail.com dsalinas@rackspace.com
-clint@fewbar.com clint.byrum@hp.com
-clint@fewbar.com clint@ubuntu.com
-sbaker@redhat.com steve@stevebaker.org
-asalkeld@redhat.com angus@salkeld.id.au
-evgeniy@afonichev.com eafonichev@mirantis.com
-smoser@ubuntu.com scott.moser@canonical.com
-smoser@ubuntu.com smoser@brickies.net
-smoser@ubuntu.com smoser@canonical.com
-smoser@ubuntu.com ssmoser2@gmail.com
-jason@koelker.net jkoelker@rackspace.com
-john.garbutt@rackspace.com john@johngarbutt.com
-zhongyue.nah@intel.com lzyeval@gmail.com
-jiajun@unitedstack.com iamljj@gmail.com
-christophe.sauthier@ubuntu.com christophe.sauthier@gmail.com
-christophe.sauthier@ubuntu.com christophe@sauthier.com
-christophe.sauthier@objectif-libre.com christophe@sauthier.com
-aababilov@griddynamics.com ilovegnulinux@gmail.com
-yportnova@griddynamics.com yportnov@yahoo-inc.com
-mkislins@yahoo-inc.com mkislinska@griddynamics.com
-ryan.moore@hp.com rmoore08@gmail.com
-starodubcevna@gmail.com nstarodubtsev@mirantis.com
-lakhinder.walia@hds.com lakhindr@hotmail.com
-kanzhe@gmail.com kanzhe.jiang@bigswitch.com
-anita.kuno@enovance.com akuno@lavabit.com
-me@frostman.ru slukjanov@mirantis.com
-alexei.kornienko@gmail.com akornienko@mirantis.com
-nicolas@barcet.com nick.barcet@canonical.com
-nicolas@barcet.com nick@enovance.com
-nicolas@barcet.com nijaba@ubuntu.com
-graham.binns@canonical.com gmb@canonical.com
-graham.binns@canonical.com gmb@grahambinns.com
-graham.binns@canonical.com graham.binns@gmail.com
-graham.binns@canonical.com graham@canonical.com
-graham.binns@canonical.com graham@grahambinns.com
-emilien.macchi@stackops.com emilien.macchi@enovance.com
-emilien.macchi@stackops.com emilien@enovance.com
-swann.croiset@bull.net swann@oopss.org
-soulascedric@gmail.com cedric.soulas@cloudwatt.com
-simon.pasquier@bull.net pasquier.simon+launchpad@gmail.com
-simon.pasquier@bull.net pasquier.simon@gmail.com
-bogorodskiy@gmail.com novel@FreeBSD.org
-bogorodskiy@gmail.com rbogorodskiy@mirantis.com
-svilgelm@mirantis.com sergey.vilgelm@gmail.com
-robert.myers@rackspace.com robert_myers@earthlink.net
-raymond_pekowski@dell.com pekowski@gmail.com
-agorodnev@mirantis.com a.gorodnev@gmail.com
-rprikhodchenko@mirantis.com me@romcheg.me
diff --git a/etc/email-company b/etc/email-company
deleted file mode 100644
index aa512d59e..000000000
--- a/etc/email-company
+++ /dev/null
@@ -1,17 +0,0 @@
-# user@domain employer
-anotherjesse@gmail.com Nebula
-bcwaldon@gmail.com Nebula
-code@term.ie Nebula
-dprince@redhat.com Red Hat
-github@anarkystic.com Nebula
-jake@ansolabs.com Nebula
-jaypipes@gmail.com AT&T
-jeblair@hp.com HP
-lzyeval@gmail.com Intel
-me@not.mn SwiftStack
-mordred@inaugust.com HP
-sleepsonthefloor@gmail.com Nebula
-soren@linux2go.dk Cisco
-vishvananda@gmail.com Nebula
-dtroyer@gmail.com Nebula
-
diff --git a/etc/launchpad-company b/etc/launchpad-company
deleted file mode 100644
index 809cd396d..000000000
--- a/etc/launchpad-company
+++ /dev/null
@@ -1,36 +0,0 @@
-tatyana-leontovich Grid Dynamics
-vkhomenko Grid Dynamics
-cthiel-suse DE Telekom
-yorik-sar Mirantis
-gelbuhos Mirantis
-aababilov Grid Dynamics
-alexpilotti Cloudbase Solutions
-devananda HP
-heckj Nebula
-matt-sherborne Rackspace
-michael-ogorman Cisco Systems
-boris-42 Mirantis
-boris-42 *independent < 2013-04-10
-victor-r-howard Comcast
-amitry Comcast
-scollins Comcast
-w-emailme Comcast
-jasondunsmore Rackspace
-kannan Rightscale
-bob-melander Cisco Systems
-gabriel-hurley Nebula
-mathrock National Security Agency
-yosshy NEC
-johngarbutt Rackspace
-johngarbutt Citrix < 2013-02-01
-jean-baptiste-ransy Alyseo
-darren-birkett Rackspace
-lucasagomes Red Hat
-nobodycam HP
-cboylan HP
-dmllr SUSE
-therve HP
-hughsaunders Rackspace
-bruno-semperlotti Dassault Systèmes
-james-slagle Red Hat
-openstack *robots
\ No newline at end of file
diff --git a/etc/launchpad-ids b/etc/launchpad-ids
deleted file mode 100644
index f1a782102..000000000
--- a/etc/launchpad-ids
+++ /dev/null
@@ -1,1128 +0,0 @@
-aababilov aababilov@griddynamics.com Alessio Ababilov
-aaron-lee aaron.lee@rackspace.com Aaron Lee
-andrewbogott abogott@wikimedia.org Andrew Bogott
-abrindeyev abrindeyev@griddynamics.com Andrey Brindeyev
-academicgareth academicgareth@gmail.com Kun Huang
-littleidea acs@parvuscaptus.com Andrew Clay Shafer
-adri2000 acunin@linagora.com Adrien Cunin
-adalbas adalbas@linux.vnet.ibm.com Adalberto Medeiros
-gandelman-a adam.gandelman@canonical.com Adam Gandelman
-gandelman-a adamg@canonical.com Adam Gandelman
-adjohn adjohn@gmail.com Adam Johnson
-jake-hyperboledesign admin@jakedahn.com jakedahn
-adriansmith adrian_f_smith@dell.com Adrian Smith
-afazekas afazekas@redhat.com Attila Fazekas
-ahmad-hassan-q ahmad.hassan@hp.com Ahmad Hassan
-alexhandle ah@mynet.at Alex Handle
-yosshy akirayoshiyama@gmail.com Akira Yoshiyama
-akuno akuno@lavabit.com Anita Kuno
-alatynskaya alatynskaya@mirantis.com Anastasia Latynskaya
-alexyang alex890714@gmail.com Alex Yang
-alex-meade alex.meade@rackspace.com Alex Meade
-aloga aloga@ifca.unican.es Alvaro Lopez
-antonym amesserl@rackspace.com Antony Messerli
-armando-migliaccio amigliaccio@internap.com Armando Migliaccio
-andrea-rosa-m andrea.rosa@hp.com Andrea Rosa
-aglenyoung andrew.glen-young@canonical.com Andrew Glen-Young
-ajames andrew.james@hp.com Andrew James
-alaski andrew.laski@rackspace.com Andrew Laski
-linuxjedi andrew@linuxjedi.co.uk Andrew Hutchings
-andrew-melton andrew.melton@rackspace.com Andrew Melton
-andrewsben andrewsben@gmail.com andrewsben
-andrewsmedina andrewsmedina@gmail.com Andrews Medina
-andrew-tranquada andrew.tranquada@rackspace.com Andrew Tranquada
-andycjw andycjw@gmail.com Andy Chong
-andrew-mccrae andy.mccrae@gmail.com Andy McCrae
-andy-southgate andy.southgate@citrix.com Andy Southgate
-annegentle anne.gentle@rackspace.com Anne Gentle
-annegentle anne@openstack.org Anne Gentle
-anotherjesse anotherjesse@gmail.com Jesse Andrews
-ivoks ante.karamatic@canonical.com Ante Karamatić
-apevec apevec@redhat.com Alan Pevec
-alexpilotti ap@pilotti.it Alessandro Pilotti
-arathi-darshanam arathi_darshanam@persistent.co.in Arathi
-armando-migliaccio armamig@gmail.com Armando Migliaccio
-arosen arosen@nicira.com Aaron Rosen
-asakhnov asakhnov@mirantis.com Alexander Sakhnov
-asbjorn-sannes asbjorn.sannes@interhost.no Asbjørn Sannes
-asomya asomya@cisco.com Arvind Somya
-adam.spiers aspiers@suse.com Adam Spiers
-avinash-prasad avinash.prasad@nttdata.com Avinash Prasad
-avishayb avishayb@radware.com Avishay Balderman
-avishay-il avishay@il.ibm.com Avishay Traeger
-ayoung ayoung@redhat.com Adam Young
-baoli baoli@cisco.com Baodong (Robert) Li
-bao-mingyan bao.mingyan@hp.com Mingyan Bao
-briancline bcline@softlayer.com Brian Cline
-bcwaldon bcwaldon@gmail.com Brian Waldon
-belliott bdelliott@gmail.com Brian Elliott
-beagles beagles@redhat.com Brent Eagles
-mcgrue ben@pistoncloud.com Ben McGraw
-reynolds.chin benzwt@gmail.com Reynolds Chin
-berendt berendt@b1-systems.de Christian Berendt
-berrange berrange@redhat.com Daniel Berrange
-bfilippov bfilippov@griddynamics.com Boris Filippov
-bfschott bfschott@gmail.com Brian Schott
-bhuvan bhuvan@apache.org Bhuvaneswaran A
-bilalakhtar bilalakhtar@ubuntu.com Bilal Akhtar
-y-yamagata bi.yamagata@gmail.com You Yamagata
-bkjones bkjones@gmail.com jonesy
-blk-u bknudson@us.ibm.com Brant Knudson
-b-maguire b_maguire@dell.com Brendan Maguire
-bmcconne bmcconne@rackspace.com Brad McConnell
-bnemec bnemec@us.ibm.com Ben Nemec
-boris-42 boris@pavlovic.me Boris Pavlovic
-ivan-zhu bozhu@linux.vnet.ibm.com Ivan-Zhu
-belliott brian.elliott@rackspace.com Brian Elliott
-brian-haley brian.haley@hp.com Brian Haley
-brian-lamar brian.lamar@gmail.com Brian Lamar
-blamar brian.lamar@rackspace.com Brian Lamar
-brian-rosmaita brian.rosmaita@rackspace.com Brian Rosmaita
-yuanotes brooklyn.chen@canonical.com Brooklyn
-bswartz bswartz@netapp.com Ben Swartzlander
-btopol btopol@us.ibm.com Brad Topol
-burt-t burt@fnal.gov Burt Holzman
-ubuntubmw bwiedemann@suse.de Bernhard M. Wiedemann
-ctennis caleb.tennis@gmail.com Caleb Tennis
-carlos-marin-d carlos.marin@rackspace.com Carlos Marin
-cbehrens cbehrens@codestud.com Chris Behrens
-cfb-n cfb@metacloud.com Chet Burgess
-cgoncalves cgoncalves@av.it.pt Carlos Gonçalves
-changbl changbin.liu@gmail.com Changbin Liu
-chemikadze chemikadze@gmail.com Nikolay Sokolov
-chen-li chen.li@intel.com li,chen
-chiradeep chiradeep@cloud.com Chiradeep Vittal
-chmouel chmouel@chmouel.com Chmouel Boudjnah
-chmouel chmouel@enovance.com Chmouel Boudjnah
-chnm-kulkarni chnm.kulkarni@gmail.com Chinmay Kulkarni
-chris-allnutt chris.allnutt@rackspace.com Chris Allnutt
-cbehrens chris.behrens@rackspace.com Chris Behrens
-chris-fattarsi chris.fattarsi@pistoncloud.com Chris Fattarsi
-zulcss chuck.short@canonical.com Chuck Short
-chungg chungg@ca.ibm.com gordon chung
-dricco cian@hp.com Cian O'Driscoll
-c-kassen c.kassen@telekom.de Christoph Kassen
-cboylan clark.boylan@gmail.com Clark Boylan
-clay-gerrard clay.gerrard@gmail.com clayg
-clay-gerrard clay.gerrard@rackspace.com clayg
-cmsj cmsj@tenshu.net Chris Jones
-termie code@term.ie termie
-cody-somerville cody.somerville@hp.com Cody A.W. Somerville
-colin-nicholson colin.nicholson@iomart.com Colin Nicholson
-cweidenkeller conrad.weidenkeller@rackspace.com Conrad Weidenkeller
-constantine-q constantine@litestack.com Constantine Peresypkin
-corcornelisse cor@hyves.nl Cor Cornelisse
-corvus corvus@gnu.org James E. Blair
-corvus corvus@inaugust.com James E. Blair
-corystone corystone@gmail.com Cory Stone
-corywright corywright@gmail.com Cory Wright
-corywright cory.wright@rackspace.com Cory Wright
-cp16net cp16net@gmail.com cp16net
-cperz cperz@gmx.net HeinMueck
-crobinso crobinso@redhat.com Cole Robinson
-cthiel-suse c.thiel@telekom.de Christoph Thiel
-cthier cthier@gmail.com Chuck Thier
-cyeoh-0 cyeoh@au1.ibm.com Christopher Yeoh
-daeskp dae@velatum.com Dae S. Kim
-daisy-ycguo daisy.ycguo@gmail.com Ying Chun Guo
-dhersam dan.hersam@hp.com Dan Hersam
-dvaleriani daniele@dvaleriani.net Daniele Valeriani
-danms danms@us.ibm.com Dan Smith
-danwent dan@nicira.com dan wendlandt
-danwent danwent@gmail.com dan wendlandt
-darrellb darrell@swiftstack.com Darrell Bishop
-dims-v davanum@gmail.com Davanum Srinivas (DIMS)
-dave-mcnally dave.mcnally@hp.com David McNally
-davewalker dave.walker@canonical.com Dave Walker
-davewalker davewalker@ubuntu.com Dave Walker
-david-besen david.besen@hp.com David Besen
-david-thingbag david.cramer@rackspace.com David Cramer
-david-goetz david.goetz@rackspace.com David Goetz
-david-hadas david.hadas@gmail.com David Hadas
-david-hadas davidh@il.ibm.com David Hadas
-david-kranz david.kranz@qrclab.com David Kranz
-david-lyle david.lyle@hp.com David Lyle
-david-perez5 david.perez5@hp.com David Subiros Perez
-alekibango david.pravec@danix.org David Pravec
-david-wittman david.wittman@rackspace.com David Wittman
-dazworrall daz@dwuk.net Darren Worrall
-dbelova dbelova@mirantis.com Dina Belova
-dce3062 dce3062@gmail.com Syed Armani
-debo dedutta@cisco.com Debo~ Dutta
-deepak.garg deepak.garg@citrix.com Deepak Garg
-deepak.garg deepakgarg.iitg@gmail.com Deepak Garg
-endeepak deepak.n@thoughtworks.com Deepak N
-deevi-rani deevi_rani@persistent.co.in D LALITHA RANI
-dekehn dekehn@gmail.com dkehn
-derekh derekh@redhat.com Derek Higgins
-y-derek derek@umiacs.umd.edu Derek Yarnell
-devananda devananda.vdv@gmail.com Devananda van der Veen
-devdeep-singh devdeep.singh@citrix.com Devdeep Singh
-devcamcar devin.carlen@gmail.com Devin Carlen
-scott-devoid devoid@anl.gov Scott Devoid
-egallen dev@zinux.com Erwan Gallen
-dheidler dheidler@suse.de Dominik Heidler
-dims-v dims@linux.vnet.ibm.com Davanum Srinivas
-diopter diopter@gmail.com Evan Callicoat
-dmllr dirk@dmllr.de Dirk Mueller
-divakar-padiyar-nandavar divakar.padiyar-nandavar@hp.com Divakar Padiyar Nandavar
-dkang dkang@isi.edu David Kang
-dlapsley dlapsley@nicira.com David Lapsley
-dmodium dmodium@isi.edu Devendra
-dolph dolph.mathews@gmail.com Dolph Mathews
-dolph dolph.mathews@rackspace.com Dolph Mathews
-donagh-mccabe donagh.mccabe@hp.com Donagh McCabe
-n0ano-ddd donald.d.dugger@intel.com Donald Dugger
-donal-lafferty donal.lafferty@citrix.com Donal Lafferty
-dougdoan dougdoan@gmail.com Doug
-doug-hellmann doug.hellmann@dreamhost.com Doug Hellmann
-doug-hellmann doug.hellmann@gmail.com Doug Hellmann
-dweimer dougw@sdsc.edu Doug Weimer
-dperaza dperaza@linux.vnet.ibm.com David Peraza
-dan-prince dprince@redhat.com Dan Prince
-dradez dradez@redhat.com Dan Radez
-dragosm dragosm@hp.com Dragos Manolescu
-dripton dripton@redhat.com David Ripton
-dscannell dscannell@gridcentric.com David Scannell
-dtroyer dtroyer@gmail.com Dean Troyer
-oubiwann duncan@dreamhost.com Duncan McGreggor
-duncan-thomas duncan.thomas@gmail.com Duncan Thomas
-dweimer dweimer@gmail.com Doug Weimer
-dzhou121 dzhou121@gmail.com Dongdong Zhou
-e0ne e0ne@e0ne.info Ivan Kolodyazhny
-eamonn-otoole eamonn.otoole@hp.com Eamonn O'Toole
-ed-bak2 ed.bak2@hp.com Ed Bak
-eddie-sheffield eddie.sheffield@rackspace.com Eddie Sheffield
-ed-leafe ed@leafe.com Ed Leafe
-ethuleau edouard.thuleau@cloudwatt.com Édouard Thuleau
-eglynn eglynn@redhat.com Eoghan Glynn
-eharney eharney@gmail.com Eric Harney
-eharney eharney@redhat.com Eric Harney
-ekirpichov ekirpichov@gmail.com Eugene Kirpichov
-reldan eldr@ya.ru Eldar Nugaev
-emagana emagana@gmail.com Edgar Magana
-rcc emaildericky@gmail.com Ricardo Carrillo Cruz
-emmasteimann emmasteimann@gmail.com Emma Grace Steimann
-enikanorov enikanorov@mirantis.com Eugene Nikanorov
-epatro epatro@gmail.com Eduardo Patrocinio
-ewindisch eric@cloudscaling.com Eric Windisch
-ericpeterson-l ericpeterson@hp.com Eric Peterson
-erikzaadi erikz@il.ibm.com Erik Zaadi
-esker esker@netapp.com Robert Esker
-everett-toews everett.toews@gmail.com Everett Toews
-ewanmellor ewan.mellor@citrix.com Ewan Mellor
-kaiwei-fan fank@vmware.com Kaiwei Fan
-fifieldt fifieldt@unimelb.edu.au Tom Fifield
-flaper87 flaper87@gmail.com Flavio Percoco Premoli
-flaviamissi flaviamissi@gmail.com flaviamissi
-fghaas florian@hastexo.com Florian Haas
-pandemicsyn florian.hines@gmail.com Florian Hines
-flwang flwang@cn.ibm.com Fei Long Wang
-flaper87 fpercoco@redhat.com Flavio Percoco Premoli
-francois-charlier francois.charlier@enovance.com François Charlier
-flepied frederic.lepied@enovance.com Frederic Lepied
-freedomhui freedomhui@gmail.com Hui Cheng
-freyes freyes@tty.cl Felipe Reyes
-franciscosouza f@souza.cc Francisco Souza
-fujita-tomonori-lab fujita.tomonori@lab.ntt.co.jp Tomo
-fungi fungi@yuggoth.org Jeremy Stanley
-westmaas gabe.westmaas@rackspace.com Gabe Westmaas
-gabriel-hurley gabriel@strikeawe.com Gabriel Hurley
-geekinutah geekinutah@gmail.com Michael H Wilson
-gessau gessau@cisco.com Henry Gessau
-ghe.rivero ghe@debian.org Ghe Rivero
-ghe.rivero ghe.rivero@gmail.com Ghe Rivero
-termie github@anarkystic.com termie
-garyk gkotton@redhat.com Gary Kotton
-glikson glikson@il.ibm.com Alex Glikson
-gongysh gongysh@cn.ibm.com yong sheng gong
-gongysh gongysh@linux.vnet.ibm.com yong sheng gong
-gerardo8a gporras@yahoo-inc.com Gerardo Porras
-greglange greglange+launchpad@gmail.com Greg Lange
-salgado gsalgado@gmail.com Guilherme Salgado
-gtt116 gtt116@126.com TianTian Gao
-guang-yee guang.yee@hp.com Guang Yee
-306455645-b gudujianjsk@gmail.com ShichaoXu
-daisy-ycguo guoyingc@cn.ibm.com Ying Chun Guo
-hanlind hanlind@kth.se Hans Lindgren
-harlowja harlowja@yahoo-inc.com Joshua Harlow
-hayashi hayashi@nttmcl.com Toshiyuki Hayashi
-heckj heckj@mac.com Joseph Heck
-henry-nash henryn@linux.vnet.ibm.com Henry Nash
-heut2008 heut2008@gmail.com Yaguang Tang
-derekh higginsd@gmail.com Derek Higgins
-hillad hillad@gmail.com Andy Hill
-hiroaki-kawai hiroaki.kawai@gmail.com Hiroaki Kawai
-hisaki hisaki.ohara@intel.com Hisaki Ohara
-hodong-hwang hodong.hwang@kt.com Hodong Hwang
-hovyakov hovyakov@gmail.com Dmitry
-hudayou hudayou@hotmail.com Hengqing Hu
-hvolkmer h.volkmer@cloudbau.de Hendrik Volkmer
-hzguanqiang hzguanqiang@corp.netease.com QiangGuan
-hzwangpan hzwangpan@corp.netease.com wangpan
-hzzhoushaoyu hzzhoushaoyu@corp.netease.com Zhou ShaoYu
-ljjjustin iamljj@gmail.com Jiajun Liu
-mapleoin iartarisi@suse.cz Ionuț Arțăriși
-ijw-ubuntu iawells@cisco.com Ian Wells
-iccha-sethi iccha.sethi@rackspace.com Iccha Sethi
-igawa igawa@mxs.nes.nec.co.jp Masayuki Igawa
-iida-koji iida.koji@lab.ntt.co.jp Koji Iida
-e0ne ikolodyazhny@mirantis.com Ivan Kolodyazhny
-ilyaalekseyev ilyaalekseyev@acm.org Ilya Alekseyev
-cschwede info@cschwede.de Christian Schwede
-irsxyp irsxyp@gmail.com irsxyp
-iryoung iryoung@gmail.com Iryoung Jeong
-shakhat ishakhat@mirantis.com Ilya Shakhat
-ishii-hisaharu ishii@nttmcl.com Hisaharu Ishii
-itoumsn itoumsn@nttdata.co.jp Masanori Itoh
-ivoks ivoks@ubuntu.com Ante Karamatić
-izbyshev izbyshev@ispras.ru Alexey Izbyshev
-jajohnson jajohnson@softlayer.com Jason Johnson
-jakedahn jake@markupisart.com Jake Dahn
-jakez jake@ponyloaf.com Jake Zukowski
-james-meredith james.meredith@rackspace.com James Meredith
-james-morgan james.morgan@rackspace.com James Morgan
-james-page james.page@ubuntu.com James Page
-janisg janis.gengeris@gmail.com Janis Gengeris
-jcannava jason@cannavale.com Jason Cannavale
-jcannava jason.cannavale@rackspace.com Jason Cannavale
-jason-koelker jason@koelker.net Jason Kölker
-jaypipes jaypipes@gmail.com Jay Pipes
-jbrendel jbrendel@cisco.com Juergen Brendel
-jbresnah jbresnah@redhat.com John Bresnahan
-jbryce jbryce@jbryce.com Jonathan Bryce
-jemartin jcmartin@ebaysf.com JC Martin
-jdsn jdsn@suse.de J. Daniel Schmidt
-jean-baptiste-ransy jean-baptiste.ransy@alyseo.com Jean-Baptiste Ransy
-jean-marc-saffroy jean.marc.saffroy@scality.com Jean-Marc Saffroy
-jeffjapan jeffjapan@gmail.com Jeffrey Wilcox
-fzylogic jeremy@dreamhost.com Jeremy Hanmer
-jesse-pretorius jesse.pretorius@gmail.com Jesse Pretorius
-jfehlig jfehlig@suse.com Jim Fehlig
-jhenner jhenner@redhat.com Jaroslav Henner
-jtran jhtran@att.com John Tran
-jiangwt100 jiangwt100@gmail.com Jim Jiang
-jiangy jiangyong.hn@gmail.com Jiang Yong
-wenjianhn jian.wen@canonical.com Jian Wen
-jian-zhang jian.zhang@intel.com Jian Zhang
-jimmy-sigint jimmy@sigint.se Jimmy Bergman
-jking-6 jking@internap.com James King
-joshua-mckenty jmckenty@gmail.com Joshua McKenty
-joelbm24 joelbm24@gmail.com joelbm24
-jsavak joe.savak@rackspace.com Joe Savak
-joe-arnold joe@swiftstack.com Joe Arnold
-joe-topjian-v joe@topjian.net Joe T
-jogo jogo@cloudscaling.com Joe Gordon
-johannes.erdfelt johannes@erdfelt.com Johannes Erdfelt
-johannes.erdfelt johannes.erdfelt@rackspace.com Johannes Erdfelt
-retr0h john@dewey.ws John Dewey
-john-eo john.eo@rackspace.com John Eo
-johngarbutt john.garbutt@rackspace.com John Garbutt
-john-griffith john.griffith8@gmail.com John Griffith
-john-griffith john.griffith@solidfire.com John Griffith
-john-herndon john.herndon@hp.com John Herndon
-john-m-kennedy john.m.kennedy@intel.com John Kennedy
-john-postlethwait john.postlethwait@nebula.com John Postlethwait
-jokcylou jokcylou@gmail.com loutc
-jola-mirecka jola.mirecka@hp.com Jola Mirecka
-jonathan-abdiel jonathan.abdiel@gmail.com Jonathan Gonzalez V.
-cleverdevil jonathan@cleverdevil.org Jonathan LaCour
-jordanrinke jordan@openstack.org Jordan Rinke
-jorgew jorge.williams@rackspace.com Jorge L. Williams
-jose-castro-leon jose.castro.leon@cern.ch Jose Castro Leon
-jdurgin joshd@hq.newdream.net Josh Durgin
-jdurgin josh.durgin@dreamhost.com Josh Durgin
-jdurgin josh.durgin@inktank.com Josh Durgin
-jk0 josh@jk0.org Josh Kearney
-jkleinpeter josh@kleinpeter.org Josh Kleinpeter
-joshua-mckenty joshua.mckenty@nasa.gov Joshua McKenty
-joshua-mckenty joshua@pistoncloud.com Joshua McKenty
-jpichon jpichon@redhat.com Julie Pichon
-jshepher jshepher@rackspace.com Justin Shepherd
-jjmartinez juan@memset.com Juan J. Martínez
-juergh juerg.haefliger@hp.com Juerg Haefliger
-ncode juliano.martinez@locaweb.com.br Juliano Martinez
-jdanjou julien.danjou@enovance.com Julien Danjou
-jdanjou julien@danjou.info Julien Danjou
-jpichon julie.pichon@gmail.com Julie Pichon
-justin-fathomdb justin@fathomdb.com justinsb
-justin-hammond justin.hammond@rackspace.com Justin Hammond
-justin-lund justin.lund@dreamhost.com Justin Lund
-hazmat kapil.foss@gmail.com Kapil Thangavelu
-kashivreddy kashi.reddy@rackspace.com Kashi Reddy
-kaushikc kaushik.chand@gmail.com Kaushik Chandrashekar
-kc-wang kc.wang@bigswitch.com Kuang-Ching Wang
-kelsey-tripp kelsey.tripp@nebula.com Kelsey Tripp
-ken-pepple ken.pepple@gmail.com Ken Pepple
-ken-pepple ken@pepple.info Ken Pepple
-ken-pepple ken.pepple@rabbityard.com Ken Pepple
-klmitch kevin.mitchell@rackspace.com Kevin L. Mitchell
-ke-wu ke.wu@ibeca.me Ke Wu
-khussein khaled.hussein@gmail.com Khaled Hussein
-khussein khaled.hussein@rackspace.com Khaled Hussein
-kiall kiall@managedit.ie Kiall Mac Innes
-kspear kispear@gmail.com Kieran Spear
-mestery kmestery@cisco.com Kyle Mestery
-kost-isi kost@isi.edu Kost
-kravchenko-pavel kpavel@il.ibm.com Kravchenko Pavel
-krtaylor krtaylor@us.ibm.com Kurt Taylor
-krt krt@yahoo-inc.com Ken Thomas
-kshileev kshileev@gmail.com Kirill Shileev
-kurt-f-martin kurt.f.martin@hp.com Kurt Martin
-kylin7-sg kylin7.sg@gmail.com Kylin CG
-lapgoon lapgoon@gmail.com LiangAiping
-lars-gellrich lars.gellrich@hp.com Lars Gellrich
-markgius launchpad@markgius.com Mark Gius
-ladquin laura.adq@gmail.com Laura Alves
-laurence-miao laurence.miao@gmail.com Laurence Miao
-lauria lauria@us.ibm.com Giampaolo Lauria
-lcui lcui@vmware.com Leon
-ldbragst ldbragst@us.ibm.com Lance Bragstad
-leanderbb leanderbb@gmail.com Leander Beernaert
-learnerever learnerever@gmail.com TengLi
-leekelby leekelby@gmail.com leekelby
-lemonlatte lemonlatte@gmail.com Jim Yeh
-letterj letterj@gmail.com Jay Payne
-letterj letterj@racklabs.com Jay Payne
-liam-kelleher liam.kelleher@hp.com Liam Kelleher
-lianhao-lu lianhao.lu@intel.com Lianhao Lu
-liemmn liem.m.nguyen@gmail.com Liem Nguyen
-liemmn liem_m_nguyen@hp.com Liem Nguyen
-liemmn liem.m.nguyen@hp.com Liem Nguyen
-likitha-shetty likitha.shetty@citrix.com Likitha Shetty
-lin-hua-cheng lin-hua.cheng@hp.com Lin Hua Cheng
-liquid-x liquid@kt.com Eohyung Lee
-litong01 litong01@us.ibm.com Tong Li
-long-wang long.wang@bj.cs2c.com.cn wanglong
-lorinh lorin@isi.edu Lorin Hochstein
-lorinh lorin@nimbisservices.com Lorin Hochstein
-lrqrun lrqrun@gmail.com lrqrun
-lucasagomes lucasagomes@gmail.com Lucas Alvares Gomes
-luis-fernandez-alvarez luis.fernandez.alvarez@cern.ch Luis Fernandez
-lzy-dev lzy.dev@gmail.com Zhi Yan Liu
-madhav-puri madhav.puri@gmail.com Madhav Puri
-mail-zhang-yee mail.zhang.yee@gmail.com Yee
-rackerhacker major.hayden@rackspace.com Major Hayden
-rackerhacker major@mhtx.net Major Hayden
-malini-k-bhandaru malini.k.bhandaru@intel.com Malini Bhandaru
-mana-62-1-11 mana.62.1.11@gmail.com Mana Kaneko
-mandarvaze mandar.vaze@vertex.co.in Mandar Vaze
-btorch marcelo.martins@rackspace.com Marcelo Martins
-markmcclain mark.mcclain@dreamhost.com Mark McClain
-markmc markmc@redhat.com Mark McLoughlin
-markwash mark.washenberger@markwash.net Mark Washenberger
-gz martin.packman@canonical.com Martin Packman
-masumotok masumotok@nttdata.co.jp Kei Masumoto
-mate-lakat mate.lakat@citrix.com Mate Lakat
-mat-o mat@grove.me.uk Mat Grove
-mathieu-rohon mathieu.rohon@gmail.com mathieu rohon
-cerberus matt.dietz@rackspace.com Matt Dietz
-matthias-sigxcpu matthias@sigxcpu.org Matthias Schmitz
-matt-nycresistor matt.joyce@cloudscaling.com Matt Joyce
-mattstep mattstep@mattstep.net Matt Stephenson
-maurosr maurosr@linux.vnet.ibm.com Mauro Sergio Martins Rodrigues
-hubcap mbasnigh@rackspace.com Michael Basnight
-hubcap mbasnight@gmail.com Michael Basnight
-mdegerne mdegerne@gmail.com Mandell
-mdragon mdragon@rackspace.com Monsyne Dragon
-meizu647 meizu647@gmail.com dk647
-melwitt melwitt@yahoo-inc.com Melanie Witt
-notmyname me@not.mn John Dickinson
-mgius7096 mgius7096@gmail.com Mark Gius
-gundlach michael.gundlach@rackspace.com Michael Gundlach
-mihgen mihgen@gmail.com Mike Scherbakov
-mikalstill mikal@stillhq.com Michael Still
-redbo mike-launchpad@weirdlooking.com Mike Barton
-milner mike.milner@canonical.com Mike Milner
-novas0x2a mike@pistoncloud.com Mike Lundy
-redbo mike@weirdlooking.com Mike Barton
-mikeyp-3 mikeyp@LaHondaResearch.org Mike Pittaro
-mjfork mjfork@us.ibm.com Michael Fork
-mkkang mkkang@isi.edu Mikyung Kang
-mdrnstm m@metacloud.com Morgan Fainberg
-mnaser mnaser@vexxhost.com Mohammed Naser
-mordred mordred@inaugust.com Monty Taylor
-moreira-belmiro-email-lists moreira.belmiro.email.lists@gmail.com Belmiro Moreira
-morita-kazutaka morita.kazutaka@gmail.com Kazutaka Morita
-motokentsai motokentsai@gmail.com MotoKen
-amotoki motoki@da.jp.nec.com Akihiro Motoki
-motonobu motonobu@gmail.com Motonobu Ichimura
-locke105 mrodden@us.ibm.com Mathew Odden
-mrunge mrunge@redhat.com Matthias Runge
-matt-sherborne msherborne@gmail.com Matthew Sherborne
-msinhore msinhore@gmail.com msinhore
-mszilagyi mszilagyi@gmail.com Michael Szilagyi
-nachiappan-veerappan-nachiappan nachiappan.veerappan-nachiappan@hp.com Nachiappan
-nati-ueno nachi@nttmcl.com Nachi Ueno
-naehring naehring@b1-systems.de Andre Naehring
-mathrock nathanael.i.burton@gmail.com Nathanael Burton
-mathrock nathanael.i.burton.work@gmail.com Nathanael Burton
-rellerreller nathan.reller@jhuapl.edu Nathan Reller
-nati-ueno-s nati.ueno@gmail.com Nachi Ueno
-ironcamel naveedm9@gmail.com Naveed Massjouni
-ndipanov ndipanov@redhat.com Nikola Đipanov
-nick-craig-wood nick@craig-wood.com Nick Craig-Wood
-bartos nick@pistoncloud.com Nick Bartos
-nickshobe nickshobe@gmail.com Nicholas Shobe
-nicolas.simonds nic@metacloud.com Nicolas Simonds
-nikhil-komawar nikhil.komawar@rackspace.com nikhil komawar
-ning ning@zmanda.com ning_zhang
-niuwl586-v niuwl586@gmail.com Tony NIU
-nicholaskuechler nkuechler@gmail.com Nicholas Kuechler
-nobodycam nobodycam@gmail.com Chris Krelle
-arata776 notsu@virtualtech.jp Arata Notsu
-chemikadze nsokolov@griddynamics.com Nikolay Sokolov
-obondarev obondarev@mirantis.com Oleg Bondarev
-oldsharp oldsharp@163.com Ray Chen
-oliver-leahy-l oliver.leahy@hp.com Ollie Leahy
-njohnston onewheeldrive.net@gmail.com Neil Johnston
-oomichi oomichi@mxs.nes.nec.co.jp Ken'ichi Ohmichi
-alyseo openstack@alyseo.com Alyseo
-parthipan parthipan@hp.com Loganathan Parthipan
-pmezard patrick@mezard.eu Patrick Mezard
-pauldbourke paul-david.bourke@hp.com Paul Bourke
-paul-mcmillan paul.mcmillan@nebula.com Paul McMillan
-pksunkara pavan.sss1991@gmail.com Pavan Kumar Sunkara
-p-draigbrady pbrady@redhat.com Pádraig Brady
-pcm pcm@cisco.com Paul Michali
-p-draigbrady p@draigbrady.com Pádraig Brady
-pednape pednape@gmail.com Pedro Navarro Pérez
-pengyuwei pengyuwei@gmail.com Peng YuWei
-philip-day philip.day@hp.com Phil Day
-pjz pj@place.org Paul Jimenez
-ppyy ppyy@pubyun.com Peng Yong
-prasad-tanay prasad.tanay@gmail.com Harsh Prasad
-psedlak psedlak@redhat.com Pavel Sedlák
-pshkitin pshkitin@griddynamics.com Pavel Shkitin
-psiwczak psiwczak@mirantis.com Piotr Siwczak
-rafadurancastaneda rafadurancastaneda@gmail.com Rafael Durán Castañeda
-rkhardalian rafi@metacloud.com Rafi Khardalian
-rainya-mosher-m rainya.mosher@rackspace.com Rainya Mosher
-rajarammallya rajarammallya@gmail.com Rajaram Mallya
-ram-nalluri ram_nalluri@persistent.co.in rampradeep
-russellb rbryant@redhat.com Russell Bryant
-rconradharris rconradharris@gmail.com Rick Harris
-reese-sm reese.sm@gmail.com Stephanie Reese
-reldan reldan@oscloud.ru Eldar Nugaev
-renier-h renierm@us.ibm.com Renier Morales
-renukaapte renuka.apte@citrix.com Renuka Apte
-rhafer rhafer@suse.de Ralf Haferkamp
-rconradharris rick.harris@rackspace.com Rick Harris
-dendrobates rick@openstack.org Rick Clark
-ripal-nathuji ripal.nathuji@calxeda.com Ripal Nathuji
-rjuvvadi rjuvvadi@hcl.com Ramana Juvvadi
-rkukura rkukura@redhat.com Robert Kukura
-rlane rlane@wikimedia.org Ryan Lane
-rloo rloo@yahoo-inc.com Ruby Loo
-r-mibu r-mibu@cq.jp.nec.com Ryota Mibu
-rnirmal rnirmal@gmail.com Nirmal Ranganathan
-rohitagarwalla roagarwa@cisco.com Rohit Agarwalla
-lifeless robertc@robertcollins.net Robert Collins
-racb robie.basak@canonical.com Robie Basak
-robin-norwood robin.norwood@gmail.com Robin Norwood
-kanaderohan rohan.kanade@nttdata.com Rohan
-rohitkarajgi rohit.karajgi@nttdata.com Rohit Karajgi
-roland-hochmuth-s roland.hochmuth@hp.com Roland Hochmuth
-ronenkat ronenkat@il.ibm.com RonenKat
-ron-pedde ron@pedde.com Ron Pedde
-rpodolyaka rpodolyaka@mirantis.com Roman Podolyaka
-prykhodchenko rprikhodchenko@mirantis.com Roman Prykhodchenko
-rushiagr rushi.agr@gmail.com Rushi Agrawal
-russell russell@nimbula.com Russell Cloran
-russell-sim russell.sim@gmail.com Russell Sim
-rvaknin rvaknin@redhat.com Rami Vaknin
-9-sa sa@hydre.org Stephane ANGOT
-salvatore-orlando salv.orlando@gmail.com Salvatore Orlando
-sammiestoel sammiestoel@gmail.com Sam Stoelinga
-torgomatic sam@swiftstack.com Samuel Merritt
-sandy-sandywalsh sandy@sandywalsh.com Sandy Walsh
-sandy-walsh sandy.walsh@rackspace.com Sandy Walsh
-santhoshkumar santhom@thoughtworks.com Santhosh Kumar Muniraj
-saschpe saschpe@suse.de Sascha Peilicke
-sasimpson sasimpson@gmail.com Scott Simpson
-sateesh-chodapuneedi sateesh.chodapuneedi@citrix.com Sateesh
-sathish-nagappan sathish.nagappan@nebula.com Sathish Nagappan
-houshengbo sbhou@cn.ibm.com Vincent Hou
-sdague sdague@linux.vnet.ibm.com Sean Dague
-sdake sdake@redhat.com Steven Dake
-scollins sean@coreitpro.com Sean M. Collins
-sean-mccully sean.mccully@rackspace.com Sean McCully
-serge-maskalik serge_maskalik@yahoo.com Serge Maskalik
-shane-wang shane.wang@intel.com Shane Wang
-shardy shardy@redhat.com Steven Hardy
-shh sharis@brocade.com Shiv Haris
-shweta-ap05 shpadubi@cisco.com Shweta P
-dshrews shrewsbury.dave@gmail.com David Shrewsbury
-shrutiranade38 shrutiranade38@gmail.com Shruti Ranade
-simplylizz simplylizz@gmail.com Anton V. Yanchenko
-singn singn@netapp.com Navneet
-sirisha-devineni sirisha_devineni@persistent.co.in Sirisha Devineni
-sirish-bitra-gmail sirish.bitra@gmail.com sirish chandra bitra
-siyingchun siyingchun@sina.com Yingchun Si
-sleepsonthefloor sleepsonthefloor@gmail.com Anthony Young
-slukjanov slukjanov@mirantis.com Sergey Lukjanov
-smoser smoser@ubuntu.com Scott Moser
-snaiksat snaiksat@cisco.com Sumit Naiksatam
-sogabe sogabe@iij.ad.jp Takashi Sogabe
-soheil-h-y soheil@cs.toronto.edu Soheil Hassas Yeganeh
-somikbehera somikbehera@gmail.com Somik Behera
-somikbehera somik@nicira.com Somik Behera
-soren soren@linux2go.dk Soren Hansen
-soren soren@openstack.org Soren Hansen
-soren sorhanse@cisco.com Soren Hansen
-salvatore-orlando sorlando@nicira.com Salvatore Orlando
-sorrison sorrison@gmail.com Sam Morrison
-torgomatic spam@andcheese.org Samuel Merritt
-sshturm sshturm@mirantis.com Shturm Svetlana
-stanislaw-pitucha stanislaw.pitucha@hp.com Stanislaw Pitucha
-stef-ummon stelford@internap.com stelford
-sgran stephen.gran@guardian.co.uk Stephen Gran
-stephen-mulcahy stephen.mulcahy@hp.com stephen mulcahy
-stevemar stevemar@ca.ibm.com Steve Martinelli
-steve-stevebaker steve@stevebaker.org Steve Baker
-sthaha sthaha@redhat.com Sunil Thaha
-sthakkar sthakkar@vmware.com Sachin Thakkar
-stuart-mclaren stuart.mclaren@hp.com Stuart McLaren
-sulochan-acharya sulochan.acharya@rackspace.co.uk Sulochan Acharya
-snaiksat sumitnaiksatam@gmail.com Sumit Naiksatam
-5-suzuki suzuki@midokura.com Takaaki Suzuki
-pandemicsyn syn@ronin.io Florian Hines
-tagami-keisuke tagami.keisuke@lab.ntt.co.jp Keisuke Tagami
-tagliapietra.alessandro tagliapietra.alessandro@gmail.com Alessandro Tagliapietra
-tfukushima tfukushima@dcl.info.waseda.ac.jp Taku Fukushima
-therese-mchale therese.mchale@hp.com Therese McHale
-the-william-kelly the.william.kelly@gmail.com William Kelly
-ttx thierry@openstack.org Thierry Carrez
-thingee thingee@gmail.com Mike Perez
-thrawn01 thrawn01@gmail.com Derrick Wippler
-throughnothing throughnothing@gmail.com William Wolf
-ethuleau thuleau@gmail.com Édouard Thuleau
-timjr timjr@yahoo-inc.com Tim Daly Jr.
-tim-simpson tim.simpson@rackspace.com Tim Simpson
-tatyana-leontovich tleontov@yahoo-inc.com Tatyana Leontovich
-tmello tmello@linux.vnet.ibm.com Tiago Rodrigues de Mello
-toan-nguyen toan.nguyen@rackspace.com Toan Nguyen
-xtoddx todd@ansolabs.com Todd Willey
-tzn tomasz@napierala.org Tomasz 'Zen' Napierala
-tom-hancock tom.hancock@hp.com Tom Hancock
-tomoe tomoe@midokura.com Tomoe Sugihara
-tpot tpot@hp.com Tim Potter
-treinish treinish@linux.vnet.ibm.com Matthew Treinish
-tres tres@treshenry.net Tres Henry
-tr3buchet trey.morris@rackspace.com Trey Morris
-troy-toman troy.toman@rackspace.com Troy Toman
-truijllo truijllo@crs4.it truijllo
-tsuyuzaki-kota tsuyuzaki.kota@lab.ntt.co.jp Kota Tsuyuzaki
-ttrifonov t.trifonov@gmail.com Tihomir Trifonov
-tpatil tushar.vitthal.patil@gmail.com Tushar Patil
-tylesmit tylesmit@cisco.com Tyler Smith
-dtynan tynan@hp.com Dermot Tynan
-unicell unicell@gmail.com unicell
-usrleon usrleon@gmail.com Max Lvov
-vaddi-kiran vaddi_kiran@persistent.co.in sasikiran
-vash-vasiliyshlykov vash@vasiliyshlykov.org Vasiliy Shlykov
-vkhomenko vasiliyk@yahoo-inc.com Vasyl Khomenko
-vickymsee vickymsee@gmail.com Victoria Martínez de la Cruz
-victor-lowther victor.lowther@gmail.com vlowther
-vito-ordaz victor.rodionov@nexenta.com Victor Rodionov
-vijaya-erukala vijaya_erukala@persistent.co.in Vijaya Erukala
-vinkeshb vinkeshb@thoughtworks.com Vinkesh Banka
-vishvananda vishvananda@gmail.com Vish Ishaya
-vishvananda vishvananda@yahoo.com Vish Ishaya
-vivekys vivek.ys@gmail.com vivek.ys
-vladimir.p vladimir@zadarastorage.com Vladimir Popovski
-vuntz vuntz@suse.com Vincent Untz
-walter-boring walter.boring@hp.com Walt Boring
-wayne-walls wayne.walls@rackspace.com Wayne A. Walls
-weiyuanke123 weiyuanke123@gmail.com weiyuanke
-wenjianhn wenjianhn@gmail.com Jian Wen
-throughnothing will.wolf@rackspace.com William Wolf
-wanglong wl3617@qq.com drabbit
-wu-wenxiang wu.wenxiang@99cloud.net Wu Wenxiang
-xchenum xchenum@gmail.com Simon
-xiaoquqi xiaoquqi@gmail.com Ray
-xiaoxi-chen xiaoxi.chen@intel.com xiaoxi_chen
-xing-yang xing.yang@emc.com Xing Yang
-xtoddx xtoddx@gmail.com Todd Willey
-opencompute xuchenx@gmail.com Sean Chen
-xu-haiwei xu-haiwei@mxw.nes.nec.co.jp Haiwei Xu
-xuhj xuhj@linux.vnet.ibm.com Alex Xu
-wenhao-x xuwenhao2008@gmail.com Wenhao Xu
-xychu2008 xychu2008@gmail.com Ethan Chu
-xyj-asmy xyj.asmy@gmail.com xyj
-ywang19 yaguang.wang@intel.com yaguang wang
-yamahata yamahata@valinux.co.jp Isaku Yamahata
-ymzk37 yamazaki-mitsuhiko@cnt.mxc.nes.nec.co.jp Mitsuhiko Yamazaki
-yinliu2 yinliu2@cisco.com Ying Liu
-ykaneko0929 ykaneko0929@gmail.com Yoshihiro Kaneko
-yogesh-srikrishnan yogesh.srikrishnan@rackspace.com Yogeshwar
-yolanda.robla yolanda.robla@canonical.com Yolanda Robla
-yorik-sar yorik.sar@gmail.com Yuriy Taraday
-yosef-4 yosef@cloudscaling.com Yosef Berman
-tamura-yoshiaki yoshi@midokura.jp Yoshiaki Tamura
-yuan-zhou yuan.zhou@intel.com Zhou Yuan
-james-li-3 yueli.m@gmail.com James Li
-yufang521247 yufang521247@gmail.com Yufang Zhang
-yugsuo yugsuo@gmail.com Yug Suo
-yunhong-jiang yunhong.jiang@intel.com jiang, yunhong
-yunmao yunmao@gmail.com Yun Mao
-yusuke yusuke@nttmcl.com MURAOKA Yusuke
-yuxcer yuxcer@126.com Yuxingchao
-yuxcer yuxcer@gmail.com Yuxingchao
-yuyuehill yuyuehill@gmail.com hill
-zaitcev zaitcev@kotori.zaitcev.us Pete Zaitcev
-zaneb zbitter@redhat.com Zane Bitter
-zedshaw zedshaw@zedshaw.com Zed A. Shaw
-zhangchao010 zhangchao010@huawei.com zhangchao
-zzs zhesen@nttmcl.com Jason Zhang
-zhhuabj zhhuabj@cn.ibm.com Hua Zhang
-zhiteng-huang zhiteng.huang@intel.com Huang Zhiteng
-zyluo zhongyue.nah@intel.com Zhongyue Luo
-zhoudongshu zhoudshu@gmail.com zhoudonshu
-zhang-hare zhuadl@cn.ibm.com Edward
-ziad-sawalha ziad.sawalha@rackspace.com Ziad Sawalha
-gholt z-launchpad@brim.net gholt
-zrzhit zrzhit@gmail.com Rongze Zhu
-zulcss zulcss@ubuntu.com Chuck Short
-aababilov aababilo@yahoo-inc.com Alessio Ababilov
-glikson glikson@il.ibm.com Alex Glikson
-izbyshev izbyshev@ispras.ru Alexey Izbyshev
-neoshades hillad@gmail.com Andy Hill
-armando-migliaccio armando.migliaccio@eu.citrix.com Armando Migliaccio
-asomya asomya@cisco.com Arvind Somya
-bgh brad@nicira.com Brad Hall
-bgh bhall@nicira.com Brad Hall
-broskos broskos@internap.com Brent Roskos
-c-kassen c.kassen@telekom.de Christoph Kassen
-cthiel-suse cthiel@suse.com Christoph Thiel
-0x44 chris@pistoncloud.com Christopher MacGown
-0x44 ignoti+github@gmail.com Christopher MacGown
-0x44 chris@slicehost.com Christopher MacGown
-yazirian dan.dillinger@sonian.net Dan Dillinger
-darren-birkett darren.birkett@gmail.com Darren Birkett
-dazworrall darren@iweb.co.uk Darren Worrall
-diego-parrilla-santamaria diego.parrilla@stackops.com Diego Parrilla
-emilienm emilien.macchi@stackops.com Emilien Macchi
-eday eday@oddments.org Eric Day
-flwang flwang@cn.ibm.com Fei Long Wang
-flepied frederic.lepied@enovance.com Frederic Lepied
-gagupta gaurav@denali-systems.com Gaurav Gupta
-gregory-althaus galthaus@austin.rr.com Greg Althaus
-greglange glange@rackspace.com Greg Lange
-ishii-hisaharu ishii.hisaharu@lab.ntt.co.jp Hisaharu Ishii
-ijw-ubuntu iawells@cisco.com Ian Wells
-jamesli-olsf yueli.m@gmail.com James Li
-jasonstraw jason.straw@rackspace.com Jason Straw
-jaypipes jaypipes@gmail.com Jay Pipes
-jaypipes jpipes@serialcoder Jay Pipes
-jiangy jiangyong.hn@gmail.com Jiang Yong
-jsuh jsuh@isi.edu Jinwoo 'Joseph' Suh
-jogo joe.gordon0@gmail.com Joe Gordon
-johannes johannes@squeeze.(none) Johannes Erdfelt
-jrd-q jrd@jrd.org John Dunning
-john-eo joon.eo@gmail.com John Eo
-johngarbutt john.garbutt@rackspace.com John Garbutt
-breu breu@breu.org Joseph W. Breu
-juergh juerg.haefliger@hp.com Juerg Haefliger
-kjharke k.jonathan.harker@hp.com K Jonathan Harker
-k.c.wang kc.wang@bigswitch.com KC Wang
-kbringard kbringard@attinteractive.com Kevin Bringard
-leamhall leam.hall@mailtrust.com Leam
-markwash mark.washenberger@rackspace.com Mark Washenberger
-maru mnewby@internap.com Maru Newby
-u-matt-h matt@cloudscaling.com Matthew Hooker
-sileht mehdi.abaakouk@enovance.com Mehdi Abaakouk
-mshuler mshuler@rackspace.com Michael Shuler
-noguchimn noguchimn@nttdata.co.jp Muneyuki Noguchi
-nicholas-mistry nmistry@gmail.com Nicholas Mistry
-nick-craig-wood nick@craig-wood.com Nick Craig-Wood
-pcm pcm@cisco.com Paul Michali
-pvo paul@substation9.com Paul Voccio
-pvo pvoccio@castor.local Paul Voccio
-pvo paul@openstack.org Paul Voccio
-pvo paul.voccio@rackspace.com Paul Voccio
-pshkitin pshkitin@griddynamics.com Pavel Shkitin
-pednape pednape@gmail.com Pedro Navarro Perez
-peter-a-portante peter.portante@redhat.com Peter Portante
-philip-knouff philip.knouff@mailtrust.com Philip Knouff
-psiwczak psiwczak@internap.com Piotr Siwczak
-rkhardalian rafi@metacloud.com Rafi Khardalian
-rtb rainer.toebbicke@cern.ch Rainer Toebbicke
-lifeless rbtcollins@hp.com Robert Collins
-rohitagarwalla rohitagarwalla@gmail.com Rohit Agarwalla
-rpodolyaka rpodolyaka@mirantis.com Roman Podolyaka
-rsokolkov rsokolkov@mirantis.com Roman Sokolkov
-mr-rods rosario.disomma@dreamhost.com Rosario Di Somma
-rlucio rlucio@internap.com Ryan Lucio
-ryu-midokura ryu@midokura.jp Ryu Ishimoto
-scott-devoid devoid@anl.gov Scott Devoid
-slukjanov slukjanov@mirantis.com Sergey Lukjanov
-krum-spencer nibz@cat.pdx.edu Spencer Krum
-sdake sdake@redhat.com Steven Dake
-sulochan-acharya sulochan@gmail.com Sulochan Acharya
-r-thorsten thorsten@atomia.com Thorsten Tarrach
-unmesh-gurjar unmesh.gurjar@vertex.co.in Unmesh Gurjar
-unmesh-gurjar unmesh.gurjar@nttdata.com Unmesh Gurjar
-victor-lowther victor.lowther@gmail.com Victor Lowther
-yunshen yun.shen@hp.com Yun Shen
-lzy-dev zhiyanl@cn.ibm.com Zhi Yan Liu
-ziad-sawalha gihub@highbridgellc.com Ziad Sawalha
-ethuleau edouard.thuleau@cloudwatt.com Édouard Thuleau
-akscram ikharin@mirantis.com Ilya Kharin
-nsavin nsavin@griddynamics.com Nikita Savin
-ahaldin ahaldin@griddynamics.com Anton Haldin
-hovyakov hovyakov@griddynamics.com Dmitry Hovyakov
-sklimoff sklimoff@griddynamics.com Stan Klimoff
-mkerrin michael.kerrin@hp.com Michael Kerrin
-spzala spzala@us.ibm.com Sahdev Zala
-skraynev skraynev@mirantis.com Sergey Kraynev
-nelson-crynwr nelson@crynwr.com Russ Nelson
-nelson-crynwr nelson@nelson-laptop Russ Nelson
-nakamura-h nakamura-h@mxd.nes.nec.co.jp Hidekazu Nakamura
-rizumu tom@rizu.mu Thomas Schreiber
-usrleon mlvov@mirantis.com Lvov Maxim
-senhuang senhuang@cisco.com Senhua Huang
-yhasan yhasan@cisco.com Yousuf Hasan
-wdec-ietf wdec.ietf@gmail.com Wojciech Dec
-pkilambi pkilambi@cisco.com Pradeep Kilambi
-pkilambi praddevel@gmail.com Pradeep Kilambi
-pamor pamor@cisco.com Patrick Amor
-nidonato nidonato@cisco.com Nicholas Donato
-michael-ogorman michael.ogorman@gmail.com Michael O'Gorman
-michaeltchapman michchap@cisco.com Michael Chapman
-mvoelker mvoelker@cisco.com Mark T. Voelker
-laksharm laksharm@cisco.com Lakshmi Sharma
-jdenisco jdenisco@cisco.com John DeNisco
-jennchen jennchen@cisco.com Jennifer Chen
-tmazur tmazur@mirantis.com Tatiana Mazur
-aignatov aignatov@mirantis.com Alexander Ignatov
-asakhnov asakhnov@mirantis.com Alexander Sakhnov
-vvechkanov vvechkanov@mirantis.com Vladimir Vechkanov
-
-# update on 13-May-13
-rohara rohara@redhat.com Ryan O'Hara
-leblancd leblancd@cisco.com Dane LeBlanc
-otherwiseguy twilson@redhat.com Terry Wilson
-mouad-benchchaoui m.benchchaoui@cloudbau.de Mouad Benchchaoui
-rcurran rcurran@cisco.com Rich Curran
-maru marun@redhat.com Maru Newby
-smoser smoser@brickies.net Scott Moser
-jshepher galstrom21@gmail.com Justin Shepherd
-habukao xiu.yushen@gmail.com Osamu Habuka
-eafonichev eafonichev@mirantis.com Evgeniy Afonichev
-asalkeld asalkeld@redhat.com Angus Salkeld
-spn surya_prabhakar@dell.com Surya Prabhakar
-steve-stevebaker sbaker@redhat.com Steve Baker
-john-dunning jrd@redhat.com John Dunning
-fmanco filipe.manco@gmail.com Filipe Manco
-d1b dmitriy.budnik@gmail.com Dmitriy Budnik
-jiajun-xu jiajun.xu@intel.com jiajun xu
-gpernot gpernot@praksys.org Guillaume Pernot
-torandu sean@torandu.com Sean Gallagher
-mvidner mvidner@suse.cz Martin Vidner
-clint-fewbar clint@fewbar.com Clint Byrum
-bob-melander bob.melander@gmail.com Bob Melander
-slicknik slicknik@gmail.com Nikhil Manchanda
-lyda.google kevin@ie.suberic.net Kevin Lyda
-jruzicka jruzicka@redhat.com Jakub Ruzicka
-imsplitbit imsplitbit@gmail.com Daniel Salinas
-stephen-ma stephen.ma@hp.com Stephen Ma
-andrea-frittoli andrea.frittoli@hp.com Andrea Frittoli
-jerome-gallard jerome.david.gallard@gmail.com Jérôme Gallard
-tim-miller-0 tim.miller.0@gmail.com Tim Miller
-chmouel launchpad@chmouel.com Chmouel Boudjnah
-johndescs michalon@igbmc.fr Jonathan Michalon
-iwienand iwienand@redhat.com Ian Wienand
-zealot0630 zealot0630@gmail.com Zang MingJie
-cbjchen cbjchen@cn.ibm.com Liang Chen
-bartosz-gorski bartosz.gorski@ntti3.com Bartosz Górski
-mhu-s mhu@enovance.com Matthieu Huin
-derek-morton derek.morton25@gmail.com Derek Morton
-phongdly phongdly@us.ibm.com Phong Doan Ly
-novas0x2a mike@fluffypenguin.org Mike Lundy
-jamielennox jlennox@redhat.com Jamie Lennox
-james-slagle james.slagle@gmail.com James Slagle
-kannan arangamani.kannan@gmail.com Kannan Manickam
-armando-migliaccio amigliaccio@nicira.com Armando Migliaccio
-adriansmith adrian@17od.com Adrian Smith
-jasondunsmore jasondunsmore@gmail.com Jason Dunsmore
-victor-r-howard victor.r.howard@gmail.com Victor Howard
-gtt116 gtt116@gmail.com TianTian Gao
-jsavak jsavak@gmail.com Joe Savak
-john-brzozowski jjmb@jjmb.com John Jason Brzozowski
-vodmat-news vodmat.news@gmail.com Mattieu Puel
-jiyou09 jiyou09@gmail.com You Ji
-john-lenihan john.lenihan@hp.com John Lenihan
-guohliu guohliu@cn.ibm.com GuoHui LIu
-v-joseph joseph@cloudscaling.com Joseph Glanville
-dmitry-x dmitry@spikhalskiy.com Dmitry Spikhalskiy
-joe-hakim-rahme joe.hakim.rahme@enovance.com Joe Hakim Rahme
-xuhanp xuhanp@cn.ibm.com Xuhan Peng
-armando-migliaccio amigliaccio@nicira.com armando-migliaccio
-crayz allanfeid@gmail.com Allan Feid
-james-branen james.branen@hp.com Jim Branen
-yuyangbj yuyangbj@cn.ibm.com Yang Yu
-academicgareth gareth@unitedstack.com Kun Huang
-anastasia-karpinska akarpinska@griddynamics.com Anastasia Karpinska
-niu-zglinux niu.zglinux@gmail.com Zhenguo Niu
-eyerediskin sskripnick@mirantis.com Sergey Skripnick
-leo-toyoda toyoda-reo@cnt.mxw.nes.nec.co.jp Leo Toyoda
-david-wilde-rackspace david.wilde@rackspace.com Dave Wilde
-talkain tal.kain@ravellosystems.com Tal Kain
-sylvain-afchain sylvain.afchain@enovance.com Sylvain Afchain
-ifarkas ifarkas@redhat.com Imre Farkas
-tsedovic tomas@sedovic.cz Tomas Sedovic
-andrew-mccrae andy.mccrae@googlemail.com Andy McCrae
-mriedem mriedem@us.ibm.com Matt Riedemann
-david-martin dmartls1@gmail.com David Martin
-tzumainn tzumainn@redhat.com Tzu-Mainn Chen
-edward-hope-morley opentastic@gmail.com Edward Hope-Morley
-leseb sebastien.han@enovance.com Sebastien Han
-sadasu sadasu@cisco.com Sandhya Dasu
-pete5 peter@gridcentric.ca Peter Feiner
-matt-wagner matt.wagner@redhat.com Matt Wagner
-yacine-b yacine@alyseo.com Yacine Kheddache
-512-francois-o63 francois@alyseo.com Francois Billard
-francine-ransy francine.ransy@gmail.com Francine Ransy
-vsergeyev vsergeyev@mirantis.com Victor Sergeyev
-starodubcevna starodubcevna@gmail.com Nikolay Starodubtsev
-mgagne mgagne@iweb.com Mathieu Gagné
-irenab irenab@mellanox.com Irena Berezovsky
-luiz-ozaki luiz.ozaki@gmail.com Luiz Ozaki
-xinxin-shu xinxin.shu@intel.com shu, xinxin
-lmatter lmatter@coraid.com Larry Matter
-bob-ball bob.ball@citrix.com Bob Ball
-dflorea dflorea@cisco.com Dan Florea
-david-hill david.hill@ubisoft.com David Hill
-greg-ball greg.ball@rackspace.com Greg Ball
-dukov dukov@mirantis.com Dmitry Ukov
-amir-sadoughi amir.sadoughi@gmail.com Amir Sadoughi
-christoph-gysin christoph.gysin@gmail.com Christoph Gysin
-0xffea 0xffea@gmail.com David Höppner
-yogesh-srikrishnan yoga80@yahoo.com Yogeshwar Srikrishnan
-imelnikov imelnikov@griddynamics.com Ivan Melnikov
-jvarlamova jvarlamova@mirantis.com Julia Varlamova
-anton0 anfrolov@mirantis.com Anton Frolov
-nprivalova nprivalova@mirantis.com Nadya Privalova
-sreshetniak sreshetniak@mirantis.com Sergey Reshetnyak
-vrovachev vrovachev@mirantis.com Vadim Rovachev
-yzveryanskyy yzveryanskyy@mirantis.com Yuriy Zveryanskyy
-eyuzlikeev eyuzlikeev@mirantis.com Eduard Yuzlikeev
-ityaptin ityaptin@mirantis.com Ilya Tyaptin
-iberezovskiy iberezovskiy@mirantis.com Ivan Berezovskiy
-
-# update 03-Jun-13
-aovchinnikov aovchinnikov@mirantis.com Alexey Ovchinnikov
-andreserl andres.rodriguez@canonical.com Andres Rodriguez
-bruno-semperlotti bruno.semperlotti@gmail.com Bruno Semperlotti
-shrinand shrinand@maginatics.com Shri Javadekar
-alex-gaynor alex.gaynor@gmail.com Alex Gaynor
-carl-baldwin carl.baldwin@hp.com Carl Baldwin
-ema ema@linux.it Emanuele Rocca
-christophe.sauthier christophe.sauthier@objectif-libre.com Christophe Sauthier
-jtomasek jtomasek@redhat.com Jiri Tomasek
-bradjones jones.bradley@me.com Bradley Jones
-yportnova yportnov@yahoo-inc.com Yuliya Portnova
-jan-provaznik jprovazn@redhat.com Jan Provaznik
-azilli mkislinska@griddynamics.com Marharyta Kislinska
-rmoore08 rmoore08@gmail.com Ryan Moore
-akamyshnikova akamyshnikova@mirantis.com Ann Kamyshnikova
-mukul18 mukul18@gmail.com Mukul Patel
-lakhindr lakhinder.walia@hds.com Lakhinder Walia
-amalabasha princessbasha@gmail.com Amala Basha
-kanzhe-jiang kanzhe@gmail.com Kanzhe Jiang
-fujioka-yuuichi fujioka.yuuichi@gmail.com fujioka yuuichi
-ryu-midokura ryu@midokura.com Ryu Ishimoto
-jordan-pittier jordan.pittier@gmail.com Jordan Pittier
-shengjie-min shengjie_min@dell.com Shengjie Min
-jpeeler-z jpeeler@redhat.com Jeff Peeler
-alexei-kornienko alexei.kornienko@gmail.com Alexei Kornienko
-morellon thiago.morello@locaweb.com.br Thiago Morello
-dmitrymex dmescheryakov@mirantis.com Dmitry Mescheryakov
-nkonovalov nkonovalov@mirantis.com Nikita Konovalov
-farrellee matt@redhat.com Matthew Farrellee
-ylobankov ylobankov@mirantis.com Yaroslav Lobankov
-ruhe rkamaldinov@mirantis.com Ruslan Kamaldinov
-akuznetsov akuznetsov@mirantis.com Alexander Kuznetsov
-akuno anita.kuno@enovance.com Anita Kuno
-mtaylor-s mtaylor@redhat.com Martyn Taylor
-nijaba nick.barcet@canonical.com Nicolas Barcet
-steven-berler steven.berler@dreamhost.com Steven Berler
-gmb graham.binns@canonical.com Graham Binns
-endre-karlson endre.karlson@gmail.com Endre Karlson
-frossigneux francois.rossigneux@inria.fr François Rossigneux
-maksimov stanislav_m@dell.com Stas Maksimov
-swann-w swann.croiset@bull.net Swann Croiset
-nealph phil.neal@hp.com Phil Neal
-soulascedric soulascedric@gmail.com Cédric Soulas
-xingzhou xingzhou@cn.ibm.com xingzhou
-terriyu teryu@alum.mit.edu Terri Yu
-imain imain@redhat.com Ian Main
-calfonso calfonso@redhat.com Chris Alfonso
-gblomqui gblomqui@redhat.com Greg Blomquist
-pierre-freund pierre.freund@gmail.com Pierre Freund
-robert-van-leeuwen robert.vanleeuwen@spilgames.com Robert van Leeuwen
-gfidente gfidente@redhat.com Giulio Fidente
-therve therve@gmail.com Thomas Herve
-andrew-plunk andrew.plunk@rackspace.com Andrew Plunk
-winson-c-chan winson.c.chan@intel.com Winson Chan
-simon-pasquier pasquier.simon@gmail.com Simon Pasquier
-
-# update 05-Jun-13
-sross-7 sross@redhat.com Solly Ross
-pschaef pschaef@de.ibm.com Patrick Schaefer
-sergey.vilgelm sergey.vilgelm@gmail.com Sergey Vilgelm
-jolyon git@limilo.com Jolyon Brown
-jay-lau-513 jay.lau.513@gmail.com Jay Lau
-satya-patibandla satya.patibandla@tcs.com Satyanarayana Patibandla
-liyingjun liyingjun1988@gmail.com Liyingjun
-yosshy a-yoshiyama@bu.jp.nec.com Akira Yoshiyama
-aarti-kriplani aarti.kriplani@rackspace.com Aarti Kriplani
-novel rbogorodskiy@mirantis.com Roman Bogorodskiy
-yanglyy yanglyy@cn.ibm.com YangLei
-jsbryant jsbryant@us.ibm.com Jay S. Bryant
-jenny-shieh jenny.shieh@hp.com jenny-shieh
-jenny-shieh jenny.shieh@hp.com Jenny Shieh
-derek-chiang derek.chiang@nebula.com Derek Chiang
-edward-hope-morley edward.hope-morley@canonical.com Edward Hope-Morley
-yuzawataka yuzawataka@intellilink.co.jp Yuzawa Takahiko
-jcallicoat jordan.callicoat@rackspace.com Jordan Callicoat
-hovyakov dkhovyakov@griddynamics.com Dmitry Khovyakov
-hyerle hyerle@hp.com Robert Hyerle
-carlos-garza carlos.garza@rackspace.com Carlos Garza
-venkateshsampath venkatesh.sampath@outlook.com Venkatesh Sampath
-robert-myers robert.myers@rackspace.com Robert Myers
-pekowski pekowski@gmail.com Raymond Pekowski
-alex-meade hatboy112@yahoo.com Alex Meade
-kiall kiall@hp.com Kiall Mac Innes
-aditirav aditirav@thoughtworks.com Aditi Raveesh
-a-gorodnev agorodnev@mirantis.com Alexander Gorodnev
-xbsd-nikolay nsobolevsky@mirantis.com Nikolay Sobolevsky
-yamamoto yamamoto@valinux.co.jp Yamamoto Takashi
-sdeaton2 sdeaton2@gmail.com Steven Deaton
-hughsaunders hugh@wherenow.org Hugh Saunders
-genggjh gengjh@cn.ibm.com David Geng
-lklrmn lklrmn@gmail.com Leah Klearman
-fabien-boucher fabien.boucher@enovance.com Fabien Boucher
-sdague sean@dague.net Sean Dague
-jmatt jmatt@jmatt.org J. Matt Peterson
-hyphon-zh ghj114@gmail.com Hyphon Zhang
-hartsock hartsocks@vmware.com Shawn Hartsock
-aarti-kriplani aarti.kriplani@rackspace.com Aarti Kriplani
-guochbo guochbo@cn.ibm.com Chang Bo Guo
-krishna1256 krishna1256@gmail.com Sai Krishna Sripada
-fujioka-yuuichi-d fujioka-yuuichi@zx.mxh.nes.nec.co.jp fujioka yuuichi
-rpothier rpothier@cisco.com Robert Pothier
-debo ddutta@gmail.com Debo~ Dutta
-dbailey-k dbailey@hp.com Darragh Bailey
-ghe.rivero ghe.rivero@hp.com Ghe Rivero
-justin-hopper justin.hopper@hp.com Justin Hopper
-kgriffs kurt.griffiths@rackspace.com Kurt Griffiths
-zyuan zhihao.yuan@rackspace.com Zhihao Yuan
-bryan-davidson bryan.davidson@rackspace.com Bryan Davidson
-lichray lichray@gmail.com Zhihao Yuan
-eap-x eap@hp.com Eric Pendergrass
-kaushikc kaushik.chandrashekar@rackspace.com Kaushik Chandrashekar
-malini-kamalambal malini.kamalambal@rackspace.com Malini Kamalambal
-kevin-carter kevin.carter@rackspace.com Kevin Carter
-radix chris.armstrong@rackspace.com Christopher Armstrong
-
-# Update 11-Jun-13
-xyj-asmy yejia@unitedstack.com Yejia Xu
-toabctl thomasbechtold@jpberlin.de Thomas Bechtold
-blak111 kevin.benton@bigswitch.com Kevin Benton
-matthew-macdonald-wallace matthew.macdonald-wallace@hp.com Matthew Macdonald-Wallace
-jianingy jianingy@unitedstack.com Jianing Yang
-satish-0 satish@aristanetworks.com Satish Mohan
-razique razique.mahroua@gmail.com Razique Mahroua
-mikeyp-3 mikeyp@lahondaresearch.org Mike Pittaro
-guanxiaohua2k6 guanxiaohua2k6@gmail.com Xiaohua Guan
-tylern-u tylern@pistoncloud.com Tyler North
-sagar-r-nikam sagar.r.nikam@gmail.com Sagar Nikam
-danehans danehans@cisco.com Daneyon Hansen
-shiju-p shiju.p@gmail.com Shiju
-karin-levenstein karin.levenstein@rackspace.com Karin Levenstein
-wbatterson wbatterson@brinkster.com Walter Batterson
-diane-fleming diane.fleming@rackspace.com Diane Fleming
-razique razique.mahroua@gmail.com Razique Mahroua
-jproulx jon@jonproulx.com Jonathan Proulx
-pmsangal puneet@inmovi.net Puneet Sangal
-kbringard kbringard@att.com Kevin Bringard
-jproulx jon@csail.mit.edu Jonathan Proulx
-ppouliot peter@pouliot.net Peter Pouliot
-ken-pepple ken.pepple@cloudtp.com Ken Pepple
-frodenas frodenas@gmail.com Ferran Rodenas
-john-davidge jodavidg@cisco.com John Davidge
-colinmcnamara colin@2cups.com Colin McNamara
-anniec anniec@yahoo-inc.com Annie Cheng
-han-sebastien han.sebastien@gmail.com Sébastien Han
-woprandi william.oprandi@gmail.com William Oprandi
-everett-toews everett.toews@rackspace.com Everett Toews
-jeff-d-halter jeff.d.halter@gmail.com Jeff Halter
-jafletch jafletch@cisco.com Jack Peter Fletcher
-bill-rich bill.rich@gmail.com Bill Rich
-ejkern ejkern@mac.com Ed Kern
-entropyworks yazz.atlas@hp.com Yazz Atlas
-bknowles bknowles@momentumsi.com Brad Knowles
-bkerensa bkerensa@ubuntu.com Benjamin Kerensa
-phil-hopkins-a phil.hopkins@rackspace.com Phil Hopkins
-pps-pranav pps.pranav@gmail.com Pranav Salunke
-phil-hopkins-a phil.hopkins@rackspace.com Phil Hopkins
-razique razique.mahroua@gmail.com Razique Mahroua
-chris-ricker chris.ricker@gmail.com Chris Ricker
-sgordon sgordon@redhat.com Stephen Gordon
-mandoonandy andy@aptira.com Andy McCallum
-jay-clark jay.clark@gmail.com Jay Clark
-sheeprine sheeprine@nullplace.com Stéphane Albert
-kvdveer koert@cloudvps.com Koert van der Veer
-jens-christian-fischer jens-christian.fischer@switch.ch Jens-Christian Fischer
-jaegerandi aj@suse.de Andreas Jaeger
-lmorchard me@lmorchard.com Les Orchard
-fifieldt tom@openstack.org Tom Fifield
-enakai enakai@redhat.com Etsuji Nakai
-nati-ueno nachi@ntti3.com Nachi Ueno
-wugc wugc@cn.ibm.com Guang Chun Wu
-k3vinmcdonald k3vinmcdonald@gmail.com Kevin McDonald
-
-# Update 14-Jun-13
-davewalker davewalker@ubuntu.com Dave Walker
-niu-zglinux niu.zglinux@gmail.com Zhenguo Niu (牛振国)
-haomai haomai@unitedstack.com Haomai Wang
-maheshp maheshp@thoughtworks.com Mahesh Panchaksharaiah
-mark-seger mark.seger@hp.com Mark Seger
-abhiabhi-sr abhiabhi.sr@gmail.com Abhinav Srivastava
-harlowja harlowja@gmail.com Joshua Harlow
-egallen erwan.gallen@cloudwatt.com Erwan Gallen
-mattt416 mattt@defunct.ca Matt Thompson
-viraj-hardikar-n viraj.hardikar@hp.com Viraj Hardikar
-rcritten rcritten@redhat.com Rob Crittenden
-jiangwt100 wentian@unitedstack.com Jim Jiang
-yugsuo guangyu@unitedstack.com Guangyu Suo
-jdillaman dillaman@redhat.com Jason Dillaman
-
-# Update 18-Jun-13
-epavlova epavlova@mirantis.com Katrin Pavlova
-kiran-kumar-vaddi kiran-kumar.vaddi@hp.com Kiran Kumar Vaddi
-prem-karat prem.karat@linux.vnet.ibm.com Prem Karat
-xqueralt xqueralt@redhat.com Xavier Queralt
-jordan-pittier jordan.pittier-ext@cloudwatt.com Jordan Pittier
-bdpayne bdpayne@acm.org Bryan D. Payne
-forrest-r forrest@research.att.com Andrew Forrest
-
-# Robots
-openstack review@openstack.org Gerrit Code Review
-openstack jenkins@review.openstack.org Jenkins
-openstack jenkins@openstack.org OpenStack Jenkins
-
-# Update 21-Jun-13
-saschpe saschpe@gmx.de Sascha Peilicke
-jiataotj jiataotj@cn.ibm.com David Jia
-skuicloud skuicloud@gmail.com Kui Shi
-selvait90 selvait90@gmail.com Selvakumar Arumugam
-redheadflyundershadow sneezezhang@cienet.com.cn Lei Zhang
-akscram akscram@gmail.com Ilya Kharin
-randall-burt randall.burt@rackspace.com Randall Burt
-fengqian-gao fengqian.gao@intel.com Fengqian.Gao
-jeffmilstea jeffmilstea@gmail.com Jeff Milstead
-awoods-0 awoods@internap.com Anthony Woods
-jonesld jonesld@us.ibm.com Daniel Jones
diff --git a/etc/openstack.conf b/etc/openstack.conf
deleted file mode 100644
index 27cfe4229..000000000
--- a/etc/openstack.conf
+++ /dev/null
@@ -1,27 +0,0 @@
-[DEFAULT]
-# Run in debug mode?
-# debug = False
-
-# Database parameters
-# db_driver = sqlite
-# db_user = operator
-# db_password = None
-# db_database = /opt/stack/data/stackalytics.sqlite
-# db_hostname = localhost
-
-# Extensions
-# extensions = CommitsLOC,MessageDetails
-
-# Root for all project sources. The tool will iterate over its contents
-# sources_root = /opt/stack/repos
-
-# email mappings (e.g. collected from .mailmap files)
-# email_aliases = etc/email-aliases
-# mappings from domains to company names
-# domain2company = etc/domain-company
-# mappings from emails to company names
-# email2company = etc/email-company
-# mappings from launchpad ids to emails and user names
-# launchpad2email = etc/launchpad-ids
-# mappings from launchpad id to company name
-# launchpad2company = etc/launchpad-company
diff --git a/etc/stackalytics.conf b/etc/stackalytics.conf
new file mode 100644
index 000000000..c4dcae893
--- /dev/null
+++ b/etc/stackalytics.conf
@@ -0,0 +1,24 @@
+[DEFAULT]
+# Run in debug mode?
+# debug = False
+
+# Default data
+# default-data = etc/default_data.json
+
+# The folder that holds all project sources to analyze
+# sources_root = ../metric-root-tmp
+
+# Runtime storage URI
+# runtime_storage_uri = memcached://127.0.0.1:11211
+
+# URI of persistent storage
+# persistent_storage_uri = mongodb://localhost
+
+# Update persistent storage with default data
+# read-default-data = False
+
+# Repo poll period in seconds
+# repo_poll_period = 300
+
+# Address of update handler
+# frontend_update_address = http://user:user@localhost/update/%s
\ No newline at end of file
diff --git a/etc/test_default_data.json b/etc/test_default_data.json
new file mode 100644
index 000000000..9f719d3c3
--- /dev/null
+++ b/etc/test_default_data.json
@@ -0,0 +1,121 @@
+{
+ "users": [
+ {
+ "launchpad_id": "foo",
+ "user_name": "Pupkin",
+ "emails": ["a@a"],
+ "companies": [
+ {
+ "company_name": "Uno",
+ "end_date": "2013-Jan-01"
+ },
+ {
+ "company_name": "Duo",
+ "end_date": null
+ }
+ ]
+ }
+ ],
+
+ "companies": [
+ {
+ "company_name": "Mirantis",
+ "domains": ["mirantis.com"]
+ },
+ {
+ "company_name": "*independent",
+ "domains": [""]
+ },
+ {
+ "company_name": "Hewlett-Packard",
+ "domains": ["hp.com"]
+ },
+ {
+ "company_name": "Intel",
+ "domains": ["intel.com"]
+ }
+ ],
+
+ "repos": [
+ {
+ "branches": ["master"],
+ "name": "Quantum Client",
+ "type": "core",
+ "uri": "git://github.com/openstack/python-quantumclient.git",
+ "releases": [
+ {
+ "release_name": "Folsom",
+ "tag_from": "folsom-1",
+ "tag_to": "2.1"
+ },
+ {
+ "release_name": "Grizzly",
+ "tag_from": "2.1",
+ "tag_to": "2.2.1"
+ },
+ {
+ "release_name": "Havana",
+ "tag_from": "2.2.1",
+ "tag_to": "HEAD"
+ }
+ ]
+ },
+ {
+ "branches": ["master"],
+ "name": "Keystone",
+ "type": "core",
+ "uri": "git://github.com/openstack/keystone.git",
+ "releases": [
+ {
+ "release_name": "Essex",
+ "tag_from": "2011.3",
+ "tag_to": "2012.1"
+ },
+ {
+ "release_name": "Folsom",
+ "tag_from": "2012.1",
+ "tag_to": "2012.2"
+ },
+ {
+ "release_name": "Grizzly",
+ "tag_from": "2012.2",
+ "tag_to": "2013.1"
+ },
+ {
+ "release_name": "Havana",
+ "tag_from": "2013.1",
+ "tag_to": "HEAD"
+ }
+ ]
+ }
+ ],
+
+ "releases": [
+ {
+ "release_name": "ALL",
+ "start_date": "2010-May-01",
+ "end_date": "now"
+ },
+ {
+ "release_name": "Essex",
+ "start_date": "2011-Oct-01",
+ "end_date": "2012-Apr-01"
+ },
+ {
+ "release_name": "Folsom",
+ "start_date": "2012-Apr-01",
+ "end_date": "2012-Oct-01"
+ },
+ {
+ "release_name": "Grizzly",
+ "start_date": "2012-Oct-01",
+ "end_date": "2013-Apr-01"
+ },
+ {
+ "release_name": "Havana",
+ "start_date": "2013-Apr-01",
+ "end_date": "now"
+ }
+ ]
+
+}
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 8bfbc3e54..b89eb065b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,11 +1,12 @@
d2to1>=0.2.10,<0.3
-pbr>=0.5.16,<0.6
-#MySQL-python
-#pysqlite
-#git+git://github.com/MetricsGrimoire/RepositoryHandler.git#egg=repositoryhandler-0.5
-#git+git://github.com/SoftwareIntrospectionLab/guilty.git#egg=guilty-2.1
-launchpadlib
Flask>=0.9
Flask-Gravatar
-oslo.config
-pylibmc
+iso8601
+launchpadlib
+http://tarballs.openstack.org/oslo.config/oslo.config-1.2.0a2.tar.gz#egg=oslo.config-1.2.0a2
+pbr>=0.5.16,<0.6
+psutil
+python-memcached
+pymongo
+sh
+six
diff --git a/stackalytics/__init__.py b/stackalytics/__init__.py
new file mode 100644
index 000000000..c9d84b54b
--- /dev/null
+++ b/stackalytics/__init__.py
@@ -0,0 +1 @@
+__author__ = 'ishakhat'
diff --git a/stackalytics/openstack/__init__.py b/stackalytics/openstack/__init__.py
new file mode 100644
index 000000000..c9d84b54b
--- /dev/null
+++ b/stackalytics/openstack/__init__.py
@@ -0,0 +1 @@
+__author__ = 'ishakhat'
diff --git a/stackalytics/openstack/common/__init__.py b/stackalytics/openstack/common/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/stackalytics/openstack/common/importutils.py b/stackalytics/openstack/common/importutils.py
new file mode 100644
index 000000000..aea041d20
--- /dev/null
+++ b/stackalytics/openstack/common/importutils.py
@@ -0,0 +1,68 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack Foundation.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""
+Import related utilities and helper functions.
+"""
+
+import sys
+import traceback
+
+
+def import_class(import_str):
+ """Returns a class from a string including module and class."""
+ mod_str, _sep, class_str = import_str.rpartition('.')
+ try:
+ __import__(mod_str)
+ return getattr(sys.modules[mod_str], class_str)
+ except (ValueError, AttributeError):
+ raise ImportError('Class %s cannot be found (%s)' %
+ (class_str,
+ traceback.format_exception(*sys.exc_info())))
+
+
+def import_object(import_str, *args, **kwargs):
+ """Import a class and return an instance of it."""
+ return import_class(import_str)(*args, **kwargs)
+
+
+def import_object_ns(name_space, import_str, *args, **kwargs):
+ """Tries to import object from default namespace.
+
+Imports a class and return an instance of it, first by trying
+to find the class in a default namespace, then failing back to
+a full path if not found in the default namespace.
+"""
+ import_value = "%s.%s" % (name_space, import_str)
+ try:
+ return import_class(import_value)(*args, **kwargs)
+ except ImportError:
+ return import_class(import_str)(*args, **kwargs)
+
+
+def import_module(import_str):
+ """Import a module."""
+ __import__(import_str)
+ return sys.modules[import_str]
+
+
+def try_import(import_str, default=None):
+ """Try to import a module and if it fails return default."""
+ try:
+ return import_module(import_str)
+ except ImportError:
+ return default
diff --git a/stackalytics/openstack/common/jsonutils.py b/stackalytics/openstack/common/jsonutils.py
new file mode 100644
index 000000000..f1d442c06
--- /dev/null
+++ b/stackalytics/openstack/common/jsonutils.py
@@ -0,0 +1,169 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+'''
+JSON related utilities.
+
+This module provides a few things:
+
+ 1) A handy function for getting an object down to something that can be
+ JSON serialized. See to_primitive().
+
+ 2) Wrappers around loads() and dumps(). The dumps() wrapper will
+ automatically use to_primitive() for you if needed.
+
+ 3) This sets up anyjson to use the loads() and dumps() wrappers if anyjson
+ is available.
+'''
+
+
+import datetime
+import functools
+import inspect
+import itertools
+import json
+import types
+import xmlrpclib
+
+import six
+
+from stackalytics.openstack.common import timeutils
+
+
+_nasty_type_tests = [inspect.ismodule, inspect.isclass, inspect.ismethod,
+ inspect.isfunction, inspect.isgeneratorfunction,
+ inspect.isgenerator, inspect.istraceback, inspect.isframe,
+ inspect.iscode, inspect.isbuiltin, inspect.isroutine,
+ inspect.isabstract]
+
+_simple_types = (types.NoneType, int, basestring, bool, float, long)
+
+
+def to_primitive(value, convert_instances=False, convert_datetime=True,
+ level=0, max_depth=3):
+ """Convert a complex object into primitives.
+
+ Handy for JSON serialization. We can optionally handle instances,
+ but since this is a recursive function, we could have cyclical
+ data structures.
+
+ To handle cyclical data structures we could track the actual objects
+ visited in a set, but not all objects are hashable. Instead we just
+ track the depth of the object inspections and don't go too deep.
+
+ Therefore, convert_instances=True is lossy ... be aware.
+
+ """
+ # handle obvious types first - order of basic types determined by running
+ # full tests on nova project, resulting in the following counts:
+ # 572754
+ # 460353
+ # 379632
+ # 274610
+ # 199918
+ # 114200
+ # 51817
+ # 26164
+ # 6491
+ # 283
+ # 19
+ if isinstance(value, _simple_types):
+ return value
+
+ if isinstance(value, datetime.datetime):
+ if convert_datetime:
+ return timeutils.strtime(value)
+ else:
+ return value
+
+ # value of itertools.count doesn't get caught by nasty_type_tests
+ # and results in infinite loop when list(value) is called.
+ if type(value) == itertools.count:
+ return six.text_type(value)
+
+ # FIXME(vish): Workaround for LP bug 852095. Without this workaround,
+ # tests that raise an exception in a mocked method that
+ # has a @wrap_exception with a notifier will fail. If
+ # we up the dependency to 0.5.4 (when it is released) we
+ # can remove this workaround.
+ if getattr(value, '__module__', None) == 'mox':
+ return 'mock'
+
+ if level > max_depth:
+ return '?'
+
+ # The try block may not be necessary after the class check above,
+ # but just in case ...
+ try:
+ recursive = functools.partial(to_primitive,
+ convert_instances=convert_instances,
+ convert_datetime=convert_datetime,
+ level=level,
+ max_depth=max_depth)
+ if isinstance(value, dict):
+ return dict((k, recursive(v)) for k, v in value.iteritems())
+ elif isinstance(value, (list, tuple)):
+ return [recursive(lv) for lv in value]
+
+ # It's not clear why xmlrpclib created their own DateTime type, but
+ # for our purposes, make it a datetime type which is explicitly
+ # handled
+ if isinstance(value, xmlrpclib.DateTime):
+ value = datetime.datetime(*tuple(value.timetuple())[:6])
+
+ if convert_datetime and isinstance(value, datetime.datetime):
+ return timeutils.strtime(value)
+ elif hasattr(value, 'iteritems'):
+ return recursive(dict(value.iteritems()), level=level + 1)
+ elif hasattr(value, '__iter__'):
+ return recursive(list(value))
+ elif convert_instances and hasattr(value, '__dict__'):
+ # Likely an instance of something. Watch for cycles.
+ # Ignore class member vars.
+ return recursive(value.__dict__, level=level + 1)
+ else:
+ if any(test(value) for test in _nasty_type_tests):
+ return six.text_type(value)
+ return value
+ except TypeError:
+ # Class objects are tricky since they may define something like
+ # __iter__ defined but it isn't callable as list().
+ return six.text_type(value)
+
+
+def dumps(value, default=to_primitive, **kwargs):
+ return json.dumps(value, default=default, **kwargs)
+
+
+def loads(s):
+ return json.loads(s)
+
+
+def load(s):
+ return json.load(s)
+
+
+try:
+ import anyjson
+except ImportError:
+ pass
+else:
+ anyjson._modules.append((__name__, 'dumps', TypeError,
+ 'loads', ValueError, 'load'))
+ anyjson.force_implementation(__name__)
diff --git a/stackalytics/openstack/common/log.py b/stackalytics/openstack/common/log.py
new file mode 100644
index 000000000..29c165ea3
--- /dev/null
+++ b/stackalytics/openstack/common/log.py
@@ -0,0 +1,559 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack Foundation.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Openstack logging handler.
+
+This module adds to logging functionality by adding the option to specify
+a context object when calling the various log methods. If the context object
+is not specified, default formatting is used. Additionally, an instance uuid
+may be passed as part of the log message, which is intended to make it easier
+for admins to find messages related to a specific instance.
+
+It also allows setting of formatting information through conf.
+
+"""
+
+import ConfigParser
+import cStringIO
+import inspect
+import itertools
+import logging
+import logging.config
+import logging.handlers
+import os
+import sys
+import traceback
+
+from oslo.config import cfg
+
+# from quantum.openstack.common.gettextutils import _
+from stackalytics.openstack.common import importutils
+from stackalytics.openstack.common import jsonutils
+# from quantum.openstack.common import local
+
+
+_DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
+
+common_cli_opts = [
+ cfg.BoolOpt('debug',
+ short='d',
+ default=False,
+ help='Print debugging output (set logging level to '
+ 'DEBUG instead of default WARNING level).'),
+ cfg.BoolOpt('verbose',
+ short='v',
+ default=False,
+ help='Print more verbose output (set logging level to '
+ 'INFO instead of default WARNING level).'),
+]
+
+logging_cli_opts = [
+ cfg.StrOpt('log-config',
+ metavar='PATH',
+ help='If this option is specified, the logging configuration '
+ 'file specified is used and overrides any other logging '
+ 'options specified. Please see the Python logging module '
+ 'documentation for details on logging configuration '
+ 'files.'),
+ cfg.StrOpt('log-format',
+ default=None,
+ metavar='FORMAT',
+ help='A logging.Formatter log message format string which may '
+ 'use any of the available logging.LogRecord attributes. '
+ 'This option is deprecated. Please use '
+ 'logging_context_format_string and '
+ 'logging_default_format_string instead.'),
+ cfg.StrOpt('log-date-format',
+ default=_DEFAULT_LOG_DATE_FORMAT,
+ metavar='DATE_FORMAT',
+ help='Format string for %%(asctime)s in log records. '
+ 'Default: %(default)s'),
+ cfg.StrOpt('log-file',
+ metavar='PATH',
+ deprecated_name='logfile',
+ help='(Optional) Name of log file to output to. '
+ 'If no default is set, logging will go to stdout.'),
+ cfg.StrOpt('log-dir',
+ deprecated_name='logdir',
+ help='(Optional) The base directory used for relative '
+ '--log-file paths'),
+ cfg.BoolOpt('use-syslog',
+ default=False,
+ help='Use syslog for logging.'),
+ cfg.StrOpt('syslog-log-facility',
+ default='LOG_USER',
+ help='syslog facility to receive log lines')
+]
+
+generic_log_opts = [
+ cfg.BoolOpt('use_stderr',
+ default=True,
+ help='Log output to standard error')
+]
+
+log_opts = [
+ cfg.StrOpt('logging_context_format_string',
+ default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s '
+ '%(name)s [%(request_id)s %(user)s %(tenant)s] '
+ '%(instance)s%(message)s',
+ help='format string to use for log messages with context'),
+ cfg.StrOpt('logging_default_format_string',
+ default='%(asctime)s.%(msecs)03d %(process)d %(levelname)s '
+ '%(name)s [-] %(instance)s%(message)s',
+ help='format string to use for log messages without context'),
+ cfg.StrOpt('logging_debug_format_suffix',
+ default='%(funcName)s %(pathname)s:%(lineno)d',
+ help='data to append to log format when level is DEBUG'),
+ cfg.StrOpt('logging_exception_prefix',
+ default='%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s '
+ '%(instance)s',
+ help='prefix each line of exception output with this format'),
+ cfg.ListOpt('default_log_levels',
+ default=[
+ 'amqplib=WARN',
+ 'sqlalchemy=WARN',
+ 'boto=WARN',
+ 'suds=INFO',
+ 'keystone=INFO',
+ 'eventlet.wsgi.server=WARN'
+ ],
+ help='list of logger=LEVEL pairs'),
+ cfg.BoolOpt('publish_errors',
+ default=False,
+ help='publish error events'),
+ cfg.BoolOpt('fatal_deprecations',
+ default=False,
+ help='make deprecations fatal'),
+
+ # NOTE(mikal): there are two options here because sometimes we are handed
+ # a full instance (and could include more information), and other times we
+ # are just handed a UUID for the instance.
+ cfg.StrOpt('instance_format',
+ default='[instance: %(uuid)s] ',
+ help='If an instance is passed with the log message, format '
+ 'it like this'),
+ cfg.StrOpt('instance_uuid_format',
+ default='[instance: %(uuid)s] ',
+ help='If an instance UUID is passed with the log message, '
+ 'format it like this'),
+]
+
+CONF = cfg.CONF
+CONF.register_cli_opts(common_cli_opts)
+CONF.register_cli_opts(logging_cli_opts)
+CONF.register_opts(generic_log_opts)
+CONF.register_opts(log_opts)
+
+# our new audit level
+# NOTE(jkoelker) Since we synthesized an audit level, make the logging
+# module aware of it so it acts like other levels.
+logging.AUDIT = logging.INFO + 1
+logging.addLevelName(logging.AUDIT, 'AUDIT')
+
+
+try:
+ NullHandler = logging.NullHandler
+except AttributeError: # NOTE(jkoelker) NullHandler added in Python 2.7
+ class NullHandler(logging.Handler):
+ def handle(self, record):
+ pass
+
+ def emit(self, record):
+ pass
+
+ def createLock(self):
+ self.lock = None
+
+
+def _dictify_context(context):
+ if context is None:
+ return None
+ if not isinstance(context, dict) and getattr(context, 'to_dict', None):
+ context = context.to_dict()
+ return context
+
+
+def _get_binary_name():
+ return os.path.basename(inspect.stack()[-1][1])
+
+
+def _get_log_file_path(binary=None):
+ logfile = CONF.log_file
+ logdir = CONF.log_dir
+
+ if logfile and not logdir:
+ return logfile
+
+ if logfile and logdir:
+ return os.path.join(logdir, logfile)
+
+ if logdir:
+ binary = binary or _get_binary_name()
+ return '%s.log' % (os.path.join(logdir, binary),)
+
+
+class BaseLoggerAdapter(logging.LoggerAdapter):
+
+ def audit(self, msg, *args, **kwargs):
+ self.log(logging.AUDIT, msg, *args, **kwargs)
+
+
+class LazyAdapter(BaseLoggerAdapter):
+ def __init__(self, name='unknown', version='unknown'):
+ self._logger = None
+ self.extra = {}
+ self.name = name
+ self.version = version
+
+ @property
+ def logger(self):
+ if not self._logger:
+ self._logger = getLogger(self.name, self.version)
+ return self._logger
+
+
+class ContextAdapter(BaseLoggerAdapter):
+ warn = logging.LoggerAdapter.warning
+
+ def __init__(self, logger, project_name, version_string):
+ self.logger = logger
+ self.project = project_name
+ self.version = version_string
+
+ @property
+ def handlers(self):
+ return self.logger.handlers
+
+ def deprecated(self, msg, *args, **kwargs):
+ stdmsg = _("Deprecated: %s") % msg
+ if CONF.fatal_deprecations:
+ self.critical(stdmsg, *args, **kwargs)
+ raise DeprecatedConfig(msg=stdmsg)
+ else:
+ self.warn(stdmsg, *args, **kwargs)
+
+ def process(self, msg, kwargs):
+ if 'extra' not in kwargs:
+ kwargs['extra'] = {}
+ extra = kwargs['extra']
+
+ context = kwargs.pop('context', None)
+ # if not context:
+ # context = getattr(local.store, 'context', None)
+ if context:
+ extra.update(_dictify_context(context))
+
+ instance = kwargs.pop('instance', None)
+ instance_extra = ''
+ if instance:
+ instance_extra = CONF.instance_format % instance
+ else:
+ instance_uuid = kwargs.pop('instance_uuid', None)
+ if instance_uuid:
+ instance_extra = (CONF.instance_uuid_format
+ % {'uuid': instance_uuid})
+ extra.update({'instance': instance_extra})
+
+ extra.update({"project": self.project})
+ extra.update({"version": self.version})
+ extra['extra'] = extra.copy()
+ return msg, kwargs
+
+
+class JSONFormatter(logging.Formatter):
+ def __init__(self, fmt=None, datefmt=None):
+ # NOTE(jkoelker) we ignore the fmt argument, but its still there
+ # since logging.config.fileConfig passes it.
+ self.datefmt = datefmt
+
+ def formatException(self, ei, strip_newlines=True):
+ lines = traceback.format_exception(*ei)
+ if strip_newlines:
+ lines = [itertools.ifilter(
+ lambda x: x,
+ line.rstrip().splitlines()) for line in lines]
+ lines = list(itertools.chain(*lines))
+ return lines
+
+ def format(self, record):
+ message = {'message': record.getMessage(),
+ 'asctime': self.formatTime(record, self.datefmt),
+ 'name': record.name,
+ 'msg': record.msg,
+ 'args': record.args,
+ 'levelname': record.levelname,
+ 'levelno': record.levelno,
+ 'pathname': record.pathname,
+ 'filename': record.filename,
+ 'module': record.module,
+ 'lineno': record.lineno,
+ 'funcname': record.funcName,
+ 'created': record.created,
+ 'msecs': record.msecs,
+ 'relative_created': record.relativeCreated,
+ 'thread': record.thread,
+ 'thread_name': record.threadName,
+ 'process_name': record.processName,
+ 'process': record.process,
+ 'traceback': None}
+
+ if hasattr(record, 'extra'):
+ message['extra'] = record.extra
+
+ if record.exc_info:
+ message['traceback'] = self.formatException(record.exc_info)
+
+ return jsonutils.dumps(message)
+
+
+def _create_logging_excepthook(product_name):
+ def logging_excepthook(type, value, tb):
+ extra = {}
+ if CONF.verbose:
+ extra['exc_info'] = (type, value, tb)
+ getLogger(product_name).critical(str(value), **extra)
+ return logging_excepthook
+
+
+class LogConfigError(Exception):
+
+ message = ('Error loading logging config %(log_config)s: %(err_msg)s')
+
+ def __init__(self, log_config, err_msg):
+ self.log_config = log_config
+ self.err_msg = err_msg
+
+ def __str__(self):
+ return self.message % dict(log_config=self.log_config,
+ err_msg=self.err_msg)
+
+
+def _load_log_config(log_config):
+ try:
+ logging.config.fileConfig(log_config)
+ except ConfigParser.Error as exc:
+ raise LogConfigError(log_config, str(exc))
+
+
+def setup(product_name):
+ """Setup logging."""
+ if CONF.log_config:
+ _load_log_config(CONF.log_config)
+ else:
+ _setup_logging_from_conf()
+ sys.excepthook = _create_logging_excepthook(product_name)
+
+
+def set_defaults(logging_context_format_string):
+ cfg.set_defaults(log_opts,
+ logging_context_format_string=
+ logging_context_format_string)
+
+
+def _find_facility_from_conf():
+ facility_names = logging.handlers.SysLogHandler.facility_names
+ facility = getattr(logging.handlers.SysLogHandler,
+ CONF.syslog_log_facility,
+ None)
+
+ if facility is None and CONF.syslog_log_facility in facility_names:
+ facility = facility_names.get(CONF.syslog_log_facility)
+
+ if facility is None:
+ valid_facilities = facility_names.keys()
+ consts = ['LOG_AUTH', 'LOG_AUTHPRIV', 'LOG_CRON', 'LOG_DAEMON',
+ 'LOG_FTP', 'LOG_KERN', 'LOG_LPR', 'LOG_MAIL', 'LOG_NEWS',
+ 'LOG_AUTH', 'LOG_SYSLOG', 'LOG_USER', 'LOG_UUCP',
+ 'LOG_LOCAL0', 'LOG_LOCAL1', 'LOG_LOCAL2', 'LOG_LOCAL3',
+ 'LOG_LOCAL4', 'LOG_LOCAL5', 'LOG_LOCAL6', 'LOG_LOCAL7']
+ valid_facilities.extend(consts)
+ raise TypeError(('syslog facility must be one of: %s') %
+ ', '.join("'%s'" % fac
+ for fac in valid_facilities))
+
+ return facility
+
+
+def _setup_logging_from_conf():
+ log_root = getLogger(None).logger
+ for handler in log_root.handlers:
+ log_root.removeHandler(handler)
+
+ if CONF.use_syslog:
+ facility = _find_facility_from_conf()
+ syslog = logging.handlers.SysLogHandler(address='/dev/log',
+ facility=facility)
+ log_root.addHandler(syslog)
+
+ logpath = _get_log_file_path()
+ if logpath:
+ filelog = logging.handlers.WatchedFileHandler(logpath)
+ log_root.addHandler(filelog)
+
+ if CONF.use_stderr:
+ streamlog = ColorHandler()
+ log_root.addHandler(streamlog)
+
+ elif not CONF.log_file:
+ # pass sys.stdout as a positional argument
+ # python2.6 calls the argument strm, in 2.7 it's stream
+ streamlog = logging.StreamHandler(sys.stdout)
+ log_root.addHandler(streamlog)
+
+ if CONF.publish_errors:
+ handler = importutils.import_object(
+ "quantum.openstack.common.log_handler.PublishErrorsHandler",
+ logging.ERROR)
+ log_root.addHandler(handler)
+
+ datefmt = CONF.log_date_format
+ for handler in log_root.handlers:
+ # NOTE(alaski): CONF.log_format overrides everything currently. This
+ # should be deprecated in favor of context aware formatting.
+ if CONF.log_format:
+ handler.setFormatter(logging.Formatter(fmt=CONF.log_format,
+ datefmt=datefmt))
+ log_root.info('Deprecated: log_format is now deprecated and will '
+ 'be removed in the next release')
+ else:
+ handler.setFormatter(ContextFormatter(datefmt=datefmt))
+
+ if CONF.debug:
+ log_root.setLevel(logging.DEBUG)
+ elif CONF.verbose:
+ log_root.setLevel(logging.INFO)
+ else:
+ log_root.setLevel(logging.WARNING)
+
+ for pair in CONF.default_log_levels:
+ mod, _sep, level_name = pair.partition('=')
+ level = logging.getLevelName(level_name)
+ logger = logging.getLogger(mod)
+ logger.setLevel(level)
+
+_loggers = {}
+
+
+def getLogger(name='unknown', version='unknown'):
+ if name not in _loggers:
+ _loggers[name] = ContextAdapter(logging.getLogger(name),
+ name,
+ version)
+ return _loggers[name]
+
+
+def getLazyLogger(name='unknown', version='unknown'):
+ """Returns lazy logger.
+
+ Creates a pass-through logger that does not create the real logger
+ until it is really needed and delegates all calls to the real logger
+ once it is created.
+ """
+ return LazyAdapter(name, version)
+
+
+class WritableLogger(object):
+ """A thin wrapper that responds to `write` and logs."""
+
+ def __init__(self, logger, level=logging.INFO):
+ self.logger = logger
+ self.level = level
+
+ def write(self, msg):
+ self.logger.log(self.level, msg)
+
+
+class ContextFormatter(logging.Formatter):
+ """A context.RequestContext aware formatter configured through flags.
+
+ The flags used to set format strings are: logging_context_format_string
+ and logging_default_format_string. You can also specify
+ logging_debug_format_suffix to append extra formatting if the log level is
+ debug.
+
+ For information about what variables are available for the formatter see:
+ http://docs.python.org/library/logging.html#formatter
+
+ """
+
+ def format(self, record):
+ """Uses contextstring if request_id is set, otherwise default."""
+ # NOTE(sdague): default the fancier formating params
+ # to an empty string so we don't throw an exception if
+ # they get used
+ for key in ('instance', 'color'):
+ if key not in record.__dict__:
+ record.__dict__[key] = ''
+
+ if record.__dict__.get('request_id', None):
+ self._fmt = CONF.logging_context_format_string
+ else:
+ self._fmt = CONF.logging_default_format_string
+
+ if (record.levelno == logging.DEBUG and
+ CONF.logging_debug_format_suffix):
+ self._fmt += " " + CONF.logging_debug_format_suffix
+
+ # Cache this on the record, Logger will respect our formated copy
+ if record.exc_info:
+ record.exc_text = self.formatException(record.exc_info, record)
+ return logging.Formatter.format(self, record)
+
+ def formatException(self, exc_info, record=None):
+ """Format exception output with CONF.logging_exception_prefix."""
+ if not record:
+ return logging.Formatter.formatException(self, exc_info)
+
+ stringbuffer = cStringIO.StringIO()
+ traceback.print_exception(exc_info[0], exc_info[1], exc_info[2],
+ None, stringbuffer)
+ lines = stringbuffer.getvalue().split('\n')
+ stringbuffer.close()
+
+ if CONF.logging_exception_prefix.find('%(asctime)') != -1:
+ record.asctime = self.formatTime(record, self.datefmt)
+
+ formatted_lines = []
+ for line in lines:
+ pl = CONF.logging_exception_prefix % record.__dict__
+ fl = '%s%s' % (pl, line)
+ formatted_lines.append(fl)
+ return '\n'.join(formatted_lines)
+
+
+class ColorHandler(logging.StreamHandler):
+ LEVEL_COLORS = {
+ logging.DEBUG: '\033[00;32m', # GREEN
+ logging.INFO: '\033[00;36m', # CYAN
+ logging.AUDIT: '\033[01;36m', # BOLD CYAN
+ logging.WARN: '\033[01;33m', # BOLD YELLOW
+ logging.ERROR: '\033[01;31m', # BOLD RED
+ logging.CRITICAL: '\033[01;31m', # BOLD RED
+ }
+
+ def format(self, record):
+ record.color = self.LEVEL_COLORS[record.levelno]
+ return logging.StreamHandler.format(self, record)
+
+
+class DeprecatedConfig(Exception):
+ message = ("Fatal call to deprecated config: %(msg)s")
+
+ def __init__(self, msg):
+ super(Exception, self).__init__(self.message % dict(msg=msg))
diff --git a/stackalytics/openstack/common/timeutils.py b/stackalytics/openstack/common/timeutils.py
new file mode 100644
index 000000000..ac2441bcb
--- /dev/null
+++ b/stackalytics/openstack/common/timeutils.py
@@ -0,0 +1,187 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack Foundation.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""
+Time related utilities and helper functions.
+"""
+
+import calendar
+import datetime
+
+import iso8601
+
+
+# ISO 8601 extended time format with microseconds
+_ISO8601_TIME_FORMAT_SUBSECOND = '%Y-%m-%dT%H:%M:%S.%f'
+_ISO8601_TIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
+PERFECT_TIME_FORMAT = _ISO8601_TIME_FORMAT_SUBSECOND
+
+
+def isotime(at=None, subsecond=False):
+ """Stringify time in ISO 8601 format."""
+ if not at:
+ at = utcnow()
+ st = at.strftime(_ISO8601_TIME_FORMAT
+ if not subsecond
+ else _ISO8601_TIME_FORMAT_SUBSECOND)
+ tz = at.tzinfo.tzname(None) if at.tzinfo else 'UTC'
+ st += ('Z' if tz == 'UTC' else tz)
+ return st
+
+
+def parse_isotime(timestr):
+ """Parse time from ISO 8601 format."""
+ try:
+ return iso8601.parse_date(timestr)
+ except iso8601.ParseError as e:
+ raise ValueError(e.message)
+ except TypeError as e:
+ raise ValueError(e.message)
+
+
+def strtime(at=None, fmt=PERFECT_TIME_FORMAT):
+ """Returns formatted utcnow."""
+ if not at:
+ at = utcnow()
+ return at.strftime(fmt)
+
+
+def parse_strtime(timestr, fmt=PERFECT_TIME_FORMAT):
+ """Turn a formatted time back into a datetime."""
+ return datetime.datetime.strptime(timestr, fmt)
+
+
+def normalize_time(timestamp):
+ """Normalize time in arbitrary timezone to UTC naive object."""
+ offset = timestamp.utcoffset()
+ if offset is None:
+ return timestamp
+ return timestamp.replace(tzinfo=None) - offset
+
+
+def is_older_than(before, seconds):
+ """Return True if before is older than seconds."""
+ if isinstance(before, basestring):
+ before = parse_strtime(before).replace(tzinfo=None)
+ return utcnow() - before > datetime.timedelta(seconds=seconds)
+
+
+def is_newer_than(after, seconds):
+ """Return True if after is newer than seconds."""
+ if isinstance(after, basestring):
+ after = parse_strtime(after).replace(tzinfo=None)
+ return after - utcnow() > datetime.timedelta(seconds=seconds)
+
+
+def utcnow_ts():
+ """Timestamp version of our utcnow function."""
+ return calendar.timegm(utcnow().timetuple())
+
+
+def utcnow():
+ """Overridable version of utils.utcnow."""
+ if utcnow.override_time:
+ try:
+ return utcnow.override_time.pop(0)
+ except AttributeError:
+ return utcnow.override_time
+ return datetime.datetime.utcnow()
+
+
+def iso8601_from_timestamp(timestamp):
+ """Returns a iso8601 formated date from timestamp."""
+ return isotime(datetime.datetime.utcfromtimestamp(timestamp))
+
+
+utcnow.override_time = None
+
+
+def set_time_override(override_time=datetime.datetime.utcnow()):
+ """Overrides utils.utcnow.
+
+ Make it return a constant time or a list thereof, one at a time.
+ """
+ utcnow.override_time = override_time
+
+
+def advance_time_delta(timedelta):
+ """Advance overridden time using a datetime.timedelta."""
+ assert(not utcnow.override_time is None)
+ try:
+ for dt in utcnow.override_time:
+ dt += timedelta
+ except TypeError:
+ utcnow.override_time += timedelta
+
+
+def advance_time_seconds(seconds):
+ """Advance overridden time by seconds."""
+ advance_time_delta(datetime.timedelta(0, seconds))
+
+
+def clear_time_override():
+ """Remove the overridden time."""
+ utcnow.override_time = None
+
+
+def marshall_now(now=None):
+ """Make an rpc-safe datetime with microseconds.
+
+ Note: tzinfo is stripped, but not required for relative times.
+ """
+ if not now:
+ now = utcnow()
+ return dict(day=now.day, month=now.month, year=now.year, hour=now.hour,
+ minute=now.minute, second=now.second,
+ microsecond=now.microsecond)
+
+
+def unmarshall_time(tyme):
+ """Unmarshall a datetime dict."""
+ return datetime.datetime(day=tyme['day'],
+ month=tyme['month'],
+ year=tyme['year'],
+ hour=tyme['hour'],
+ minute=tyme['minute'],
+ second=tyme['second'],
+ microsecond=tyme['microsecond'])
+
+
+def delta_seconds(before, after):
+ """Return the difference between two timing objects.
+
+ Compute the difference in seconds between two date, time, or
+ datetime objects (as a float, to microsecond resolution).
+ """
+ delta = after - before
+ try:
+ return delta.total_seconds()
+ except AttributeError:
+ return ((delta.days * 24 * 3600) + delta.seconds +
+ float(delta.microseconds) / (10 ** 6))
+
+
+def is_soon(dt, window):
+ """Determines if time is going to happen in the next window seconds.
+
+ :params dt: the time
+ :params window: minimum seconds to remain to consider the time not soon
+
+ :return: True if expiration is within the given duration
+ """
+ soon = (utcnow() + datetime.timedelta(seconds=window))
+ return normalize_time(dt) <= soon
diff --git a/stackalytics/processor/__init__.py b/stackalytics/processor/__init__.py
new file mode 100644
index 000000000..c9d84b54b
--- /dev/null
+++ b/stackalytics/processor/__init__.py
@@ -0,0 +1 @@
+__author__ = 'ishakhat'
diff --git a/stackalytics/processor/commit_processor.py b/stackalytics/processor/commit_processor.py
new file mode 100644
index 000000000..2ee3d4387
--- /dev/null
+++ b/stackalytics/processor/commit_processor.py
@@ -0,0 +1,177 @@
+# Copyright (c) 2013 Mirantis Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import re
+
+from launchpadlib import launchpad
+from oslo.config import cfg
+
+LOG = logging.getLogger(__name__)
+
+
+COMMIT_PROCESSOR_DUMMY = 0
+COMMIT_PROCESSOR_CACHED = 1
+
+
+class CommitProcessor(object):
+ def __init__(self, persistent_storage):
+ self.persistent_storage = persistent_storage
+
+ def process(self, commit_iterator):
+ pass
+
+
+class DummyProcessor(CommitProcessor):
+ def __init__(self, persistent_storage):
+ super(DummyProcessor, self).__init__(persistent_storage)
+
+ def process(self, commit_iterator):
+ return commit_iterator
+
+
+class CachedProcessor(CommitProcessor):
+ def __init__(self, persistent_storage):
+ super(CachedProcessor, self).__init__(persistent_storage)
+
+ companies = persistent_storage.get_companies()
+ self.domains_index = {}
+ for company in companies:
+ for domain in company['domains']:
+ self.domains_index[domain] = company['company_name']
+
+ users = persistent_storage.get_users()
+ self.users_index = {}
+ for user in users:
+ for email in user['emails']:
+ self.users_index[email] = user
+
+ LOG.debug('Cached commit processor is instantiated')
+
+ def _find_company(self, companies, date):
+ for r in companies:
+ if date < r['end_date']:
+ return r['company_name']
+ return companies[-1]['company_name']
+
+ def _get_company_by_email(self, email):
+ name, at, domain = email.partition('@')
+ if domain:
+ parts = domain.split('.')
+ for i in range(len(parts), 1, -1):
+ m = '.'.join(parts[len(parts) - i:])
+ if m in self.domains_index:
+ return self.domains_index[m]
+ return None
+
+ def _unknown_user_email(self, email):
+
+ lp_profile = None
+ if not re.match(r'[^@]+@[^@]+\.[^@]+', email):
+ LOG.debug('User email is not valid %s' % email)
+ else:
+ LOG.debug('Lookup user email %s at Launchpad' % email)
+ lp = launchpad.Launchpad.login_anonymously(cfg.CONF.launchpad_user)
+ try:
+ lp_profile = lp.people.getByEmail(email=email)
+ except Exception as error:
+ LOG.warn('Lookup of email %s failed %s' %
+ (email, error.message))
+ if not lp_profile:
+ # user is not found in Launchpad, create dummy record for commit
+ # update
+ LOG.debug('Email is not found at Launchpad, mapping to nobody')
+ user = {
+ 'launchpad_id': None,
+ 'companies': [{
+ 'company_name': self.domains_index[''],
+ 'end_date': 0
+ }]
+ }
+ else:
+ # get user's launchpad id from his profile
+ launchpad_id = lp_profile.name
+ LOG.debug('Found user %s' % launchpad_id)
+
+ # check if user with launchpad_id exists in persistent storage
+ persistent_user_iterator = self.persistent_storage.get_users(
+ launchpad_id=launchpad_id)
+
+ for persistent_user in persistent_user_iterator:
+ break
+ else:
+ persistent_user = None
+
+ if persistent_user:
+ # user already exist, merge
+ LOG.debug('User exists in persistent storage, add new email')
+ persistent_user_email = persistent_user['emails'][0]
+ if persistent_user_email not in self.users_index:
+ raise Exception('User index is not valid')
+ user = self.users_index[persistent_user_email]
+ user['emails'].append(email)
+ self.persistent_storage.update_user(user)
+ else:
+ # add new user
+ LOG.debug('Add new user into persistent storage')
+ company = (self._get_company_by_email(email) or
+ self.domains_index[''])
+ user = {
+ 'launchpad_id': launchpad_id,
+ 'user_name': lp_profile.display_name,
+ 'emails': [email],
+ 'companies': [{
+ 'company_name': company,
+ 'end_date': 0,
+ }],
+ }
+ self.persistent_storage.insert_user(user)
+
+ # update local index
+ self.users_index[email] = user
+ return user
+
+ def _update_commit_with_user_data(self, commit):
+ email = commit['author_email'].lower()
+ if email in self.users_index:
+ user = self.users_index[email]
+ else:
+ user = self._unknown_user_email(email)
+ commit['launchpad_id'] = user['launchpad_id']
+ company = self._get_company_by_email(email)
+ if not company:
+ company = self._find_company(user['companies'], commit['date'])
+ commit['company_name'] = company
+
+ def process(self, commit_iterator):
+
+ for commit in commit_iterator:
+ self._update_commit_with_user_data(commit)
+
+ yield commit
+
+
+class CommitProcessorFactory(object):
+ @staticmethod
+ def get_processor(commit_processor_type, persistent_storage):
+ LOG.debug('Factory is asked for commit processor type %s' %
+ commit_processor_type)
+ if commit_processor_type == COMMIT_PROCESSOR_DUMMY:
+ return DummyProcessor(persistent_storage)
+ elif commit_processor_type == COMMIT_PROCESSOR_CACHED:
+ return CachedProcessor(persistent_storage)
+ else:
+ raise Exception('Unknown commit processor type %s' %
+ commit_processor_type)
diff --git a/stackalytics/processor/main.py b/stackalytics/processor/main.py
new file mode 100644
index 000000000..818c8c5b4
--- /dev/null
+++ b/stackalytics/processor/main.py
@@ -0,0 +1,164 @@
+# Copyright (c) 2013 Mirantis Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import time
+
+from oslo.config import cfg
+import psutil
+from psutil import _error
+import sh
+
+from stackalytics.openstack.common import log as logging
+from stackalytics.openstack.common.timeutils import iso8601_from_timestamp
+from stackalytics.processor import commit_processor
+from stackalytics.processor.persistent_storage import PersistentStorageFactory
+from stackalytics.processor.runtime_storage import RuntimeStorageFactory
+from stackalytics.processor.vcs import VcsFactory
+
+
+LOG = logging.getLogger(__name__)
+
+OPTS = [
+ cfg.StrOpt('default-data', default='etc/default_data.json',
+ help='Default data'),
+ cfg.StrOpt('sources-root', default=None, required=True,
+ help='The folder that holds all project sources to analyze'),
+ cfg.StrOpt('runtime-storage-uri', default='memcached://127.0.0.1:11211',
+ help='Storage URI'),
+ cfg.StrOpt('frontend-update-address',
+ default='http://user:user@localhost/update/%s',
+ help='Address of update handler'),
+ cfg.StrOpt('repo-poll-period', default='300',
+ help='Repo poll period in seconds'),
+ cfg.StrOpt('persistent-storage-uri', default='mongodb://localhost',
+ help='URI of persistent storage'),
+ cfg.BoolOpt('sync-default-data', default=False,
+ help='Update persistent storage with default data. '
+ 'Existing data is not overwritten'),
+ cfg.BoolOpt('force-sync-default-data', default=False,
+ help='Completely overwrite persistent storage with the '
+ 'default data'),
+ cfg.StrOpt('launchpad-user', default='stackalytics-bot',
+ help='User to access Launchpad'),
+]
+
+
+def get_pids():
+ uwsgi_dict = {}
+ for pid in psutil.get_pid_list():
+ try:
+ p = psutil.Process(pid)
+ if p.cmdline and p.cmdline[0].find('/uwsgi '):
+ uwsgi_dict[p.pid] = p.parent
+ except _error.NoSuchProcess:
+ # the process may disappear after get_pid_list call, ignore it
+ pass
+
+ result = set()
+ for pid in uwsgi_dict:
+ if uwsgi_dict[pid] in uwsgi_dict:
+ result.add(pid)
+
+ return result
+
+
+def update_pid(pid):
+ url = cfg.CONF.frontend_update_address % pid
+ sh.curl(url)
+
+
+def update_pids(runtime_storage):
+ pids = get_pids()
+ if not pids:
+ return
+ runtime_storage.active_pids(pids)
+ current_time = time.time()
+ for pid in pids:
+ if current_time > runtime_storage.get_pid_update_time(pid):
+ update_pid(pid)
+ return current_time
+
+
+def process_repo(repo, runtime_storage, processor):
+ uri = repo['uri']
+ LOG.debug('Processing repo uri %s' % uri)
+
+ vcs = VcsFactory.get_vcs(repo)
+ vcs.fetch()
+
+ for branch in repo['branches']:
+ LOG.debug('Processing repo %s, branch %s' % (uri, branch))
+
+ head_commit_id = runtime_storage.get_head_commit_id(uri, branch)
+
+ commit_iterator = vcs.log(branch, head_commit_id)
+ processed_commit_iterator = processor.process(commit_iterator)
+ runtime_storage.set_records(processed_commit_iterator)
+
+ head_commit_id = vcs.get_head_commit_id(branch)
+ runtime_storage.set_head_commit_id(uri, branch, head_commit_id)
+
+
+def update_repos(runtime_storage, persistent_storage):
+ current_time = time.time()
+ repo_update_time = runtime_storage.get_repo_update_time()
+
+ if current_time < repo_update_time:
+ LOG.info('The next update is scheduled at %s. Skipping' %
+ iso8601_from_timestamp(repo_update_time))
+ return
+
+ repos = persistent_storage.get_repos()
+ processor = commit_processor.CommitProcessorFactory.get_processor(
+ commit_processor.COMMIT_PROCESSOR_CACHED,
+ persistent_storage)
+
+ for repo in repos:
+ process_repo(repo, runtime_storage, processor)
+
+ runtime_storage.set_repo_update_time(time.time() +
+ int(cfg.CONF.repo_poll_period))
+
+
+def main():
+ # init conf and logging
+ conf = cfg.CONF
+ conf.register_cli_opts(OPTS)
+ conf.register_opts(OPTS)
+ conf()
+
+ logging.setup('stackalytics')
+ LOG.info('Logging enabled')
+
+ persistent_storage = PersistentStorageFactory.get_storage(
+ cfg.CONF.persistent_storage_uri)
+
+ if conf.sync_default_data or conf.force_sync_default_data:
+ LOG.info('Going to synchronize persistent storage with default data '
+ 'from file %s' % cfg.CONF.default_data)
+ persistent_storage.sync(cfg.CONF.default_data,
+ force=conf.force_sync_default_data)
+ return 0
+
+ runtime_storage = RuntimeStorageFactory.get_storage(
+ cfg.CONF.runtime_storage_uri)
+
+ update_pids(runtime_storage)
+
+ update_repos(runtime_storage, persistent_storage)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/stackalytics/processor/persistent_storage.py b/stackalytics/processor/persistent_storage.py
new file mode 100644
index 000000000..ec338ab7d
--- /dev/null
+++ b/stackalytics/processor/persistent_storage.py
@@ -0,0 +1,150 @@
+# Copyright (c) 2013 Mirantis Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json
+import logging
+import re
+
+import pymongo
+
+from stackalytics.processor.user_utils import normalize_user
+
+LOG = logging.getLogger(__name__)
+
+
+class PersistentStorage(object):
+ def __init__(self, uri):
+ pass
+
+ def sync(self, default_data_file_name, force=False):
+ if force:
+ self.clean_all()
+
+ default_data = self._read_default_persistent_storage(
+ default_data_file_name)
+
+ self._build_index(default_data['repos'], 'uri',
+ self.get_repos, self.insert_repo)
+ self._build_index(default_data['companies'], 'company_name',
+ self.get_companies, self.insert_company)
+ self._build_index(default_data['users'], 'launchpad_id',
+ self.get_users, self.insert_user)
+ self._build_index(default_data['releases'], 'release_name',
+ self.get_releases, self.insert_release)
+
+ def _build_index(self, default_data, primary_key, getter, inserter):
+ # loads all items from persistent storage
+ existing_items = set([item[primary_key] for item in getter()])
+ # inserts items from default storage that are not in persistent storage
+ map(inserter, [item for item in default_data
+ if item[primary_key] not in existing_items])
+
+ def get_companies(self, **criteria):
+ pass
+
+ def insert_company(self, company):
+ pass
+
+ def get_repos(self, **criteria):
+ pass
+
+ def insert_repo(self, repo):
+ pass
+
+ def get_users(self, **criteria):
+ pass
+
+ def insert_user(self, user):
+ pass
+
+ def update_user(self, user):
+ pass
+
+ def get_releases(self, **criteria):
+ pass
+
+ def insert_release(self, release):
+ pass
+
+ def clean_all(self):
+ pass
+
+ def _read_default_persistent_storage(self, file_name):
+ try:
+ with open(file_name, 'r') as content_file:
+ content = content_file.read()
+ return json.loads(content)
+ except Exception as e:
+ LOG.error('Error while reading config: %s' % e)
+
+
+class MongodbStorage(PersistentStorage):
+ def __init__(self, uri):
+ super(MongodbStorage, self).__init__(uri)
+
+ self.client = pymongo.MongoClient(uri)
+ self.mongo = self.client.stackalytics
+
+ self.mongo.companies.create_index([("company", pymongo.ASCENDING)])
+ self.mongo.repos.create_index([("uri", pymongo.ASCENDING)])
+ self.mongo.users.create_index([("launchpad_id", pymongo.ASCENDING)])
+ self.mongo.releases.create_index([("releases", pymongo.ASCENDING)])
+
+ LOG.debug('Mongodb storage is created')
+
+ def clean_all(self):
+ LOG.debug('Clear all tables')
+ self.mongo.companies.remove()
+ self.mongo.repos.remove()
+ self.mongo.users.remove()
+ self.mongo.releases.remove()
+
+ def get_companies(self, **criteria):
+ return self.mongo.companies.find(criteria)
+
+ def insert_company(self, company):
+ self.mongo.companies.insert(company)
+
+ def get_repos(self, **criteria):
+ return self.mongo.repos.find(criteria)
+
+ def insert_repo(self, repo):
+ self.mongo.repos.insert(repo)
+
+ def get_users(self, **criteria):
+ return self.mongo.users.find(criteria)
+
+ def insert_user(self, user):
+ self.mongo.users.insert(normalize_user(user))
+
+ def update_user(self, user):
+ normalize_user(user)
+ launchpad_id = user['launchpad_id']
+ self.mongo.users.update({'launchpad_id': launchpad_id}, user)
+
+ def get_releases(self, **criteria):
+ return self.mongo.releases.find(criteria)
+
+ def insert_release(self, release):
+ self.mongo.releases.insert(release)
+
+
+class PersistentStorageFactory(object):
+ @staticmethod
+ def get_storage(uri):
+ LOG.debug('Persistent storage is requested for uri %s' % uri)
+ match = re.search(r'^mongodb:\/\/', uri)
+ if match:
+ return MongodbStorage(uri)
diff --git a/stackalytics/processor/runtime_storage.py b/stackalytics/processor/runtime_storage.py
new file mode 100644
index 000000000..69ef80a2f
--- /dev/null
+++ b/stackalytics/processor/runtime_storage.py
@@ -0,0 +1,196 @@
+# Copyright (c) 2013 Mirantis Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+
+import re
+import urllib
+
+import memcache
+from oslo.config import cfg
+
+LOG = logging.getLogger(__name__)
+
+
+class RuntimeStorage(object):
+ def __init__(self, uri):
+ pass
+
+ def set_records(self, records_iterator):
+ pass
+
+ def get_head_commit_id(self, uri, branch):
+ pass
+
+ def set_head_commit_id(self, uri, branch, head_commit_id):
+ pass
+
+ def get_update(self, pid):
+ pass
+
+ def active_pids(self, pids):
+ pass
+
+ def get_pid_update_time(self, pid):
+ pass
+
+ def set_pid_update_time(self, pid, time):
+ pass
+
+ def get_repo_update_time(self):
+ pass
+
+ def set_repo_update_time(self, time):
+ pass
+
+
+class MemcachedStorage(RuntimeStorage):
+
+ def __init__(self, uri):
+ super(MemcachedStorage, self).__init__(uri)
+
+ stripped = re.sub(r'memcached:\/\/', '', uri)
+ if stripped:
+ storage_uri = stripped.split(',')
+ self.memcached = memcache.Client(storage_uri)
+ self._build_index()
+ else:
+ raise Exception('Invalid storage uri %s' % cfg.CONF.storage_uri)
+
+ def set_records(self, records_iterator):
+ for record in records_iterator:
+ if record['commit_id'] in self.commit_id_index:
+ # update
+ record_id = self.commit_id_index[record['commit_id']]
+ old_record = self.memcached.get(
+ self._get_record_name(record_id))
+ old_record['branches'] |= record['branches']
+ LOG.debug('Update record %s' % record)
+ self.memcached.set(self._get_record_name(record_id),
+ old_record)
+ else:
+ # insert record
+ record_id = self._get_record_count()
+ record['record_id'] = record_id
+ LOG.debug('Insert new record %s' % record)
+ self.memcached.set(self._get_record_name(record_id), record)
+ self._set_record_count(record_id + 1)
+
+ self._commit_update(record_id)
+
+ def get_head_commit_id(self, uri, branch):
+ key = str(urllib.quote_plus(uri) + ':' + branch)
+ return self.memcached.get(key)
+
+ def set_head_commit_id(self, uri, branch, head_commit_id):
+ key = str(urllib.quote_plus(uri) + ':' + branch)
+ self.memcached.set(key, head_commit_id)
+
+ def get_update(self, pid):
+ last_update = self.memcached.get('pid:%s' % pid)
+ update_count = self._get_update_count()
+
+ self.memcached.set('pid:%s' % pid, update_count)
+ self._set_pids(pid)
+
+ if not last_update:
+ for record_id in range(0, self._get_record_count()):
+ yield self.memcached.get(self._get_record_name(record_id))
+ else:
+ for update_id in range(last_update, update_count):
+ yield self.memcached.get(self._get_record_name(
+ self.memcached.get('update:%s' % update_id)))
+
+ def active_pids(self, pids):
+ stored_pids = self.memcached.get('pids') or set()
+ for pid in stored_pids:
+ if pid not in pids:
+ self.memcached.delete('pid:%s' % pid)
+ self.memcached.delete('pid_update_time:%s' % pid)
+
+ self.memcached.set('pids', pids)
+
+ # remove unneeded updates
+ min_update = self._get_update_count()
+ for pid in pids:
+ n = self.memcached.get('pid:%s' % pid)
+ if n:
+ if n < min_update:
+ min_update = n
+
+ first_valid_update_id = self.memcached.get('first_valid_update_id')
+ if not first_valid_update_id:
+ first_valid_update_id = 0
+
+ for i in range(first_valid_update_id, min_update):
+ self.memcached.delete('update:%s' % i)
+
+ self.memcached.set('first_valid_update_id', min_update)
+
+ def get_pid_update_time(self, pid):
+ return self.memcached.get('pid_update_time:%s' % pid) or 0
+
+ def set_pid_update_time(self, pid, time):
+ self.memcached.set('pid_update_time:%s' % pid, time)
+
+ def get_repo_update_time(self):
+ return self.memcached.get('repo_update_time') or 0
+
+ def set_repo_update_time(self, time):
+ self.memcached.set('repo_update_time', time)
+
+ def _get_update_count(self):
+ return self.memcached.get('update:count') or 0
+
+ def _set_pids(self, pid):
+ pids = self.memcached.get('pids') or set()
+ if pid in pids:
+ return
+ pids.add(pid)
+ self.memcached.set('pids', pids)
+
+ def _get_record_name(self, record_id):
+ return 'record:%s' % record_id
+
+ def _get_record_count(self):
+ return self.memcached.get('record:count') or 0
+
+ def _set_record_count(self, count):
+ self.memcached.set('record:count', count)
+
+ def _get_all_records(self):
+ count = self.memcached.get('record:count') or 0
+ for i in range(0, count):
+ yield self.memcached.get('record:%s' % i)
+
+ def _commit_update(self, record_id):
+ count = self._get_update_count()
+ self.memcached.set('update:%s' % count, record_id)
+ self.memcached.set('update:count', count + 1)
+
+ def _build_index(self):
+ self.commit_id_index = {}
+ for record in self._get_all_records():
+ self.commit_id_index[record['commit_id']] = record['record_id']
+
+
+class RuntimeStorageFactory(object):
+
+ @staticmethod
+ def get_storage(uri):
+ LOG.debug('Runtime storage is requested for uri %s' % uri)
+ match = re.search(r'^memcached:\/\/', uri)
+ if match:
+ return MemcachedStorage(uri)
diff --git a/stackalytics/processor/user_utils.py b/stackalytics/processor/user_utils.py
new file mode 100644
index 000000000..d436c3b81
--- /dev/null
+++ b/stackalytics/processor/user_utils.py
@@ -0,0 +1,58 @@
+# Copyright (c) 2013 Mirantis Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import datetime
+import time
+
+
+def normalize_user(user):
+ user['emails'] = [email.lower() for email in user['emails']]
+ user['launchpad_id'] = user['launchpad_id'].lower()
+
+ for c in user['companies']:
+ end_date_numeric = 0
+ if c['end_date']:
+ end_date_numeric = date_to_timestamp(c['end_date'])
+ c['end_date'] = end_date_numeric
+
+ # sort companies by end_date
+ def end_date_comparator(x, y):
+ if x["end_date"] == 0:
+ return 1
+ elif y["end_date"] == 0:
+ return -1
+ else:
+ return cmp(x["end_date"], y["end_date"])
+
+ user['companies'].sort(cmp=end_date_comparator)
+ return user
+
+
+def date_to_timestamp(d):
+ if d == 'now':
+ return int(time.time())
+ return int(time.mktime(
+ datetime.datetime.strptime(d, '%Y-%b-%d').timetuple()))
+
+
+def timestamp_to_week(timestamp):
+ # Jan 4th 1970 is the first Sunday in the Epoch
+ return (timestamp - 3 * 24 * 3600) // (7 * 24 * 3600)
+
+
+def week_to_date(week):
+ timestamp = week * 7 * 24 * 3600 + 3 * 24 * 3600
+ return (datetime.datetime.fromtimestamp(timestamp).
+ strftime('%Y-%m-%d %H:%M:%S'))
diff --git a/stackalytics/processor/vcs.py b/stackalytics/processor/vcs.py
new file mode 100644
index 000000000..b0c5e8ab5
--- /dev/null
+++ b/stackalytics/processor/vcs.py
@@ -0,0 +1,175 @@
+# Copyright (c) 2013 Mirantis Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import logging
+
+import os
+import re
+
+from oslo.config import cfg
+import sh
+
+
+LOG = logging.getLogger(__name__)
+
+
+class Vcs(object):
+ def __init__(self, repo):
+ self.repo = repo
+
+ def fetch(self):
+ pass
+
+ def log(self, branch, head_commit_id):
+ pass
+
+ def get_head_commit_id(self, branch):
+ pass
+
+
+GIT_LOG_PARAMS = [
+ ('commit_id', '%H'),
+ ('date', '%at'),
+ ('author', '%an'),
+ ('author_email', '%ae'),
+ ('author_email', '%ae'),
+ ('subject', '%s'),
+ ('message', '%b'),
+]
+GIT_LOG_FORMAT = ''.join([(r[0] + ':' + r[1] + '%n')
+ for r in GIT_LOG_PARAMS]) + 'diff_stat:'
+DIFF_STAT_PATTERN = ('[^\d]+(\d+)\s+[^\s]*\s+changed'
+ '(,\s+(\d+)\s+([^\d\s]*)\s+(\d+)?)?')
+GIT_LOG_PATTERN = re.compile(''.join([(r[0] + ':(.*?)\n')
+ for r in GIT_LOG_PARAMS]) +
+ 'diff_stat:' + DIFF_STAT_PATTERN,
+ re.DOTALL)
+
+MESSAGE_PATTERNS = {
+ 'bug_id': re.compile('bug\s+#?([\d]{5,7})', re.IGNORECASE),
+ 'blueprint_id': re.compile('blueprint\s+([\w-]{6,})', re.IGNORECASE),
+ 'change_id': re.compile('Change-Id: (I[0-9a-f]{40})', re.IGNORECASE),
+}
+
+
+class Git(Vcs):
+
+ def __init__(self, repo):
+ super(Git, self).__init__(repo)
+ uri = self.repo['uri']
+ match = re.search(r'([^\/]+)\.git$', uri)
+ if match:
+ self.module = match.group(1)
+ else:
+ raise Exception('Unexpected uri %s for git' % uri)
+ self.release_index = {}
+
+ def _chdir(self):
+ folder = os.path.normpath(cfg.CONF.sources_root + '/' + self.module)
+ os.chdir(folder)
+
+ def fetch(self):
+ LOG.debug('Fetching repo uri %s' % self.repo['uri'])
+
+ folder = os.path.normpath(cfg.CONF.sources_root + '/' + self.module)
+
+ if not os.path.exists(folder):
+ os.chdir(cfg.CONF.sources_root)
+ sh.git('clone', '%s' % self.repo['uri'])
+ os.chdir(folder)
+ else:
+ self._chdir()
+ sh.git('pull', 'origin')
+
+ for release in self.repo['releases']:
+ release_name = release['release_name'].lower()
+ tag_range = release['tag_from'] + '..' + release['tag_to']
+ git_log_iterator = sh.git('log', '--pretty=%H', tag_range,
+ _tty_out=False)
+ for commit_id in git_log_iterator:
+ self.release_index[commit_id.strip()] = release_name
+
+ def log(self, branch, head_commit_id):
+ LOG.debug('Parsing git log for repo uri %s' % self.repo['uri'])
+
+ self._chdir()
+ sh.git('checkout', '%s' % branch)
+ commit_range = 'HEAD'
+ if head_commit_id:
+ commit_range = head_commit_id + '..HEAD'
+ output = sh.git('log', '--pretty=%s' % GIT_LOG_FORMAT, '--shortstat',
+ '-M', '--no-merges', commit_range, _tty_out=False)
+
+ for rec in re.finditer(GIT_LOG_PATTERN, str(output)):
+ i = 1
+ commit = {}
+ for param in GIT_LOG_PARAMS:
+ commit[param[0]] = unicode(rec.group(i), 'utf8')
+ i += 1
+
+ commit['files_changed'] = int(rec.group(i))
+ i += 1
+ lines_changed_group = rec.group(i)
+ i += 1
+ lines_changed = rec.group(i)
+ i += 1
+ deleted_or_inserted = rec.group(i)
+ i += 1
+ lines_deleted = rec.group(i)
+ i += 1
+
+ if lines_changed_group: # there inserted or deleted lines
+ if not lines_deleted:
+ if deleted_or_inserted[0] == 'd': # deleted
+ lines_deleted = lines_changed
+ lines_changed = 0
+
+ commit['lines_added'] = int(lines_changed or 0)
+ commit['lines_deleted'] = int(lines_deleted or 0)
+
+ for key in MESSAGE_PATTERNS:
+ match = re.search(MESSAGE_PATTERNS[key], commit['message'])
+ if match:
+ commit[key] = match.group(1)
+ else:
+ commit[key] = None
+
+ commit['date'] = int(commit['date'])
+ commit['module'] = self.module
+ commit['branches'] = set([branch])
+ if commit['commit_id'] in self.release_index:
+ commit['release'] = self.release_index[commit['commit_id']]
+ else:
+ commit['release'] = None
+
+ yield commit
+
+ def get_head_commit_id(self, branch):
+ LOG.debug('Get head commit for repo uri %s' % self.repo['uri'])
+
+ self._chdir()
+ sh.git('checkout', '%s' % branch)
+ return str(sh.git('rev-parse', 'HEAD')).strip()
+
+
+class VcsFactory(object):
+
+ @staticmethod
+ def get_vcs(repo):
+ uri = repo['uri']
+ LOG.debug('Factory is asked for Vcs uri %s' % uri)
+ match = re.search(r'\.git$', uri)
+ if match:
+ return Git(repo)
+ #todo others vcs to be implemented
diff --git a/test-requirements.txt b/test-requirements.txt
index 3a144b769..d27f5fdf0 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -7,7 +7,7 @@ hacking>=0.5.3,<0.6
coverage
discover
fixtures>=0.3.12
-mox
+mock
python-subunit
testrepository>=0.0.13
testtools>=0.9.22
diff --git a/tests/unit/test_commit_processor.py b/tests/unit/test_commit_processor.py
new file mode 100644
index 000000000..112e143e9
--- /dev/null
+++ b/tests/unit/test_commit_processor.py
@@ -0,0 +1,231 @@
+from launchpadlib import launchpad
+import mock
+from oslo.config import cfg
+import testtools
+
+from stackalytics.processor import commit_processor
+from stackalytics.processor import persistent_storage
+
+
+class TestCommitProcessor(testtools.TestCase):
+ def setUp(self):
+ super(TestCommitProcessor, self).setUp()
+
+ p_storage = mock.Mock(persistent_storage.PersistentStorage)
+ p_storage.get_companies = mock.Mock(return_value=[
+ {
+ 'company_name': 'SuperCompany',
+ 'domains': ['super.com', 'super.no']
+ },
+ {
+ "domains": ["nec.com", "nec.co.jp"],
+ "company_name": "NEC"
+ },
+ {
+ 'company_name': '*independent',
+ 'domains': ['']
+ },
+ ])
+ self.user = {
+ 'launchpad_id': 'john_doe', 'user_name': 'John Doe',
+ 'emails': ['johndoe@gmail.com', 'jdoe@super.no'],
+ 'companies': [
+ {'company_name': '*independent',
+ 'end_date': 1234567890},
+ {'company_name': 'SuperCompany',
+ 'end_date': 0},
+ ]
+ }
+ p_storage.get_users = mock.Mock(return_value=[
+ self.user,
+ ])
+
+ self.persistent_storage = p_storage
+ self.commit_processor = commit_processor.CachedProcessor(p_storage)
+ self.launchpad_patch = mock.patch('launchpadlib.launchpad.Launchpad')
+ self.launchpad_patch.start()
+ cfg.CONF = mock.MagicMock()
+
+ def tearDown(self):
+ super(TestCommitProcessor, self).tearDown()
+ self.launchpad_patch.stop()
+
+ def test_get_company_by_email_mapped(self):
+ email = 'jdoe@super.no'
+ res = self.commit_processor._get_company_by_email(email)
+ self.assertEquals('SuperCompany', res)
+
+ def test_get_company_by_email_with_long_suffix_mapped(self):
+ email = 'man@mxw.nes.nec.co.jp'
+ res = self.commit_processor._get_company_by_email(email)
+ self.assertEquals('NEC', res)
+
+ def test_get_company_by_email_with_long_suffix_mapped_2(self):
+ email = 'man@mxw.nes.nec.com'
+ res = self.commit_processor._get_company_by_email(email)
+ self.assertEquals('NEC', res)
+
+ def test_get_company_by_email_not_mapped(self):
+ email = 'foo@boo.com'
+ res = self.commit_processor._get_company_by_email(email)
+ self.assertEquals(None, res)
+
+ def test_update_commit_existing_user(self):
+ commit = {
+ 'author_email': 'johndoe@gmail.com',
+ 'date': 1999999999,
+ }
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ self.assertEquals('SuperCompany', commit['company_name'])
+ self.assertEquals('john_doe', commit['launchpad_id'])
+
+ def test_update_commit_existing_user_old_job(self):
+ commit = {
+ 'author_email': 'johndoe@gmail.com',
+ 'date': 1000000000,
+ }
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ self.assertEquals('*independent', commit['company_name'])
+ self.assertEquals('john_doe', commit['launchpad_id'])
+
+ def test_update_commit_existing_user_new_email_known_company(self):
+ """
+ User is known to LP, his email is new to us, and maps to other company
+ Should return other company instead of those mentioned in user db
+ """
+ email = 'johndoe@nec.co.jp'
+ commit = {
+ 'author_email': email,
+ 'date': 1999999999,
+ }
+ lp_mock = mock.MagicMock()
+ launchpad.Launchpad.login_anonymously = mock.Mock(return_value=lp_mock)
+ lp_profile = mock.Mock()
+ lp_profile.name = 'john_doe'
+ lp_mock.people.getByEmail = mock.Mock(return_value=lp_profile)
+ user = self.user.copy()
+ # tell storage to return existing user
+ self.persistent_storage.get_users.return_value = [user]
+
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ self.persistent_storage.update_user.assert_called_once_with(user)
+ lp_mock.people.getByEmail.assert_called_once_with(email=email)
+ self.assertIn(email, user['emails'])
+ self.assertEquals('NEC', commit['company_name'])
+ self.assertEquals('john_doe', commit['launchpad_id'])
+
+ def test_update_commit_existing_user_new_email_unknown_company(self):
+ """
+ User is known to LP, but his email is new to us. Should match
+ the user and return current company
+ """
+ email = 'johndoe@yahoo.com'
+ commit = {
+ 'author_email': email,
+ 'date': 1999999999,
+ }
+ lp_mock = mock.MagicMock()
+ launchpad.Launchpad.login_anonymously = mock.Mock(return_value=lp_mock)
+ lp_profile = mock.Mock()
+ lp_profile.name = 'john_doe'
+ lp_mock.people.getByEmail = mock.Mock(return_value=lp_profile)
+ user = self.user.copy()
+ # tell storage to return existing user
+ self.persistent_storage.get_users.return_value = [user]
+
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ self.persistent_storage.update_user.assert_called_once_with(user)
+ lp_mock.people.getByEmail.assert_called_once_with(email=email)
+ self.assertIn(email, user['emails'])
+ self.assertEquals('SuperCompany', commit['company_name'])
+ self.assertEquals('john_doe', commit['launchpad_id'])
+
+ def test_update_commit_new_user(self):
+ """
+ User is known to LP, but new to us
+ Should add new user and set company depending on email
+ """
+ email = 'smith@nec.com'
+ commit = {
+ 'author_email': email,
+ 'date': 1999999999,
+ }
+ lp_mock = mock.MagicMock()
+ launchpad.Launchpad.login_anonymously = mock.Mock(return_value=lp_mock)
+ lp_profile = mock.Mock()
+ lp_profile.name = 'smith'
+ lp_profile.display_name = 'Smith'
+ lp_mock.people.getByEmail = mock.Mock(return_value=lp_profile)
+ self.persistent_storage.get_users.return_value = []
+
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ lp_mock.people.getByEmail.assert_called_once_with(email=email)
+ self.assertEquals('NEC', commit['company_name'])
+ self.assertEquals('smith', commit['launchpad_id'])
+
+ def test_update_commit_new_user_unknown_to_lb(self):
+ """
+ User is new to us and not known to LP
+ Should set user name and empty LPid
+ """
+ email = 'inkognito@avs.com'
+ commit = {
+ 'author_email': email,
+ 'date': 1999999999,
+ }
+ lp_mock = mock.MagicMock()
+ launchpad.Launchpad.login_anonymously = mock.Mock(return_value=lp_mock)
+ lp_mock.people.getByEmail = mock.Mock(return_value=None)
+ self.persistent_storage.get_users.return_value = []
+
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ lp_mock.people.getByEmail.assert_called_once_with(email=email)
+ self.assertEquals('*independent', commit['company_name'])
+ self.assertEquals(None, commit['launchpad_id'])
+
+ def test_update_commit_new_user_lb_raises_error(self):
+ """
+ LP raises error during getting user info
+ """
+ email = 'smith@avs.com'
+ commit = {
+ 'author_email': email,
+ 'date': 1999999999,
+ }
+ lp_mock = mock.MagicMock()
+ launchpad.Launchpad.login_anonymously = mock.Mock(return_value=lp_mock)
+ lp_mock.people.getByEmail = mock.Mock(return_value=None,
+ side_effect=Exception)
+ self.persistent_storage.get_users.return_value = []
+
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ lp_mock.people.getByEmail.assert_called_once_with(email=email)
+ self.assertEquals('*independent', commit['company_name'])
+ self.assertEquals(None, commit['launchpad_id'])
+
+ def test_update_commit_invalid_email(self):
+ """
+ User's email is malformed
+ """
+ email = 'error.root'
+ commit = {
+ 'author_email': email,
+ 'date': 1999999999,
+ }
+ lp_mock = mock.MagicMock()
+ launchpad.Launchpad.login_anonymously = mock.Mock(return_value=lp_mock)
+ lp_mock.people.getByEmail = mock.Mock(return_value=None)
+ self.persistent_storage.get_users.return_value = []
+
+ self.commit_processor._update_commit_with_user_data(commit)
+
+ self.assertEquals(0, lp_mock.people.getByEmail.called)
+ self.assertEquals('*independent', commit['company_name'])
+ self.assertEquals(None, commit['launchpad_id'])
diff --git a/tests/unit/test_dashboard.py b/tests/unit/test_dashboard.py
deleted file mode 100644
index ae0c46b2f..000000000
--- a/tests/unit/test_dashboard.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import os
-import tempfile
-import unittest
-
-from dashboard import dashboard
-
-
-class DashboardTestCase(unittest.TestCase):
-
- def setUp(self):
- self.db_fd, dashboard.app.config['DATABASE'] = tempfile.mkstemp()
- dashboard.app.config['TESTING'] = True
- self.app = dashboard.app.test_client()
- # dashboard.init_db()
-
- def tearDown(self):
- os.close(self.db_fd)
- os.unlink(dashboard.app.config['DATABASE'])
-
- def test_home_page(self):
- rv = self.app.get('/')
- assert rv.status_code == 200
diff --git a/tests/unit/test_vcs.py b/tests/unit/test_vcs.py
new file mode 100644
index 000000000..dd6d497c1
--- /dev/null
+++ b/tests/unit/test_vcs.py
@@ -0,0 +1,110 @@
+import mock
+import os
+import testtools
+
+from oslo.config import cfg
+
+from stackalytics.processor import vcs
+
+
+class TestVcsProcessor(testtools.TestCase):
+ def setUp(self):
+ super(TestVcsProcessor, self).setUp()
+
+ self.repo = {
+ 'uri': 'git://github.com/dummy.git',
+ 'releases': []
+ }
+ self.git = vcs.Git(self.repo)
+ cfg.CONF.sources_root = ''
+ os.chdir = mock.Mock()
+
+ def test_git_log(self):
+ with mock.patch('sh.git') as git_mock:
+ git_mock.return_value = '''
+commit_id:b5a416ac344160512f95751ae16e6612aefd4a57
+date:1369119386
+author:Akihiro MOTOKI
+author_email:motoki@da.jp.nec.com
+author_email:motoki@da.jp.nec.com
+subject:Remove class-based import in the code repo
+message:Fixes bug 1167901
+
+This commit also removes backslashes for line break.
+
+Change-Id: Id26fdfd2af4862652d7270aec132d40662efeb96
+
+diff_stat:
+
+ 21 files changed, 340 insertions(+), 408 deletions(-)
+commit_id:5be031f81f76d68c6e4cbaad2247044aca179843
+date:1370975889
+author:Monty Taylor
+author_email:mordred@inaugust.com
+author_email:mordred@inaugust.com
+subject:Remove explicit distribute depend.
+message:Causes issues with the recent re-merge with setuptools. Advice from
+upstream is to stop doing explicit depends.
+
+Change-Id: I70638f239794e78ba049c60d2001190910a89c90
+
+diff_stat:
+
+ 1 file changed, 1 deletion(-)
+commit_id:92811c76f3a8308b36f81e61451ec17d227b453b
+date:1369831203
+author:Mark McClain
+author_email:mark.mcclain@dreamhost.com
+author_email:mark.mcclain@dreamhost.com
+subject:add readme for 2.2.2
+message:Change-Id: Id32a4a72ec1d13992b306c4a38e73605758e26c7
+
+diff_stat:
+
+ 1 file changed, 8 insertions(+)
+commit_id:92811c76f3a8308b36f81e61451ec17d227b453b
+date:1369831203
+author:John Doe
+author_email:john.doe@dreamhost.com
+author_email:john.doe@dreamhost.com
+subject:add readme for 2.2.2
+message:Change-Id: Id32a4a72ec1d13992b306c4a38e73605758e26c7
+
+diff_stat:
+
+ 0 files changed
+commit_id:92811c76f3a8308b36f81e61451ec17d227b453b
+date:1369831203
+author:Doug Hoffner
+author_email:mark.mcclain@dreamhost.com
+author_email:mark.mcclain@dreamhost.com
+subject:add readme for 2.2.2
+message:Change-Id: Id32a4a72ec1d13992b306c4a38e73605758e26c7
+
+diff_stat:
+
+ 0 files changed, 0 insertions(+), 0 deletions(-)
+ '''
+
+ commits = list(self.git.log('dummy', 'dummy'))
+ self.assertEquals(5, len(commits))
+
+ self.assertEquals(21, commits[0]['files_changed'])
+ self.assertEquals(340, commits[0]['lines_added'])
+ self.assertEquals(408, commits[0]['lines_deleted'])
+
+ self.assertEquals(1, commits[1]['files_changed'])
+ self.assertEquals(0, commits[1]['lines_added'])
+ self.assertEquals(1, commits[1]['lines_deleted'])
+
+ self.assertEquals(1, commits[2]['files_changed'])
+ self.assertEquals(8, commits[2]['lines_added'])
+ self.assertEquals(0, commits[2]['lines_deleted'])
+
+ self.assertEquals(0, commits[3]['files_changed'])
+ self.assertEquals(0, commits[3]['lines_added'])
+ self.assertEquals(0, commits[3]['lines_deleted'])
+
+ self.assertEquals(0, commits[4]['files_changed'])
+ self.assertEquals(0, commits[4]['lines_added'])
+ self.assertEquals(0, commits[4]['lines_deleted'])
diff --git a/tox.ini b/tox.ini
index d768f8f3e..534194b9c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist = py27,pep8
+envlist = py26,py27,pep8
[testenv]
setenv = VIRTUAL_ENV={envdir}
@@ -26,7 +26,8 @@ downloadcache = ~/cache/pip
[flake8]
# E125 continuation line does not distinguish itself from next logical line
-ignore = E125
+# H404 multi line docstring should start with a summary
+ignore = E125,H404
show-source = true
builtins = _
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,tools,pycvsanaly2