.Stat Suite Open Source Framework
Table of Content
- Component-based technical architecture
- Technical stack
- .Stat Data Explorer module
- .Stat Data Lifecycle Manager module
- .Stat Core module
- DevOps implementation
- Component list and dependency matrix
- Contributing to an open source repository
Component-based technical architecture
The high-level technical architecture can be schematised as follow with a topology example (with two .Stat Suite SDMX data spaces):
Each .Stat Suite main module (as well as their components) can be used together or separately.
In the following are a few typical use cases on how an organisation can make use of these modules:
A) Adding the Data Explorer to an existing fully-fledged back-end solution
Pre-requisites: A statistical database with its own data management features and with a public SDMX API (SDMX 2.1 Rest incl. SDMX-JSON); hardware (see the system requirements in the installation guides)
Objectives: Add a public web application as GUI for end-users to ease to consumption of the data
Approach: Use only the .Stat Data Explorer components and plug them to the public SDMX API
B) Adding the Data Lifecycle Manager to an existing back-end solution to extend its management functionalities
Pre-requisites: A statistical database with a protected SDMX API (SDMX 2.1 Rest incl. SDMX-JSON); hardware (see the system requirements in the installation guides)
Objectives: Add a protected web application as GUI for data producers to ease to management of the data
Approach: Use only the .Stat Data Lifecycle Manager components and plug them to the protected SDMX API
C) Adding the .Stat Core as a back-end solution (SDMX data store)
Pre-requisites: Management and Data portal GUIs that can connect to an SDMX end-point through SDMX API calls; SQL Server licenses; hardware (see the system requirements in the installation guides)
Objectives: Add a protected SDMX datastore
Approach: Use only the .Stat Core components and plug them into the existing GUIs software
D) Adding the .Stat Suite as a full-stack statistical data management and dissemination solution
Pre-requisites: SQL Server licenses; hardware (see the system requirements in the installation guides)
Objectives: Add the full .Stat Suite with one or more SDMX data stores (to handle independent data lifecycle versions)
Approach: Define specific topology for your needs using all .Stat Suite components or partially
Technical stack
The following technologies are used for the development of the .Stat Data Explorer components and the .Stat Data Lifecycle Manager components:
kubernetes | gcp | docker | solr | mongo | es6 | nodejs | npmjs | git | gitlab |
The following technologies are used for the development of the .Stat Core components:
kubernetes | gcp | docker | git | gitlab | sql server | .net core | visual studio | nuget |
.Stat Data Explorer module
Non-technical overview
Data Explorer app
short description
This web app is the main GUI for (external) users to find, understand and use the statistical data stored in the SDMX end point(s).
demo (light)
- go to https://de-qa.siscc.org (tenant: oecd, env: staging)
- home page
- search by facets (click on a facet)
- fine-tune search results (play with facet selection)
- data view with search params as data query (click on a dataflow)
- fine-tune data selection (play with filter selection)
- fine-tune data view (play with customize)
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-data-explorer
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-data-explorer
- forked from https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-webapp (boilerplate to help crafting web application fully integrated within dotstat-data-explorer-suite)
- server-side rendered (configuration is injected in index.html), no request required from the client to get the configuration
- client bundle expects configuration in
window.SETTINGS
,window.I18N
andwindow.CONFIG
for those who want to use directly the static files
Share service
short description
This service (and related database) is used to store and retrieve user-defined data tables and charts as small JSON objects containing the related configurations.
demo
- go to any visualisation page (table view or chart view) of https://de-demo.siscc.org/
- click on share button
- fill the form (email adress)
- click on publish ‘Request URL and embed code’
- check email
- follow the confirmation link
- check the shared view
flow
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-share
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-share
- a Mongo database is used to store shared charts
- share server is not auth protected, so any robot can spam it; to avoid that, many mechanisms are in place:
- charts are only temporarily stored for
chartTTL
seconds before being deleted unless confirmed via email link - share server checks POST calls rates. Over
maxRatePerIP
POST calls per second, per IP, are rejected with a 419 HTTP code - POST bodies are limited in size to
maxChartSize
- charts are only temporarily stored for
Share-Viewer App
short description
This web app is a companion GUI for (external) users to display user-defined, shared data tables and charts e.g. in embedded views or through shared links.
demo (light)
- Go to https://dv-demo.siscc.org/ (to get a dedicated viewer representation, follow the Share demo)
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-data-viewer
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-data-viewer
- ? forked from https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-webapp (boilerplate to help crafting web application fully integrated within dotstat-data-explorer-suite)
- ? server-side rendered (configuration is injected in index.html), no request required from the client to get the configuration
- ? client bundle expects configuration in
window.SETTINGS
,window.I18N
andwindow.CONFIG
for those who want to use directly the static files
Search service
short description
This service is a .Stat-specific proxy to an SolR engine to index SDMX dataflows categorised and accessible in one or more SDMX end points and to execute faceted search queries on these SDMX dataflows.
features/demos
- free-text faceted search
- results are sorted by relevance and paginated
- free-text search hit: highlight the first occurance of all search terms
- handles hierarchical facet content (from SDMX codelists)
- multi-language enabled
- single term search:
Unemployment rate by sex and disability status
1 result - phrase term search:
"Unemployment rate by sex and disability status"
1 result - tagged search:
name:enterprises
- multiple tagged search with phrase:
name:enterprises description:"tourism"
- negate search:
-seasonally
25/33 results (witness:seasonally
8/33 results) - synonyms
- stemming
- ASCII-folding
architecture
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-sdmx-faceted-search
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-sdmx-faceted-search
- schema auto-generation using dynamic fields
Proxy Service
short description
The Proxy service handles route request depending on urls (https://<app+env+organisation+scope>.<domain>
), and sets tenant headers depending on host to instruct target application. <app+env+organisation+scope>.<domain>
could be replaced by a dedicated DNS entry, e.g. https://<app>.<env>.<organisation>.<scope>.<domain>
.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-proxy
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-kube-proxy
- handles route request depending on urls (
https://<app+env+organisation+scope>.<domain>
) - set tenant headers depending on host to instruct target application
<app+env+organisation+scope>.<domain>
could be replaced by a dedicated DNS entry, e.g.https://<app>.<env>.<organisation>.<scope>.<domain>
Config Service
short description
The Configuration service centralises all configuration resources used by other services. It is a web server providing requested configuration, not exposed to users. Based on git versioned configuration data.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-config
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-config-dev
- centralize all configuration resources used by other services
- web server to provide requested configuration, not exposed to users
- git versioned configuration data
Dependencies
(Dependency) sis-footer
short description
A footer view component for Table and Charts.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-ui-footer
- package: https://www.npmjs.com/package/@sis-cc/dotstatsuite-ui-footer
(Dependency) rcw-charts
short description
Set of configurable charts based on d3.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-d3-charts
- package: https://www.npmjs.com/package/@sis-cc/dotstatsuite-d3-charts
(Dependency) visions
short description
Visions is a library of React components. The goal is to handle interfaces and very limited logic.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-ui-components
- package: https://www.npmjs.com/package/@sis-cc/dotstatsuite-ui-components
(Dependency) sis-header
short description
A header view component for Tables and Charts.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-ui-header
- package: https://www.npmjs.com/package/@sis-cc/dotstatsuite-ui-header
(Dependency) dotstatsuite components
short description
Is a library of components. [more discription to come]
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-components
- package: https://www.npmjs.com/package/@sis-cc/dotstatsuite-components
(Dependency) dotstatsuite-sdmxjs
short description
Is a library of components for the parsing of SDMX-JSON messages. [more discription to come]
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-sdmxjs
- package: https://www.npmjs.com/package/@sis-cc/dotstatsuite-sdmxjs
Multi-tenant architecture
demo (staging)
tenant | specs | url |
---|---|---|
oecd | own sdmx oecd staging endpoint, OECD-staging | https://de-demo.siscc.org/ |
technical overview
demo: add/update a tenant
- update list of tenants: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-config-data/-/blob/develop/configs/tenants.json
- add tenant config (data-explorer & sdmx): https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-config/tree/develop/data/dev/configs
- add tenant referenced assets (data-explorer): https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-config-data/-/tree/develop/assets/
- check the tenant at http://de-staging-tenant=
.siscc.org/ - update something in the configuration and check the update
demo: add/update an app for the tenant (siscc workshop hands-on)
- fork from wepapp
- inject pre-coded app (to create)
- declare it somewhere
- check the app at
http://<app>.staging.<tenant>.siscc.org
- update the app
- check the app at
http://<app>.staging.<tenant>.siscc.org
.Stat Data Lifecycle Manager module
Data Data Lifecycle Manager app
short description
This web app is the main GUI for statistical data teams to efficiently produce and prepare high-quality statistical data and metadata for dissemination.
demo (light)
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-data-lifecycle-manager
- docker: https://hub.docker.com/r/siscc/dotstatsuite-data-lifecycle-manager
.Stat Core module
technical overview
Transfer service
short description
This web service allows uploading statistical data and their referential metadata to a .Stat Core data space as well as transfering them between different .Stat Core data spaces.
demo (light)
- go to https://transfer-qa.siscc.org/swagger (tenant: oecd, env: qa)
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-core-transfer
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-core-transfer
SDMX service
(also named SDMX-RI NSI web service (c) Eurostat)
short description
This web service allows uploading data structures to a .Stat Core data space as well as retrieving data structures, data and their referential metadata from a .Stat Core data space.
This RESTful web service is developed by Eurostat and is fully SDMX compliant.
demo (light)
- go to http://nsi-stable-qa.siscc.org/ (tenant: oecd, env: qa)
technical aspects
- repository: https://citnet.tech.ec.europa.eu/CITnet/stash/projects/SDMXRI/repos/nsiws.net
- docker: https://hub.docker.com/r/siscc/sdmxri-nsi-maapi
- docker of original Eurostat SDMX-RI NSI web service: https://cloud.docker.com/u/siscc/repository/docker/siscc/sdmxri-nsi
Authorisation service
short description
This web service allows managing user access rights for data structures and data/referential metadata in .Stat Core data spaces.
demo (light)
- go to http://authz-qa.siscc.org/swagger (tenant: oecd, env: qa)
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-core-auth-management
- docker: https://cloud.docker.com/u/siscc/repository/docker/siscc/dotstatsuite-core-auth-management
Dependencies
(Dependency) Data Access library to access the .Stat Core Data Store
short description
This library is used by the Transfer service to upload and transfer statistical data structures to and between .Stat Core data spaces.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-core-data-access
- package: https://www.nuget.org/packages/DotStat.DataAccess.NuGet
(Dependency) Core Common library
short description
This library is used for shared code in the .Stat Core components. These inlude logs, localisation and configuration.
technical aspects
- repository: https://gitlab.com/sis-cc/.stat-suite/dotstatsuite-core-common
- package: https://www.nuget.org/packages/DotStat.Common
DevOps implementation
See: .Stat DevOps implementation
Component list and dependency matrix
Contributing to an open source repository
https://www.gienverschatse.com/oss/2018/02/06/flow-of-open-source/