* fix(errors): Fix nil pointer error in NewSDKError
In the NewSDKError function, a check is added to handle the case where the input error is nil. Previously, if the error was nil, the function would panic. This fix ensures that the function returns nil instead of panicking when the input error is nil.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* feat(sdk-mock): Add mock functions for SDK testing
This commit adds a set of mock functions for the software development kit (SDK) to facilitate testing. These functions simulate the behavior of the actual functions in the SDK and have defined input parameters and return values. The code also includes error handling logic and checks for different return types.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* test: use sdk mocked interface
* feat(workflow): check for generated files
The commit modifies the check-proto GitHub workflow to check-generated files. It checks for changes in specific paths and verifies the protobuf files and generated mocks. The code also includes checking if the SDK mock is up to date, installing a tool, generating mocks, and displaying an error message if the mocks are different. The tool we use is: https://github.com/vektra/mockery.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* feat(mocks): Add copyright notice to mocks.go
Added a copyright notice to the mocks.go file in the pkg/sdk/go directory for clarity and attribution.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* feat(build): Add target for generating mocks
Added a new target to the Makefile for generating mocks using the mockery tool. The target checks if the mockery tool is installed and then runs the "go generate" command to generate mocks for the codebase..
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* Improve error messages in check-generated-files.yml
In this commit, I have made changes to the check-generated-files.yml file. Specifically, I have updated the error messages to provide more information about the issue. Instead of simply stating that the proto file and generated Go file are out of sync, the error message now includes a more detailed explanation and a suggestion for resolving the issue. Additionally, I have also added error messages for the generated mocks for the SDK. These error messages provide information about the sync issue and suggest running the necessary commands to resolve it. This commit aims to improve the clarity of error messages and help developers quickly identify and fix sync issues in the codebase.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
---------
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* chore(license): update copyright notices
Add CI check for non go files to check that the files contain a license
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* fix(ci): log failed files
When the CI fails during check for license header, log the failed file to console so that someone can check on the actual file. Also simplify the grep check to make it more human readable and understandable
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
---------
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* Refactor message broker implementation
This commit refactors the Nats message broker implementation to include pubsub options. These changes include:
- Adding `Option` func that takes in the URL and prefix
- Implement `WithStream` option which can create a different stream for nats stream
- Implement `WithExchange` option which can create a different exchaange for rabbitmq channel
- Implement `WithPrefix` option which allows to you change the publisher prefix
These changes improve the organization and readability of the codebase.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Use redis URL to configure username, password and db
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Make event store configurable on dev deployment
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Fix adds options to messaging `PubSub` interface
Adding options to PubSub interface allows the use of messaging
package to do es.
The changes in this commit ensure that the code handles errors
properly and provides more informative error messages when
encountering unexpected types.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Add NATS event publisher implementation
This commit adds the implementation of the NATS event publisher.
The NATS event publisher is responsible for publishing events
to a NATS messaging system. It uses the `messaging`
package to interact with the messaging system.
The implementation includes the following features:
- Publishing events to NATS using the `Publish` method.
- Marshaling events to JSON before publishing.
- Setting the message subject and headers based on the event.
- Handling errors during publishing.
This implementation is built with the `!rabbitmq` build tag,
which means it will only be compiled if the `rabbitmq` build tag
is not present.
The NATS event publisher is part of the Mainflux events package
and provides support for the Mainflux NATS events source service functionality.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Add RabbitMQ event publisher implementation
This commit adds the implementation of the RabbitMQ event publisher.
The RabbitMQ event publisher is responsible for publishing events
to a RabbitMQ messaging system. It uses the `messaging`
package to interact with the messaging system.
The implementation includes the following features:
- Publishing events to RabbitMQ using the `Publish` method.
- Marshaling events to JSON before publishing.
- Setting the message subject and headers based on the event.
- Handling errors during publishing.
This implementation is built with the `rabbitmq` build tag,
which means it will only be compiled if the `rabbitmq` build tag
is present.
The RabbitMQ event publisher is part of the Mainflux events package
and provides support for the Mainflux RabbitMQ events source service functionality.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Add configurable implementation for events store
This commit adds a new file `brokers_*.go` which contains the implementation for the different event store. The file includes functions for creating a new publisher and subscriber using different es store.
This commit also includes an `init` function that logs a message indicating that the binary was built using the respective package as the events store.
The purpose of this commit is to add support for alternative events store.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Fix build flags
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Refactor Makefile and Semaphore configuration
The Makefile has been refactored to include the `MF_ES_STORE_TYPE` tag in the `go build` command. Additionally, the Semaphore configuration has been updated to include a new task for compiling with Redis as the broker type.
This commit addresses the need to compile the codebase with Redis as the event store type and includes the necessary changes in the Makefile and Semaphore configuration.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Reduced due to memory on testing
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Fix tests for es
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Fix grammar
Co-authored-by: Sammy Kerata Oina <44265300+SammyOina@users.noreply.github.com>
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Fix linting
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* feat(docker): update environment variables for message broker
The commit updates the environment variable `MF_ES_STORE_TYPE` in the `docker/.env` file. The variable is changed from `${MF_MQTT_BROKER_TYPE}` to `${MF_MESSAGE_BROKER_TYPE}` to accurately reflect the type of message broker being used. This change ensures that the correct message broker is configured for the Event Store.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* feat: Update docker environment variables
- Removed the unused MF_ES_URL variable in the .env file
- Updated the MF_ES_STORE_TYPE and MF_ES_STORE_URL variables in the .env file to match the MF_MESSAGE_BROKER_TYPE and MF_NATS_URL variables respectively
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Fix after rebase
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Add godocs for option parameters for brokers
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* pass by value exchange and prefix names
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* Rename option functions
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* move variables to constants
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
* fix: option example comment
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
---------
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
Co-authored-by: Sammy Kerata Oina <44265300+SammyOina@users.noreply.github.com>
* Uncomment all code
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* feat(linters): add godox and dupword linters
This commit adds two new linters, godox and dupword, to the linter configuration file (.golangci.yml). The godox linter checks for occurrences of TODO and FIXME comments in the codebase, helping to ensure that these comments are not forgotten or left unresolved. The dupword linter detects duplicate words in comments and strings, which can be a sign of typos or errors. These new linters will enhance the code quality and maintainability of the project.
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* uncomment tests in /pkg/sdk/go/tokens_test.go
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
---------
Signed-off-by: Rodney Osodo <28790446+rodneyosodo@users.noreply.github.com>
* Add event sourcing package
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Move producer to es package
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Use redis URL to configure username, password and db
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Change the redis subscriber interface
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Clean up publisher inaterface
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Update redis version
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Add tests
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Rename factory functions of events store
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Rename redis package to events package
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Remove unnecessary alias on redis event store
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Minor cosmetic changes
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Remove stream length from factory function
Set the default stream length to 1e9 in the events package. This is
because the stream length is not a required parameter in the factory
function. This commit also removes the stream length from the factory
function.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Remove group Name on subscribing
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Refactor package consumer to reflect changes in service name
The package consumer in the bootstrap/events/consumer/doc.go file has been modified to reflect the changes in the service name. The service name has been updated from "Things" to "Bootstrap". This change ensures that the package accurately represents the events consumer for the Bootstrap service.
This commit modifies the package consumer in the bootstrap/events/consumer/doc.go file to update the service name from "Things" to "Bootstrap". This change ensures that the package accurately represents the events consumer for the Bootstrap service.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Refactor main to remove go routines
Remove go routines from main when subscribing to events. This is because
the event handlers are already running in their own go routines.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Move cache to seperate package
This commit moves the cache package to a seperate package. This is
because the cache package is not the same as events package. The cache
package is used to store the data in memory while the events package is
used to send events to the event bus.
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
* Make startPublishingRoutine private
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
---------
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>