= FedMsg Notifications (FMN) SOP Route individualized notifications to fedora contributors over email, irc. == Contact Information === Owner * Messaging SIG * Fedora Infrastructure Team === Contact ____ * #fedora-apps for FMN development * #fedora-fedmsg for an IRC feed of all fedmsgs * #fedora-admin for problems with the deployment of FMN * #fedora-noc for outage/crisis alerts ____ === Servers Production servers: ____ * notifs-backend01.iad2.fedoraproject.org (RHEL 7) * notifs-web01.iad2.fedoraproject.org (RHEL 7) * notifs-web02.iad2.fedoraproject.org (RHEL 7) ____ Staging servers: ____ * notifs-backend01.stg.iad2.fedoraproject.org (RHEL 7) * notifs-web01.stg.iad2.fedoraproject.org (RHEL 7) * notifs-web02.stg.iad2.fedoraproject.org (RHEL 7) ____ === Purpose Route notifications to users == Description fmn is a pair of systems intended to route fedmsg notifications to Fedora contributors and users. There is a web interface running on notifs-web01 and notifs-web02 that allows users to login and configure their preferences to select this or that type of message. There is a backend running on notifs-backend01 where most of the work is done. The backend process is a 'fedmsg-hub' daemon, controlled by systemd. == Hosts === notifs-backend This host runs: * `fedmsg-hub.service` * One or more `fmn-worker@.service`. Currently notifs-backend01 runs `fmn-worker@\{1-4}.service` * `fmn-backend@1.service` * `fmn-digests@1.service` * `rabbitmq-server.service`, an AMQP broker used to communicate between the services. * `redis.service`, used for caching. This host relies on a PostgreSQL database running on db01.phx2.fedoraproject.org. === notifs-web This host runs: * A Python WSGI application via Apache httpd that serves the https://apps.fedoraproject.org/notifications[FMN web user interface]. This host relies on a PostgreSQL database running on db01.iad2.fedoraproject.org. == Deployment Once upstream releases a new version of https://github.com/fedora-infra/fmn[fmn], https://github.com/fedora-infra/fmn.web[fmn-web], or https://github.com/fedora-infra/fmn.sse[fmn-sse] creating a Git tag, a new version can be built an deployed into Fedora infrastructure. === Building FMN is packaged in Fedora and EPEL as https://src.fedoraproject.org/rpms/python-fmn/[python-fmn] (the backend), https://src.fedoraproject.org/rpms/python-fmn-web/[python-fmn-web] (the frontend), and the optional https://src.fedoraproject.org/rpms/python-fmn-sse/[python-fmn-sse]. Since all the hosts run RHEL 7, you need to build all these packages for EPEL 7. === Configuration If there are any configuration updates required by the new version of FMN, update the `notifs` Ansible roles on batcave01.iad2.fedoraproject.org. Remember to use: .... {% if env == 'staging' %} {% else %} {% endif %} .... When deploying the update to staging. You can apply configuration updates to staging by running: .... $ sudo rbac-playbook -l staging groups/notifs-backend.yml $ sudo rbac-playbook -l staging groups/notifs-web.yml .... Simply drop the `-l staging` to update the production configuration. === Upgrading To upgrade the https://src.fedoraproject.org/rpms/python-fmn/[python-fmn], https://src.fedoraproject.org/rpms/python-fmn-web/[python-fmn-web], and https://src.fedoraproject.org/rpms/python-fmn-sse/[python-fmn-sse] packages, apply configuration changes, and restart the services, you should use the manual upgrade playbook: .... $ sudo rbac-playbook -l staging manual/upgrade/fmn.yml .... Again, drop the `-l staging` flag to upgrade production. Be aware that the FMN services take a significant amount of time to start up as they pre-heat their caches before starting work. == Service Administration Disable an account (on notifs-backend01): .... $ sudo -u fedmsg /usr/local/bin/fmn-disable-account USERNAME .... Restart: .... $ sudo systemctl restart fedmsg-hub .... Watch logs: .... $ sudo journalctl -u fedmsg-hub -f .... Configuration: .... $ ls /etc/fedmsg.d/ $ sudo fedmsg-config | less .... Upgrade (from batcave): .... $ sudo -i ansible-playbook /srv/web/infra/ansible/playbooks/manual/upgrade/fmn.yml .... == Mailing Lists We use FMN as a way to forward certain kinds of messages to mailing lists so people can read them the good old fashioned way that they like to. To accomplish this, we create 'bot' FAS accounts with their own FMN profiles and we set their email addresses to the lists in question. If you need to change the way some set of messages are forwarded, you can do it from the FMN web interface (if you are an FMN admin as defined in the config file in roles/notifs/frontend/). You can navigate to https://apps.fedoraproject.org/notifications/USERNAME.id.fedoraproject.org to do this. If the account exists as a FAS user already (for instance, the `virtmaint` user) but it does not yet exist in FMN, you can add it to the FMN database by logging in to notifs-backend01 and running `fmn-create-user --email DESTINATION@EMAIL.COM --create-defaults FAS_USERNAME`.