Device module

A device is a rapyuta.io resource representing any physical device that typically lives at a client location and is registered on rapyuta.io. The resource encapsulates information about the device, its architecture, runtime, user-provided metadata. Once a particular piece of hardware is successfully on-boarded to rapyuta.io this entity is responsible for providing the necessary mechanics and communication channels to manage and interact with the device. The platform leverages these mechanics to provide features that can be used to communicate to the device, configure it, monitor its health and deploy packages to the device.

Client Module

class Client(auth_token, project=None)

Client class provides access to device, package, volume and deployment classes.

__init__(auth_token, project=None)

Get new client object

Parameters
  • auth_token (string) – Authentication token

  • project (string) – project_guid of the user

apply_parameters(device_list, tree_names=None, retry_limit=0)

Applies configuration parameters for the given device_list. If tree_names is given, only these trees are applied.

Parameters
  • device_list (list[str]) – List of device IDs

  • tree_names (list[str]) – List of configuration tree names

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

List of dictionaries - each with device_id, bool success status, and an error message if the success status is False for that device_id

Return type

list[dict]

Following example demonstrates how to use apply_parameters and handle errors.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> devices = client.get_all_devices()
>>> response = client.apply_parameters([device.deviceId for device in devices])
>>> for device in response:
...     if not device['success']:
...         print device['device_id'], device['error']
create_device(device)

Create a device on rapyuta.io platform.

Parameters

device (Device) – device object

Return type

Device

Following example demonstrates how to create a device.

>>> from rapyuta_io import Client, ROSDistro
>>> from rapyuta_io.clients.device import Device, DeviceRuntime, DevicePythonVersion
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> device = Device(name='test-device', runtime=DeviceRuntime.DOCKER, ros_distro=ROSDistro.MELODIC,
...                 rosbag_mount_path='/opt/rapyuta/volumes/rosbag', python_version=DevicePythonVersion.PYTHON3)
>>> device = client.create_device(device)
delete_device(device_id)

Delete a device based on its device id.

Parameters

device_id (str) – Device Id

Following example demonstrates how to delete a device.

>>> from rapyuta_io import Client, ROSDistro
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> client.delete_device('device-id')
get_all_devices(online_device=False, arch_list=None, retry_limit=0)

Get all the devices

Parameters
  • online_device (bool) – The value True returns only those devices that are online, while the value False returns all devices

  • arch_list (list) – If set, another call is made to filter devices by architecture. Valid architectures can be found in DeviceArch class. Note: Only online devices can be filtered by architecture. Therefore if arch_list is set, non-online devices are not included in the result irrespective of the value of online_device.

  • retry_limit (int) – No of retry attempts to be carried out if any failures occurs during the API call.

Returns

List of instances of Device class

Raises

APIError: If the API returns an error, a status code of anything other than 200/201 is returned

Following example demonstrates how to get the device list

>>> from rapyuta_io import Client
>>> from rapyuta_io.clients import DeviceArch
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> devices = client.get_all_devices()
>>> filtered_by_arch_devices = client.get_all_devices(arch_list=[
>>>     DeviceArch.ARM32V7, DeviceArch.ARM64V8, DeviceArch.AMD64])
get_device(device_id, retry_limit=0)

Get information of a device.

Parameters
  • device_id (string) – Device Id

  • retry_limit (int) – No of retry attempts to be carried out if any failures occurs during the API call.

Returns

Instances of Device class.

Raises

ResourceNotFoundError: If the device with given device id is not present.

Raises

APIError: If the API returns an error, a status code of anything other than 200/201 is returned.

Following example demonstrates how to select a device information.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> device = client.get_device(device_id="device_id")
toggle_features(device_id, features, config=None)

Patch a device on rapyuta.io platform.

Parameters
  • device_id (str) – Device ID

  • features (list<tuple>) – A tuple of featues and their states

  • config (dict) – A dict of additional feature configuration

Following example demonstrates how to toggle features a device.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> client.toggle_features('device-id', [('vpn', True), ('tracing', False)], config={'vpn': {'advertise_routes': True}})

Device Module

class Device(name, runtime=None, runtime_docker=False, runtime_preinstalled=False, ros_distro=None, rosbag_mount_path=None, ros_workspace=None, description=None, python_version=DevicePythonVersion.PYTHON2)

Device class represents a device. Member variables of the class represent the properties of device.

Variables marked as (full-only) are only available on a full object. Use refresh() to convert a partial object into a full one.

Variables
  • uuid – Id of the device.

  • name – Name of the device.

  • status (DeviceStatus) – Status of the device.

  • username – (full-only) User log in to device

  • saltversion – (full-only) Salt version of the device.

  • registration_time – Device registration time.

  • last_online – Time when device was last online.

  • python_version – indicates whether device is running on python2 or python3

  • description – Description of the device.

  • labels – List of labels associated with the device.

  • config_variables – Configuration variables of the device.

  • deployments – List of deployments on device

  • error_code – Error code when device goes to FAILED state. Will be of the form: ‘DEV_E*’.

  • error_message – Error message when device goes to FAILED state.

  • created_by – Creator user guid.

  • host – (full-only) Hostname on device.

  • ip_interfaces – (full-only) Set of IP Interfaces on device.

  • lsb_distrib_description – (full-only) LSB Distribution details.

add_config_variable(key, value)

Add new configuration variable to the device.

Parameters
  • key (string) – Configuration variable key

  • value (string) – Configuration value

Returns

instance of DeviceConfig class.

Raises

ParameterMissingException: If any parameters are missing in the request.

Raises

DeviceNotFoundException: If the device is not found.

Raises

APIError: If the API returns an error, the status code is anything other than 200/201

Following example demonstrates how to add a device configuration variable.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.add_config_variable('config_key', 'config_value')
add_label(key, value, retry_limit=0)

Add label to the device

Parameters
  • key (string) – label key

  • key – label value

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occur during the API call.

Returns

instances of the class Label.

Raises

DeviceNotFoundException: If the device is not found.

Raises

ParameterMissingException: If any parameters are missing in the request.

Raises

APIError: If the API call returns an error, the status code is anything other than 200/201

Following example demonstrates how to add device labels

>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.model import Label
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.add_label('key', 'value')
cancel_log_file_upload(request_uuid, retry_limit=0)

Cancels the ongoing upload operation.

Parameters
  • request_uuid (str) – UUID of the upload request

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

Returns

status of the cancel operation, True indicates operation succeeded False otherwise

Raises

LogsUUIDNotFoundException: If the request_uuid is not found

Raises

BadRequestError: if the upload operation is completed

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to cancel the ongoing upload operation
>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> cancel_status = device.cancel_log_file_upload('request_uuid')
create_shared_url(shared_url)

Create a SharedURL that let’s you download the Log file from a Public URL.

Parameters

shared_url (SharedURL) – Instance of the SharedURL Object

Returns

Instance of SharedURL class

Following example demonstrate how to get the downloadable url
>>> from datetime import timedelta, datetime
>>> from rapyuta_io import Client
>>> expiry_time = datetime.now() + timedelta(days=7)
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> log = [log.filename == 'file.log' for log in device.list_uploaded_files_for_device()][0]
>>> shared_url = device.create_shared_url(SharedURL(log.request_uuid, expiry_time=expiry_time))
>>> print shared_url.url
delete(retry_limit=0)

Delete the device

Parameters

retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occur during the API call.

Returns

True if the device is deleted successfully. Otherwise returns False.

Raises

DeviceNotFoundException: If the device is not found.

Raises

DeploymentRunningException: When any deployment is running on the device.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to delete a device

>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.model import Label
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.delete()
delete_config_variable(config_id, retry_limit=0)

Delete configuration variable for the device.

Parameters
  • config_id (int) – Configuration variable id

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occur during the API call.

Returns

True if the configuration variable is deleted, otherwise returns false

Raises

ParameterMissingException: If any parameters are missing in the request.

Raises

ConfigNotFoundException: If the configuration is not found.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to delete a device configuration variable.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.delete_config_variable(config_id='config_id')
delete_label(label_id, retry_limit=0)

Delete a device label.

Parameters
  • label_id (int) – Label Id to delete

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

Boolean value to indicate whether the label is deleted or not

Raises

LabelNotFoundException: If the label is not found.

Raises

APIError: If the API call returns an error, the status code is anything other than 200/201.

Following example demonstrates how to delete a device label

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.delete_label('label_id')
delete_uploaded_log_file(request_uuid, retry_limit=0)

Deletes the logs file from cloud storage

Parameters
  • request_uuid (str) – UUID of the upload request

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

Returns

status of the operation, True indicates operation succeeded false otherwise

Raises

LogsUUIDNotFoundException: If the request_uuid is not found

Raises

BadRequestError: if the upload is in progress

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to delete the uploaded log file from cloud storage
>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> device.delete_uploaded_log_file('request_uuid')
download_log_file(request_uuid, retry_limit=0)

Returns downloadable log file URL, using this URL user can download log file using Wget or curl

Parameters
  • request_uuid (str) – UUID of the upload request

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

Returns

url of the uploaded log file in the cloud

Raises

LogsUUIDNotFoundException: If the request_uuid is not found

Raises

BadRequestError: if the upload operation is in progress

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to get the downloadable url
>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> download_url = device.download_log_file('request_uuid')
execute_command(command, retry_limit=0)

Execute command on device

Parameters
  • command (Command) – Command to execute

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

Execution result

Raises

ParameterMissingException: If any parameters are missing in the request.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to execute a command.

>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.model import Command
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id', )
>>> command = Command(cmd='uname -a', shell='/bin/bash', bg=False)
>>> device.execute_command(command)
get_config_variables()

Get configuration variables associated with the device

Returns

list of instances of DeviceConfig class.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

get_deployments()

Get partial details of deployments associated with the device. Also, update deployments field with these.

Note: Deployment details are partial. Use refresh() as shown in the example below to refresh these to full objects.

Returns

List of deployment details.

Following example demonstrates how to get device deployments

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> partial_deployments = device.get_deployments()
>>> # to get full deployments objects:
>>> for deployment in partial_deployments:
>>>     deployment.refresh()
get_labels()

Get all labels associated with the device

Returns

list of instances of the class Label.

Following example demonstrates how to get device labels

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.get_labels()
get_log_upload_status(request_uuid, retry_limit=0)

Gets the current upload status

Parameters
  • request_uuid (str) – UUID of the upload request

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

Returns

returns instance of the class LogUploadStatus

Raises

LogsUUIDNotFoundException: If the request_uuid is not found

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to get the status of ongoing upload operation
>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> upload_status = device.get_log_upload_status('request_uuid')
get_runtime()

Get the device runtime :return: value of device configuration variable: runtime

Following example demonstrates how to get device runtime.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.get_runtime()
is_docker_enabled()

Check if docker runtime is enabled :return: boolean value depicting if docker runtime is enabled/disabled on the device

Following example demonstrates how to check if docker runtime is enabled/disabled on the device.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.is_docker_enabled()
is_preinstalled_enabled()

Check if preinstalled runtime is enabled :return: boolean value depicting if preinstalled runtime is enabled/disabled on the device

Following example demonstrates how to check if preinstalled runtime is enabled/disabled on the device.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.is_preinstalled_enabled()
list_uploaded_files_for_device(retry_limit=0, sort=None, reverse=False, paginate=False, page_size=10, page_number=1, filter_by_filename=None, filter_by_status=None)

Returns list of the uploaded files with status and other properties

Parameters
  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

  • sort (str) – Optional parameter to sort the list of log files according to their attributes (options: [filename, status, total_size, created_at, updated_at])

  • reverse (bool) – Optional parameter to sort the list of log files in descending order (ascending order by default)

  • paginate (bool) – Optional parameter to paginate the list of log files

  • page_size (int) – Optional parameter to specify the number of logs to be displayed in a page. (default:10, options:[10,20,30,40])

  • page_number (int) – Optional parameter to specify the page number whose logs are to be displayed. (default:1)

  • filter_by_filename (str) – Optional parameter to filter the list of log files if the provided name is a substring of any filename.

  • filter_by_status (list) – Optional parameter to filter the list of log files based on their status. (options : [COMPLETED, IN PROGRESS, FAILED, CANCELLED])

Returns

returns the list of instance of the class LogUploads

Raises

BadRequestError: if the upload operation is in progress

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to get the downloadable url
>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> status_list = device.list_uploaded_files_for_device()
metrics(retry_limit=0)

Deprecated since version 0.38.0: Will be removed in the future.

Gets the metric status from the device

param retry_limit

Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

type retry_limit

int

return

list of instances of class Metric:

raises

DeviceNotFoundException: If the device is not found

raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to get the status of metric from the device
>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> device.metrics()
onboard_script()

Returns the OnboardScript object. This object has the information regarding api server url, auth token and command to be used to install rapyuta-agent on the device. The run method of this object is supposed to be called in order to install rapyuta-agent on the device.

Returns

returns the OnboardScript object

Return type

OnboardScript

Following example demonstrates how to use the onboard_script method.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> onboard_script = device.onboard_script()
>>> onboard_script.run()
refresh(retry_limit=0)

Fetches the updated resource from the server, and adds/updates object attributes based on it.

Parameters

retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Raises

DeviceNotFountException: If the device is not found.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

save(retry_limit=0)

Update device details such as device name, device status and description.

Parameters

retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

returns true if the device details updated successfully.

Raises

DeviceNotFountException: If the device is not found.

Raises

ParameterMissingException: If any parameters are missing in the request.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to update a device.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.name = 'new_device_name'
>>> device.save()
subscribe_metric(metric, qos=QoS.LOW, retry_limit=0)

Deprecated since version 0.38.0: Will be removed in the future.

Subscribe to given metric on the device

param metric

metric to be subscribed

type metric

SystemMetric

param qos

QoS value of associated with metric

type qos

QoS

param retry_limit

Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

type retry_limit

int

return

returns the boolean indicating status of the operation

raises

DeviceNotFoundException: If the device is not found

raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to subscribe to a metric
>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.device import SystemMetric, QoS
>>> client = Client(auth_token='auth_token', project='project_guid')
>>> device = client.get_device('device_id')
>>> device.subscribe_metric(SystemMetric.CPU, QoS.LOW)
subscribe_topic(topic, qos=0, kind=TopicKind.METRIC, whitelist_tag=[], whitelist_field=[], fail_on_topic_inexistence=True, retry_limit=0)

To subscribe a topic

Parameters
  • topic (string) – topic name to subscribe

  • qos (integer) – QoS value for topic subscription

  • kind (enum TopicKind) – subscribe the topic as a metric or log

  • whitelist_tag (list) – Optional parameter to specify the tags that needs to be whitelisted in metrics

  • whitelist_field (list) – Optional parameter to specify the fields that needs to be whitelisted in metrics

  • fail_on_topic_inexistence (bool) – Optional parameter to fail with error if topic doesnt exists on device

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

list containing subscription status.

Raises

DeviceNotFountException: If the device is not found.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to subscribe a topic

>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.device import QoS
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.subscribe_topic('test_topic', qos=QoS.MEDIUM.value, kind=TopicKind.METRIC)
topic_status(retry_limit=0)

Get the subscribed and unsubscribed topics status

Parameters

retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

Instance of class TopicsStatus.

Raises

DeviceNotFoundException: If the device is not found.

Raises

UnknownTopicStatusException: If the topic status is empty.

Raises

APIError: If the API call returns an error, the status code is anything other than 200/201.

Following example demonstrates how to get the topic status

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.topic_status()
topics(retry_limit=0)

Fetching the available topics on the device

Parameters

retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

List of topics in the device (list(string)

Raises

DeviceNotFountException: If the device is not found.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to get the topic list

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.topics()
unsubscribe_metric(metric, retry_limit=0)

Deprecated since version 0.38.0: Will be removed in the future.

Unsubscribe to given metric

param metric

metric to be unsubscribed

type metric

SystemMetric

param retry_limit

Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

type retry_limit

int

return

boolean indicates the status of the operation

raises

DeviceNotFoundException: If the device is not found

raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to unsubscribe to a metric
>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.device import SystemMetric
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> device.unsubscribe_metric(SystemMetric.CPU)
unsubscribe_topic(topic, kind=TopicKind.METRIC, retry_limit=0)

To unsubscribe a topic

Parameters
  • topic (string) – topic name to unsubscribe

  • kind (enum TopicKind) – unsubscribe the topic as a metric or log

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

list containing unsubscription status.

Raises

DeviceNotFountException: If the device is not found.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrates how to unsubscribe a topic

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> device.unsubscribe_topic('test_topic', TopicKind.METRIC)
update_config_variable(config)

Update device configuration variable of a device.

Parameters

config (instance of DeviceConfig class) – Configuration variable

Returns

instance of DeviceConfig class.

Raises

ParameterMissingException: If any parameters are missing in the request.

Raises

DeviceNotFoundException: If the device is not found.

Raises

APIError: If the API call returns an error, the status code is anything other than 200/201.

Following example demonstrates how to update a device configuration variable.

>>> from rapyuta_io import Client
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> config_var = device.get_config_variables()[0]
>>> config_var.value = 'new_config_value'
>>> device.update_config_variable(config_var)
update_label(label, retry_limit=0)

Update device label

Parameters
  • label (Label) – instance of class Label to update

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failures occurs during the API call.

Returns

updated instance of the class Label.

Raises

LabelNotFoundException: If the label is not found.

Raises

APIError: If the API call returns an error, the status code is anything other than 200/201.

Following example demonstrates how to update a device label

>>> from rapyuta_io import Client
>>> from rapyuta_io.clients.model import Label
>>> client = Client(auth_token='auth_token', project="project_guid")
>>> device = client.get_device('test_device_id')
>>> label = device.get_labels()[0]
>>> label.value = 'new label value'
>>> device.update_label(label)
upgrade()

Upgrade a device running with python2 to python3

Raises

DeviceNotFoundException: If the device is not found.

Raises

DeploymentRunningException: When any deployment is running on the device.

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to upgrade a device onboarded on python2 runtime

>>> from rapyuta_io import Client
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> device.upgrade()
>>> onboard_script = device.onboard_script()
>>> onboard_script.run()
upload_log_file(upload_request, retry_limit=0)

Uploads the specified logfile in request to the cloud storage

Parameters
  • upload_request (LogsUploadRequest) – upload specific details

  • retry_limit (int) – Optional parameter to specify the number of retry attempts to be carried out if any failure occurs during API invocation

Returns

UUID of the upload request using which user can query the status/download the file from cloud

Raises

APIError: If the api returns an error, the status code is anything other than 200/201

Following example demonstrate how to upload the log file from device
>>> from rapyuta_io import Client
>>> from rapyuta_io.clients import LogsUploadRequest
>>> client = Client(auth_token='token', project='project_id')
>>> device = client.get_device('device_id')
>>> upload_request = LogsUploadRequest('/path/to/file.log', file_name='new-file-name.log', override=False,
>>>                    purge_after=False, metadata={'key': 'value'})
>>> request_uuid = device.upload_log_file(upload_request)
class DevicePythonVersion(value)

Enumneration variables for the Device python version available in rapyuta.io

DevicePythonVersion.PYTHON2 (‘2’)

DevicePythonVersion.PYTHON3 (‘3’)

class DeviceRuntime(value)

Enumeration variables for the Device runtimes available in rapyuta.io.

DeviceRuntime.DOCKER (‘dockercompose’)

DeviceRuntime.PREINSTALLED (‘preinstalled’)

class DeviceRuntimeKeys(value)

The Device runtime keys to enable/disable runtimes available in rapyuta.io.

DeviceRuntimeKeys.RUNTIME_DOCKER (‘runtime_docker’)

DeviceRuntimeKeys.RUNTIME_PREINSTALLED (‘runtime_preinstalled’)

class DeviceStatus(value)

DeviceStatus enumeration represents the supported device status. Device status can be any of the below types

DeviceStatus.ONLINE

DeviceStatus.REJECTED

DeviceStatus.ACCEPTED

DeviceStatus.OFFLINE

DeviceStatus.REGISTERED

DeviceStatus.INITIALIZING

DeviceStatus.FAILED

DeviceStatus.NEW

DeviceStatus.DELETED

class OnboardScript(token, url, command)

OnboardScript class can be used to download and run the device onboard script.

Variables
  • token – Authorization token needed to make api call

  • url – URL to download the onboard script

  • command – command to execute the downloaded script

full_command()

Returns the full bash command that downloads and executes the onboard script.

Returns

returns the full bash command to onboard a device.

Return type

str

run()

Downloads the onboard script and executes it in a subprocess. In case the script returns non-zero code after execution, an exception is raised.

class QoS(value)

Enumeration variables for QoS for topic/metric subscription.

QoS.LOW

QoS.MEDIUM

QoS.HIGH

class SystemMetric(value)

Metrics options that are currently supported by device. User can subscribe any of metrics options given below

SystemMetric.CPU

SystemMetric.MEMORY

SystemMetric.DISK

SystemMetric.DISKIO

SystemMetric.NETWORK

SystemMetric.WIRELESS

class TopicKind(value)

Enumeration variables for the Topic kind. Topic kind may be ‘Metric’ or ‘Log’

TopicKind.METRIC

TopicKind.LOG

class TopicQOS(value)

Deprecated since version 0.7.0: Use QoS instead.

Enumeration variables for the Topic qos. Topic qos may be 0, 1 or 2

TopicQOS.ZERO

TopicQOS.ONE

TopicQOS.TWO

class DeviceArch(value)

DeviceArch enumeration represents supported device architectures. Device architecture can be any of the below types

DeviceArch.ARM32V7

DeviceArch.ARM64V8

DeviceArch.AMD64

class Command(cmd, shell=None, env=None, bg=False, runas=None, pwd=None, cwd=None)

Command class represent command that is executed on a device.

Variables
  • shell – Represents the shell where it is going to execute

  • env – List of environment variables.

  • bg – Boolean value specifying whether the execution runs on the background or not

  • runas – Run the command as a specific user

  • cmd – Command to execute on the device

  • pwd – Present working directory

  • cwd – Current working directory

Note

pwd is deprecated. Although backward compatibility is supported, it is recommended to use cwd instead.

class DeviceConfig(*args, **kwargs)

DeviceConfig class represents configuration of a device. Member variables of the class represent the properties of device.

Variables
  • id – Id of the configuration.

  • key – Configuration key.

  • value – Value of the configuration key.

class Label(*args, **kwargs)

Label class represents labels associated with a device.

Variables
  • id – Integer represents the id of the label

  • key – Key or label name

  • value – Value of the label

class LogUploadStatus(*args, **kwargs)

This class instance represent current status of the upload request

Variables
  • status – Represents the current file upload status

  • error_message – Any error message during file upload

  • creator – User guid who initiated the upload operation

  • created_at – Timestamp at which logs upload initiated

  • request_uuid – An uniquely identifier associated with current upload

  • filename – Name of the file which is to be uploaded

  • updated_at – Timestamp at which file is updated

class LogUploads(*args, **kwargs)

This class represents the status and other attributes associated with upload files.

Variables
  • status – Represents the current upload status

  • content_length – Length in bytes

  • creator – User guid who initiated the upload operation

  • created_at – Timestamp at which logs upload initiated

  • request_uuid – UUID associated with the request

  • creation_time – Timestamp at which file upload is completed

  • updated_at – Timestamp at which last file updated happened

  • filename – Name of the file which is to be uploaded

  • last_modified – represents the time at which last modification done to the file on cloud

  • metadata – key/value pair associated with upload request

class LogsUploadRequest(device_path, file_name='', max_upload_rate=1048576, override=False, purge_after=False, metadata=None)

Request class for log upload API

Variables
  • device_path – absolute path of file on device

  • file_name – Name of the file in cloud storage. If not provided, file name is derived from the device_path

  • max_upload_rate – network bandwidth to be used for upload

  • override – If true overrides the destination file

  • purge_after – If true purges the log file after upload

  • metadata – Key/value to be associated with log file

class Metric(*args, **kwargs)

Class represents current status of subscription of the metric

Variables
  • name – Name of the metric

  • kind – metric

  • config – Metric collection configuration

class SharedURL(request_uuid, expiry_time)

This class represents the Shared URL for Logs uploaded from the Device.

Parameters
  • request_uuid (str) – Request GUID of the Log file

  • expiry_time (datetime.datetime) – Datetime object for the time at which Shared URL is supposed to expire.

  • creator (str) – User GUID that created the Shared URL

  • created_at (str) – Timestamp at which Shared URL was created

property url

The generated public URL.

Raises

InvalidParameterException: If the Shared URL is not created

class TopicsStatus(*args, **kwargs)

Topic class represents the status - subscribed and unsubscribed - for logs and metrics

Variables
  • master_up – Boolean represents whether the master is running or not

  • subscribed – List of subscribed topics

  • unsubscribed – List of unsubscribed topics