Integrations
15 min
The integrations module manages cloud connector instances, subscriptions (topics), and object storage on Litmus Edge.
Imports
The integrations surface lives under litmussdk.integrations.common:
# Instances and topics (REST API, 3.x and 4.0.x)
from litmussdk.integrations.common import _integrations, _topics, _dashboard
# GraphQL streaming subscriptions (4.0.x only)
from litmussdk.integrations.common import _gql_streaming
# Object storage (4.0.x only)
from litmussdk.integrations.common import _object_storageNote: GraphQL and object storage functions raise UnsupportedVersionError when called against a 3.x device.
Providers
Listing Providers
providers = _integrations.cloud_providers() # list[dict]
provider = next(p for p in providers if p["Name"] == "REST")
provider_id = provider["ID"]Provider Schema
schema = _integrations.cloud_config_schema(provider_id)
tag_schema = _integrations.cloud_config_tag_schema(provider_id)
description = _integrations.cloud_config_description(provider_id)
Instances
instances = _integrations.cloud_connector_instances()
instance = next(i for i in instances if i["Config"]["name"] == "My REST Connector")
instance_id = instance["InstanceID"]
# Create
instance = _integrations.cloud_connector_create(
provider_id=provider_id,
provider_config={"name": "My REST Connector", "url": "https://example.com/api"},
)
instance_id = instance["InstanceID"]
# Read details
details = _integrations.cloud_connector_instance_details(instance_id)
# Enable / disable
_integrations.cloud_connector_enable_disable(instance_id, enable=True)
# Update
_integrations.cloud_connector_instance_update(
integration_instance_id=instance_id,
update_body={"Config": {"name": "...", "url": "..."}},
)
# Delete
_integrations.cloud_connector_instance_delete(instance_id)
# Purge persistence layer
_integrations.purge_persistence_layer(instance_id)
Topics (REST API, 3.x and 4.0.x)
Topics define data flows. Outbound = local -> remote. Inbound = remote -> local.
topics = _topics.list_topics(instance_id)
topic = _topics.create_topic(
integration_instance_id=instance_id,
is_local_to_remote=True,
local_name="plant/pump/01/pressure",
remote_name="pump-pressure",
enabled=True,
description="Pump pressure",
config={},
)
topic_id = topic["TopicID"]
_topics.update_topic(
integration_instance_id=instance_id,
integration_topic_id=topic_id,
local_name="plant/pump/01/pressure",
remote_name="pump-pressure-v2",
is_local_to_remote=True,
enabled=True,
)
_topics.enable_disable_topic(instance_id, topic_id, enable=True)
_topics.enable_disable_multiple_topics(instance_id, [topic_id_1, topic_id_2], enable=False)
_topics.remove_topic(instance_id, topic_id)
_topics.delete_multiple_topics(instance_id, [topic_id_1, topic_id_2])
# Import from DeviceHub
_topics.import_from_dh(instance_id, device_id=device_id, wildcard=False)
# CSV export / import
csv_text = _topics.download_csv(instance_id)
_topics.upload_csv(instance_id, file_path="/path/to/topics.csv")
Subscriptions (GraphQL API, 4.0.x only)
subs = _gql_streaming.list_subscriptions(instance_id)
_gql_streaming.create_subscriptions(
instance_id=instance_id,
subscriptions=[{
"LocalName": "plant/pump/01/pressure",
"RemoteName": "pump-pressure",
"IsLocalToRemote": True,
"Enabled": True,
"Description": "",
"Config": {},
}],
)
# Each entry in update must include TopicID
_gql_streaming.update_subscriptions(
instance_id=instance_id,
subscriptions=[{"TopicID": topic_id, "RemoteName": "pump-pressure-v2", ...}],
)
_gql_streaming.enable_subscriptions(instance_id, [topic_id])
_gql_streaming.disable_subscriptions(instance_id, [topic_id])
_gql_streaming.delete_subscriptions(instance_id, [topic_id])
# Bulk
_gql_streaming.enable_all_topics(instance_id)
_gql_streaming.disable_all_topics(instance_id)
_gql_streaming.delete_all_topics(instance_id)
# Bulk import from other services
_gql_streaming.import_topics(
instance_id=instance_id,
device_hub=[{"deviceId": device_id, "tagIds": [tag_id]}],
digital_twins=[{"instanceId": dt_instance_id}],
analytics=[{"processorId": proc_id}],
)
# Instance management (GraphQL)
instances = _gql_streaming.list_instances_gql()
_gql_streaming.update_instance_gql(instance_id, config="{...}", error_logging=False)
result = _gql_streaming.clear_instance_persistence_layer(instance_id)
_gql_streaming.delete_instance_gql(instance_id)
# CSV
csv = _gql_streaming.download_subscriptions_csv([instance_id])
Object Storage (4.0.x only)
status = _object_storage.get_cloud_storage_availability()
providers = _object_storage.get_cloud_storage_providers()
jobs = _object_storage.get_cloud_storage_jobs()
Dashboard Stats
stats = _dashboard.all_stats(instance_id)
_dashboard.mean_disk_usage(instance_id)
_dashboard.persistence_size(instance_id)
_dashboard.live_count(instance_id)
_dashboard.drop_count(instance_id)
Prometheus Metrics
metrics = _integrations.prometheus_metrics() # str, raw Prometheus exposition format
License
Copyright (c) Litmus Automation Inc.