Package: feedback-tool
feedback_tool- Simple peer-to-peer feedback platformfeedback_toolis a platform for managing peer-to-peer feedback within an
organisation.Docker QuickstartInstallsource-to-imageRun the application on local Dockercd frontend
s2i build . centos/nodejs-8-centos7 feedback-tool-dev-frontend
cd ..
s2i build . centos/python-36-centos7 feedback-tool-app 
cd docker/dev
docker-compose up -dSetup a dummy template, 3 question and period data to carry out a feedback cycle.cd ../..
python setup.py develop
pip install faker freezegun webtest mock 
python tests/scripts/configure_db.py --config host_example.ini add-test-periodsOnce fully started, openhttp://localhost:4200. Refer todocker/shared/ldif/01-data.ldiffor credentials for dummy users. Use the following commands to change phases.python tests/scripts/configure_db.py --config host_example.ini --subperiod enrollment adjust
python tests/scripts/configure_db.py --config host_example.ini --subperiod entry adjust
python tests/scripts/configure_db.py --config host_example.ini --subperiod approval adjust
python tests/scripts/configure_db.py --config host_example.ini --subperiod review adjustConfiguration valuesfeedback_tool.db_urlFollowhttp://docs.sqlalchemy.org/en/latest/core/engines.html#database-urlsfeedback_tool.business_unitDisplayed in the frontend beside the logo. Useful for multi-tenant setups
within larger companies.feedback_tool.displayed_hostnameIf set, this will override the use of/etc/hostnameas the hostname
displayed in emails to the set string.feedback_tool.enable_send_emailIf set totrue, it will cause emails to be sent. This happens:When a talent manager uses the management panel to manually send themAutomatically according to the email schedule iffeedback_tool.run_email_interval_jobconfig value is set totruefeedback_tool.production_hostnameandfeedback_tool.production_userIf these values match the what the application sees on the host, then
this will enable:Loading of all user emails for the given business unit unlessfeedback_tool.load_user_email_listis set, which then will only
load the subset of the user emails in the list.feedback_tool.homebase_locationThe datetimes set in the Period table are technically not UTC. Those times
are coupled with this configured value, the location. The phase shift will
occur when a particular datetime is passed at this configured location.Here are the available choices:LondonNew YorkOxfordShanghaiHong KongGBRBostonPfäffikonfeedback_tool.talent_manager_usernamesSet this to an array of strings containing the LDAP usernames
of who you would like to be able to login with the talent manager role.
e.g. ["lcarty", "chasmith"]feedback_tool.reload_users_on_app_startThis is normally set toFalseas we now rely on talent managers uploading
the user hierarchy configuration CSV into the application.feedback_tool.load_user_email_listIn non-prod environments, we don't save emails within the User database.
If this is set, we will save the emails of the following list of users
identified by their LDAP username, allowing them to be emailed
(if emailing is turned on).
e.g. ["chasmith"]feedback_tool.allow_passwordless_accessA useful development flag for impersonation. This should be set tofalsein production.feedback_tool.run_email_interval_jobIftrue, run a job in the background that checks the email flags for
the current period and if not set, send out the relevant emails and set.feedback_tool.display_nameNormally the company name, that will be displayed in the frontend.feedback_tool.support_emailEmail that will be displayed to users when they are denied access to the tool
or there is an unexpected error.feedback_tool.reply_emailEmail that will be displayed to users that they receive from the automated
notification system (notifications sent by email).feedback_tool.login_username_msgHelp message for the login input to remind users what username to use.feedback_tool.login_password_msgHelp message for the login input to remind users what password to use.feedback_tool.tm_upload_new_population_msgHelp message for talent manager on how to populate the CSV that is to be
uploaded.feedback_tool.tm_generate_population_msgHelp message for talent manager on how to generate the population CSV.feedback_tool.ldap_uriURI to LDAP instnacefeedback_tool.ldap_username_keyLDAP field name for what to bind to theusernameUser model variable.feedback_tool.ldap_user_bind_templateTemplate used to generate the bind DN for a user. Refer to the example config.feedback_tool.ldap_manager_keyLDAP field name for what to bind to themanagerUser variable.feedback_tool.ldap_location_keyLDAP field name for what to bind to thelocationUser variable.feedback_tool.ldap_uid_keyLDAP field name for what to bind to theuidUser variable.feedback_tool.ldap_department_keyLDAP field name for what to bind to thedepartmentUser variable.feedback_tool.ldap_business_unit_keyLDAP field name for what to bind to thebusiness_unitUser variable.feedback_tool.ldap_search_bind_dnBind DN which should have permissions to search for users.feedback_tool.ldap_search_passwordPassword for the search bind DN.feedback_tool.ldap_base_dnBase DN to perform the user search upon.feedback_tool.ldap_dn_username_attributeAttribute that the username is assigned to in a DNfeedback_tool.ldap_dn_username_regexRegex for extraction of a username from a DNfeedback_tool.logo_filenameIf the file exists in the assets folder on the backend, serve this up to the frontend.DesignThis section will explain how the application is designed in terms of strucutures and processes, and some reasons why it is done this way.ArchitectureWe use:Backend - PyramidFrontend - AngularDatabase - Agnostic due to use of SQLAlchemy libraryThe choices of these were simply because this was a hard requirement to match the internal technology stack at inception of the project.The backend is a just an API service that also serves the productionised HTML/CSS/JS Angular frontend plus other static assets such as images.Refer to below for why LDAP is only used for authentication and NOT authorization.Staff list generation processThe available users in the feedback tool arestatically generated and fixed until manually updated.This is desired despite having active access to the LDAP server. The reason for this is that during a feedback cycle, we do not want to have users entering or leaving the feedback cycle unintentionally, which would happen if we used LDAP as a source of truth.On top of this, the reporting structure in LDAP doesn't necessarily match the real world, and may change temporarily due to transient staff issues. Putting the power into the talent manager's hands makes dealing with such situations easier, without required developer intervention.Therefore, the process as is follows:The CSV lists the relationships between staff member, therefore marking who is a staff member and who is a
manager. This information is used for authorization.DocumentationGraph source are in the*.dot*files. To regenerate graph PNGs.Install graphvizRundot -Tpng architecture.dot -o architecture.png
dot -Tpng population.dot -o population.png