Main site for Finals Club Services http://finalsclub.org (mirror)

Seth Woodworth 1f17b81c67 Merge pull request #35 from sethwoodworth/devel 12 سال پیش
bc @ 3ee3af3ffc 2af4feeef7 completed live courses overlay with static data 12 سال پیش
emails 7d348a43da migrating monitor and backup scripts from sleepless/fc => FinalsClub repo 13 سال پیش
etherpad-lite @ 9534f9f1a1 2af4feeef7 completed live courses overlay with static data 12 سال پیش
fcbackups 7d348a43da migrating monitor and backup scripts from sleepless/fc => FinalsClub repo 13 سال پیش
public b17da3c08d fixed login issue on courses page, tmpl issues 12 سال پیش
util 981d956dd6 Merge branch 'master' of github.com:finalsclubdev/FinalsClub 13 سال پیش
views 29bf7e1a3f Revert "removing depricated jade templates" 13 سال پیش
.gitignore 990f3aa309 reorganized assets, completed new header 13 سال پیش
.gitmodules 3408f73c7d adding fresh epl and bc 12 سال پیش
.vimrc b95fae049b minor cleaning on lectures page and lecture page, fixed links on home page 13 سال پیش
COPYING dca1eede5e Added GPLv3 License to source code 13 سال پیش
README.md cc1307f9cd Changed setup.sh to include whole process and start will start the server from home 13 سال پیش
app.js a3f8989a1c set a maxAge timeout on static files and setting up an error log for res.sendfile 12 سال پیش
db.js b15c7aa4e6 Inital Commit 13 سال پیش
devRun.sh 7a076c2d99 adding a dev server kickoff script 12 سال پیش
fc_monitor_epl.js 242f71b708 updating script permissions 13 سال پیش
h 6039329412 1page updates 13 سال پیش
log.js b15c7aa4e6 Inital Commit 13 سال پیش
mailer.js b15c7aa4e6 Inital Commit 13 سال پیش
models.js d28604204e adding courseNum and lectureNum fields to schema 12 سال پیش
package.json a0b2a9a1df Removing EveryAuth from app.js and from requirements 12 سال پیش
restart b15c7aa4e6 Inital Commit 13 سال پیش
schools.json b15c7aa4e6 Inital Commit 13 سال پیش
setup.sh b1d9ac15de Removed mongodb-2.0.2 from setup.sh 13 سال پیش
setup2.sh 5c02d8741c adding additional deploy script to be merged with setup.sh 12 سال پیش
start e6b92d3e8e updating backchannel to not show comments in a specific class 12 سال پیش
stop 5d33f2fb4e updated start/stop scripts to run form /etc/rc.local (without sudo) 13 سال پیش

README.md

Finals Club (FC)

This is the source code repository for finalsclub.org.

FC is a 501(c)(3) non-profit open education project dedicated to helping college students collaborate, learn, and share their knowledge freely online.

Additional resources

[[ discussion groups, chat rooms, etc. related to FC and FC sources ]]

Quick install

Requirements:

  • Debian/ubuntu-server GNU/Linux Box with a modern kernel (2.6.39 <)
  • 1 GB (idealy) 512MB min.
  • Node.js (Version 0.6.1 or later) More ...
  • MongoDB (Version 2.0.2 or later) More ...
  • forever

Deployment:

  1. Copy setup.sh to home directory.

  2. REVIEW setup.sh BEFORE RUNNING!!!!

  3. run: sudo setup.sh

  4. mongorestore any back-up databases that you may have.

  5. Copy "start" to home directory and run.

System components

The system consists of these main parts:

  • The website
  • The collaborative, real-time editor
  • The back channel

Most of the system is written in Javascript and executed by the Node.js runtime.

Source Code

The Collaborative Real-time Editor

The editor is an embedded editor called Etherpad-Lite (EPL). It provides the ability for multiple people to simultaneously edit a single document. The documents in FC are the notes for a specific lecture.

EPL is installed as a git submodule to the main FC source tree with the name "etherpad-lite".

The Back Channel (BC)

The back channel portion of FC is implemented with "BC". BC allows the note takers, or anyone else who is just observing, to suggest questions for the lecturer, and vote on each other's questions. It also allows people to post commentary.

Although the actual BC code was written for FC, it has been extracted from the original FC source and turned into an independent open source project.

BC is installed as a git submodule to the main FC source tree with the name "bc".

The Surrounding Website

This is the FC website, which brings together the other two elements into a single website that serves it's stated purpose (above). This would be the home page, privacy policy page, the page that lists the participating schools, the sub pages containing lists of lectures and note taking sessions, and the core page where EPL and BC are both found along side each other.

Several node modules are leveraged to to make the basic website work:

[[ more detail about website generally, then defer to src comments ]]

Database

The database is MongoDB. MongoDB is not a relational database, but rather a noSQL or "document/object" database. Data is stored as structured objects versus tables and rows. (More about MongoDB)[http://mongodb.org].

Collections in the database

  • archivedcourses [[ schema needed ]]
  • archivednotes [[ schema needed ]]
  • archivedsubjects [[ schema needed ]]
  • courses [[ schema needed ]]
  • lectures [[ schema needed ]]
  • notes [[ schema needed ]]
  • posts [[ schema needed ]]
  • schools [[ schema needed ]]
  • sessions [[ schema needed ]]
  • users [[ schema needed ]]

[[ stuff ]]

[[ notes about scaling/replication/etc. ]]

AWS Infrastructure

The actual finalsclub.org servers run in the cloud on Linux servers, using Amazon Web Services (AWS). Scaling is accomplished by adding additional servers to a load balancer.

NOTE: The scaling system is automatic; new servers have to be added manually, but it it's very easy. NOTE: Automatic fail-over of the database is not yet in place.

NOTE: There are currently 2 running server instances. One for the live server and one for testing.

Data is stored in a MongoDB server running on the same AWS instance as the website. Data is backed up daily to the durable AWS S3 system. One backup of the database is kept for the most recent 30 days, one for each of the most recent 12 months, and one for every year.

AWS Cloudwatch is used to monitor the servers. When the configured conditions warrant attention, notices are sent to "info@finalsclub.org".

NOTE: There are currently 2 monitors set up:

  • available disk space
  • CPU utilization

NOTE: We still have an ongoing issue with the EPL server hanging up. This is being worked on.