OpenTera Services Structure

The core of OpenTera is based on (micro)-services. This allow for extensibility and freedom for the developers to create new features according to needs in a separate way.

General structure and definition

A service can be defined as a standalone software (which could be written using any framework / programming language) that provides features that goes beyond the scope of the core services in OpenTera. Each service can manage its own database and API, and provides client implementations (or not).

Basic service architecture is described in the architecture overview.

Communication mechanisms

Services can communicate with each other using a specific service API, but also using internal communication structure.

System services

Those services are internal services that are available in the core OpenTera. Those services provides common features to the system, and should not be disabled unless specific requirements call for (such as never providing file transfer capability to a server setup).

Currently, the system services are the following:

  • FileTransfer Service, used to manage the various files required to be stored on the system as assets

  • Logging Service, used for internal technical and access logging

  • VideoRehab Service, used to provide synchronous video conferencing capabilities in a rehabilitation context.

TeraServer service

The OpenTera main server (TeraServer) is considered to be a specific case of system service. It is the base service and is mandatory in any deployed solution.

Considering TeraServer as a service allows to properly manage project and site access, and can be addressed in communication mechanisms, if needed.

Services configuration

Each service can have a specific configuration depending on the user, participant or device. This configuration is defined in the TeraServiceConfig database model on the OpenTera service. That configuration could allow to specify values such as specific devices to use or a specific UI configuration. Default configuration is specified in the TeraService database model on the OpenTera service.

The configuration is stored in a json schema that is specified and validated with the schema specified in the TeraService database model.

The typical configuration structure is the following:

  { Globals: {
                // Put "default" config values here with format:
                {name: value}
             }
    Specifics: [
                    {
                        id: xxxx, // Specific id of that config, for example hardware ID
                        // Put "overriden" config values here for that config id
                    },
                    {
                        id: xxxx, // Specific id of that config, for example hardware ID
                        // Put "overriden" config values here for that config id
                    },
               ]
  }

The Globals section provides default values independent of specific configuration (such as client ids or specific hardware). The Specifics section provides override value tied to a specific system. The id used to identify the specific configuration is client-defined, and could refer to a PC unique identifier, for example.