OpBot is a Slack bot written in Go that interacts with the Signoz trace API to provide various functionalities, including searching for transactions based on user-provided tags. This bot is designed to help teams monitor and manage their operations more effectively by integrating with Slack and Signoz.
- Slack Integration: Interact with the bot directly from Slack.
- Signoz Integration: Search for transactions and traces using the Signoz API.
- Configuration Management: Easily manage configuration through YAML files.
- Metrics Handling: Integrated with metrics handling for better monitoring.
-
Clone the repository:
git clone https://github.com/synapsecns/sanguine.git cd sanguine/contrib/opbot
-
Install dependencies: Ensure you have Go installed (version 1.22.4 or later). Then, run:
go mod tidy
-
Build the bot:
go build -o opbot main.go
OpBot uses a YAML configuration file to manage its settings. The configuration file should be named config.yml
and placed in the same directory as the executable.
slack_bot_token: "your-slack-bot-token"
slack_app_token: "your-slack-app-token"
signoz_email: "your-signoz-email"
signoz_password: "your-signoz-password"
signoz_base_url: "https://signoz.example.com"
Tokens can be obtained here. When creating an app, you can copy and paste the manifest file to configure the app automatically.
slack_bot_token
: The bot token for your Slack bot.slack_app_token
: The app token for your Slack app.signoz_email
: The email address used to log in to Signoz.signoz_password
: The password used to log in to Signoz.signoz_base_url
: The base URL for the Signoz API instance (example: http://mysignoz )
-
Start the bot:
./opbot start --config config.yml
-
Interact with the bot in Slack:
- Use commands to search for transactions in Signoz.
- Example command:
/opbot search --tag key:value
cmd
: Contains the command line interface for the bot.config
: Provides functionality to read and write configuration files.botmd
: Contains the main bot server implementation.metadata
: Provides metadata services for the bot.signoz
: Contains the Signoz client for interacting with the Signoz API.
Feel free to reach out if you have any questions or need further assistance!
Certainly! I'll provide a step-by-step guide on how to add a new command to OpBot based on the information available in the provided code files.
-
Create a new command function In the
botmd/botmd.go
file, add a new method to theBot
struct. This method should return a*slacker.CommandDefinition
. For example:func (b *Bot) newCommand() *slacker.CommandDefinition { return &slacker.CommandDefinition{ Command: "your-command <argument>", Description: "Description of your command", Handler: func(botCtx slacker.BotContext, request slacker.Request, response slacker.ResponseWriter) { // Command logic goes here }, } }
-
Add the command to the bot In the
NewBot
function withinbotmd/botmd.go
, add your new command to theaddCommands
call:bot.addCommands( bot.traceCommand(), bot.rfqLookupCommand(), bot.rfqRefund(), bot.newCommand(), // Add your new command here )
-
Implement command logic In the
Handler
function of your command, implement the logic for your command. You can access bot resources likeb.signozClient
,b.rpcClient
, etc., to interact with different services. -
Add any necessary configuration If your command requires additional configuration, add the necessary fields to the
config.Config
struct in theconfig/config.go
file. -
Update the README Add information about your new command to the README.md file, including its usage and any new configuration options.
-
Test your command Rebuild the bot and test your new command in Slack to ensure it works as expected.