gomh

module
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2018 License: MIT

README

Open mHealth Framework for GO

Introduction

This repository contains library and reference servers for building and running Open mHealth compatible web services. There are two APIs that are currently available.

  • Data Server Unit (DSU)
  • Team Server Unit (TSU)

In addition, there are libraries to send push messages to mobile devices over Firebase Cloud Messaging service. We also provide a corn-like scheduler for sending repeated messages.

The server depend on several other services to run. These are:

  • Postgres SQL server
  • Mongo database
  • Firebase account
  • PMSYS Policy Server Unit
  • Auth0 account

All services must be configures before the service is started.

Configuration

All configuration options for the TSU are defined in the Config.go file. They can be set from several sources. They are processed in the following order:

  • Defaults in Config.go
  • Environment variables
  • The config.yml file
  • (optional) Any config-<env>.yml file

The TSU use Configor to handle configuration.

Sources for configuration
Configuration from environment variables

All configuration options can be set using environment variables. Thy are named according to the specification found in Config.go, uppercased and prefixed with TSU. Substrucures are seperaded with an underscore _. For example,

Config.go ENV
Host TSU_HOST
Mongo.Post TSU_MONGO_PORT
Configuration from files

The server will read configuration from the environent variables and the config.yml file. In addition, configuration will also be ready from an environment specific file config-<env>.yml. The environement is specified in the TSU_ENV environment variable. For instance, if you have set production confiugraiton in the config-prod.yml, run:

TSU_ENV=prod ./pmsys-tsu

Postgresql Database setup

Postgres connection setup is controlled by the following configuration variables:

Options Description
Postgres.User Database username
Postgres.Password Password
Postgres.Host IP/Hostname for database server
Postgres.Port Portnumner (default=5432)
Postgres.Database Name of database table

This project use the Goose migration tool to initiate and upgrade database tables. Install by

$ go get -u github.com/pressly/goose/cmd/goose

Then migrate the database by running (substituting config values).

$ goose postgres "user=<User> dbname=<Database> password=<Password> host=<Host> sslmode=disable" up

Mongo Database setup

Mongodb is controlled by the following configuration variables:

Options Description
Postgres.User Database username
Postgres.Password Password
Postgres.Host IP/Hostname for database server
Postgres.Port Portnumner (default=3306)
Postgres.Database Name of database table

IMPORTANT: you must manually configure the dataPoints collections to make header.username and header.id unique together.

Firebase Cloud Messaging (FCM)

The following options are required for TSU messaging API.

Options Description
FireBase.CredentialsFile Path to the file containing your FCM credentials (a JSON file)
FireBase.ProjectID The Firebases ProjectID

The required data can be found and downloaded from your Firebase console.

How to run

Compile and run the tsud server using:

go build ./... && ./pms-tsu

The app will bind itself to port 8080 (defined in Config.go). If you want to change it (e.g. bind it to the default HTTP port 80).

To load configuration from environment parameters stored in a file, the following is recommended.

set -a; source env; set +b; ./tsud
Live Code Reloading

For live code reloading, use a task runner that automatically restarts the server when it detects changes.

Install fresh:

go get github.com/pilu/fresh

Run by using the following command in your project root directory:

fresh
High-level Code Structure

Main server files (bootstrapping of http server):

cmd/tsu/main.go --> figure out application settings from various sources, start application context and kick the server
cmd/tsu/server.go --> actual server kicking is happening here: mainly loading of routes and middleware

Route definitions and handlers:

cmd/tsud/handlers.go --> defines the actual logic that gets executed when you visit a route and takes care of the response to the client
cmd/tsud/handlers_test.go --> tests for our route handlers

Data model descriptions and operations on the data:

internal/pmsys/models.go --> structs describing our data, bit similar to objects in other languages
cmd/tsud/database.go --> our mock/fake database implementation
cmd/tsud/database_test.go --> tests our mock/fake database

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL