@@ -106,97 +106,67 @@ def mycomp(timeslot):
106106
107107def get_progress_stats (sdate ,edate ):
108108 '''
109- This function takes a date range and produces a dictionary of statistics / objects for use
110- in a progress report. Generally the end date will be the date of the last meeting
109+ This function takes a date range and produces a dictionary of statistics / objects for
110+ use in a progress report. Generally the end date will be the date of the last meeting
111111 and the start date will be the date of the meeting before that.
112112 '''
113113 data = {}
114114 data ['sdate' ] = sdate
115115 data ['edate' ] = edate
116116
117- # Activty Report Section
118- new_docs = Document .objects .filter (type = 'draft' ).filter (docevent__type = 'new_revision' ,
119- docevent__newrevisiondocevent__rev = '00' ,
120- docevent__time__gte = sdate ,
121- docevent__time__lt = edate )
122- data ['new' ] = new_docs .count ()
123- data ['updated' ] = 0
124- data ['updated_more' ] = 0
125- for d in new_docs :
126- updates = d .docevent_set .filter (type = 'new_revision' ,time__gte = sdate ,time__lt = edate ).count ()
127- if updates > 1 :
128- data ['updated' ] += 1
129- if updates > 2 :
130- data ['updated_more' ] += 1
131-
132- # calculate total documents updated, not counting new, rev=00
133- result = set ()
134117 events = DocEvent .objects .filter (doc__type = 'draft' ,time__gte = sdate ,time__lt = edate )
135- for e in events .filter (type = 'new_revision' ).exclude (newrevisiondocevent__rev = '00' ):
136- result .add (e .doc )
137- data ['total_updated' ] = len (result )
138-
139- # calculate sent last call
140- data ['last_call' ] = events .filter (type = 'sent_last_call' ).count ()
141-
142- # calculate approved
143- data ['approved' ] = events .filter (type = 'iesg_approved' ).count ()
144-
145- # get 4 weeks
146- ff1_date = edate - datetime .timedelta (days = 28 )
147- ff_docs = Document .objects .filter (type = 'draft' ).filter (docevent__type = 'new_revision' ,
148- docevent__newrevisiondocevent__rev = '00' ,
149- docevent__time__gte = ff1_date ,
150- docevent__time__lt = edate )
151- ff_new_count = ff_docs .count ()
152- ff_new_percent = format (ff_new_count / float (data ['new' ]),'.0%' )
153-
154- # calculate total documents updated in final four weeks, not counting new, rev=00
155- result = set ()
156- events = DocEvent .objects .filter (doc__type = 'draft' ,time__gte = ff1_date ,time__lt = edate )
157- for e in events .filter (type = 'new_revision' ).exclude (newrevisiondocevent__rev = '00' ):
158- result .add (e .doc )
159- ff_update_count = len (result )
160- ff_update_percent = format (ff_update_count / float (data ['total_updated' ]),'.0%' )
161-
162- data ['ff_new_count' ] = ff_new_count
163- data ['ff_new_percent' ] = ff_new_percent
164- data ['ff_update_count' ] = ff_update_count
165- data ['ff_update_percent' ] = ff_update_percent
166-
167- # Progress Report Section
168- data ['docevents' ] = DocEvent .objects .filter (doc__type = 'draft' ,time__gte = sdate ,time__lt = edate )
169- data ['action_events' ] = data ['docevents' ].filter (type = 'iesg_approved' )
170- data ['lc_events' ] = data ['docevents' ].filter (type = 'sent_last_call' )
171-
172- data ['new_groups' ] = Group .objects .filter (type = 'wg' ,
173- groupevent__changestategroupevent__state = 'active' ,
174- groupevent__time__gte = sdate ,
175- groupevent__time__lt = edate )
176-
177- data ['concluded_groups' ] = Group .objects .filter (type = 'wg' ,
178- groupevent__changestategroupevent__state = 'conclude' ,
179- groupevent__time__gte = sdate ,
180- groupevent__time__lt = edate )
181-
182- data ['new_docs' ] = Document .objects .filter (type = 'draft' ).filter (docevent__type = 'new_revision' ,
183- docevent__time__gte = sdate ,
184- docevent__time__lt = edate ).distinct ()
185-
186- data ['rfcs' ] = DocEvent .objects .filter (type = 'published_rfc' ,
187- doc__type = 'draft' ,
188- time__gte = sdate ,
189- time__lt = edate )
190-
191- # attach the ftp URL for use in the template
192- for event in data ['rfcs' ]:
193- num = get_rfc_num (event .doc )
194- event .ftp_url = 'ftp://ftp.ietf.org/rfc/rfc%s.txt' % num
195-
196- data ['counts' ] = {'std' :data ['rfcs' ].filter (doc__intended_std_level__in = ('ps' ,'ds' ,'std' )).count (),
197- 'bcp' :data ['rfcs' ].filter (doc__intended_std_level = 'bcp' ).count (),
198- 'exp' :data ['rfcs' ].filter (doc__intended_std_level = 'exp' ).count (),
199- 'inf' :data ['rfcs' ].filter (doc__intended_std_level = 'inf' ).count ()}
118+
119+ data ['actions_count' ] = events .filter (type = 'iesg_approved' ).count ()
120+ data ['last_calls_count' ] = events .filter (type = 'sent_last_call' ).count ()
121+ new_draft_events = events .filter (newrevisiondocevent__rev = '00' )
122+ new_drafts = list (set ([ e .doc_id for e in new_draft_events ]))
123+ data ['new_drafts_count' ] = len (new_drafts )
124+ data ['new_drafts_updated_count' ] = events .filter (doc__in = new_drafts ,newrevisiondocevent__rev = '01' ).count ()
125+ data ['new_drafts_updated_more_count' ] = events .filter (doc__in = new_drafts ,newrevisiondocevent__rev = '02' ).count ()
126+
127+ update_events = events .filter (type = 'new_revision' ).exclude (doc__in = new_drafts )
128+ data ['updated_drafts_count' ] = len (set ([ e .doc_id for e in update_events ]))
129+
130+ # Calculate Final Four Weeks stats (ffw)
131+ ffwdate = edate - datetime .timedelta (days = 28 )
132+ ffw_new_count = events .filter (time__gte = ffwdate ,newrevisiondocevent__rev = '00' ).count ()
133+ try :
134+ ffw_new_percent = format (ffw_new_count / float (data ['new_drafts_count' ]),'.0%' )
135+ except ZeroDivisionError :
136+ ffw_new_percent = 0
137+
138+ data ['ffw_new_count' ] = ffw_new_count
139+ data ['ffw_new_percent' ] = ffw_new_percent
140+
141+ ffw_update_events = events .filter (time__gte = ffwdate ,type = 'new_revision' ).exclude (doc__in = new_drafts )
142+ ffw_update_count = len (set ([ e .doc_id for e in ffw_update_events ]))
143+ try :
144+ ffw_update_percent = format (ffw_update_count / float (data ['updated_drafts_count' ]),'.0%' )
145+ except ZeroDivisionError :
146+ ffw_update_percent = 0
147+
148+ data ['ffw_update_count' ] = ffw_update_count
149+ data ['ffw_update_percent' ] = ffw_update_percent
150+
151+ rfcs = events .filter (type = 'published_rfc' )
152+ data ['rfcs' ] = rfcs .select_related ('doc' ).select_related ('doc__group' ).select_related ('doc__intended_std_level' )
153+
154+ data ['counts' ] = {'std' :rfcs .filter (doc__intended_std_level__in = ('ps' ,'ds' ,'std' )).count (),
155+ 'bcp' :rfcs .filter (doc__intended_std_level = 'bcp' ).count (),
156+ 'exp' :rfcs .filter (doc__intended_std_level = 'exp' ).count (),
157+ 'inf' :rfcs .filter (doc__intended_std_level = 'inf' ).count ()}
158+
159+ data ['new_groups' ] = Group .objects .filter (
160+ type = 'wg' ,
161+ groupevent__changestategroupevent__state = 'active' ,
162+ groupevent__time__gte = sdate ,
163+ groupevent__time__lt = edate )
164+
165+ data ['concluded_groups' ] = Group .objects .filter (
166+ type = 'wg' ,
167+ groupevent__changestategroupevent__state = 'conclude' ,
168+ groupevent__time__gte = sdate ,
169+ groupevent__time__lt = edate )
200170
201171 return data
202172
0 commit comments