Projects consists of gRPC service called pb
and it's client API called client-api
.
Go version required >= 1.12 (go modules have been used). First run gRPC PortDomainService:
cd pds && make run
Then run Client-API service:
cp ports.json client-api/ && cd client-api && make run
docker-compose up -d
After that you should be able to access localhost:8080
and check
out endpoints of Client-API.
Code for Client-API is located here.
This service parses json file and creates entities which
then will be sent to pds
over gRPC protocol.
In current implementation we create io.Reader
from
opening the file and calling bufio.NewReader
onto the
file handler.
Then we use Go's Decode Stream API
to unmarshal our entities by chunks.
We assume that io.Reader
points to a valid JSON file
and read first json.Delim
token. Then we
read token once more to get entity's CODE
from it.
We wouldn't have to do that if JSON file was in format like that:
[
{"code": "XXXX", "alias": "XX"},
{"code": "XXXX", "alias": "XX"}
]
Then we execute callback if unmarshalling into an entity was successfull. In our case, we send it to PDB.
Client package is responsible for communication between client-api and pdb. This client just implements methods of PDServiceClient.
It's also possible to bootstrap jaeger for full overview of client-api performance! To do so, just define these env variable which will point to JAEGER host.
JAEGER_AGENT_PORT=6831
JAEGER_SAMPLER_TYPE=const
JAEGER_SAMPLER_PARAM=1
JAEGER_AGENT_HOST=localhost
Client-API also has HTTP interface to communicate with PDS:
URL | Description |
---|---|
/ping | Health check route. Could be used as a mark that application has successfully started. |
/ports | List all ports which have been successfully parsed and inserted into datalayer of PDS. |
/ports/{CODE} | Find and show one Port by given Code (Code should be in XXXXX format). |
/ports/{CODE}/delete | Deletes Port with given Code from datalayer in PDS. |
Code for PDS is located here. This service receives data from Client-API and uses datalayer to manage it. As datalayer we use InMemoryStorage.
To regenerate protobuf code please run make generate
(assuming you have protoc-gen-go installed).