Code Monkey home page Code Monkey logo

whimsy's Introduction

Apache Whimsy Project Overview

Apache Whimsy is a collection of useful organizational tools used by the ASF and Apache committers to access and manipulate data about Apache people, projects, and processes. Whimsy is both an Apache PMC, this codebase, and the live deployed instance of https://whimsy.apache.org/.

The ASF's Whimsy instance hosts static content, repository checkouts/clones, CGI scripts, Rack applications, Node.js applications, tools, and cron jobs. Note: features accessing private ASF data are restricted to committers, Members, or Officers of the ASF.

Every commit pushed to master is deployed within minutes to https://whimsy.apache.org/ using GitPubSub.

How Tos and Get The Code

Whimsy source code is hosted at: https://github.com/apache/whimsy.git and mirrored for Apache committers at: https://gitbox.apache.org/repos/asf/whimsy.git

How To Get Involved!

Since Whimsy hosts many independent tools that make finding or updating information at the ASF simpler, there are plenty of places for Apache committers to get involved. Bugs or improvement suggestions for the many tools available on Whimsy or list of public datafiles are always appreciated, and please join us on the public #whimsy channel on Slack.

If you have an idea for a new Whimsy tool, email us! The PMC supports a rich server environment, so deploying a new tool is as simple as proposing a .cgi with a bit of Ruby code. We also have deployments of Rack and Sinatra apps, and use JavaScript and Wunderbar for most of the UI building in many tools. The Whimsy server also supports direct access to Apache SVN or git repositories, making consuming data simple.

The Whimsy committers are always looking for new ideas to improve processes at Apache, and we can either help you get started or suggest how to approach just about any sort of "find this ASF data and streamline that process" ideas.

Most documentation is in the code or in the repo, and our dev@whimsical mailing list is active. Note that many Whimsy tools access committer- or member-private data, so some tools are access restricted.

Historical note: The live production whimsy.apache.org server was used for the board agenda tool and more before we became the Apache Whimsy top level project. That's why whimsy.apache.org is the production server, and mailing lists and a homepage are hosted on the whimsical.apache.org domain.

Whimsy Architecture - Live Instance

Whimsy is run in an Apache hosted VM with httpd, Rack, Ruby, and variety of other tools that directly interface with various parts of Apache organizational records.

Details for each type of deployed tool or script:

  • Static content Changes pushed to GitHub master will be automatically deployed - every commit triggers the puppet agent to do an update, which may take a few minutes. Note that this includes the contents of scripts and applications too.

  • Repository checkouts/clones An copy of a number of repositories are updated every 10 minutes via a cron job. This is controlled by repository.yml. The whimsy VM is also subscribed to board@ and scans those emails for commit messages and will update the copy of foundation/board when commits happen.

  • CGI scripts any dependencies listed in a Gemfile will automatically be installed. A simple CGI:

    https://github.com/apache/whimsy/blob/master/www/test.cgi https://whimsy.apache.org/test.cgi

  • Authentication for CGI Scripts See the DEVELOPMENT.md FAQ.

  • Rack applications run under Phusion Passenger under Apache httpd. Again, Gemfiles are used to specify dependencies. In addition to simply checking the application, one line per passenger application needs to be added to the puppet file under passenger: as seen in DEPLOYMENT.md.

    A sample rack application (two empty directories, and a one line file):

    https://github.com/apache/whimsy/tree/master/www/racktest

    https://whimsy.apache.org/racktest

    Authentication requirements will also need to be two phase, like with CGI above; but more common conditions can be handled at the "Rack" level instead of at the application level making use of Rack middleware such as:

    https://github.com/apache/whimsy/blob/master/lib/whimsy/asf/rack.rb#L56

  • Cron jobs are managed by puppet. See deployment for more information.

  • NEW! Node.js is being prototyped to improve the Board Agenda tool, stay tuned.

  • Generated JSON data files are automatically generated into the /public directory, to cache frequently used data for whimsy and other applications. These are usually run from a cron calling a www/roster/public_*.rb file. See also an overview of data dependencies and flow.

  • Data models for many Whimsy tools are in lib/whimsy/asf, and most views for tools are stored in www. Note that Whimsy has a wide variety of sometimes unrelated tools, so not everything here uses the same models.

whimsy's People

Contributors

brettporter avatar chrismattmann avatar clr-apache avatar danielshahaf avatar dave2wave avatar gagravarr avatar gmcdonald avatar gstein avatar humbedooh avatar janiversen avatar jbampton avatar jimjag avatar johnament avatar jukka avatar justinmclean avatar jvz avatar lresende avatar mensfeld avatar papajdo avatar protochron avatar psteitz avatar rbowen avatar rlenferink avatar royfielding avatar rubys avatar sebbasf avatar shanecurcuru avatar sorratheorc avatar sstriker avatar step-security-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

whimsy's Issues

Board traffic stats is broken for me.

I went to https://whimsy.apache.org/officers/list-traffic.cgi and got a lurid yellow error message that said:
#<TypeError: no implicit conversion of Symbol into Integer> /x1/srv/whimsy/tools/mboxhdr2csv.rb:85:in[]'
/x1/srv/whimsy/tools/mboxhdr2csv.rb:85:in find_who_from' /x1/srv/whimsy/www/officers/list-traffic.cgi:53:in block in get_mails_month'
/x1/srv/whimsy/www/officers/list-traffic.cgi:47:in each' /x1/srv/whimsy/www/officers/list-traffic.cgi:47:in get_mails_month'
/x1/srv/whimsy/www/officers/list-traffic.cgi:97:in block in display_monthly' /x1/srv/whimsy/www/officers/list-traffic.cgi:96:in each'
/x1/srv/whimsy/www/officers/list-traffic.cgi:96:in display_monthly' /x1/srv/whimsy/www/officers/list-traffic.cgi:211:in block (3 levels) in

'
/x1/srv/whimsy/lib/whimsy/asf/themes.rb:195:in block (3 levels) in _whimsy_body' /x1/srv/whimsy/lib/whimsy/asf/themes.rb:179:in block (2 levels) in _whimsy_body'
/x1/srv/whimsy/lib/whimsy/asf/themes.rb:178:in block in _whimsy_body' /x1/srv/whimsy/lib/whimsy/asf/themes.rb:135:in _whimsy_body'
/x1/srv/whimsy/www/officers/list-traffic.cgi:182:in block (2 levels) in <main>' /x1/srv/whimsy/www/officers/list-traffic.cgi:181:in block in '
`
I have no idea how this happened or how to fix it. It is not very important to me, either.

layout change request

With the recent change to move notes/comments to the right-hand column, that information now gets obscured by the perma-dropdown-Info panel. My overall suggestion is to get rid of the "Info" dropdown. Specific ideas below.

The currently layout appears to assume landscape mode. Given that, then you have lots of menubar space. I would suggest moving the "Links" up next to the project name. For example:

Any23 (Roster, Prior Reports, Statistics)

On the right column, there is a sometimes-yellow-bubble indicating something like "missing in February". I would suggest the Attach/Author/Shepherd/Approved-By lines move below that. And then "Posted Reports", "Action Items", and comments below that data.

Then toss the Info menu and its related handling.

The clear drawback to this design is for portrait-mode display. The Info is no longer accessible at the top of the page, but the window must be scrolled-down to see it. (tho the links remain easily visible/useful) ... Personally, I wouldn't mind the four info lines perma-displayed at the top of the left column, with the report below that.

500 internal server error on agenda new

I am trying to generate a new board agenda and am still getting a 500 error. Here are the access log entries. The first is a websocket while looking at the current agenda, followed by the request for /board/agenda/new responding 500 and another websocket responding 502

<%JSON:httpd_access%> { "time": "2020-07-16T18:36:11+0000", "clientip": "68.101.102.139", "duration": 24282820, "status": 200, "request": "/board/agenda/websocket/", "uri": "/board/agenda/websocket/", "remote_user": "-", "query_string": "", "document": "proxy:wss://localhost:34234/", "bytes": 0, "request_method": "GET", "referer": "-", "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Firefox/78.0", "vhost": "whimsy.apache.org", "geo_country": "-", "geo_long": "-", "geo_lat": "-", "geo_coords": "-,-", "geo_city": "-", "geo_combo": "-, -" }
<%JSON:httpd_access%> { "time": "2020-07-16T18:36:35+0000", "clientip": "68.101.102.139", "duration": 361756, "status": 500, "request": "/board/agenda/new", "uri": "/board/agenda/new", "remote_user": "fielding", "query_string": "", "document": "/x1/srv/whimsy/www/board/agenda/publicnew", "bytes": 30, "request_method": "GET", "referer": "-", "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Firefox/78.0", "vhost": "whimsy.apache.org", "geo_country": "-", "geo_long": "-", "geo_lat": "-", "geo_coords": "-,-", "geo_city": "-", "geo_combo": "-, -" }
<%JSON:httpd_access%> { "time": "2020-07-16T18:36:36+0000", "clientip": "68.101.102.139", "duration": 86914, "status": 502, "request": "/board/agenda/websocket/", "uri": "/board/agenda/websocket/", "remote_user": "-", "query_string": "", "document": "proxy:wss://localhost:34234/", "bytes": 0, "request_method": "GET", "referer": "-", "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:78.0) Gecko/20100101 Firefox/78.0", "vhost": "whimsy.apache.org", "geo_country": "-", "geo_long": "-", "geo_lat": "-", "geo_coords": "-,-", "geo_city": "-", "geo_combo": "-, -" }

I thought my first attempt failed because of the minutes (fixed by "c40d21c") but the situation has not improved.

It looks like this is the relevant stack trace in the error_log:

App 6361 output: * SVN board  : /srv/svn/foundation_board
App 6361 output: * Agenda work: /srv/agenda
App 6693 output: 2020-07-16 18:36:36 - NoMethodError - undefined method `public_name' for nil:NilClass:
App 6693 output: 	/x1/srv/whimsy/lib/whimsy/asf/board.rb:131:in `for'
App 6693 output: 	(erubis:140:in `block in <top (required)>'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:65:in `eval'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:65:in `result'
App 6693 output: 	/x1/srv/whimsy/www/board/agenda/routes.rb:550:in `block in <top (required)>'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1636:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1636:in `block in compile!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:987:in `block (3 levels) in route!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1006:in `route_eval'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:987:in `block (2 levels) in route!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1035:in `block in process_route'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1033:in `catch'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1033:in `process_route'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:985:in `block in route!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:984:in `each'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:984:in `route!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1098:in `block in dispatch!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1072:in `block in invoke'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1072:in `catch'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1072:in `invoke'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1095:in `dispatch!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:919:in `block in call!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1072:in `block in invoke'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1072:in `catch'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1072:in `invoke'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:919:in `call!'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:908:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-protection-2.0.8.1/lib/rack/protection/xss_header.rb:18:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-protection-2.0.8.1/lib/rack/protection/path_traversal.rb:16:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-protection-2.0.8.1/lib/rack/protection/json_csrf.rb:26:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-protection-2.0.8.1/lib/rack/protection/base.rb:50:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-protection-2.0.8.1/lib/rack/protection/base.rb:50:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-protection-2.0.8.1/lib/rack/protection/frame_options.rb:31:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-2.2.3/lib/rack/null_logger.rb:11:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-2.2.3/lib/rack/head.rb:12:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/rack-2.2.3/lib/rack/method_override.rb:24:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:194:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1951:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1503:in `block in call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1730:in `synchronize'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/sinatra-2.0.8.1/lib/sinatra/base.rb:1503:in `call'
App 6693 output: 	/x1/srv/whimsy/lib/whimsy/asf/rack.rb:225:in `call'
App 6693 output: 	/x1/srv/whimsy/lib/whimsy/asf/rack.rb:202:in `call'
App 6693 output: 	/x1/srv/whimsy/lib/whimsy/asf/rack.rb:256:in `call'
App 6693 output: 	/x1/srv/whimsy/lib/whimsy/asf/rack.rb:81:in `call'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/passenger-6.0.2/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/passenger-6.0.2/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:149:in `accept_and_process_next_request'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/passenger-6.0.2/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/passenger-6.0.2/src/ruby_supportlib/phusion_passenger/request_handler.rb:415:in `block (3 levels) in start_threads'
App 6693 output: 	/usr/local/rvm/gems/ruby-2.4.1/gems/passenger-6.0.2/src/ruby_supportlib/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'

Please include meeting date in board agenda page titles

Currently the page title changes from e.g. "2020-12-25" to "President" when the user navigates from the main page to the president's report.

The possibly unintended side effect of this is that when using a browser with many windows, the page with the agenda jumps around making it difficult to get back to the agenda using the Window pulldown.

This problem would be solved if the title changed from "President" to "2020-12-25 President".

I looked around to try to find where the title is set but was unsuccessful.

Person.method_missing only works properly for required attributes

The following code:

def method_missing(name, *args)

relies on being able to detect the presence of the attribute in the LDAP record.

However, LDAP does not return the names of missing attributes, in which case rather than returning nil, the method raises an error: 'undefined method attributename for ...'.
This means that (e.g.) githubUsername may work as an object property for some people but not others.
This is confusing.

Furthermore, if the Person object does not correspond to an LDAP record, even required attributes raise errors.

Broken links in `tools/comdevtalks.rb`

Broken links:

https://events.linuxfoundation.org/sites/events/files/slides/Commited%20to%20Apache.pdf

https://events.linuxfoundation.org/sites/events/files/slides/ApacheConNA2017-Blackmon.pdf

From:

"slides" => "http://events.linuxfoundation.org/sites/events/files/slides/Commited%20to%20Apache.pdf",

"slides" => "http://events.linuxfoundation.org/sites/events/files/slides/ApacheConNA2017-Blackmon.pdf",

need to search harder for private@ subscriptions

On the roster/committer/$availid page, I'm listed in several committees, but they have a (*) warning attached to them, with the note:
(*) could not find a subscription to the private@ mailing list for this committee

The reason this happened is because I'm subscribed as [email protected].

I suggest that the email parsing/matching ignore the +apache part. It would then match the foo@gmail address that is associated with my availid.

Problems running setupmymac --docker

So when running setupmymac for docker, this also seems to fail:

Traceback (most recent call last):
        2: from /usr/bin/bundle2.7:23:in `<main>'
        1: from /usr/lib/ruby/2.7.0/rubygems.rb:294:in `activate_bin_path'
/usr/lib/ruby/2.7.0/rubygems.rb:275:in `find_spec_for_exe': Could not find 'bundler' (1.17.2) required by your /srv/whimsy/tools/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.17.2`
rake aborted!
system!() failed!
/srv/whimsy/rakefile:14:in `system!'
/srv/whimsy/rakefile:96:in `block (3 levels) in <top (required)>'
/srv/whimsy/rakefile:84:in `chdir'
/srv/whimsy/rakefile:84:in `block (2 levels) in <top (required)>'
/srv/whimsy/rakefile:83:in `each'
/srv/whimsy/rakefile:83:in `block in <top (required)>'
/var/lib/gems/2.7.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
Tasks: TOP => update
(See full trace by running task with --trace)
rake aborted!
Command failed with status (1): [docker compose run  --entrypoint 'bash -c "rake update"' web]
/private/var/whimsy/whimsy/Rakefile:464:in `block (2 levels) in <top (required)>'
/Library/Ruby/Gems/2.6.0/gems/rake-13.2.1/exe/rake:27:in `<top (required)>'
Tasks: TOP => docker:update
(See full trace by running task with --trace)

Docker requires access to home directory

The Docker build currently requires read access to the entire user home directory in order to mount
the file $HOME/.gitconfig.
It also requires access to the .ssh and .subversion directories.
It would be better if this requirement could be met some other way that did not require making the home directory available.

Make project name appear earlier in report notification email subject lines

Some feedback from a PMC chair:

It would be better if the project name appeared sooner on the subject
line as many email clients (such as gmail in a browser window) will
not show the entire long subject.

Velocity ASF Board Report for May 2018 is now due

or even

Velocity Board Report for May 2018 is now due

Upgrade to Vue v3 or move back to React.js

Not urgent, but this work should be planned for. Summary

  • Vue.js version 3 was released in September of 2020. It is not exaggerating much to say that pretty much every API we used has changed. Details below.
  • Previously the agenda, secretary workbench, and roster apps were built using React, but we moved away from that when React changed to a non-open source license. React changed their license back shortly after this work was completed. They were aware of our moving away due to licensing issues, and this may have contributed to their change of heart, but at that point it didn't seem worth spending the effort to migrate back.

In Ruby syntax, a minimal application looks like the following:

class C < Vue
  def render
     _span "hi"
  end
end

Vue.render '#greetings' do
  _C
end

The above currently compiles to the following JavaScript:

var C = Vue.component(
  "c-",
  {render: function($h) {return $h("span", "hi")}}
);

new Vue({el: "#foo", render: function($h) {return $h(C)}})

With V3:

  • component is no longer a method on Vue. Instead one needs to call createApp, and component is a method on the app.
  • render methods no longer are passed an argument. Instead, one is expected to call Vue.h.
  • new Vue no longer works; instead one needs to call mount on the app.

After a day's worth of effort, I've gotten close, but I still haven't found a combination of calls that is equivalent to the above. Once that is done, I don't know what else has changed.

To be fair, Vue discourages the use of these APIs; they recommend creating HTML templates and mounting data onto the templates instead.


During this same time, the React API has remained stable, mostly with some additions that don't much matter to us.

If the requires for ruby2js/filter/vue were replaced with requires for ruby2js/filter/react and each of the classes defined in .js.rb files were changed to inherit from React instead of Vue, the code would nearly work.

  • Vue lifecyle methods are a bit different than React lifecycle methods. Some of the mappings are straightforward Vue's created is roughly the same as React's componentDidMount. Others are subtly different and need to be investigated on a case by case basis.
  • React event handler names are a bit different. If you want to have a method called every time someone enters a character in an input field, you would define this with onChange instead of onInput.

I really don't think that there was much more to it than that. This would not be a particularly difficult task, but it does represent a non-trivial amount of effort given the number of source files involved.

In case it isn't obvious, my recommendation is to move back to React.

add link to roster/__self__

I think the main roster landing page (source at www/roster/views/index.html.rb) should have a prominent "your page" link at the top.

(I'm not quite sure how to edit that in)

Agenda new action responding with 500 status

This seems to be an odd one, perhaps caused by a recent change to committee-info or the process for reading that file, or maybe something in the December minutes.

I am getting a 500 error from whimsy agenda when trying to generate a new agenda file. That's all I get -- nothing else in the response or logs. I have not seen any errors on other agenda views, and the last meeting agenda seems to be fine.

Server time of an attempt was 2020-12-19T00:51:49.

I checked the changes to committee-info.txt after the meeting (removing Metron and Sentry) and they seem fine. I've also checked the code and everything else I can think of. Next step would be to instrument the view action so that it can tell me where it is failing, but I have no time.

instance_eval error in reminder-text.json.rb

Sadly, my guess in #95 wasn't sufficient. I am still getting an error on send final reminders.

The error log says

App 13507 output: _ERROR #<SecurityError: Insecure operation - instance_eval>
App 13507 output: _WARN /x1/srv/whimsy/www/board/agenda/views/actions/reminder-text.json.rb:28:in `_evaluate'
App 13507 output: _WARN /x1/srv/whimsy/www/board/agenda/routes.rb:465:in `block in <top (required)>' 

Agenda tool remind-actions.json.rb says "Error: no emails were sent to " even when they were sent.

I tried sending the action item reminder and the tool was unable to send a reminder for Sander Striker. I am guessing this is because committee-info.txt doesn't list the non-officer directors, but it might also be that there is more than one "Sander" in the file and no way to disambiguate.

The easiest solution might be at to add a list of non-officer directors to the file, after the executive officers.

WHIMSY-357 - Support git write of calendar.md in agenda tool

Since the apache.org website is now in git there needs to be support for writing (commit/push) in the git.rb module.

Specifically updating https://github.com/apache/www-site/blob/main/content/foundation/board/calendar.md instead of svn's calendar.mdtext.

The minutes txt file remains in svn.

Five copies of `jQuery v3.2.1`

whimsy % find **/jquery?min.js
www/assets/jquery-min.js
www/jquery-min.js
www/jquery.min.js
www/status/js/jquery.min.js
www/voter/jquery.min.js

Problems running setupmymac on my mac

So I just ran setupmymac on my mac and I got errors.

$ sudo ln -s /var/log/apache2 /srv/whimsy/www/members/log
/Users/cdutz/Projects/Apache/Whimsy/whimsy/config/setupmymac:374:in `read': No such file or directory @ rb_sysopen - /etc/apache2/other/passenger.conf (Errno::ENOENT)
        from /Users/cdutz/Projects/Apache/Whimsy/whimsy/config/setupmymac:374:in `<main>'

When debugging the script it seems that in my case passenger_conf doesn't exist at /etc/apache2/other/passenger.conf and therefore the script goes into the second part of the expression in:

unless File.exist?(passenger_conf) or File.read(passenger_conf) != snippet

Which then fails ... could it be that this should be an and instead of an or?

menu other Apache resources contains officer restricted item

Hi,
I noticed that the following item in Other Apache Resources : Persons with signed CLAs but who are not (yet) committers is restricted to officer and I think it should be moved to Tools Restricted To Officers Or Members (tested with my account, skygo PMC)

Tainted subject text in send-reminders.json.rb

I am getting a
#<SecurityError: Insecure operation - instance_eval>
after pressing the "send final reminders" button in the missing view of agenda.

My guess is that the recent change to Mustache in send-reminders.json.rb left the subject tainted and this is the error that results. In that case, the fix might be

subject subject.untaint

on line 67, but I don't have commit access and the input might need to be checked first for bad eval conditions.

Highlighting of long lines very distracting.

Long lines in board reports are highlighted in yellow, presumably to indicate that they are long lines. This is far more distracting than the long lines themselves, and I ask that the feature be removed, or made optional.

Automate project report reminders

A simple start on this would be automating the send of the initial reminders. Scheduling of these could be based on the calendar or the posted agenda.

How does pns.rb find a project name?

I checked out pns.rb and sort of can see you are doing a JIRA JSON query for all podling name searches, and then searching the name field, but I can't find why it won't pick up PODLINGNAMESEARCH-130 for DRAT. The resolution lists: Establish "Apache Distributed Release Audit Tool (DRAT)" in Agenda 7A, and the JIRA issue says: "Establish whether "Apache Distributed Release Audit Tool (DRAT)" is a suitable name" what am I missing here?

rake docker:update fails

rake docker:update yields the following error (MacOS):

rake aborted!
Errno::ENOENT: No such file or directory @ apply2files - /srv/whimsy/www/docs/api
/srv/whimsy/rakefile:350:in `block in <top (required)>'
/srv/whimsy/rakefile:101:in `block in <top (required)>'
/var/lib/gems/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
Tasks: TOP => rdoc => www/docs/api/index.html
(See full trace by running task with --trace)
ERROR: 1
rake aborted!
Command failed with status (1): [docker-compose run  --entrypoint 'bash -c ...]
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/file_utils.rb:67:in `block in create_shell_runner'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/file_utils.rb:57:in `sh'
/Users/cy/Development/apache-whimsy/whimsy/Rakefile:372:in `block (2 levels) in <top (required)>'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `block in execute'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `each'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `execute'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:214:in `block in invoke_with_call_chain'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:194:in `invoke_with_call_chain'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:183:in `invoke'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:160:in `invoke_task'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `each'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `block in top_level'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:125:in `run_with_threads'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:110:in `top_level'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:83:in `block in run'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:80:in `run'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/exe/rake:27:in `<top (required)>'
/Users/cy/.rvm/rubies/ruby-2.6.3/bin/rake:23:in `load'
/Users/cy/.rvm/rubies/ruby-2.6.3/bin/rake:23:in `<main>'

How to file ICLAs

ICLAs are currently filed using a filename stem based on the full name.

This approach increasingly suffers from collisions; it also has the potential to expose PII.

We need to find a different identifier where the likelihood of collisions is very small.
Unfortunately humans don't have a unique immutable identifier, at least not one which is likely to be accessible to us.
So some other ID needs to be found.

Some possibilities to consider:

  • UUID generated at time of filing
  • hash of the ICLA file
  • email address (canonicalised if necessary to generate a valid file name stem)

Assuming two people don't share the same email address, all the above should be collision-free for distinct people.

Any others?

Note that whilst the above ids will uniquely identify an ICLA, additional ICLAs from the same person will generally have different ids (email may or may not be the same). This is also true of the full name used in ICLAs: apart from ICLAs which are sent to record a change of name, we sometimes get ICLAs with a different spelling of a name, or with changes to the given names.

The current approach for replacement ICLAs is to create a directory and store all the ICLAs in the same directory.
If email address is used, something similar would be needed.
For the other IDs, the list of files in a directory would need to be replaced with a list of IDs in the index.

https://whimsy.apache.org/members/proxy: changing proxy breaks

I tried to change my proxy today and it partially succeeded:

svn checkout --non-interactive --quiet -- https://svn.apache.org/repos/private/foundation/Meetings/20220615 /tmp/d20220322-1572689-sn8r82
svn add --non-interactive -- proxies-received/blair.txt
svn: warning: W150002: '/tmp/d20220322-1572689-sn8r82/proxies-received/blair.txt' is already under version control
svn: E200009: Could not add all targets because some targets are already versioned
svn: E200009: Illegal target for the requested operation
svn propset --non-interactive -- svn:mime-type text/plain\;\ charset\=utf-8 proxies-received/blair.txt
property 'svn:mime-type' set on 'proxies-received/blair.txt'
svn commit --non-interactive --message assign\ Roy\ T.\ Fielding\ \(fielding\)\ as\ my\ proxy -- proxies-received/blair.txt proxies
Sending        proxies-received/blair.txt
Transmitting file data .done
Committing transaction...
Committed revision 106516.

It looks like the state in proxies-received/blair.txt and proxies is now inconsistent.

ASF Mailing List Self-subscription failed

trying to subscribe to a list fails:

Submitting subscribe request:
{
  "version": 3,
  "availid": "stillalex",
  "addr": "[email protected]",
  "listkey": "jackrabbit-oak-dev",
  "member_p": false,
  "chair_p": false
}
svn checkout https://svn.apache.org/repos/infra/infrastructure/trunk/subreq/ /tmp/d20170612-23348-zuwdcq
svn: E170013: Unable to connect to a repository at URL 'https://svn.apache.org/repos/infra/infrastructure/trunk/subreq'
svn: E175013: Access to '/repos/infra/infrastructure/trunk/subreq' forbidden
svn add stillalex-jackrabbit-oak-dev.json
svn: E155007: '/tmp/d20170612-23348-zuwdcq' is not a working copy
svn commit stillalex-jackrabbit-oak-dev.json --message 'jackrabbit-oak-dev@ += stillalex'
svn: E155007: '/tmp/d20170612-23348-zuwdcq/stillalex-jackrabbit-oak-dev.json' is not a working copy
Request Failed, see above for details

rake svn:update git:pull fails

After a succesful rake docker:update, I wanted to run:

rake svn:update git:pull

The result is:

** Invoke svn:update (first_time)
** Invoke config (first_time)
** Execute config
rake aborted!
LoadError: cannot load such file -- whimsy/asf/config
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Users/cy/Development/apache-whimsy/whimsy/Rakefile:112:in `block in <top (required)>'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `block in execute'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `each'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `execute'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:214:in `block in invoke_with_call_chain'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:194:in `invoke_with_call_chain'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:238:in `block in invoke_prerequisites'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:236:in `each'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:236:in `invoke_prerequisites'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:213:in `block in invoke_with_call_chain'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:194:in `invoke_with_call_chain'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/task.rb:183:in `invoke'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:160:in `invoke_task'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `each'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `block in top_level'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:125:in `run_with_threads'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:110:in `top_level'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:83:in `block in run'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/lib/rake/application.rb:80:in `run'
/Users/cy/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/rake-12.3.2/exe/rake:27:in `<top (required)>'
/Users/cy/.rvm/rubies/ruby-2.6.3/bin/rake:23:in `load'
/Users/cy/.rvm/rubies/ruby-2.6.3/bin/rake:23:in `<main>'
Tasks: TOP => svn:update => config

Looks I missed to configure something but could not find what it is from here:
https://github.com/apache/whimsy/blob/master/DOCKER.md

Outdated `jQuery` versions

https://security.snyk.io/package/npm/jquery/1.11.2

A quick grep:

whimsy % grep -r -e "jQuery v\d" .
./www/officers/assets/jquery-min.js:/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
./www/voter/jquery.min.js:/*! jQuery v1.7.1 jquery.com | jquery.org/license */
./www/status/js/jquery.min.js:/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
./www/status/assets/jquery-min.js:/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
./www/jquery.min.js:/*! jQuery v1.7.1 jquery.com | jquery.org/license */
./www/jquery.tablesorter.js: * @requires jQuery v1.2.3
./www/members/assets/jquery-min.js:/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
./www/events/assets/jquery-min.js:/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
./www/assets/jquery-min.js:/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.