Add membership map build role.
This commit is contained in:
parent
06f0f37a35
commit
819e5a6117
3 changed files with 170 additions and 0 deletions
1
roles/membership-map/build/files/membership-map-build
Normal file
1
roles/membership-map/build/files/membership-map-build
Normal file
|
@ -0,0 +1 @@
|
|||
48 5 * * * root /usr/local/bin/membership-map.py > /dev/null
|
15
roles/membership-map/build/tasks/main.yml
Normal file
15
roles/membership-map/build/tasks/main.yml
Normal file
|
@ -0,0 +1,15 @@
|
|||
- file: dest=/srv/web/membership-map state=directory
|
||||
|
||||
- copy: >
|
||||
src=membership-map.py dest=/usr/local/bin/membership-map.py
|
||||
owner=root group=root mode=0755
|
||||
tags:
|
||||
- membership-map
|
||||
- membership-map/build
|
||||
|
||||
- copy: >
|
||||
src=membership-map-build dest=/etc/cron.d/membership-map-build
|
||||
owner=root group=root mode=0644
|
||||
tags:
|
||||
- membership-map
|
||||
- membership-map/build
|
154
roles/membership-map/build/templates/membership-map.py
Executable file
154
roles/membership-map/build/templates/membership-map.py
Executable file
|
@ -0,0 +1,154 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
|
||||
# This script is for generating output for ambassadors map like this
|
||||
# http://fedoraproject.org/membership-map
|
||||
|
||||
# Copyright (C) 2009, Susmit Shannigrahi, Susmit AT fedoraproject DOT org
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
import getpass
|
||||
from fedora.client.fas2 import AccountSystem
|
||||
import GeoIP
|
||||
import cPickle as pickle
|
||||
import codecs
|
||||
import datetime
|
||||
|
||||
|
||||
|
||||
def calc_list():
|
||||
'''Generate the ambassadors map data'''
|
||||
output = []
|
||||
people_list = []
|
||||
flag = 0
|
||||
|
||||
group_name = 'ambassadors'
|
||||
|
||||
username = 'fedoradummy'
|
||||
password = '<%= fedoraDummyUserPassword %>'
|
||||
|
||||
{% if env == "staging" %}
|
||||
base_url = 'https://admin.stg.fedoraproject.org/accounts/'
|
||||
{% else %}
|
||||
base_url = 'https://admin.fedoraproject.org/accounts/'
|
||||
{% endif %}
|
||||
|
||||
fas = AccountSystem(base_url=base_url, username=username, password=password)
|
||||
|
||||
print 'Generating data file. Wait...'
|
||||
|
||||
|
||||
# Get a dictinary of all people in FAS
|
||||
data = fas.people_by_key(key='id', search=u'*', fields=['human_name', \
|
||||
'username', 'email', 'status', 'country_code', 'latitude', 'longitude'])
|
||||
# print data
|
||||
#get all data from a group
|
||||
group_people = fas.group_members(group_name)
|
||||
|
||||
#make a list of usernames of a group
|
||||
for item in group_people:
|
||||
people_list.append(item['username'])
|
||||
|
||||
# get the country list from GeoIP
|
||||
countries = dict(GeoIP.country_names.items())
|
||||
#print countries
|
||||
|
||||
for person in people_list:
|
||||
# print person
|
||||
for item in data.values():
|
||||
user_name = item['username']
|
||||
human_name = item['human_name']
|
||||
country_code = item['country_code']
|
||||
status = item['status']
|
||||
email = item['email']
|
||||
latitude = item['latitude']
|
||||
latitude = str(latitude)
|
||||
longitude = item['longitude']
|
||||
longitude = str(longitude)
|
||||
|
||||
|
||||
|
||||
|
||||
if person == user_name:
|
||||
#print 'match'
|
||||
if status == 'active': #filter out all inactive accounts
|
||||
|
||||
#different values for blank or non-blank fields are
|
||||
#_____________________________#
|
||||
# Country Code || Human Name #
|
||||
#_____________________________#
|
||||
# None || None/Name #
|
||||
# ' ' || None/Name #
|
||||
# 'IN','FR' etc.|| None/Name #
|
||||
#_____________________________#
|
||||
|
||||
if latitude != 'None':
|
||||
if longitude != 'None': #if lat/long is not provided
|
||||
if country_code is None:
|
||||
if human_name is None:
|
||||
flag = 1
|
||||
else:
|
||||
flag = 2
|
||||
elif country_code == ' ':
|
||||
if human_name is None:
|
||||
flag = 1
|
||||
else:
|
||||
flag = 2
|
||||
|
||||
else: #if there is a country code available
|
||||
country = countries[country_code]
|
||||
if human_name is None:
|
||||
flag = 3
|
||||
else:
|
||||
flag = 4
|
||||
|
||||
#check flag to decide o/p
|
||||
|
||||
if flag == 1:
|
||||
entry = [user_name, user_name, 'Unknown', email, latitude, longitude]
|
||||
output.append(entry)
|
||||
elif flag == 2:
|
||||
entry = [user_name, human_name, 'Unknown', email, latitude, longitude]
|
||||
output.append(entry)
|
||||
elif flag == 3:
|
||||
entry = [user_name, user_name, country, email, latitude, longitude]
|
||||
output.append(entry)
|
||||
else:
|
||||
entry = [user_name, human_name, country, email, latitude, longitude]
|
||||
output.append(entry)
|
||||
|
||||
#print entry
|
||||
|
||||
#open the data file. Be cautions to open as unicode supported.
|
||||
output_file = codecs.open('/srv/web/membership-map/ambassadors_location.txt', encoding='utf-8', mode='w+')
|
||||
|
||||
|
||||
|
||||
# write the format, one can also add an "icon" field after description.
|
||||
#output_file.write('point\ttitle\tdescription\n')
|
||||
output_file.write('point\ttitle\tdescription\ticon\ticonSize\n')
|
||||
|
||||
# write fas data.
|
||||
for item in output:
|
||||
output_data = '%s,%s\t<a href=\"http://fedoraproject.org/wiki/user:%s\"target="_blank">%s</a>\t<br> Email: %s AT fedoraproject DOT org <br> Country:%s\t./f-dot.png\t15,15\n'% (item[4], item[5], item[0], item[1], item[0], item[2])
|
||||
output_file.write(output_data)
|
||||
output_file.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
calc_list()
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue