---
# System prepended metadata

title: Adding Healthchecks to Apps

---

#	Adding Healthchecks to Apps
## What is healthcheck?
a **healthcheck** is simply an endpoint that your app supports that another service can call to check if your app is active/running or not. For example, to check if signals is running, haproxy might make a call to `/signals/healthcheck` and check the response code for a 200. If the response code is anything but a 200, haproxy can take various actions like - 
- using a backup server
- showing an error message


## How to add a healthcheck

In general, you have to do 2 things to configure a healthcheck for your app, i.e. - 
### 1. Setup the healthcheck endpoint in your app
#### UI
##### Deploying using pm2
If you're deploy method is using `pm2`, you don't have to do anything in your app as the pm2 server takes care of responding to the healthcheck api.
##### Static Deployments
The default `/healthcheck` route for your app will return a blank screen but with a 200 so no additional configuration should be necessary. 

#### Backend
##### Using cookiecutter v1
Most endpoints currently have been written using the cookiecutter v1. To add the healthcheck endpoint here, simply - 
1. Create a healthcheck function
In your src folder, add a function called `healthcheck` to one of your files. For example, if you have a file called `src/prescriptions.py`, add a function similar to the one below - 
```python=
...

def healthcheck():
    # call some functions that your app is reliant on. If these fail, the function will raise an error and the API will return a non 200 code.
    results = get_prescription_data('imatinib')
    return True

...
```

3. Find your api.ini. This should normally just be in the root directory for your app. It might look something like this
```
[get]


[post]
compare_signals.fetch_dynamic_adjacency_query
compare_signals.compare_dynamic_adjacency_queries

[cron]
```

2. Add the healthcheck endpoint as a GET request
```
[get]
prescriptions.healthcheck

[post]
compare_signals.fetch_dynamic_adjacency_query
compare_signals.compare_dynamic_adjacency_queries

[cron]
```

### 2. Configure the healthcheck in `nferx_Devops`
1. Find `ansible/apps_v2.json` in `nferx_Devops`
2. Find your app config block. For example, the `prescriptions` app block looks like
```json
{
  "appname": "prescriptions",
  "template": "uiwithpm2_v1",
  "port": 4227,
  "repo": "nfer",
  "path": "nfer/nferxapps/prescriptions",
  "branch": "master",
  "appsredirect": true,
  
},
```
3. Add the healthcheck endpoint to the block
```json
{
  ...
  "healthcheck": "/prescriptions/healthcheck"
}
```
4. Make sure the owner/alert emails are set. The `owner` email is the app developers email. The alert email is used to notify the appropriate party via pager duty of the app failure. You can use `application@nference.pagerduty.com` for the alert email.
```json
{
  ...
  "healthcheck": "/prescriptions/healthcheck",
  "owner": "developer@nference.net",
  "alert": "application@nference.pagerduty.com"
}
```






