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
Install python package:
sudo python3 -m pip install iofog
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)
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
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
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)
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()
from iofog.microservices.log import Logger
log = Logger("logger1")
log.debug("hello")
log.info("world")
log.warning("good")
log.error("bye")
This module provides a client for talking to ioFog Controller's REST API.
# 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)