Skip to content

Commit c8ebcf1

Browse files
committed
Merged in [14879] from kivinen@iki.fi:
Backfilled IETF meetings starting from 1 and backfilled the attendee numbers for them. Modified the overview attendee statistics page to use different colors for different venue continents. - Legacy-Id: 14898 Note: SVN reference [14879] has been migrated to Git commit 75dbe01
2 parents ddbd244 + 75dbe01 commit c8ebcf1

File tree

12 files changed

+371
-34
lines changed

12 files changed

+371
-34
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.11 on 2018-03-20 09:17
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('meeting', '0003_rename_modified_fields'),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name='meeting',
17+
name='attendees',
18+
field=models.IntegerField(blank=True, default=0, help_text='Number of Attendees for backfilled meetings, leave it to 0 for new meetings, and then it is calculated from the registrations'),
19+
),
20+
]
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations
5+
6+
7+
def backfill_old_meetings(apps, schema_editor):
8+
Meeting = apps.get_model('meeting', 'Meeting')
9+
10+
for id, number, type_id, date, city, country, time_zone, continent, attendees in [
11+
( 59,'59','ietf','2004-03-29','Seoul','KR','Asia/Seoul','Asia','1390' ),
12+
( 58,'58','ietf','2003-11-09','Minneapolis','US','America/Menominee','America','1233' ),
13+
( 57,'57','ietf','2003-07-13','Vienna','AT','Europe/Vienna','Europe','1304' ),
14+
( 56,'56','ietf','2003-03-16','San Francisco','US','America/Los_Angeles','America','1679' ),
15+
( 55,'55','ietf','2002-11-17','Atlanta','US','America/New_York','America','1570' ),
16+
( 54,'54','ietf','2002-07-14','Yokohama','JP','Asia/Tokyo','Asia','1885' ),
17+
( 53,'53','ietf','2002-03-17','Minneapolis','US','America/Menominee','America','1656' ),
18+
( 52,'52','ietf','2001-12-09','Salt Lake City','US','America/Denver','America','1691' ),
19+
( 51,'51','ietf','2001-08-05','London','GB','Europe/London','Europe','2226' ),
20+
( 50,'50','ietf','2001-03-18','Minneapolis','US','America/Menominee','America','1822' ),
21+
( 49,'49','ietf','2000-12-10','San Diego','US','America/Los_Angeles','America','2810' ),
22+
( 48,'48','ietf','2000-07-31','Pittsburgh','US','America/New_York','America','2344' ),
23+
( 47,'47','ietf','2000-03-26','Adelaide','AU','Australia/Adelaide','Australia','1431' ),
24+
( 46,'46','ietf','1999-11-07','Washington','US','America/New_York','America','2379' ),
25+
( 45,'45','ietf','1999-07-11','Oslo','NO','Europe/Oslo','Europe','1710' ),
26+
( 44,'44','ietf','1999-03-14','Minneapolis','US','America/Menominee','America','1705' ),
27+
( 43,'43','ietf','1998-12-07','Orlando','US','America/New_York','America','2124' ),
28+
( 42,'42','ietf','1998-08-24','Chicago','US','America/Chicago','America','2106' ),
29+
( 41,'41','ietf','1998-03-30','Los Angeles','US','America/Los_Angeles','America','1775' ),
30+
( 40,'40','ietf','1997-12-08','Washington','US','America/New_York','America','1897' ),
31+
( 39,'39','ietf','1997-08-11','Munich','DE','Europe/Berlin','Europe','1308' ),
32+
( 38,'38','ietf','1997-04-07','Memphis','US','America/Chicago','America','1321' ),
33+
( 37,'37','ietf','1996-12-09','San Jose','US','America/Los_Angeles','America','1993' ),
34+
( 36,'36','ietf','1996-06-24','Montreal','CA','America/New_York','America','1283' ),
35+
( 35,'35','ietf','1996-03-04','Los Angeles','US','America/Los_Angeles','America','1038' ),
36+
( 34,'34','ietf','1995-12-04','Dallas','US','America/Chicago','America','1007' ),
37+
( 33,'33','ietf','1995-07-17','Stockholm','SE','Europe/Stockholm','Europe','617' ),
38+
( 32,'32','ietf','1995-04-03','Danvers','US','America/New_York','America','983' ),
39+
( 31,'31','ietf','1994-12-05','San Jose','US','America/Los_Angeles','America','1079' ),
40+
( 30,'30','ietf','1994-07-25','Toronto','CA','America/New_York','America','710' ),
41+
( 29,'29','ietf','1994-03-28','Seattle','US','America/Los_Angeles','America','785' ),
42+
( 28,'28','ietf','1993-11-01','Houston','US','America/Chicago','America','636' ),
43+
( 27,'27','ietf','1993-07-12','Amsterdam','NL','Europe/Amsterdam','Europe','493' ),
44+
( 26,'26','ietf','1993-03-29','Columbus','US','America/New_York','America','638' ),
45+
( 25,'25','ietf','1992-11-16','Washington','US','America/New_York','America','633' ),
46+
( 24,'24','ietf','1992-07-13','Cambridge','US','America/New_York','America','677' ),
47+
( 23,'23','ietf','1992-03-16','San Diego','US','America/Los_Angeles','America','530' ),
48+
( 22,'22','ietf','1991-11-18','Santa Fe','US','America/Denver','America','372' ),
49+
( 21,'21','ietf','1991-07-29','Atlanta','US','America/New_York','America','387' ),
50+
( 20,'20','ietf','1991-03-11','St. Louis','US','America/Chicago','America','348' ),
51+
( 19,'19','ietf','1990-12-03','Boulder','US','America/Denver','America','292' ),
52+
( 18,'18','ietf','1990-07-30','Vancouver','CA','America/Los_Angeles','America','293' ),
53+
( 17,'17','ietf','1990-05-01','Pittsburgh','US','America/New_York','America','244' ),
54+
( 16,'16','ietf','1990-02-06','Tallahassee','US','America/New_York','America','196' ),
55+
( 15,'15','ietf','1989-10-31','Honolulu','US','Pacific/Honolulu','America','138' ),
56+
( 14,'14','ietf','1989-07-25','Stanford','US','America/Los_Angeles','America','217' ),
57+
( 13,'13','ietf','1989-04-11','Cocoa Beach','US','America/New_York','America','114' ),
58+
( 12,'12','ietf','1989-01-18','Austin','US','America/Chicago','America','120' ),
59+
( 11,'11','ietf','1988-10-17','Ann Arbor','US','America/New_York','America','114' ),
60+
( 10,'10','ietf','1988-06-15','Annapolis','US','America/New_York','America','112' ),
61+
( 9,'9','ietf','1988-03-01','San Diego','US','America/Los_Angeles','America','82' ),
62+
( 8,'8','ietf','1987-11-02','Boulder','US','America/Denver','America','56' ),
63+
( 7,'7','ietf','1987-07-27','McLean','US','America/New_York','America','101' ),
64+
( 6,'6','ietf','1987-04-22','Boston','US','America/New_York','America','88' ),
65+
( 5,'5','ietf','1987-02-04','Moffett Field','US','America/Los_Angeles','America','35' ),
66+
( 4,'4','ietf','1986-10-15','Menlo Park','US','America/Los_Angeles','America','35' ),
67+
( 3,'3','ietf','1986-07-23','Ann Arbor','US','America/New_York','America','18' ),
68+
( 2,'2','ietf','1986-04-08','Aberdeen','US','America/New_York','America','21' ),
69+
( 1,'1','ietf','1986-01-16','San Diego','US','America/Los_Angeles','America','21' ),
70+
]:
71+
Meeting.objects.get_or_create(id=id, number=number, type_id=type_id,
72+
date=date, city=city, country=country,
73+
time_zone=time_zone);
74+
75+
76+
def reverse(apps, schema_editor):
77+
pass
78+
79+
80+
class Migration(migrations.Migration):
81+
82+
dependencies = [
83+
('meeting', '0004_meeting_attendees'),
84+
]
85+
86+
operations = [
87+
migrations.RunPython(backfill_old_meetings, reverse)
88+
]
89+
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations
5+
6+
7+
def backfill_old_meetings(apps, schema_editor):
8+
Meeting = apps.get_model('meeting', 'Meeting')
9+
10+
for number, attendees in [
11+
( 101,1203 ),
12+
( 100,1018 ),
13+
( 99,1235 ),
14+
( 98,1127 ),
15+
( 97,1042 ),
16+
( 96,1425 ),
17+
( 95,1043 ),
18+
( 94,1319 ),
19+
( 93,1387 ),
20+
( 92,1221 ),
21+
( 91,1109 ),
22+
( 90,1237 ),
23+
( 89,1400 ),
24+
( 88,1189 ),
25+
( 87,1435 ),
26+
( 86,1115 ),
27+
( 85,1157 ),
28+
( 84,1199 ),
29+
( 83,1395 ),
30+
( 82, 948 ),
31+
( 81,1127 ),
32+
( 80,1231 ),
33+
( 79,1208 ),
34+
( 78,1192 ),
35+
( 77,1250 ),
36+
( 76,1152 ),
37+
( 75,1124 ),
38+
( 74,1185 ),
39+
( 73, 962 ),
40+
( 72,1182 ),
41+
( 71,1174 ),
42+
( 70,1128 ),
43+
( 69,1175 ),
44+
( 68,1193 ),
45+
( 67,1245 ),
46+
( 66,1257 ),
47+
( 65,1264 ),
48+
( 64,1240 ),
49+
( 63,1450 ),
50+
( 62,1133 ),
51+
( 61,1311 ),
52+
( 60,1460 ),
53+
( 59,1390 ),
54+
( 58,1233 ),
55+
( 57,1304 ),
56+
( 56,1679 ),
57+
( 55,1570 ),
58+
( 54,1885 ),
59+
( 53,1656 ),
60+
( 52,1691 ),
61+
( 51,2226 ),
62+
( 50,1822 ),
63+
( 49,2810 ),
64+
( 48,2344 ),
65+
( 47,1431 ),
66+
( 46,2379 ),
67+
( 45,1710 ),
68+
( 44,1705 ),
69+
( 43,2124 ),
70+
( 42,2106 ),
71+
( 41,1775 ),
72+
( 40,1897 ),
73+
( 39,1308 ),
74+
( 38,1321 ),
75+
( 37,1993 ),
76+
( 36,1283 ),
77+
( 35,1038 ),
78+
( 34,1007 ),
79+
( 33,617 ),
80+
( 32,983 ),
81+
( 31,1079 ),
82+
( 30,710 ),
83+
( 29,785 ),
84+
( 28,636 ),
85+
( 27,493 ),
86+
( 26,638 ),
87+
( 25,633 ),
88+
( 24,677 ),
89+
( 23,530 ),
90+
( 22,372 ),
91+
( 21,387 ),
92+
( 20,348 ),
93+
( 19,292 ),
94+
( 18,293 ),
95+
( 17,244 ),
96+
( 16,196 ),
97+
( 15,138 ),
98+
( 14,217 ),
99+
( 13,114 ),
100+
( 12,120 ),
101+
( 11,114 ),
102+
( 10,112 ),
103+
( 9,82 ),
104+
( 8,56 ),
105+
( 7,101 ),
106+
( 6,88 ),
107+
( 5,35 ),
108+
( 4,35 ),
109+
( 3,18 ),
110+
( 2,21 ),
111+
( 1,21 ),
112+
]:
113+
meeting = Meeting.objects.filter(type='ietf',
114+
number=number).first();
115+
meeting.attendees = attendees
116+
meeting.save()
117+
118+
119+
def reverse(apps, schema_editor):
120+
pass
121+
122+
123+
class Migration(migrations.Migration):
124+
125+
dependencies = [
126+
('meeting', '0005_backfill_old_meetings'),
127+
]
128+
129+
operations = [
130+
migrations.RunPython(backfill_old_meetings, reverse)
131+
]
132+

ietf/meeting/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ class Meeting(models.Model):
9595
acknowledgements = models.TextField(blank=True, help_text="Acknowledgements for use in meeting proceedings. Use ReStructuredText markup.")
9696
overview = ForeignKey(DBTemplate, related_name='overview', null=True, editable=False)
9797
show_important_dates = models.BooleanField(default=False)
98+
attendees = models.IntegerField(blank=True, null=True, default=None,
99+
help_text=u"Number of Attendees for backfilled meetings, leave it blank for new meetings, and then it is calculated from the registrations")
98100

99101
def __unicode__(self):
100102
if self.type_id == "ietf":

ietf/secr/meetings/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ def test_add_meeting(self):
9898
meeting.agenda.assignments.filter(timeslot__type='reg').count(),
9999
new_meeting.agenda.assignments.filter(timeslot__type='reg').count()
100100
)
101+
self.assertEqual(new_meeting.attendees, None)
101102

102103
def test_edit_meeting(self):
103104
"Edit Meeting"
@@ -115,12 +116,14 @@ def test_edit_meeting(self):
115116
submission_start_day_offset=90,
116117
submission_cutoff_day_offset=26,
117118
submission_correction_day_offset=50,
119+
attendees=1234,
118120
)
119121
self.client.login(username="secretary", password="secretary+password")
120122
response = self.client.post(url, post_data,follow=True)
121123
self.assertEqual(response.status_code, 200)
122124
meeting = Meeting.objects.get(number=1)
123125
self.assertEqual(meeting.city,'Toronto')
126+
self.assertEqual(meeting.attendees,1234)
124127

125128
def test_blue_sheets_upload(self):
126129
"Test Bluesheets"

ietf/static/ietf/css/ietf.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,10 @@ table.simple-table td:last-child {
614614
height: 25em;
615615
}
616616

617+
.document-stats #chart.chart-overview {
618+
height: 35em;
619+
}
620+
617621
.stats-time-graph {
618622
height: 15em;
619623
}

ietf/stats/views.py

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -882,28 +882,51 @@ def reg_name(r):
882882
if stats_type == "overview":
883883
stats_title = "Number of attendees per meeting"
884884

885+
continents = {}
886+
887+
meetings = Meeting.objects.filter(type='ietf').order_by('number')
888+
for m in meetings:
889+
country = CountryName.objects.get(slug=m.country)
890+
continents[country.continent.name] = country.continent.name
891+
885892
bins = defaultdict(set)
886893

887894
for r in attendees:
888895
meeting_number = int(r.meeting.number)
889896
name = reg_name(r)
890-
891897
bins[meeting_number].add(name)
892898

893-
meeting_cities = dict(Meeting.objects.filter(number__in=bins.iterkeys()).values_list("number", "city"))
894-
895-
series_data = []
896-
for meeting_number, names in sorted(bins.iteritems()):
897-
series_data.append((meeting_number, len(names)))
898-
url = build_meeting_stats_url(number=meeting_number, stats_type_override="country")
899-
label = "IETF {} - {}".format(meeting_number, meeting_cities.get(str(meeting_number), ""))
900-
table_data.append((meeting_number, label, url, len(names), list(names)[:names_limit]))
901-
902-
series_data.sort(key=lambda t: t[0])
903-
table_data.sort(key=lambda t: t[0], reverse=True)
904-
905-
chart_data.append({ "name": "Attendees", "data": series_data })
906-
899+
series_data = {}
900+
for continent in continents.keys():
901+
series_data[continent] = []
902+
903+
for meeting in meetings:
904+
country = CountryName.objects.get(slug=meeting.country)
905+
url = build_meeting_stats_url(number=meeting.number,
906+
stats_type_override="country")
907+
for continent in continents.keys():
908+
if continent == country.continent.name:
909+
d = {
910+
"name": "IETF {} - {}, {}".format(int(meeting.number), meeting.city, country),
911+
"x": int(meeting.number),
912+
"y": meeting.attendees,
913+
"url": url,
914+
}
915+
else:
916+
d = {
917+
"x": int(meeting.number),
918+
"y": 0,
919+
}
920+
series_data[continent].append(d)
921+
table_data.append((meeting, url,
922+
meeting.attendees, country))
923+
924+
for continent in continents.keys():
925+
# series_data[continent].sort(key=lambda t: t[0]["x"])
926+
chart_data.append( { "name": continent,
927+
"data": series_data[continent] })
928+
929+
table_data.sort(key=lambda t: int(t[0].number), reverse=True)
907930

908931
elif stats_type == "country":
909932
stats_title = "Number of attendees per country across meetings"

ietf/templates/stats/document_stats.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
{% block pagehead %}
1010
<link rel="stylesheet" href="{% static 'bootstrap-datepicker/css/bootstrap-datepicker3.min.css' %}">
11+
<link rel="stylesheet" href="{% static "jquery.tablesorter/css/theme.bootstrap.min.css" %}">
1112
{% endblock %}
1213

1314
{% block content %}
@@ -75,4 +76,5 @@ <h5>Options</h5>
7576
<script src="{% static 'highcharts/modules/exporting.js' %}"></script>
7677
<script src="{% static 'highcharts/modules/offline-exporting.js' %}"></script>
7778
<script src="{% static 'ietf/js/stats.js' %}"></script>
79+
<script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
7880
{% endblock %}

ietf/templates/stats/meeting_stats.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
{% block pagehead %}
1010
<link rel="stylesheet" href="{% static 'bootstrap-datepicker/css/bootstrap-datepicker3.min.css' %}">
11+
<link rel="stylesheet" href="{% static 'jquery.tablesorter/css/theme.bootstrap.min.css' %}">
1112
{% endblock %}
1213

1314
{% block content %}
@@ -43,4 +44,5 @@ <h1>Meeting Statistics</h1>
4344
<script src="{% static 'highcharts/modules/exporting.js' %}"></script>
4445
<script src="{% static 'highcharts/modules/offline-exporting.js' %}"></script>
4546
<script src="{% static 'ietf/js/stats.js' %}"></script>
47+
<script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
4648
{% endblock %}

ietf/templates/stats/meeting_stats_continent.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ <h3>{{ stats_title }}</h3>
4444

4545
<h3>Data</h3>
4646

47-
<table class="table table-condensed stats-data">
47+
<table class="table table-condensed stats-data tablesorter">
4848
<thead>
4949
<tr>
5050
<th>Continent</th>

0 commit comments

Comments
 (0)