Files
clocker-demo/README.md
2023-03-19 19:59:50 +01:00

2.7 KiB

Clocker

Sequence diagram

@startuml
participant FE as "Frontend" << React >>
participant Funnel as "Funnel" << Python >>
participant Hours as "ServeHours" << Go >>
participant Minutes as "ServeMinutes" << Go >>
participant Seconds as "ServeSeconds" << Go >>
participant Milliseconds as "ServeMilliseconds" << Go >>
participant CurrentTime as "ServeCurrentTime" << Rust >>

activate FE #hotpink
    FE -> FE: Load page
    FE -> Funnel: WS Connect

    loop #ivory
        activate Funnel #gold
            Funnel -> Hours: GetHours()
            activate Hours #skyblue
            Hours -> CurrentTime: GetCurrentTime()
            activate CurrentTime #sandybrown
            return HH:MM:SS.ms
            return HH

            Funnel -> Minutes: GetMinutes()
            activate Minutes #skyblue
            Minutes -> CurrentTime: GetCurrentTime()
            activate CurrentTime #sandybrown
            return HH:MM:SS.ms
            return MM

            Funnel -> Seconds: GetSeconds()
            activate Seconds #skyblue
            Seconds -> CurrentTime: GetCurrentTime()
            activate CurrentTime #sandybrown
            return HH:MM:SS.ms
            return SS

            Funnel -> Milliseconds: GetMilliseconds()
            activate Milliseconds #skyblue
            Milliseconds -> CurrentTime: GetCurrentTime()
            activate CurrentTime #sandybrown
            return HH:MM:SS.ms
            return ms

            Funnel -> FE: WS: Send formatted time
        deactivate Funnel
    end
deactivate FE

@enduml

Services

Service Language Port
Funnel Python -
ServeCurrentTime Rust 50000
ServeHours Go 50001
ServeMinutes Go 50002
ServeSeconds Go 50003
ServeMilliseconds Go 50004

Funnel

Requirements:

  • python 3.8+
  • grpcio
  • grpcio-tools

Install virtualenv and libs

cd src/funnel
virtualenv env
source env/bin/activate
pip install -r requirements.txt

Compile proto stubs:

cd src/funnel
make proto

Run service:

cd src/funnel
make run

Go services

gRPC Source

Install protobuf compiler

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

Rust services

Tonic

Tonic is a gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. This library was created to have first class support of async/await and to act as a core building block for production systems written in Rust.

Rust and gRPC: A complete guide