Internal HTTP API became more REST-friendly:
/project were discarded and replaced with
Previously used Seneca Framework has been replaced with our own custom implementation. Seneca was a very good solution in the beginning when we were still choosing how to send messages between services (HTTP, SQS, NATS) or what to choose for data storage (MongoDB, DynamoDB, Postgres). Seneca allows you to easily change transport and storage, but as a drawback only basic functionalities are supported. Finally we’ve made a decision to use NATS and Postgres and in order to take full advantage of their features we developed our custom microservice framework.
Scaleable payment system, subscriptions with discount support and limiting the use of resources based on user subscription (RAC) has been added. It is powered by Stripe, currently we accept only credit card payments and other payment methods will be enabled with the releases coming this Autumn.
isaax.conf contains deviceID.
Mqtt-service, device-service, cred-service were discarded and replaced with
iot-service – written in Golang and
mosquitto as a stand-alone MQTT broker with our custom authentication plugin. Previously we had MQTT broker with our custom application-level logic embedded and now we have an industrial grade one with all custom logic separated, which ensures stability and greater performance.
IoT-Service, is a service consisting of 5 smaller services:
Device Message & Telemetry Service:
Message service handles application/syslog/isaax-agent logs. Users can integrate their accounts with popular third party services such as papertrail etc. Message service is a log messages retransmitter for third party services(external services), and isaax-gateway.
Environment Variables & Credentials Service:
Envar service handles environment variables for projects. It handles read/update requests from isaax-gateway. It also broadcasts updated environment variables to devices NOTE: Each project gets assigned default
Shell Script Service:
Script service handles scripts that users can execute on their devices Currently we support 3 script types:
pre-install– executed before user application is installed on the device
pre-update – executed each time before update user application
post-update– executed each time after updating user application
echo "Hello, I run before|after app installation|update|removal"
Internal Trigger Service:
Internal trigger subscribes to
[project.created|deleted] topics. After receiving events on those topics, trigger publishes appropriate requests to envar/script services to create (default environment variables+scripts) or to delete existing records for deleted project
Implemented new device authorisation flow. Device will no longer use issued JWT (JSON Web Token) as means to authorise itself on a broker. Now device will connect to the MQTT-broker using project token and it will only authenticate device, upon successful connection device will need to authorise itself on the backend service by receiving session id that should be used in subscription topics. Project token and device id are now stored in agent’s config file at
Service registry handles IoT services lifecycle. It creates dependencies for IoT Services, and injects them to services listed in config file.
User web application