APIInternal HTTP API became more REST-friendly:
- endpoints with singular form such as
/projectwere discarded and replaced with
- got rid of redundant wrappers in JSON responses;
- PUT, PATCH, POST and other methods have been adjusted in accordance with REST best practices.
Microservice frameworkPreviously 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.
Billing serviceScaleable 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.
- Self-registration process is now triggered automatically depending if
- Metrics are now sent separately by each type (ps/device/memory/cpu etc).
- Metrics are turned off by default.
Backend changesMqtt-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 serviceIoT-Service, is a service consisting of 5 smaller services:
- Device Message & Telemetry Microservice
- Environment Variables & Credentials Microservice
- Shell Script Microservice
- Authentication Microservice
- Device Management Microservice
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
Authentication service: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:Service registry handles IoT services lifecycle. It creates dependencies for IoT Services, and injects them to services listed in config file.
User web application
- Refactored “Delete account” feature.
- Added a collapsable sidebar.
- Subscription form improvements. Besides the new design we’ve added the ability to have an unlimited number of billing addresses, adding a payment card / cards via stripe, the ability to choose yearly or monthly subscription.
- Billing & pricing interface has been redesigned.
- Error messages on login became more informative.
- Users will be blocked if they enter the wrong credentials multiple times. A recovery email will be send that provides instruction on how to unblock the account.