@@ -169,32 +169,48 @@
169 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
the per-year event totals */
170 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMaxEvents = 1; /* for calculating length of graph
171 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bars. */
172 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iterations = 0; /* number of weeks/months we iterate
173 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
over */
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zCurrentTF; /* The timeframe in which 'now' lives */
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double rNowFraction; /* Fraction of 'now' timeframe that has
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ passed */
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTFChar; /* Prefix of date() for timeframe */
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nTFChar = includeMonth ? 7 : 4;
174 181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
stats_report_init_view();
175 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&query,
176 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT substr(date(mtime),1,%d) AS timeframe,"
177 184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" count(*) AS eventCount"
178 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM v_reports"
179 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE ifnull(coalesce(euser,user,'')=%Q,1)"
180 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" GROUP BY timeframe"
181 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY timeframe DESC",
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- includeMonth ? 7 : 4, zUserName);
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nTFChar, zUserName);
183 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h1>Timeline Events (%s(stats_report_label_for_type()))
184 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ by year%s(includeMonth ? "/month" : "")
185 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zUserName ){
186 193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ for user %h(zUserName)
187 194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
188 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </h1>
189 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <table border='0' cellpadding='2' cellspacing='0' \
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCurrentTF = db_text(0, "SELECT substr(date(),1,%d)", nTFChar);
190 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !includeMonth ){
191 199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ class='statistics-report-table-events sortable' \
192 200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ data-column-types='tnx' data-init-sort='0'>
193 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_table_sorter();
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rNowFraction = db_double(0.5,
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT (unixepoch() - unixepoch('now','start of year'))*1.0/"
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " (unixepoch('now','start of year','+1 year') - "
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " unixepoch('now','start of year'));");
194 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
195 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ class='statistics-report-table-events'>
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rNowFraction = db_double(0.5,
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT (unixepoch() - unixepoch('now','start of month'))*1.0/"
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " (unixepoch('now','start of month','+1 month') - "
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " unixepoch('now','start of month'));");
196 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
197 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <thead>
198 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <th>%s(zTimeLabel)</th>
199 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <th>Events</th>
200 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <th width='90%%'><!-- relative commits graph --></th>
@@ -203,11 +219,16 @@
203 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Run the query twice. The first time we calculate the maximum
204 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
number of events for a given row. Maybe someone with better SQL
205 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fu can re-implement this with a single query.
206 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
207 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( SQLITE_ROW == db_step(&query) ){
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const int nCount = db_column_int(&query, 1);
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCount = db_column_int(&query, 1);
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(db_column_text(&query,0),zCurrentTF)==0
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && rNowFraction>0.05
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nCount = (int)(((double)nCount)/rNowFraction);
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
209 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(nCount>nMaxEvents){
210 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nMaxEvents = nCount;
211 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
++iterations;
213 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -266,15 +287,30 @@
266 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
267 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_printf("'>%s</a>", zTimeframe);
268 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
269 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </td><td>%d(nCount)</td>
270 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <td>
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <div class='statistics-report-graph-line'
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ style='width:%d(nSize)%%;'> </div>
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(zTimeframe, zCurrentTF)==0
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && rNowFraction>0.05
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && nCount>0
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && nMaxEvents>0
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the timespan covered by this row contains "now", then project
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of changes until the completion of the timespan and
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** show a dashed box of that projection. */
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nExtra = (int)(((double)nCount)/rNowFraction) - nCount;
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nXSize = (100 * nExtra)/nMaxEvents;
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <span class='statistics-report-graph-line' \
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ style='display:inline-block;min-width:%d(nSize)%%;'> </span>\
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <span class='statistics-report-graph-extra' \
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ style='display:inline-block;min-width:%d(nXSize)%%;'> </span>\
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <div class='statistics-report-graph-line' \
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ style='width:%d(nSize)%%;'> </div> \
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
273 310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </td>
274 311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </tr>
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
276 312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
277 313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Potential improvement: calculate the min/max event counts and
278 314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
use percent-based graph bars.
279 315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
280 316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
281 317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!