mqtt-simulator's People
mqtt-simulator's Issues
API Update with only required fields
At present, User has to send all the Task details to update which may be not efficient in terms of Bandwidth, computation and latency.
To avoid this user just sends interested fields to update with primary identifier. API get's the task and update only requested fields.
If task is not available then user gets proper feedback
Setup scalafmt
Acceptance Criteria
- Code is formatted using scala format
** Techincal Details**
Plugin
Sub Tasks
- Use the Sbt plugin
- Create .scalafmt.conf file
- Apply it to code
Configure Prometheus metrics - Basic
Add sorting capability to the API
Seperate Thread Pool for DB
Check GreenPlum database
Add unit tests for DB
Test diff time zone scenarios, send with, without zones
Setup Hikaricp
Set Up Logging - Basic
Seperate Thread Pool for HTTP Layer
Set Up User Documentation
Plan the change Release and Changelog
When NoContent, NoResource etc
Add Pagination to API's
Deploy to GCP
Integrate Kibana
Investigate DB Projections
Integrate Kubernetes
Try Property based testing
Graceful Shut down of the service
Reproduce
Run command ./sbt run
locally and send kill signal.
Observed Behaviour
Exception:
Exception in thread "sbt-bg-threads-1" java.util.concurrent.RejectedExecutionException
at java.base/java.util.concurrent.ForkJoinPool.externalPush(ForkJoinPool.java:1880)
at java.base/java.util.concurrent.ForkJoinPool.externalSubmit(ForkJoinPool.java:1921)
at java.base/java.util.concurrent.ForkJoinPool.execute(ForkJoinPool.java:2453)
at scala.concurrent.impl.ExecutionContextImpl.execute(ExecutionContextImpl.scala:24)
at sbt.internal.BackgroundThreadPool$BackgroundRunnable.$anonfun$cleanup$1(DefaultBackgroundJobService.scala:390)
at sbt.internal.BackgroundThreadPool$BackgroundRunnable.$anonfun$cleanup$1$adapted(DefaultBackgroundJobService.scala:389)
at scala.collection.immutable.List.foreach(List.scala:392)
at sbt.internal.BackgroundThreadPool$BackgroundRunnable.cleanup(DefaultBackgroundJobService.scala:389)
at sbt.internal.BackgroundThreadPool$BackgroundRunnable.run(DefaultBackgroundJobService.scala:359)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Expected Behaviour
Service just shutdown without exception
Technical Details
https://doc.akka.io/docs/akka-http/current/server-side/graceful-termination.html
Add Search API
Seperate connection pool for Actors for MQTT communication
Update simulation definition returns 404 when no id
Initial Setup
Create basic http stubbed routes to check Akka Http and Scalatest integration for endpoints
Acceptance Criteria
- POST a simulation
- GET a simulation
- GET all simulations
- PATCH a simulation
- Delete a simulation
Schedule Simulation Definition
Prometheus Integration - Local
API CRUD operation with DB
Initial logic is implemented with an in-memory list. Replace it with Postgres database to persist simulation definitions.
Acceptance Criteria
- GET simulation
- GET simulation by id
- Update simulation definition
- Delete the simulation definition.
AsyncAPI - Initial Version
Update Simulation Definition with only provided fields
- Message
- EndAt: If no value then ignore it
- CreateAt: Ignore
- UpdateAt: Ignroe
Run simulator locally with Postgres containers
OpenAPI - Initial Version
Add OpenApi specification for simulation definition endpoints.
Acceptance Criteria
- Specification is added
Technical Details
Sub Tasks
- POST simulation definition
- GET all simulation definitions
- GET single simulation definition
- PATCH single simulation definition
- DELETE single simulation definition
Stream telemetry through HTTP POST API
Seperate Connection Pool for Http Clients to POST Telemetry
Add Test Coverage
Check Packt suite
Benchmarking - Basic
PureConfig
Build setup to generate docker image
Sbt task to generate docker image.
Acceptance Criteria
- Docker image is generated
Sub Task
- Add docker publish local support
GET /simulation/<id> should return 404
Slick & FlyWay basic setup
As a user, i should be able to manage simulation life cycle. Once i create simulation with required definition, simulation has to start. The status of the simulation is queried by API to view.
Acceptance Criteria
- Simulation definition is stored
- Simulation definition is retrieved
Technical Details
- Postgres is the storage
- Slick: Functional Relational Mapping
- FlyWay Migration
Sub Tasks
- Setup FlyWay
- Create initial evolution script
- Create relational mapping for simulation definition
- Update APIs to use DB rather than in memory implementation
Check return http codes of all the API's
When NoContent, NoResource etc
Check TableDrivenPropertyChecks
Grafana Integration - Local
Check OpenTracing
Add Docker swarm
Plan some aggregations for the API
Create Proper ErrorResponse
ErrorResponse:
- Error Code
- Error Message
- ???
Performance Benchmark Postgres queries
Add unit test for CRUD API's
Write tests for Akka Http routes
Acceptance Criteria
- Tests are added for routes
Technical Details
- Scalatest
- Akka Http test kit
- Mocito Scala: Idiomatic Syntax
Sub Tasks
- POST simulation definition
- GET all simultion definitions
- GET single simulation definition
- PATCH single simulation definition
- DELETE single simulation definition
Add streaming support from DB to API
More resource usage
check performance
check benchmarking
List down initial features
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.