Roadmap
v0.1.0
The main goals of the v0.1.0 is to get the uncertainties out of the way, implement basic functionnalities and create the tools to help on this adventure
- a proof of concept for the Protoproxy as their is much incertainties about the feasibility of that one
- Core module to manage devices
- CLI to easily interac with the system via vash and scripts
- TUI to easiliy interac with the system via a fun user experience
- Go Device SDK to create basic devices
Features
-
Create a poc of ProtoProxy which can listen Nats and push to db
-
Need to create store library
- Create store server
- need to select db [questdb]
- need to deploy db [docker compose]
- Need to create the deserialize library to line protocol
- use unit test to validate
- Need to deploy NatsIO [docker compose]
- Need to create a NatsIO library
- Need to create to pipe the natsio telemetry to the db through protoproxy
- Deploy Questdb and connect
- Add metrics to protoproxy
- Add dashboard for protoproxy
- Add dashboard for natsio
- Add metrics endpoint for prometheus, nodeexporter, natsio, questdb
- Configure a grafana with questdb and prometheus data source
- Add dashboard to see telemetry
-
Need to create store library
-
Core, register new device and basic management. The Core.
- Create a new device
- Update a device
- Delete a device
- List all devices with labels filter
- Get a device or a list of device with list of ids
- Setup unit test boilerplate
- Setup unit test for each functions
- Setup SurrealDB
- Setup NatsIO and request reply paradigm
- Add unit test with sub test and better handle db close
- Add search by annotations
- Add search by any json fields
- Add custom set of Mir errors for nice and consistent error handling
- Comment the protofile
- Added heartbeat functionality
-
MirCLI, the Command Line Interface to easy interact with the system and with scripts
- Basic functionallity to manage devices
- Create a database seeding script for populating the db
- Add name field to device
-
MirTUI, the Terminal User Interface with bubble tea
- Learn BubbleTea
- Create the general parent layout
- Create basic components like tooltip and toast
- Create main page layout
- Create the list device layouts
- Create the create device page layout
- Create the edit device page layout
- Delete a device function
-
MirGoSdk, device sdk in Go
-
Create builder or Option patterns for sdk
-
Have Heartbeat functionality implemented
-
Config and Logging setup
-
Design the event system
- How to publish new event
- How to catch those events
- ServerSide SDK
Improvements/Tech dett
Ergonomics
v0.2.0 Telemetry module
The main goals of this version is to create the Telemetry module as well as the visualiazing tools for the data
Features
Server Module
- ProtoFlux, handle telemetry data from protobuf to line protocol
CLI/TUI
- Upload schema via CLI
- Schema explorer via CLI and maybe TUI
- Create ProtoDash which can generate a dashboard from a proto file
Device SDK
- Custom Protobuff annotation for Mir System
- Added telemetry function to the SDK
Module SDK
- Add new set of events regarding telemetry
- Add stream subscriptions
Testing
- Integration test for the telemetry module
Improvements/Tech dett
- Project layout refactor
- Decoupling of storage and server handlers
-
rework how boiler template of app is made for services
- same tool for cli could be used for bootstrap of service
- change how init is used to become more main and have a run method
-
Set config in a mir folder instead of per apps
- where is the line between using code and a spec? maybe enforcing a spec is sufficient instead of creating a maze of code abstraction for it -
- merge tui and cli into one binary
Ergonomics
- Create tmuxifier layouts in repo
- Make command for buf generate
v0.3.0 Command Module
The main goal of this version is the create the Commanding module as well as the supporting tooling and visualization
Features
Server Module
- Can define commands in protobuf schema
- Send command with Targets and JSON payload to target multiple devices
CLI/TUI
- Explore commands
- Be able to send commands via window with parameters based on the schema
Device SDK
- Custom Protobuff annotation for Mir System for commands
- Added commands handler to the SDK
Module SDK
- Add new set of events regarding commands
Testing
- Integration test for the command module
Improvements/Tech dett
Ergonomics
Testing
Improvements/Tech dett
Ergonomics
v0.4.0 Twin Module
Twin module to tackle the configuration mangement of devices. Flow of desired properties set by the user and reported properties set by the device.
Features
Server Module
- Can define properties in protobuf schema or maybe JSON is better since it will be hard with the twin template
CLI/TUI
- Can update and list configurations
Device SDK
- Custom Protobuff annotation for Mir System for properties
- Add desired properties handler to the SDK
- Add reported properties function
Module SDK
- Add new set of events regarding propeties
- create the twin template features
Testing
Improvements/Tech dett
Ergonmics
v0.5.0 DeviceSDK and ModuleSDK Improvements
The goal is too focus on SDK requirements or QOL that are not bound to a module
Features
Device SDK
- Add local storage for message in case of network outage
- Add the ability to publish to custom routes
- Add autoprovisioner of device id such as mac address
Module SDK
- Add the ability to subscribe to custome route
- Look at replacing SurrealDB with NatsIO Keyvalue or Badger
Testing
Improvements/Tech dett
Ergonmics
v0.6.0
The main goal of this version is to focus on the deployment and production toolings such as pipeline and conternarization
Features
Testing
- Add env var for integration test if run
Improvements/Tech dett
Ergonomics
DevOps
-
Containerize all services
-
Provide template container for sdk
-
Create Docker Compose for each and one all together
-
Create set of pipelines for unit and integration testing
-
Pipeline to release binaries of each interfaces or services
-
Pipeline for publishing containers
-
Make sure the sdks are available via go get/install
v0.7.0 Swarm
Create a utility tool to virtualize devices. This will be used for extensive integration and performance testing to increase reliability and performance
Mir