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

114 lines
2.7 KiB
Markdown

# Clocker
## Sequence diagram
```plantuml
@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
```sh
cd src/funnel
virtualenv env
source env/bin/activate
pip install -r requirements.txt
```
Compile proto stubs:
```sh
cd src/funnel
make proto
```
Run service:
```sh
cd src/funnel
make run
```
### Go services
[gRPC Source](https://github.com/grpc/grpc-go)
Install protobuf compiler
```sh
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](https://github.com/hyperium/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](https://blog.logrocket.com/rust-and-grpc-a-complete-guide/)