MCPcopy Index your code
hub / github.com/allegro/hermes

github.com/allegro/hermes @hermes-2.21.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release hermes-2.21.2 ↗ · + Follow
13,518 symbols 42,192 edges 1,762 files 596 documented · 4%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Note for users 📣

We are reorganizing the project and we disabled the Issues tab. Please use discussions from now on.

Hermes

Build Status Documentation Status Maven Central

Hermes is an asynchronous message broker built on top of Kafka. We provide reliable, fault tolerant REST interface for message publishing and adaptive push mechanisms for message sending.

See our 10-minute getting started guide with Docker: Getting started

Visit our page: hermes.allegro.tech

See our full documentation: http://hermes-pubsub.readthedocs.org/en/latest/

If you have any question or idea regarding the project, please feel free to reach us out using GitHub discussions.

License

hermes is published under Apache License 2.0.

Development

Code formatting

For code formatting we use google-java-format. Following steps are required for optimal dev experience in IJ:

  1. Download google-java-format plugin
  2. Set custom VM options required for IJ plugin
  3. Go to Settings > google-java-format and click Enable google java-format (should be checked by default)
  4. Go to Settings > Tools > Actions on Save and enable Reformat code and Optimize imports for Java files

Each save should automatically trigger reformat.

If you want to debug the CLI check on macOS:

wget https://github.com/google/google-java-format/releases/download/v1.23.0/google-java-format_darwin-arm64
chmod a+x google-java-format_darwin-arm64
chmod a+x .github/scripts/check-google-java-format.sh
./.github/scripts/check-google-java-format.sh                                                                                                                     

or if you are on Linux:

wget https://github.com/google/google-java-format/releases/download/v1.23.0/google-java-format_linux-x86-64
chmod a+x google-java-format_linux-x86-64
chmod a+x .github/scripts/check-google-java-format.sh
./.github/scripts/check-google-java-format.sh        

You can also run the following command to fix formatting for the whole project:

./.github/scripts/check-google-java-format.sh --fix

Running integration tests with Podman (macOS)

Integration and slow integration tests use Testcontainers and require a Docker-compatible runtime. On macOS with Podman, export the following variables before running any test that requires containers:

export DOCKER_HOST="unix://$(podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}')"
export TESTCONTAINERS_RYUK_DISABLED=true

Then run tests as usual, e.g.:

./gradlew slowIntegrationTest
./gradlew integrationTest

Podman VM resources: slowIntegrationTest spawns many containers concurrently. Configure your Podman VM with at least 8 CPUs and 10 GB of memory or container startup may fail unexpectedly:

shell podman machine stop podman machine set --cpus 8 --memory 10240 podman machine start

Test reports

Test reports are available at https://allegro.github.io/hermes/allure, and performance test results can be found at https://allegro.github.io/hermes/performance/.

Extension points exported contracts — how you extend this code

LogSchemaAware (Interface)
(no doc) [9 implementers]
hermes-tracker-elasticsearch/src/main/java/pl/allegro/tech/hermes/tracker/elasticsearch/LogSchemaAware.java
HermesTestApp (Interface)
(no doc) [6 implementers]
hermes-test-helper/src/main/java/pl/allegro/tech/hermes/test/helper/environment/HermesTestApp.java
BrokerMessageProducer (Interface)
(no doc) [25 implementers]
hermes-frontend/src/main/java/pl/allegro/tech/hermes/frontend/producer/BrokerMessageProducer.java
RawSchemaClient (Interface)
(no doc) [6 implementers]
hermes-schema/src/main/java/pl/allegro/tech/hermes/schema/RawSchemaClient.java
Anonymizable (Interface)
(no doc) [7 implementers]
hermes-api/src/main/java/pl/allegro/tech/hermes/api/Anonymizable.java
HermesSender (Interface)
(no doc) [25 implementers]
hermes-client/src/main/java/pl/allegro/tech/hermes/client/HermesSender.java
NullablePrimitivesDoubleOrBuilder (Interface)
(no doc) [16 implementers]
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/NDoubleProto.java
Matcher (Interface)
(no doc) [17 implementers]
hermes-management/src/main/java/pl/allegro/tech/hermes/management/infrastructure/query/matcher/Matcher.java

Core symbols most depended-on inside this repo

getQualifiedName
called by 518
hermes-api/src/main/java/pl/allegro/tech/hermes/api/Topic.java
get
called by 368
hermes-consumers/src/main/java/pl/allegro/tech/hermes/consumers/consumer/rate/maxrate/MaxRateProvider.java
of
called by 365
hermes-consumers/src/main/java/pl/allegro/tech/hermes/consumers/consumer/sender/MessageSendingResult.java
render
called by 334
hermes-console/src/utils/test-utils.ts
isEqualTo
called by 305
hermes-consumers/src/main/java/pl/allegro/tech/hermes/consumers/supervisor/workload/weighted/Weight.java
put
called by 303
hermes-common/src/main/java/pl/allegro/tech/hermes/common/cache/queue/LinkedHashSetBlockingQueue.java
createTopic
called by 256
hermes-common/src/main/java/pl/allegro/tech/hermes/domain/topic/TopicRepository.java
get
called by 245
hermes-management/src/main/java/pl/allegro/tech/hermes/management/domain/owner/OwnerSource.java

Shape

Method 11,085
Class 1,573
Interface 440
Function 362
Enum 58

Languages

Java96%
TypeScript4%
Python1%

Modules by API surface

hermes-management/src/main/java/pl/allegro/tech/hermes/management/config/console/ConsoleProperties.java178 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordStringProto.java109 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordInt64Proto.java105 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordInt32Proto.java105 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordFloatProto.java105 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordDoubleProto.java105 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordBytesProto.java105 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/RecordBoolProto.java105 symbols
hermes-console/src/mocks/handlers.ts87 symbols
hermes-test-helper/src/main/java/pl/allegro/tech/hermes/test/helper/client/integration/HermesTestClient.java81 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/StringToStringProto.java75 symbols
hermes-consumers/src/test/java/pl/allegro/tech/hermes/consumers/consumer/sender/googlebigquery/avro/descriptor/StringToInt64Proto.java75 symbols

For agents

$ claude mcp add hermes \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact