Anytype Heart
Middleware library for Anytype.
Build from Source
- Install Golang 1.19.x from here or using preferred package manager
- Follow instructions below for the target systems
desktop client
Build and install for themake install-dev-js
— build the local server and copy it and protobuf binding into ../anytype-ts
Parameters:
ANY_SYNC_NETWORK=/path/to/network.yml
— build using self-hosted network configuration
Build for iOS
Instructions to set up environment for iOS: here
-
make build-ios
to build the framework intodist/ios
folderParameters:
ANY_SYNC_NETWORK=/path/to/network.yml
— build using self-hosted network configuration
-
make protos-swift
to generate swift protobuf bindings intodist/ios/pb
Build for Android
Instructions to setup environment for Android: here
-
make build-android
to build the library intodist/android
folderParameters:
ANY_SYNC_NETWORK=/path/to/network.yml
— build using self-hosted network configuration
-
make protos-java
to generate java protobuf bindings intodist/android/pb
Rebuild protobuf generated files
First, you need to install protobuf pkg using your preferred package manager.
This repo uses custom protoc located at anyproto/protobuf. It adds gomobile
plugin and some env-controlled options to control the generated code style.
This protobuf generator will replace your protoc
binary, BTW it doesn't have any breaking changes for other protobuf and grpc code
You can override the binary with a simple command:
make setup-protoc
Then you can easily regenerate proto files:
make protos
Run tests
Install dependencies for running tests and generate mocks:
make test-deps
GO test:
make test
You'll need to install latest (at least clang 15)
brew install llvm
echo 'export PATH="/<homebrew location>/llvm/bin:$PATH"' >> ~/.zshrc
Integration tests
First you need to start a docker container via docker-compose:
export ANYTYPE_TEST_GRPC_PORT=31088
docker-compose up -d
Then you can run the basic integration tests:
make test-integration
Run local gRPC server to debug
make setup-protoc
Commands:
make run-server
- builds proto files for grpc server, builds the binary and runs itmake build-server
- builds proto files for grpc server and builds the binary intodist/server
If you want to change the default port(9999):
ANYTYPE_GRPC_ADDR=127.0.0.1:8888 make run-debug
Useful tools for debug
Debug server
Use env var ANYDEBUG=address to enable debugging HTTP server. For example: ANYDEBUG=:6061
will start debug server on port 6061
You can find all endpoints in /debug
page. For example: http://localhost:6061/debug
gRPC logging
In order to log mw gRPC requests/responses use ANYTYPE_GRPC_LOG
env var:
ANYTYPE_LOG_LEVEL="grpc=DEBUG" ANYTYPE_GRPC_LOG=1
- log only method namesANYTYPE_LOG_LEVEL="grpc=DEBUG" ANYTYPE_GRPC_LOG=2
- log method names + payloads for commandsANYTYPE_LOG_LEVEL="grpc=DEBUG" ANYTYPE_GRPC_LOG=2
- log method names + payloads for commands&events
gRPC tracing
- Run jaeger UI on the local machine:
docker run --rm -d -p6832:6832/udp -p6831:6831/udp -p16686:16686 -p5778:5778 -p5775:5775/udp jaegertracing/all-in-one:latest
- Run mw with
ANYTYPE_GRPC_TRACE
env var:
ANYTYPE_GRPC_TRACE=1
- log only method names/timesANYTYPE_GRPC_TRACE=2
- log method names + payloads for commandsANYTYPE_GRPC_TRACE=2
- log method names + payloads for commands&events
- Open Jaeger UI at http://localhost:16686
Debug tree
- You can use
cmd/debugtree.go
to perform different operations with tree exported in zip archive (rpc DebugTree
) - The usage looks like this
go run debugtree.go -j -t -f [path to zip archive]
where-t
tells the cmd to generate tree graph view and-j
- to generate json representation of the tree (i.e. data in each individual block) - You can use flag
-r
to build the tree from its root, that way you will see all the changes in the tree, and not only those from the common snapshot - For more info please check the command usage in
debugtree.go
GUI
https://github.com/uw-labs/bloomrpc
HowTo: Set the import path to the middleware root, then select commands.proto file
CLI
https://github.com/njpatel/grpcc
Running with prometheus and grafana
cd metrics/docker
– cd into folder with docker-compose filedocker-compose up
- run the prometheus/grafana- use
ANYTYPE_PROM=0.0.0.0:9094
when running middleware to enable metrics collection. Client commands metrics available only in gRPC mode - open http://127.0.0.1:3000 to view collected metrics in Grafana. You can find several dashboards there:
- MW internal middleware metrics such as changes, added and created threads histograms
- MW commands server metrics for clients commands. Works only in grpc-server mode
Install local deps (Mac)
As of 16.01.23 last protobuf version (21.12) broke the JS plugin support, so you can use the v3 branch:
brew install protobuf@3
To generate Swift protobuf:
brew install swift-protobuf
Install local deps (Debian-Ubuntu)
We need to have protoc binary (3.x version) and libprotoc headers in orderto build the grpc-web plugin
apt install protobuf-compiler libprotoc-dev
Contribution
Thank you for your desire to develop Anytype together.
Currently, we're not ready to accept PRs, but we will in the nearest future.
Follow us on Github and join the Contributors Community.
Made by Any — a Swiss association 🇨🇭
Licensed under Any Source Available License 1.0.