README.md in fluent-plugin-protobuf-http-0.3.0 vs README.md in fluent-plugin-protobuf-http-0.3.1
- old
+ new
@@ -1,26 +1,26 @@
# fluent-plugin-protobuf-http
[![ci](https://github.com/iamazeem/fluent-plugin-protobuf-http/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/iamazeem/fluent-plugin-protobuf-http/actions/workflows/ci.yml)
-[![License: Apache](https://img.shields.io/badge/license-Apache-blue.svg?style=flat-square)](https://github.com/iamAzeem/fluent-plugin-protobuf-http/blob/master/LICENSE)
+[![License: Apache](https://img.shields.io/badge/license-Apache-darkgreen.svg?style=flat-square)](https://github.com/iamAzeem/fluent-plugin-protobuf-http/blob/master/LICENSE)
![GitHub release (latest by date)](https://img.shields.io/github/v/release/iamAzeem/fluent-plugin-protobuf-http?style=flat-square)
-[![RubyGems Downloads](https://img.shields.io/gem/dt/fluent-plugin-protobuf-http?color=blue&style=flat-square)](https://rubygems.org/gems/fluent-plugin-protobuf-http)
+[![RubyGems Downloads](https://img.shields.io/gem/dt/fluent-plugin-protobuf-http?style=flat-square)](https://rubygems.org/gems/fluent-plugin-protobuf-http)
+[![Buy Me a Coffee](https://img.shields.io/badge/Support-Buy%20Me%20A%20Coffee-orange.svg?style=flat-square)](https://www.buymeacoffee.com/iamazeem)
-![Lines of code](https://img.shields.io/tokei/lines/github/iamAzeem/fluent-plugin-protobuf-http?label=LOC&style=flat-square)
-![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/iamAzeem/fluent-plugin-protobuf-http?style=flat-square)
-![GitHub repo size](https://img.shields.io/github/repo-size/iamAzeem/fluent-plugin-protobuf-http?style=flat-square)
+## Overview
-[Fluentd](https://fluentd.org/) HTTP input plugin for Protocol Buffers.
+[Fluentd](https://fluentd.org/) HTTP input plugin for
+[Protocol Buffers](https://github.com/protocolbuffers/protobuf).
## Features
-* Automatic compilation of `.proto` files located in `proto_dir`
-* Incoming Format: Binary or JSON (`Content-Type`: `application/octet-stream` or
+- Automatic compilation of `.proto` files located in `proto_dir`
+- Incoming Format: Binary or JSON (`Content-Type`: `application/octet-stream` or
`application/json`)
-* Outgoing Format: Binary or JSON
-* Single and Batch message support
-* TLS Support with `<transport>` section and `https://` URL protocol prefix.
+- Outgoing Format: Binary or JSON
+- Single and Batch message support
+- TLS Support with `<transport>` section and `https://` URL protocol prefix.
For more details on TLS configuration, see this official
[example](https://docs.fluentd.org/plugin-helper-overview/api-plugin-helper-server#configuration-example).
## Installation
@@ -31,11 +31,11 @@
gem install fluent-plugin-protobuf-http
```
### Bundler
-Add following line to your Gemfile:
+Add the following line to your Gemfile:
```ruby
gem 'fluent-plugin-protobuf-http'
```
@@ -45,29 +45,29 @@
bundle
```
## Configuration
-* `bind` (string) (optional): The address to listen to.
- * Default: `0.0.0.0`
-* `port` (integer) (optional): The port to listen to.
- * Default: `8080`
-* `proto_dir` (string) (required): The directory path that contains the .proto files.
-* `in_mode` (enum) (optional): The mode of incoming (supported) events.
- * Modes: `binary`, `json`
- * Default: `binary`
-* `out_mode` (enum) (optional): The mode of outgoing (emitted) events.
- * Modes: `binary`, `json`
- * Default: `binary`
-* `tag` (string) (required): The tag for the event.
+- `bind` (string) (optional): The address to listen to.
+ - Default: `0.0.0.0`
+- `port` (integer) (optional): The port to listen to.
+ - Default: `8080`
+- `proto_dir` (string) (required): The directory path that contains the .proto files.
+- `in_mode` (enum) (optional): The mode of incoming (supported) events.
+ - Modes: `binary`, `json`
+ - Default: `binary`
+- `out_mode` (enum) (optional): The mode of outgoing (emitted) events.
+ - Modes: `binary`, `json`
+ - Default: `binary`
+- `tag` (string) (required): The tag for the event.
### `<transport>` section (optional) (single)
-* `protocol` (enum) (optional):
- * Protocols: `tcp`, `tls`
- * Default: `tcp`
- * For more details, see this official configuration
+- `protocol` (enum) (optional):
+ - Protocols: `tcp`, `tls`
+ - Default: `tcp`
+ - For more details, see this official configuration
[example](https://docs.fluentd.org/plugin-helper-overview/api-plugin-helper-server#configuration-example).
### Example
```text
@@ -148,12 +148,12 @@
string type = 1;
repeated Log batch = 2;
}
```
-IMPORTANT: The `Batch` message type is part of `log.proto`, it is not a separate
-file! You can choose any name for a batch message type.
+**IMPORTANT**: The `Batch` message type is part of `log.proto`, it is not a
+separate file! You can choose any name for a batch message type.
Here is the complete `log.proto` file:
```protobuf
syntax = "proto3";
@@ -261,13 +261,13 @@
<match debug.test>
@type stdout
</match>
```
-The incoming binary messages will be transformed to JSON for further consumption.
+The incoming binary messages will be converted to JSON for further consumption.
-### Single Message
+### Single Message Use-case
Test Parameters:
| input file | single message type |
|:----------:|:---------------------:|
@@ -295,14 +295,14 @@
2020-06-09 18:53:47 +0500 [info]: #0 [protobuf_http_input] [S] {binary} [127.0.0.1:41222, msgtype: service.logging.Log, size: 86 bytes]
2020-06-09 18:53:47.025638542 +0500 debug.test: {"message":"{\"context\":{\"timestamp\":\"2020-06-01T16:24:19Z\",\"hostOrIp\":\"192.168.xxx.xxx\",\"serviceName\":\"test\",\"user\":\"test\"},\"level\":\"INFO\",\"message\":\"This is a test log generated by [./log.rb].\"}"}
2020-06-09 18:53:47 +0500 [info]: #0 [protobuf_http_input] [S] {json} [127.0.0.1:41222, msgtype: service.logging.Log, size: 183 bytes]
```
-For sample Single message generation, see
-[this](https://github.com/iamAzeem/protobuf-log-sample).
+For generating sample Single messages, see
+https://github.com/iamAzeem/protobuf-log-sample.
-### Batch Message
+### Batch Message Use-case
Test Parameters:
| input file | batch message type | batch internal type | messages |
|:---------------:|:-----------------------:|:---------------------:|:--------:|
@@ -361,19 +361,48 @@
2020-06-09 19:07:09.738165527 +0500 debug.test: {"message":"{\"context\":{\"timestamp\":\"2020-06-08T17:27:05Z\",\"hostOrIp\":\"192.168.xxx.xxx\",\"serviceName\":\"test\",\"user\":\"test\"},\"level\":\"INFO\",\"message\":\"This is a test log generated by [./logbatch.rb].\"}"}
2020-06-09 19:07:09 +0500 [info]: #0 [protobuf_http_input] [B] {json} [127.0.0.1:41552, msgtype: service.logging.Batch] Batch received! [batch_type: service.logging.Log, batch_size: 5 messages]
```
For sample Batch message generation, see
-[this](https://gist.github.com/iamAzeem/a8a24092132e1741a76956192f2104cc).
+[this gist](https://gist.github.com/iamAzeem/a8a24092132e1741a76956192f2104cc).
+## CI Workflow
+
+The [CI workflow](ci..github/workflows/ci.yml) sets up the prerequisites. It
+builds and installs the plugin, and then runs the automated tests.
+
+To run tests locally, run:
+
+```shell
+bundle exec rake test
+```
+
+The [test](./test) directory contains the tests and the [input](./test/data)
+files.
+
+The code coverage is printed at the end using `simplecov`.
+
+## Known Issues
+
+- This plugin internally uses the HTTP server plugin
+ [helper](https://docs.fluentd.org/plugin-helper-overview/api-plugin-helper-http_server)
+ which has higher precedence for `async-http` over `webrick`. But,
+ [`webrick`](https://github.com/ruby/webrick) is required to run this. In an
+ environment where both are installed, `async-http` is automatically selected
+ causing runtime issues. To make this work, you need to uninstall `async-http`
+ i.e. `gem uninstall async-http`. See issue
+ [#10](https://github.com/iamazeem/fluent-plugin-protobuf-http/issues/10) for
+ more details where this was identified in Docker containers where both gems
+ were already installed.
+
## Contribute
-- Fork the project.
+- [Fork](https://github.com/iamazeem/fluent-plugin-protobuf-http/fork) the project.
- Check out the latest `main` branch.
-- Create a feature or bugfix branch from `main`.
+- Create a `feature` or `bugfix` branch from `main`.
- Commit and push your changes.
- Make sure to add and run tests locally: `bundle exec rake test`.
-- Run `rubocop` locally and fix all the lint warnings.
+- Run [Rubocop](https://github.com/rubocop/rubocop) and fix the lint errors.
- Submit the PR.
## License
[Apache 2.0](LICENSE)