This is an automated email from the ASF dual-hosted git repository. curcuru pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/whimsy.git
commit a7072e6f76d878bb1e32b409a8805d89fb8ff98d Author: Shane Curcuru <[email protected]> AuthorDate: Sun Feb 16 21:24:38 2020 -0500 Display cohorts in by month view --- www/members/list-traffic.cgi | 56 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/www/members/list-traffic.cgi b/www/members/list-traffic.cgi index a2dc486..d1ffc49 100755 --- a/www/members/list-traffic.cgi +++ b/www/members/list-traffic.cgi @@ -10,6 +10,7 @@ require 'whimsy/asf/agenda' require 'date' require 'mail' require '../../tools/mboxhdr2csv.rb' +require_relative 'meeting-util' user = ASF::Person.new($USER) unless user.asf_member? @@ -26,9 +27,34 @@ SRV_MAIL = "/srv/mail/#{LIST_ROOT}" WEEK_TOTAL = '@@total' # Use @@ so it can't match who name/emails WEEK_START = '@@start' +COHORT_STYLES = { # TODO find better ways to colorize + 'Zero to two years' => 'text-warning', + 'Two to five years' => 'text-success', + 'Five to ten years' => 'text-info', + 'Ten or more years' => 'text-primary', + 'Non-members' => 'text-muted' +} + +# Define simple styles for various 'ages' of Members +# 1-2 years, 3-5 years, 5-10 years, 10+ years +def style_cohorts(cohorts) + today = Date.today.year + cohorts['cohorts'].each do |id, date| + case date[0,4].to_i + when (today-1)..today + cohorts['cohorts'][id] = COHORT_STYLES['Zero to two years'] + when (today-5)...(today-1) + cohorts['cohorts'][id] = COHORT_STYLES['Two to five years'] + when (today-10)...(today-5) + cohorts['cohorts'][id] = COHORT_STYLES['Five to ten years'] + else + cohorts['cohorts'][id] = COHORT_STYLES['Ten or more years'] + end + end +end # Display monthly statistics for all available data -def display_monthly(months:, nondiscuss:) +def display_monthly(months:, nondiscuss:, cohorts:) months.sort.reverse.each do |month| data = MailUtils.get_mails_month(mailroot: SRV_MAIL, yearmonth: month, nondiscuss: nondiscuss) next if data.empty? @@ -53,8 +79,13 @@ def display_monthly(months:, nondiscuss:) _ul.list_group do _li.list_group_item.list_group_item_info "Long Tail - All Senders" _li.list_group_item do - data[MailUtils::MAILCOUNT].each do |id, num| - _! "#{id} (#{num}), " + data[MailUtils::MAILCOUNT].each do |name, num| + id = (name.match(/.+[(](\w+)/) || [])[1] + if cohorts['cohorts'].has_key?(id) + _span! "#{name} (#{num}), ", class: "#{cohorts['cohorts'][id]}" + else + _span! "#{name} (#{num}), ", class: "#{cohorts['cohorts'][COHORT_STYLES['Non-member']]}" + end end end end @@ -129,24 +160,31 @@ _html do helpblock: -> { _p %{ This script displays simple (and likely slightly lossy) analysis of traffic on the #{LIST_ROOT}@ mailing list. - In particular, mapping From: email to a committer may not work (meaning individual senders may have multiple spots), - and Subject lines displayed may be truncated (meaning threads may not fully be tracked). Work in progress. + In particular, mapping From: email to a committer may not work (meaning individual senders may have multiple spots + or be miscategorized). Work in progress. Server only stores last year of mail. } _p do _ 'Senders of more than 10% of all emails in a month are highlighted. ' _ 'Senders of more than 20%, 10%, or 5% of all emails in a week are highlighted in the ' _a 'By week view (supply ?week in URL).', href: '?week' end - + _p do + _ 'For the All Senders column, Members are colorized by approximate years of membership like so: ' + _br + COHORT_STYLES.each do |name, style| + _span "#{name}, ", class: "#{style}" + end + _ ' note that due to email address variations, some entries may be incorrectly marked.' + end } ) do months = Dir["#{SRV_MAIL}/*"].map {|path| File.basename(path).untaint}.grep(/^\d+$/) - _.error "HACK - server log one" - + attendance = MeetingUtil.get_attendance(ASF::SVN['Meetings']) + style_cohorts(attendance) if ENV['QUERY_STRING'].include? 'week' display_weekly(months: months, nondiscuss: MailUtils::NONDISCUSSION_SUBJECTS["<#{LIST_ROOT}.apache.org>"]) else - display_monthly(months: months, nondiscuss: MailUtils::NONDISCUSSION_SUBJECTS["<#{LIST_ROOT}.apache.org>"]) + display_monthly(months: months, nondiscuss: MailUtils::NONDISCUSSION_SUBJECTS["<#{LIST_ROOT}.apache.org>"], cohorts: attendance) end end end
