Code Monkey home page Code Monkey logo

light-messenger's Introduction

Light-Messenger

Why

Light-Messenger helps MTRAs communicate with radiologists without calling them on the phone. Normally, urgent cases require that the MTRA calls up the Radiologist on the phone. While this communication is well established, it has the downside of interrupting the radiologist on duty along with disturbing the other people reading images in the same room. Instead of calling the radiologist the MTRAs can send a ambient light signal to the radiology the department has a lower interruption cost.

How

Light-Messenger is a web application that provides the solution described above. The MTRAs use a ui which allows them to create notifications with three different priorities. On the Radiology side, the doctors are presented with a list of open notifications regarding urgent cases that need to be acknowledged.

This application also supports an arduino that can hook into the application via a REST API and flash an LED in case there is a notification open so that the Radiologist can acknowledge the notification.

This is a screenshot of how it looks on the MTRAs side

Alt text

This is a screenshot of how it looks for the radiologist department

Alt text

TODO: image of the LED flashing in the Befund room :)

Development

The development environment uses docker to spin up a local mysql instance. This can be replaced by a local mysql instance if required.

Requirements:

  • Go >= 1.12.1
  • mysql = 5.7.x
  • Docker >= 19.03.2
  • docker-compose >= 1.21.0

Git repository structure:

  • res: resources including sql scripts to create tables and setup integration tests
  • src: go source code
  • static: static web assets including the golang html templates
  • config-sample.json: sample configuration in json format, note that the application binary requires a config.json located in the same folder to run
  • docker-compose.yml: docker configuration to spin up a mysql database
  • go.mod: go modules file
  • go.sum: go modules checksum file
  • Jenkinsfile: ci configuration
  • LICENSE: license
  • light-messenger.go: main application entry point
  • Makefile: build tool
  • README.md: this document
  • run-dev.sh: development script to rebuild application on code change

Setup

Steps:

  • Copy the provided config-sample.json to config.json and fill in with values as desired. Note that the integration tests currently use values provided in config-sample.json.
  • Spin up the database in a separate shell: docker-compose up
  • Get the rice binary via go get github.com/GeertJohan/go.rice/rice
  • Build the application: make build
  • Create the default tables: ./light-messenger.exec db-exec --script-path ./res/create_tables.sql
  • Run the application: make run

All commands:

  • make deps : get all dependencies, uses go modules to get exact dependencies.
  • make run : compile and execute
  • make test : run all tests
  • make test-unit : run unit tests
  • make test-integration : run integration tests

To setup a local mysql instance, create a database and user: light_messenger and change the values in config.json accordingly.

To setup auto recompile on code change, use the provided run-dev.sh script. Note that this requires entr TODO and ag TODO.

To create a production release which is a self contained binary, run the following:

./release.sh

Code

  • Note that error stacktraces need to be enabled at the point of library interaction in the code. As an example, an error that occurs while communicating with the db needs to be wrapped with errors.WithStack() but this error can simply be passed along when used in the handler. The idea is to enable clean stacktraces and avoid Java-esque stacktrace recursion.

Production

Systemd setup:

[Unit]
Description=Light Messenger
After=syslog.target
After=network.target
After=mysql.service

[Service]
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
Type=simple
User=nofasy
Group=nofasy
WorkingDirectory=/home/nofasy/light-messenger-dist
ExecStart=/home/nofasy/light-messenger/light-messenger.exec
Restart=always
RestartSec=10
#StandardOutput=file:/var/log/radiology-monitor.out
#StandardError=file:/var/log/radiology-montitor.err
Environment="USER=nofasy" "HOME=/home/nofasy" 
Environment="GOPATH=/home/nofasy/.gvm/pkgsets/go1.12.1/global" "GOROOT=/home/nofasy/.gvm/gos/go1.12.1" "GVM_ROOT=/home/nofasy/.gvm" 
Environment="PATH=/home/nofasy/.nvm/versions/node/v10.15.3/bin:/home/nofasy/.gvm/pkgsets/go1.12.1/global/bin:/home/nofasy/.gvm/gos/go1.12.1/bin:/home/nofasy/.gvm/pkgsets/go1.12.1/global/overlay/bin:/home/nofasy/.gvm/bin:/home/nofasy/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

[Install]
WantedBy=multi-user.target
sudo systemctl enable light-messenger
sudo service light-messenger start

Logging:

TODO:

light-messenger's People

Contributors

joshy avatar wheresvic avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

franchb

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.