Skip to main content

Python SDK for Eclipse ioFog development.

Project description

ioFog Python SDK

This SDK provides the following modules:

  • microservices: Clients for Microservices to talk to ioFog (e.g. ioMessage and Web Socket clients)
  • rest.controller: Client for Controller REST API

Installation

Install python package:

sudo python3 -m pip install iofog

Microservices

This module lets you easily build an ioElement. It gives you all the functionality to interact with ioFog via Local API. It contains all necessary methods for IoMessage transformation as well.

  • send new message to ioFog (post_message)
  • fetch next unread messages from ioFog (get_next_messages)
  • fetch messages for time period and list of accessible publishers (get_next_messages_from_publishers_within_timeframe)
  • get config options (get_config)
  • get Agent's Edge Resources (get_edge_resources)
  • create IoMessage, encode(decode) to(from) raw bytes, marshall(unmarshall) into(from) JSON object (IoMessage class methods)
  • connect to ioFog Control Channel via WebSocket (establish_control_ws_connection)
  • connect to ioFog Message Channel via WebSocket (establish_message_ws_connection) and publish new message via this channel (post_message_via_socket)

Usage

Import iofog client and additional classes to your project:

from iofog.microservices.client import Client
from iofog.microservices.exception import IoFogException
from iofog.microservices.iomessage import IoMessage
from iofog.microservices.listener import *

Create IoFog client with default settings:

try:
    client = Client()
except IoFogException as e:
 # client creation failed, e contains description

Or specify host, port, and container id explicitly:

try:
    client = Client(id='container_id', host='iofog_host', port=6666)
except IoFogException as e:
 # client creation failed, e contains description
REST calls

Get list of next unread IoMessages:

try:
    messages = client.get_next_messages()
except IoFogException as e:
 # some error occurred, e contains description

Post new IoMessage to ioFog via REST call:

msg=IoMessage()
msg.infotype="infotype"
msg.infoformat="infoformat"
msg.contentdata="sdkjhwrtiy8wrtgSDFOiuhsrgowh4touwsdhsDFDSKJhsdkljasjklweklfjwhefiauhw98p328946982weiusfhsdkufhaskldjfslkjdhfalsjdf=serg4towhr"
msg.contextdata=""
msg.tag="tag"
msg.groupid="groupid"
msg.authid="authid"
msg.authgroup="authgroup"
msg.hash="hash"
msg.previoushash="previoushash"
msg.nonce="nonce"

try:
    receipt = client.post_message(msg)
except IoFogException, e:
 # some error occurred, e contains description

Get an array of IoMessages from specified publishers within given timeframe:

query = {
    	'timeframestart': 1234567890123,
    	'timeframeend': 1234567890123,
    	'publishers': ['sefhuiw4984twefsdoiuhsdf', 'd895y459rwdsifuhSDFKukuewf', 'SESD984wtsdidsiusidsufgsdfkh']
}
try:
    query_response = client.get_next_messages_from_publishers_within_timeframe(query)
except IoFogException, e:
 # some error occurred, e contains description

Get container's config:

try:
    config = client.get_config()
except IoFogException, ex:
 # some error occurred, ex contains description

Get Agent's Edge Resources:

try:
    edge_resources = client.get_edge_resources()
except IoFogException, ex:
 # some error occurred, ex contains description
WebSocket calls

To use websocket connections you should implement listeners as follows:

class MyControlListener(IoFogControlWsListener):
    def on_control_signal(self):
        # do smth on control signal
    def on_edge_resources_signal(self):
        # Agent's Edge Resource list has been updated


class MyMessageListener(IoFogMessageWsListener):
    def on_receipt(self, message_id, timestamp):
        # do smth with message receipt

    def on_message(self, io_msg):
        # do smth with new message

After that you can establish websocket connections:

client.establish_message_ws_connection(MyMessageListener())
client.establish_control_ws_connection(MyControlListener())

Each of those connections will be managed in a separate thread.

After successful connection to message websocket you can send to it:

client.post_message_via_socket(io_msg_instance)
Message utils

Construct IoMessage from JSON(both json string and python dictionary are acceptable):

msg = IoMessage.from_json(json_msg)

IoMessage to JSON:

json_str = io_msg_instance.to_json()

Construct IoMessage from raw bytes:

msg = IoMessage.from_bytearray([0, 4, ...])

Pack IoMessage into bytearray:

msg_bytes = io_msg_instance.to_bytearray()

Logging

from iofog.microservices.log import Logger

log = Logger("first")
log.debug("hello")
log.info("world")
log.warn("good")
log.error("bye")

Controller REST API Client

This module provides a client for talking to ioFog Controller's REST API.

Usage

# Import Client class
from iofog.rest.controller.client import Client

# Instantiate Client
client = Client(
    host="123.123.123.123",
    port=51121,
    email="hello@world.io"
    password="2uhi40ghas9"

# Get Controller status and API version
status = client.get_status()
print(status['versions']['controller'])

# Create an Agent
name = "agent1"
host = "123.123.123.124"
resp = client.create_agent(name, host)

# Upgrade an Agent
resp = client.upgrade_agent(name)

# Create an Application
yaml_file = "/tmp/app.yaml"
resp = client.create_app_from_yaml(yaml_file)

# Get an Application
app_name = "app1"
resp = client.get_app(app_name)

# Delete an Application
resp = client.delete_app(app_name)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iofog-0.0.10.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

iofog-0.0.10-py2-none-any.whl (17.1 kB view details)

Uploaded Python 2

File details

Details for the file iofog-0.0.10.tar.gz.

File metadata

  • Download URL: iofog-0.0.10.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.7.0 requests/2.25.1 setuptools/44.1.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/2.7.17

File hashes

Hashes for iofog-0.0.10.tar.gz
Algorithm Hash digest
SHA256 51e5b2be5a93f11171d5e64a9bb920dfd5d255ad93c0c5f6adcb8e1fc55023a6
MD5 e5c022913bcc87de8099c4b2457a7580
BLAKE2b-256 80018efd34c0626b99258e1e65f8e8b0e20573311111dc52edca6fc03f495370

See more details on using hashes here.

File details

Details for the file iofog-0.0.10-py2-none-any.whl.

File metadata

  • Download URL: iofog-0.0.10-py2-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.7.0 requests/2.25.1 setuptools/44.1.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/2.7.17

File hashes

Hashes for iofog-0.0.10-py2-none-any.whl
Algorithm Hash digest
SHA256 adac868cb6fe94e0b846466705e4ed3646f3598c23605b8bc9f6cb30cca181f9
MD5 0c8d396a3c2f58e1cffe9c2e29c7cd98
BLAKE2b-256 1edbc251e2ce14c37e9a31b30f77ff59ad6903ce34527acdcc0e3e89965d7940

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page