-
Notifications
You must be signed in to change notification settings - Fork 0
Model Metrics Report
Home > Model Development Topics > Model Metrics Report
This topic describes and illustrates the Model Metrics Report produced by the OpenM++ compiler. The report summarizes code inputs and code outputs, model inputs and model outputs, model symbols, and maintained dependencies.
- Model Code: How model code is organized into modules, syntactic islands, and C++
- Model Resource Use: Activating and interpreting information about model resource use
- Introduction
- Code input
- Code output
- Model input
- Model output
- Model Symbols
- Published Symbols
- Maintained dependencies
The OpenM++ compiler (omc
) produces the Model Metrics Report in the file MODEL/.../src/ModelMetrics.txt
.
The report consists of 7 summary tables about the model's
- source code base
- user interface
- symbols
- implicit causal web
The Model Metrics Report is about the model, not about a run of the model. To produce metrics for a run of the model, see Model Resource Use.
The report begins with a title line like
Model Metrics for RiskPaths 2023-10-13
which gives the model name and the date of compilation.
The remainder of this topic describes each of the 7 tables in turn using the RiskPaths
model as an example.
The CODE INPUT
table is a summary of the model code processed by omc
.
Here it is for RiskPaths
:
+-----------------------------------+
| CODE INPUT (model source code) |
+-----------------+-------+---------+
| Source | Files | Lines |
+-----------------+-------+---------+
| Model-specific | 14 | 1504 |
| Islands | | 286 |
| C++ | | 1218 |
| Common | 9 | 1707 |
| Islands | | 11 |
| C++ | | 1696 |
| Both | 23 | 3211 |
| Islands | | 297 |
| C++ | | 2914 |
+-----------------+-------+---------+
| Total | 23 | 3211 |
+-----------------+-------+---------+
Note: Does not include parameter data.
The table groups the model source code files into two categories:
- model-specific files in the
MODEL/code
folder - common files supplied by OpenM++ and incorporated into the model by
use
statements
The model-specific RiskPaths
source code consists of 1,504 lines in 14 .mpp
and .ompp
files.
An example of one of those 14 files is
RiskPaths/code/PersonCore.mpp
,
which implements core functionality for the Person
entity.
The common source code in RiskPaths
consists of 1,707 lines
in 9 .ompp
files specified by use
statements.
An example of one of those 9 files is
OM_ROOT/use/random/random_lcg41.ompp
,
which implements a family of simple and fast random number generators.
Common source code files are specified in use
statements,
which in RiskPaths
are in the model-specific source code file
RiskPaths/code/ompp_framework.ompp
.
Common source code files can also contain use
statements.
The MODEL CODE
table assigns each line of a source code file to one of 2 categories:
- Syntactic island
- C++ code
A syntactic island is a section of declarative code written in the ompp language.
Here's an example from RiskPaths
- the declaration of the table T02_TotalPopulationByYear
:
table Person T02_TotalPopulationByYear //EN Life table
{
//EN Age
integer_age *
{
unit, //EN Population start of year
duration() //EN Average population in year
}
};
A syntactic island starts with a keyword, e.g. table
, and ends with a matching ;
.
Source code which is not part of a syntactic island is C++ code. Model C++ code implements C++ functions associated with events, derived parameters, and derived tables. It can also implement other functions to support the model.
Here's an example of model C++ code from RiskPaths
- the C++ function which implements the DeathEvent
:
void Person::DeathEvent()
{
life_status = LS_NOT_ALIVE;
Finish();
}
For more on model source code, see Model Code.
The CODE INPUT
table does not report on parameter value files read by omc
to publish the starting Default scenario/set for the model.
For RiskPaths
those are the 2 files RiskPaths.dat
and Framework.odat
in the folder
RiskPaths/parameters/Default
.
The CODE OUTPUT
table contains summary information about C++ code generated by omc
.
Here it is for RiskPaths
:
+-----------------------------------------+
| CODE OUTPUT (generated C++) |
+-----------------------+-------+---------+
| Description | Files | Lines |
+-----------------------+-------+---------+
| Header (.h) | 3 | 1395 |
| Implementation (.cpp) | 1 | 3766 |
+-----------------------+-------+---------+
| Total | 4 | 5161 |
+-----------------------+-------+---------+
Note: Table does not include C++ initializers for burned-in parameter data.
omc
uses the
declarative model specification in syntactic islands to
generate procedural C++ code which implements the model specification.
For RiskPaths
,
the 297 lines in syntactic islands which specify the model
are used by omc
to generate the 5,161 of C++ code which implement the model.
The large difference between the # of lines of input declarative code and the # of lines of output procedural code
reflects the conciseness and power of the ompp declarative language.
Generally, model developers don't need to examine generated C++ code because it just works,
but here's a peek at it anyway.
The following 2 extracts show the code generated by omc
for the internal function om_side_effects_age_status
,
one of the C++ functions used to implement RiskPaths
.
The function is declared in the generated header file
RiskPaths/.../src/om_declarations.h
and looks like this:
// model entity classes
class Person : public Entity<Person>
{
public:
...
/// Implement side effects of changing age_status in entity Person.
void om_side_effects_age_status(int om_old, int om_new);
...
};
The function is defined in the generated implementation file
RiskPaths/.../src/om_definitions.cpp
and looks like this:
void Person::om_side_effects_age_status(int om_old, int om_new)
{
// Code Injection: group=8, injector=formation_hazard
// Maintain identity for 'formation_hazard'
formation_hazard_update_identity();
// Code Injection: group=8, injector=preg_hazard
// Maintain identity for 'preg_hazard'
preg_hazard_update_identity();
// Code Injection: group=10, injector=FirstPregEvent
// Recalculate time to event FirstPregEvent
if (om_active) om_FirstPregEvent_om_event.make_dirty();
// Code Injection: group=10, injector=Union1FormationEvent
// Recalculate time to event Union1FormationEvent
if (om_active) om_Union1FormationEvent_om_event.make_dirty();
}
The generated function om_side_effects_age_status
handles the side-effects of a change in the age_status
attribute of the Person
entity.
It is automatically called if the value of age_status
changes during an event in a run,
and when called it
- updates the identity attributes
formation_hazard
andpreg_hazard
because their declarations in syntactic islands useage_status
. - marks for recalculation the future times of the events
FirstPregEvent
andUnionFormationEvent
because the time functions of those events useage_status
, which could affect those future times.
These 4 actions in om_side_effects_age_status
are examples of Maintained dependencies,
which have a dedicated table of their own in the Model Metrics report.
This example shows that the C++ code generated by omc
contains comments as well as code and is formatted for readability.
This can help to understand the generated code if there's ever a need to examine or trace into it in a debug session of a model.
omc
also generates,
in the output C++ header file MODEL/.../src/om_declarations.h
,
doxygen brief descriptions for model symbols such as
classifications, ranges, partitions, parameters, and attributes.
For example, the generated doxygen brief description for the age_status
attribute looks like this:
/// attribute(identity) int: Current age interval
age_status_om_type age_status;
The generated doxygen brief description which starts with ///
says that age_status
is an attribute,
more specifically an identity attribute, that its type is int
,
and its label in the model's default human language is Current age interval
.
Doxygen brief descriptions are automatically recognized by the Visual Studio and VSCode IDEs,
and those IDEs display a popup with the doxygen brief description for a symbol
when the cursor is hovered over that symbol name in model C++ source code.
For more, see
Doxygen brief descriptions for model symbols.
omc
transforms burned-in parameter values to C++ initializers in the output file
MODEL/.../src/om_fixed_parms.cpp
.
The CODE OUTPUT
table does not report on this file or its contents.
The MODEL INPUT
table provides summary information about the model's input parameters.
It reports counts of parameters and counts of parameter cells.
MODEL_INPUT
classifies parameters into 4 mutually exclusive categories:
- Visible parameters, which are immediately available in the UI.
- Hidden parameters, which are made visible in the UI when the user clicks a reveal button.
- Burned-in parameters, which have fixed values and are absent from the model database and UI.
A parameter is burned into the model executable if its Default value file is located in the
Fixed
folder, or if it was removed from the model database and UI by asuppress_parameters
orretain_parameters
statement. - Derived parameters, which are computed by model-specific code during run initialization.
Here's the MODEL INPUT
table for RiskPaths
:
+----------------------------------+
| MODEL INPUT (parameters) |
+---------------+-------+----------+
| Kind | Count | Cells |
+---------------+-------+----------+
| Visible | 2 | 18 |
| Hidden | 7 | 133 |
| Burned-in | 0 | 0 |
| Derived | 0 | 0 |
+---------------+-------+----------+
| Total | 9 | 151 |
+---------------+-------+----------+
Note: Burned-in includes fixed and suppressed parameters.
The table shows that RiskPaths
presents a highly simplified UI to users by hiding all but 2 parameters.
The 2 visible parameters contain 18 values (they're arrays).
The remaining parameters are hidden but can be examined and modified by a user by clicking the reveal button in the UI.
This design reflects that RiskPaths
was used as a hands-on simple example in a demography course.
The MODEL OUTPUT
table provides summary information about the model's output tables.
It reports counts of tables and counts of table cells.
MODEL_OUTPUT
classifies tables in two ways:
Entity/Derived:
- Entity tables are declared in model-specific syntactic islands. They are computed dynamically during a run.
- Derived tables are computed by model-specific C++ code after the simulation phase completes.
Visible/Hidden:
- Visible tables are immediately available in the UI after a run completes.
- Hidden tables are made visible in the UI when the user clicks a reveal button.
Here's the MODEL OUTPUT
table for RiskPaths
:
+----------------------------------+
| MODEL OUTPUT (tables) |
+---------------+-------+----------+
| Kind | Count | Cells |
+---------------+-------+----------+
| Entity | | |
| Visible | 2 | 205 |
| Hidden | 5 | 148 |
| Derived | | |
| Visible | 0 | 0 |
| Hidden | 0 | 0 |
| Both | | |
| Visible | 2 | 205 |
| Hidden | 5 | 148 |
+---------------+-------+----------+
| Total | 7 | 353 |
+---------------+-------+----------+
Note: Cells includes margins and expression dimension.
For didactic purposes, RiskPaths
shows only 2 key tables in the UI when a run completes.
However, all tables in RiskPaths
can be made visible and explored in the UI.
No derived tables were required in RiskPaths
,
so those rows are zero in the report.
The MODEL SYMBOLS
table reports counts of all symbols in syntactic islands
by category, together with counts of associated labels and notes in the model's default human language.
Some model symbols are given names in the model code,
such as the table T02_TotalPopulationByYear
in the example in Code input.
Some model symbols are declared positionally in the model code with no name,
such as the expression dimension of that table.
Other model symbols are declared when used,
such as the derived attribute duration(parity_status,PS_CHILDLESS)
which automatically maintains a running sum of the time a Person
has spent in the PS_CHILDLESS
state.
Here's the MODEL SYMBOLS
table for RiskPaths
:
+-------------------------------------------------+
| MODEL SYMBOLS |
+-------------------------+-------+-------+-------+
| Description | Count | Label | Note |
+-------------------------+-------+-------+-------+
| Language (human) | 2 | 0 | 0 |
| Enumeration | | | |
| Classification | 4 | 4 | 0 |
| Level | 12 | 12 | 0 |
| Range | 1 | 1 | 0 |
| Partition | 4 | 4 | 0 |
| Aggregation | 0 | 0 | 0 |
| Input/Output | | | |
| Parameter | 9 | 9 | 0 |
| Dimension | 7 | 7 | 0 |
| Group | 3 | 3 | 0 |
| Table | 7 | 7 | 0 |
| Dimension | 13 | 6 | 0 |
| Expression | 13 | 13 | 0 |
| Group | 3 | 3 | 0 |
| Import | 0 | 0 | 0 |
| Entity | | | |
| Kind | 1 | 0 | 0 |
| Event | 7 | 0 | 0 |
| Attribute | 38 | 13 | 0 |
| Built-in | 6 | 0 | 0 |
| Simple | 5 | 5 | 0 |
| Identity | 13 | 8 | 0 |
| Derived | 14 | | |
| Link | 0 | 0 | 0 |
| Multilink aggregate | 0 | | |
| Function | 2 | 2 | 2 |
| Multilink | 0 | 0 | 0 |
| Array | 0 | 0 | 0 |
| Foreign | 0 | 0 | 0 |
| Entity set | 0 | 0 | 0 |
| Dimension | 0 | 0 | 0 |
+-------------------------+-------+-------+-------+
| Total | 126 | 84 | 2 |
+-------------------------+-------+-------+-------+
| Supplementary Info | | | |
| Random streams | 6 | | |
| Eligible microdata | 0 | | |
+-------------------------+-------+-------+-------+
Notes: Parameter includes derived parameters.
Table > Dimension includes the expression dimension.
Entity > Attribute > Identity includes those generated from filters.
Entity > Function does not include event time and implement functions.
The RiskPaths
model is relatively simple, and contains only 126 symbols in syntactic islands.
The Eligible microdata
row has a count of 0 because RiskPaths
does not enable microdata output.
For more, see Microdata Output.
The PUBLISHED SYMBOLS
table is similar to MODEL SYMBOLS
but reports only on symbols which are published to the model database
and visible to model users in the UI, exported model metadata, or run data.
Model code can suppress or retain parameters and tables to create a trimmed down model for publishing,
while full preserving model logic.
For more on that, see the subtopic Model trim down.
Here's the PUBLISHED SYMBOLS
table for RiskPaths
:
+-------------------------------------------+
| PUBLISHED SYMBOLS |
+-------------------+-------+-------+-------+
| Description | Count | Label | Note |
+-------------------+-------+-------+-------+
| Language (human) | 2 | 0 | 0 |
| Enumeration | | | |
| Classification | 2 | 2 | 0 |
| Level | 8 | 8 | 0 |
| Range | 1 | 1 | 0 |
| Partition | 4 | 4 | 0 |
| Input/Output | | | |
| Parameter | 9 | 9 | 0 |
| Dimension | 7 | 7 | 0 |
| Group | 3 | 3 | 0 |
| Table | 7 | 7 | 0 |
| Dimension | 13 | 6 | 0 |
| Expression | 13 | 13 | 0 |
| Group | 3 | 3 | 0 |
| Import | 0 | 0 | 0 |
+-------------------+-------+-------+-------+
| Total | 72 | 63 | 0 |
+-------------------+-------+-------+-------+
Note: Table > Dimension includes the expression dimension.
The table shows that RiskPaths
supplies labels for almost all published model symbols,
which can help model users navigate and understand model inputs and outputs.
RiskPaths
eschews the use of notes,
which would have been viewable with a click in the UI,
providing additional information about the model's parameters and tables.
This table reveals a couple of minor issues in RiskPaths
.
First, human-language labels for the 2 languages declared in RiskPaths
(EN
and FR
)
are absent for the model's default human language.
This causes OpenM++ to present language codes rather than language names in the UI for switching languages.
Second, 7 table dimensions lack labels in the model's default language,
which causes omc
to generate fall-back labels mechanically.
As described in Code input, the ompp language is declarative.
Here again is the declaration of the table T02_TotalPopulationByYear
:
table Person T02_TotalPopulationByYear //EN Life table
{
//EN Age
integer_age *
{
unit, //EN Population start of year
duration() //EN Average population in year
}
};
The resulting table has 101 rows for integer age and 2 columns for the computed expressions.
Whenever a Person
has a birthday and integer_age
changes,
the cell in T02_TotalPopulationByYear
to which they are contributing changes and the table must be updated.
In other words, there is a dependency between integer_age
and T02_TotalPopulationByYear
.
The example in Code output illustrates other kinds of dependency,
where changes in the age_status
attribute requires updating the identity attributes formation_hazard
and preg_hazard
and
and recalculating the events FirstPregEvent
and Union1FormationEvent
.
To implement the model specification,
omc
generates C++ code which maintains all such dependencies,
both direct and indirect.
The MAINTAINED DEPENDENCIES
table groups and counts these dependencies by category.
Here's it is for RiskPaths
:
+----------------------------+-------+
| MAINTAINED DEPENDENCIES |
| (in generated C++ runtime code) |
+----------------------------+-------+
| Dependency | Count |
+----------------------------+-------+
| Reciprocal link | 0 |
| Attribute maintenance | |
| Identity | 18 |
| Derived | 23 |
| Multilink aggregate | 0 |
| Table dimension/filter | 8 |
| Set dimension/filter/order | 0 |
| Event maintenance | 17 |
+----------------------------+-------+
| Total | 66 |
+----------------------------+-------+
The table shows that the implicit causative web in RiskPaths
contains 17 dependencies between attributes and events.
RiskPaths
is a simple model with only 286 lines of model code in syntactic islands.
Nevertheless, it has 66 dependencies which are automatically maintained by the C++ code generated by omc
.
- Windows: Quick Start for Model Users
- Windows: Quick Start for Model Developers
- Linux: Quick Start for Model Users
- Linux: Quick Start for Model Developers
- MacOS: Quick Start for Model Users
- MacOS: Quick Start for Model Developers
- Model Run: How to Run the Model
- MIT License, Copyright and Contribution
- Model Code: Programming a model
- Windows: Create and Debug Models
- Linux: Create and Debug Models
- MacOS: Create and Debug Models
- MacOS: Create and Debug Models using Xcode
- Modgen: Convert case-based model to openM++
- Modgen: Convert time-based model to openM++
- Modgen: Convert Modgen models and usage of C++ in openM++ code
- Model Localization: Translation of model messages
- How To: Set Model Parameters and Get Results
- Model Run: How model finds input parameters
- Model Output Expressions
- Model Run Options and ini-file
- OpenM++ Compiler (omc) Run Options
- OpenM++ ini-file format
- UI: How to start user interface
- UI: openM++ user interface
- UI: Create new or edit scenario
- UI: Upload input scenario or parameters
- UI: Run the Model
- UI: Use ini-files or CSV parameter files
- UI: Compare model run results
- UI: Aggregate and Compare Microdata
- UI: Filter run results by value
- UI: Disk space usage and cleanup
- UI Localization: Translation of openM++
- Authored Model Documentation
- Built-in Attributes
- Censor Event Time
- Create Import Set
- Derived Tables
- Entity Attributes in C++
- Entity Function Hooks
- Entity Member Packing
- Entity Tables
- Enumerations
- Events
- Event Trace
- External Names
- Generated Model Documentation
- Groups
- Illustrative Model
Align1
- Lifecycle Attributes
- Local Random Streams
- Memory Use
- Microdata Output
- Model Code
- Model Documentation
- Model Languages
- Model Localization
- Model Metrics Report
- Model Resource Use
- Model Symbols
- Parameter and Table Display and Content
- Population Size and Scaling
- Screened Tables
- Symbol Labels and Notes
- Tables
- Test Models
- Time-like and Event-like Attributes
- Use Modules
- Weighted Tabulation
- File-based Parameter Values
- Oms: openM++ web-service
- Oms: openM++ web-service API
- Oms: How to prepare model input parameters
- Oms: Cloud and model runs queue
- Use R to save output table into CSV file
- Use R to save output table into Excel
- Run model from R: simple loop in cloud
- Run RiskPaths model from R: advanced run in cloud
- Run RiskPaths model in cloud from local PC
- Run model from R and save results in CSV file
- Run model from R: simple loop over model parameter
- Run RiskPaths model from R: advanced parameters scaling
- Run model from Python: simple loop over model parameter
- Run RiskPaths model from Python: advanced parameters scaling
- Windows: Use Docker to get latest version of OpenM++
- Linux: Use Docker to get latest version of OpenM++
- RedHat 8: Use Docker to get latest version of OpenM++
- Quick Start for OpenM++ Developers
- Setup Development Environment
- 2018, June: OpenM++ HPC cluster: Test Lab
- Development Notes: Defines, UTF-8, Databases, etc.
- 2012, December: OpenM++ Design
- 2012, December: OpenM++ Model Architecture, December 2012
- 2012, December: Roadmap, Phase 1
- 2013, May: Prototype version
- 2013, September: Alpha version
- 2014, March: Project Status, Phase 1 completed
- 2016, December: Task List
- 2017, January: Design Notes. Subsample As Parameter problem. Completed
GET Model Metadata
- GET model list
- GET model list including text (description and notes)
- GET model definition metadata
- GET model metadata including text (description and notes)
- GET model metadata including text in all languages
GET Model Extras
GET Model Run results metadata
- GET list of model runs
- GET list of model runs including text (description and notes)
- GET status of model run
- GET status of model run list
- GET status of first model run
- GET status of last model run
- GET status of last completed model run
- GET model run metadata and status
- GET model run including text (description and notes)
- GET model run including text in all languages
GET Model Workset metadata: set of input parameters
- GET list of model worksets
- GET list of model worksets including text (description and notes)
- GET workset status
- GET model default workset status
- GET workset including text (description and notes)
- GET workset including text in all languages
Read Parameters, Output Tables or Microdata values
- Read parameter values from workset
- Read parameter values from workset (enum id's)
- Read parameter values from model run
- Read parameter values from model run (enum id's)
- Read output table values from model run
- Read output table values from model run (enum id's)
- Read output table calculated values from model run
- Read output table calculated values from model run (enum id's)
- Read output table values and compare model runs
- Read output table values and compare model runs (enun id's)
- Read microdata values from model run
- Read microdata values from model run (enum id's)
- Read aggregated microdata from model run
- Read aggregated microdata from model run (enum id's)
- Read microdata run comparison
- Read microdata run comparison (enum id's)
GET Parameters, Output Tables or Microdata values
- GET parameter values from workset
- GET parameter values from model run
- GET output table expression(s) from model run
- GET output table calculated expression(s) from model run
- GET output table values and compare model runs
- GET output table accumulator(s) from model run
- GET output table all accumulators from model run
- GET microdata values from model run
- GET aggregated microdata from model run
- GET microdata run comparison
GET Parameters, Output Tables or Microdata as CSV
- GET csv parameter values from workset
- GET csv parameter values from workset (enum id's)
- GET csv parameter values from model run
- GET csv parameter values from model run (enum id's)
- GET csv output table expressions from model run
- GET csv output table expressions from model run (enum id's)
- GET csv output table accumulators from model run
- GET csv output table accumulators from model run (enum id's)
- GET csv output table all accumulators from model run
- GET csv output table all accumulators from model run (enum id's)
- GET csv calculated table expressions from model run
- GET csv calculated table expressions from model run (enum id's)
- GET csv model runs comparison table expressions
- GET csv model runs comparison table expressions (enum id's)
- GET csv microdata values from model run
- GET csv microdata values from model run (enum id's)
- GET csv aggregated microdata from model run
- GET csv aggregated microdata from model run (enum id's)
- GET csv microdata run comparison
- GET csv microdata run comparison (enum id's)
GET Modeling Task metadata and task run history
- GET list of modeling tasks
- GET list of modeling tasks including text (description and notes)
- GET modeling task input worksets
- GET modeling task run history
- GET status of modeling task run
- GET status of modeling task run list
- GET status of modeling task first run
- GET status of modeling task last run
- GET status of modeling task last completed run
- GET modeling task including text (description and notes)
- GET modeling task text in all languages
Update Model Profile: set of key-value options
- PATCH create or replace profile
- DELETE profile
- POST create or replace profile option
- DELETE profile option
Update Model Workset: set of input parameters
- POST update workset read-only status
- PUT create new workset
- PUT create or replace workset
- PATCH create or merge workset
- DELETE workset
- POST delete multiple worksets
- DELETE parameter from workset
- PATCH update workset parameter values
- PATCH update workset parameter values (enum id's)
- PATCH update workset parameter(s) value notes
- PUT copy parameter from model run into workset
- PATCH merge parameter from model run into workset
- PUT copy parameter from workset to another
- PATCH merge parameter from workset to another
Update Model Runs
- PATCH update model run text (description and notes)
- DELETE model run
- POST delete model runs
- PATCH update run parameter(s) value notes
Update Modeling Tasks
Run Models: run models and monitor progress
Download model, model run results or input parameters
- GET download log file
- GET model download log files
- GET all download log files
- GET download files tree
- POST initiate entire model download
- POST initiate model run download
- POST initiate model workset download
- DELETE download files
- DELETE all download files
Upload model runs or worksets (input scenarios)
- GET upload log file
- GET all upload log files for the model
- GET all upload log files
- GET upload files tree
- POST initiate model run upload
- POST initiate workset upload
- DELETE upload files
- DELETE all upload files
Download and upload user files
- GET user files tree
- POST upload to user files
- PUT create user files folder
- DELETE file or folder from user files
- DELETE all user files
User: manage user settings
Model run jobs and service state
- GET service configuration
- GET job service state
- GET disk usage state
- POST refresh disk space usage info
- GET state of active model run job
- GET state of model run job from queue
- GET state of model run job from history
- PUT model run job into other queue position
- DELETE state of model run job from history
Administrative: manage web-service state
- POST a request to refresh models catalog
- POST a request to close models catalog
- POST a request to close model database
- POST a request to open database file
- POST a request to cleanup database file
- GET the list of database cleanup log(s)
- GET database cleanup log file(s)
- POST a request to pause model run queue
- POST a request to pause all model runs queue
- PUT a request to shutdown web-service