Service Architecture

System Design

Service Architecture

Page

Construct complex UI without writing a single line of code using the Page Designer and our 380+ out-of-the-box components and actions. Pages contain metadata about UI controls and layouts and associated triggers and actions. For example, button labels and acts to perform on button clicks.

Real-time Analysis & Auto Fix Suggestions

Analyze and validate pages in real-time as you work on them, receive suggestions for fixes and easily apply them with a single click.

Collaborative Development

Facilitate real-time collaboration during the development of a page. Let functional users access the same page, track changes, and provide immediate feedback to the page creator and developer.

Change History

Track every update made to a page through built-in versioning and auditing. Easily access all previous changes and restore to any earlier version with minimal clicks.

Custom Components

Create your own React Component using the MUI Component library if you cannot find what you need among the existing 380+ components and actions. Use custom components in the Page Designer just like standard components, with built-in version management and change history. Install specific versions in one application and different versions in another application.

DataSource

A metadata layer that sits between the source object (Database tables, Cloud systems APIs) and UI components. The UI components interact with the source object through the DataSource. It contains all field information about the source object and allows for extended functionality through scripting. DataSource handles CRUD operations against database tables seamlessly without any coding. Enhance business functionality by adding filters before fetching data and validations before posting any changes from the user by using modern ES2020 javascript.

External DataSource

Transform the DataSource filters and data from CloudIO's structure into the external Cloud System's structure, such as Salesforce, by using External DataSource.

Cloud DataSource

Utilize Cloud DataSource to integrate any simple REST API without the complexity of using External DataSource.

Cloud Functions

Small code units that can be invoked from the UI or scheduled to run at a given interval or at a specific day and time using CRON expression. Create Cloud Functions as reusable modules imported into other functions or used in the backend through scripting such as Workflows, DataSources, etc.

Test Automation

With the built-in test automation framework, you can record all the UI interactions (clicks & data entry) and replay on demand or scheduled.

Sample Test Script Used for the above Test Automation

const tableName = "TEST_AUTOMATION";
const dataSourceName = 'TestAutomation';

test("UI Test", async () => {

  // Page
  await ui.page('cloudio.home');
  await ui.click({ testid: '$sidebar$-ds' });
  await ui.click({ testid: 'action' });
  await ui.click({ testid: 'io-wo-blank' });
  await ui.type('io-ds-name-input', dataSourceName);
  await ui.type('io-table-name-input', tableName);
  await ui.click({ testid: 'io-readonly-input' });
  await ui.click({ testid: 'io-skipQueryForUpdate-input' });
  await ui.click({ testid: 'action' });
  await ui.hasNotified((msg) => msg === `DataSource ${dataSourceName} created successfully!`);
  ui.close();
  await ui.click({ testid: 'io-wo-attr' });
  await ui.click({ testid: 'action' });
  await ui.type('io-columnName-input', 'COLUMN_1');
  await ui.click({ testid: 'io-allowBlank-input' });
  await ui.click({ testid: 'action' });
  await ui.hasNotified((msg) => msg === 'Field Column 1 created successfully!');
  ui.close();
  await ui.click({ testid: 'io-columnName-input' });
  await ui.type('io-columnName-input', 'NUMBER_COLUMN_1');
  await ui.click({ testid: 'attributeType-Integer' });
  await ui.click({ testid: 'io-allowBlank-input' });
  await ui.click({ testid: 'action' });
  await ui.hasNotified((msg) => msg === 'Field Number Column 1 created successfully!');
  ui.close();
  await ui.click({ testid: 'back' });
  await ui.click({ testid: 'back' });
  await ui.click({ testid: dataSourceName + '-more' });
  await ui.click({ testid: dataSourceName + '-access' });
  await ui.click({ testid: 'datasource-access-uncheckall-administrator', force: true });
  await ui.wait(300);
  await ui.click({ testid: 'datasource-access-uncheckall-developer', force: true });
  await ui.wait(300);
  await ui.click({ testid: 'save' });
  await ui.hasNotified((msg) => msg === '2 DataSource Access updated successfully!');
  await ui.click({ testid: dataSourceName + '-more' });
  await ui.click({ testid: dataSourceName + '-delete' });
  await ui.click({ testid: 'confirm-yes' });
  await ui.hasNotified((msg) => msg === `DataSource '${dataSourceName}' deleted successfully!`);
  await ui.click({ testid: 'clearall-notifications' });
});

afterAll(async () => {
  await executeUpdate(`DROP TABLE ${tableName};`);
});

On-Premise Agent

On-Premise Agents can be used to connect to the data within your corporate firewall securely without having to open any inbound port through the firewall.

Other Services

Blob Storage

There is built-in integration with Azure Blob Storage & AWS S3 Storage service. You can configure the Storage of your choice at the Application level. Various processes like File Uploads, CSV Import, and Patch Uploads use the configured Storage for processing and storing BLOB data.

CSV Export / Import

Data displayed on the UI, e.g., Data Grid, can be exported in CSV format. Also, use an existing CSV file to import and auto-generate a DataSource (with a backing database table) based on the CSV data.

Email / Messaging

The platform provides built-in APIs for sending emails and posting messages to Microsoft Teams, Slack & Facebook Workplace.

Data Encryption

You can keep the sensitive part of your application data encrypted. By simply choosing the field attribute type as Encrypted String, the platform will take care of encrypting the data while storing in the source database or cloud system and decrypt it before displaying the data to the user on the UI. You can also do the same on demand using the built-in APIs.

File Attachment

You can use the built-in File Attachment component to upload files with inbuilt versioning support. This service uses the configured Blob Storage service to store the files in either Azure Blob or S3.

Health Check

Prometheus Metrics that can be fed into your existing monitoring system for Health Checks & Alerts.

GET /v1/metrics

# HELP io_api_request_duration_seconds The API request latencies in seconds.
# TYPE io_api_request_duration_seconds histogram
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 10
io_api_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 10
io_api_request_duration_seconds_sum{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200"} 0.046232549
io_api_request_duration_seconds_count{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200"} 10
# HELP io_api_requests_total Number of API requests made.
# TYPE io_api_requests_total counter
io_api_requests_total{app="cloudio",instance_id="dev_rust",org="cloudio"} 10
# HELP io_api_response_size_bytes The API response sizes in bytes.
# TYPE io_api_response_size_bytes histogram
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="1024"} 0
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="5120"} 0
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="10240"} 0
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="25600"} 0
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="51200"} 10
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="102400"} 10
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="1024000"} 10
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="10240000"} 10
io_api_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="+Inf"} 10
io_api_response_size_bytes_sum{app="cloudio",instance_id="dev_rust",org="cloudio"} 361630
io_api_response_size_bytes_count{app="cloudio",instance_id="dev_rust",org="cloudio"} 10
# HELP io_db_active_connections The active database connection size
# TYPE io_db_active_connections gauge
io_db_active_connections{app="cloudio",instance_id="dev_rust",org="cloudio",readonly="false"} 0
io_db_active_connections{app="cloudio",instance_id="dev_rust",org="cloudio",readonly="true"} 0
io_db_active_connections{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",readonly="false"} 0
io_db_active_connections{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",readonly="true"} 0
io_db_active_connections{app="my-application",instance_id="dev_rust",org="cloudio",readonly="false"} 0
io_db_active_connections{app="pr",instance_id="dev_rust",org="cloudio",readonly="false"} 0
io_db_active_connections{app="spaces",instance_id="dev_rust",org="cloudio",readonly="false"} 0
io_db_active_connections{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",readonly="false"} 0
io_db_active_connections{app="xcelerateiot",instance_id="dev_rust",org="cloudio",readonly="false"} 0
# HELP io_index_html_requests_total Number of index.html requests made.
# TYPE io_index_html_requests_total counter
io_index_html_requests_total{instance_id="dev_rust",org="cloudio"} 35
# HELP io_ws_active_sessions The active websocket connection size
# TYPE io_ws_active_sessions gauge
io_ws_active_sessions{instance_id="dev_rust",org="cloudio"} 2
# HELP io_ws_request_duration_seconds The websocket request latencies in seconds.
# TYPE io_ws_request_duration_seconds histogram
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 527
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 534
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 535
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 535
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 536
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 537
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 537
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 537
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 537
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 537
io_ws_request_duration_seconds_sum{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200"} 10.531006300999998
io_ws_request_duration_seconds_count{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="200"} 537
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.025"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.05"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.1"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.25"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="0.5"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="1"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="2.5"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="5"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="10"} 2
io_ws_request_duration_seconds_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400",le="+Inf"} 2
io_ws_request_duration_seconds_sum{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400"} 0.030714902
io_ws_request_duration_seconds_count{app="cloudio",instance_id="dev_rust",org="cloudio",statuscode="400"} 2
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 26
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 31
io_ws_request_duration_seconds_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 31
io_ws_request_duration_seconds_sum{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200"} 0.575535969
io_ws_request_duration_seconds_count{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",statuscode="200"} 31
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 37
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 38
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 40
io_ws_request_duration_seconds_bucket{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 40
io_ws_request_duration_seconds_sum{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200"} 0.8097220920000003
io_ws_request_duration_seconds_count{app="my-application",instance_id="dev_rust",org="cloudio",statuscode="200"} 40
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 654
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 666
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 668
io_ws_request_duration_seconds_bucket{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 668
io_ws_request_duration_seconds_sum{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200"} 11.492725862000007
io_ws_request_duration_seconds_count{app="pr",instance_id="dev_rust",org="cloudio",statuscode="200"} 668
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 43
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 44
io_ws_request_duration_seconds_bucket{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 44
io_ws_request_duration_seconds_sum{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200"} 0.7740629250000002
io_ws_request_duration_seconds_count{app="spaces",instance_id="dev_rust",org="cloudio",statuscode="200"} 44
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 386
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 414
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 415
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 415
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 415
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 416
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 416
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 416
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 416
io_ws_request_duration_seconds_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 416
io_ws_request_duration_seconds_sum{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200"} 8.404691122000003
io_ws_request_duration_seconds_count{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",statuscode="200"} 416
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.005"} 0
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.01"} 0
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.025"} 99
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.05"} 104
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.1"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.25"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="0.5"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="1"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="2.5"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="5"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="10"} 107
io_ws_request_duration_seconds_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200",le="+Inf"} 107
io_ws_request_duration_seconds_sum{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200"} 2.0467860519999994
io_ws_request_duration_seconds_count{app="xcelerateiot",instance_id="dev_rust",org="cloudio",statuscode="200"} 107
# HELP io_ws_requests_total Number of websocket requests made.
# TYPE io_ws_requests_total counter
io_ws_requests_total{app="SignIn",instance_id="dev_rust",org="cloudio"} 26
io_ws_requests_total{app="cloudio",instance_id="dev_rust",org="cloudio"} 520
io_ws_requests_total{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio"} 31
io_ws_requests_total{app="my-application",instance_id="dev_rust",org="cloudio"} 40
io_ws_requests_total{app="pr",instance_id="dev_rust",org="cloudio"} 668
io_ws_requests_total{app="spaces",instance_id="dev_rust",org="cloudio"} 40
io_ws_requests_total{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio"} 415
io_ws_requests_total{app="xcelerateiot",instance_id="dev_rust",org="cloudio"} 105
# HELP io_ws_response_size_bytes The websocket response sizes in bytes.
# TYPE io_ws_response_size_bytes histogram
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="1024"} 464
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="10240"} 518
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="51200"} 530
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="102400"} 530
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="1024000"} 537
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="10240000"} 539
io_ws_response_size_bytes_bucket{app="cloudio",instance_id="dev_rust",org="cloudio",le="+Inf"} 539
io_ws_response_size_bytes_sum{app="cloudio",instance_id="dev_rust",org="cloudio"} 4107772
io_ws_response_size_bytes_count{app="cloudio",instance_id="dev_rust",org="cloudio"} 539
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="1024"} 17
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="10240"} 26
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="51200"} 31
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="102400"} 31
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="1024000"} 31
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="10240000"} 31
io_ws_response_size_bytes_bucket{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio",le="+Inf"} 31
io_ws_response_size_bytes_sum{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio"} 154100
io_ws_response_size_bytes_count{app="hsbc-baa-s",instance_id="dev_rust",org="cloudio"} 31
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="1024"} 30
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="10240"} 32
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="51200"} 39
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="102400"} 39
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="1024000"} 39
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="10240000"} 40
io_ws_response_size_bytes_bucket{app="my-application",instance_id="dev_rust",org="cloudio",le="+Inf"} 40
io_ws_response_size_bytes_sum{app="my-application",instance_id="dev_rust",org="cloudio"} 8937050
io_ws_response_size_bytes_count{app="my-application",instance_id="dev_rust",org="cloudio"} 40
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="1024"} 598
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="10240"} 633
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="51200"} 654
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="102400"} 658
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="1024000"} 666
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="10240000"} 668
io_ws_response_size_bytes_bucket{app="pr",instance_id="dev_rust",org="cloudio",le="+Inf"} 668
io_ws_response_size_bytes_sum{app="pr",instance_id="dev_rust",org="cloudio"} 20441794
io_ws_response_size_bytes_count{app="pr",instance_id="dev_rust",org="cloudio"} 668
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="1024"} 41
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="10240"} 42
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="51200"} 43
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="102400"} 44
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="1024000"} 44
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="10240000"} 44
io_ws_response_size_bytes_bucket{app="spaces",instance_id="dev_rust",org="cloudio",le="+Inf"} 44
io_ws_response_size_bytes_sum{app="spaces",instance_id="dev_rust",org="cloudio"} 82990
io_ws_response_size_bytes_count{app="spaces",instance_id="dev_rust",org="cloudio"} 44
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="1024"} 257
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="10240"} 387
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="51200"} 412
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="102400"} 414
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="1024000"} 416
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="10240000"} 416
io_ws_response_size_bytes_bucket{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio",le="+Inf"} 416
io_ws_response_size_bytes_sum{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio"} 1546765
io_ws_response_size_bytes_count{app="ticketing-system-4-0",instance_id="dev_rust",org="cloudio"} 416
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="1024"} 61
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="10240"} 91
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="51200"} 104
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="102400"} 107
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="1024000"} 107
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="10240000"} 107
io_ws_response_size_bytes_bucket{app="xcelerateiot",instance_id="dev_rust",org="cloudio",le="+Inf"} 107
io_ws_response_size_bytes_sum{app="xcelerateiot",instance_id="dev_rust",org="cloudio"} 769953
io_ws_response_size_bytes_count{app="xcelerateiot",instance_id="dev_rust",org="cloudio"} 107
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 675.1
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 262144
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 141
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 186347520
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1648183663.8
# HELP process_threads Number of OS threads in the process.
# TYPE process_threads gauge
process_threads 68
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 6681526272

Key Vaults

There is built-in integration with Azure Key Vault and AWS KMS. You can use the built-in APIs to store & fetch sensitive information like API keys and client secrets securely using either Azure Key Vault and AWS KMS services.

Logging

Logger API can be used for debugging purposes within any of the server-side scripts. The messages that are logged using this API can be viewed in real-time using Debug Console on the browser and they are also stored on the server for later analysis.

Lookups

The platform provides a built-in Lookup Management Framework that you can leverage to define lookup values to be used in your application.

OAuth / SSO

There is built-in support for OAuth 2 services like Auth0, and Google Auth API, that you can leverage to configure SSO for your application instead of using the built-in Authentication provided by the platform.

Patch Management

Patch Management can be used to migrate your application metadata from one instance to another. You can download the complete Application patch or a partial patch with cherry-picked objects, which can then be source controlled and uploaded into the target system for code migration.

Profile Values

You can define profile options (similar to ENV variables) and specify values at various levels via. User, Role, Application & Organization.

Redis Cache

Redis is used for caching metadata for superior performance. You can use the Redis cache to store application data as needed using the built-in cache APIs.

Role Based Access

You can define various Roles at the Application level and assign them to respective users. DataSources can then be assigned to different roles with different permissions via. Read, Insert, Update, Delete, Audit & Export.

Schedule Jobs

You can create Cloud Functions and schedule them to run at a specific date and time or regular interval using CRON expression.

Workflow Engine

The CloudIO workflow engine is highly scalable and flexible. You can extend the workflow engine by adding your custom Workflow Nodes in the language of your choice.

There is also a built-in way of defining custom workflow nodes using Javascript as shown below.

Last updated