A local-first synchronization engine written in Java, designed to prototype an industrial edge-to-cloud telemetry architecture.
⚠️ Transparency disclaimer: This project is based on an interview challenge provided by Gemini. The first 3 primary technologies used throughout the project were dictated by the challenge. Furthermore, during the development of this project, Gemini were only used to ask clarifying questions which is meant to mimick a real interview. They were not used to generate code (aside from generating default logback.xml file). They also also used for interface name suggestions (Ingestsuffix, etc). The dashboard design were also made by Gemini due to lack of UI/UX skills.
- The registration of edge nodes to the central server on boot.
- The registration request is validated prior to acceptance by sending a ping request via gRPC to the given edge node to confirm the validity of the provided address (host:port).
- After the registration period, when the central server restarts, the edge node can continue sending telemetries to the central server without re-registering itself.
- The transmission of incoming telemetry from edge nodes to the central server.
- If the connection from the edge node to the central server were severed, the telemetry are written to disk until the connection is reinstated.
- The transmission of configuration commands between edge nodes and the central server.
- The synchronization of central server's configuration with the edge node's configuration during the launch of edge node and config updates.
- The persistance of edge nodes' information to Redis.
- An informative dashboard with general and node-specfic metrics.
RPC (gRPC): facilitates communication between edge nodes and central server.Protobuf 3: introduces compact representation of domain data objects to minimize network usage.Redis: stores upcoming telemetry data in a stack until they are processed by the central serverMVStore: stores the ingested telemetry into disk during connection outage on the edge server.Javalin(Web Framework) +HTMX(AJAX) +JTE(Templating Engine): renders a functional dashboard with informative data.Mockito,AssertJandAwaitility: ensures that classes are behaving as expected
- The ability to modify node's config values at the dashboard
- We need more unit tests. We also need to introduce integration tests