管理组织内部同行反馈的平台。

feedback-tool的Python项目详细描述


feedback_tool-简单的点对点反馈平台

Build status

feedback_tool是一个在 组织。在

Docker快速入门

  1. 安装source-to-image

  2. 在本地Docker上运行应用程序

cd 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 -d
  1. 设置一个虚拟模板,3个问题和周期数据来执行反馈循环。在
^{pr2}$
  1. 完全启动后,打开http://localhost:4200。请参阅docker/shared/ldif/01-data.ldif 用于虚拟用户的凭据。使用以下命令更改阶段。在
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 adjust

Login screenInitial screen for user eforshaw

配置值

feedback_tool.db_url

跟随http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls

feedback_tool.business_unit

显示在前端的标志旁边。对于多租户设置很有用 在大公司内部。在

feedback_tool.displayed_hostname

如果设置,这将覆盖使用/etc/hostname作为主机名 在电子邮件中显示到设置字符串。在

feedback_tool.enable_send_email

如果设置为true,则会导致发送电子邮件。发生这种情况:

  • 当人才经理使用管理面板手动发送
  • 如果 feedback_tool.run_email_interval_job配置值设置为true

feedback_tool.production_hostname和{}

如果这些值与应用程序在主机上看到的值匹配,则 这将使:

  • 加载给定业务部门的所有用户电子邮件,除非 feedback_tool.load_user_email_list已设置,则仅 在列表中加载用户电子邮件的子集。在

^{}

The 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:

  • London
  • New York
  • Oxford
  • Shanghai
  • Hong Kong
  • GBR
  • Boston
  • Pfäffikon

^{}

Set 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"]

^{}

This is normally set to ^{} as we now rely on talent managers uploading the user hierarchy configuration CSV into the application.

^{}

In 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"]

^{}

A useful development flag for impersonation. This should be set to ^{} in production.

^{}

If ^{}, 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.

^{}

Normally the company name, that will be displayed in the frontend.

^{}

Email that will be displayed to users when they are denied access to the tool or there is an unexpected error.

^{}

Email that will be displayed to users that they receive from the automated notification system (notifications sent by email).

^{}

Help message for the login input to remind users what username to use.

^{}

Help message for the login input to remind users what password to use.

^{}

Help message for talent manager on how to populate the CSV that is to be uploaded.

^{}

Help message for talent manager on how to generate the population CSV.

^{}

URI to LDAP instnace

^{}

LDAP field name for what to bind to the ^{} User model variable.

^{}

Template used to generate the bind DN for a user. Refer to the example config.

^{}

LDAP field name for what to bind to the ^{} User variable.

^{}

LDAP field name for what to bind to the ^{} User variable.

^{}

LDAP field name for what to bind to the ^{} User variable.

^{}

LDAP field name for what to bind to the ^{} User variable.

^{}

LDAP field name for what to bind to the ^{} User variable.

^{}

Bind DN which should have permissions to search for users.

^{}

Password for the search bind DN.

^{}

Base DN to perform the user search upon.

^{}

Attribute that the username is assigned to in a DN

^{}

Regex for extraction of a username from a DN

^{}

If the file exists in the assets folder on the backend, serve this up to the frontend.

Design

This section will explain how the application is designed in terms of strucutures and processes, and some reasons why it is done this way.

Architecture

Architecture diagram

We use:

  • Backend - Pyramid
  • Frontend - Angular
  • Database - Agnostic due to use of SQLAlchemy library

The 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 process

The available users in the feedback tool are statically 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:

Staff list generation process

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.

Documentation

Graph source are in the ^{} files. To regenerate graph PNGs.

  1. Install graphviz
  2. Run ^{pr 4}$

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中