Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Telegram error logs #115

Merged
merged 2 commits into from
May 31, 2024
Merged

Telegram error logs #115

merged 2 commits into from
May 31, 2024

Conversation

akorchyn
Copy link
Collaborator

@akorchyn akorchyn commented May 31, 2024

@race-of-sloths

Summary by CodeRabbit

  • New Features

    • Introduced Telegram integration for logging events and sending messages to a Telegram chat.
    • Added environment variables for Telegram bot token and chat ID configuration.
  • Improvements

    • Enhanced message template variable naming for better clarity and consistency.
  • Logging

    • Added detailed logging messages for bot startup and shutdown events.

@akorchyn
Copy link
Collaborator Author

@coderabbitai review

@NEAR-DevHub NEAR-DevHub deleted a comment from coderabbitai bot May 31, 2024
Copy link

coderabbitai bot commented May 31, 2024

Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

coderabbitai bot commented May 31, 2024

Walkthrough

The recent updates introduce Telegram integration into the bot, allowing it to send messages to a specified chat. This involves adding environment variables for Telegram configuration, updating message templates, incorporating the reqwest library, and creating a new telegram module. The TelegramSubscriber struct handles tracing events and sends notifications to Telegram. Additionally, the bot's main setup now includes this new subscriber for enhanced logging capabilities.

Changes

File Change Summary
.env.example Added TELEGRAM_TOKEN and TELEGRAM_CHAT_ID variables.
Messages.toml Updated variable name from pr-author-username to pr_author_username in message templates.
bot/Cargo.toml Added reqwest dependency with workspace = true.
bot/src/api/mod.rs Introduced a new telegram module.
bot/src/api/telegram.rs Added TelegramSubscriber struct for handling tracing events and sending Telegram messages.
bot/src/main.rs Integrated telegram module and TelegramSubscriber into bot's logging setup.

Sequence Diagram(s) (Beta)

sequenceDiagram
    participant Bot as Bot
    participant TelegramSubscriber as TelegramSubscriber
    participant TelegramAPI as Telegram API

    Bot->>TelegramSubscriber: Initialize with bot_token and chat_id
    TelegramSubscriber->>TelegramAPI: Send message on event
    TelegramAPI-->>TelegramSubscriber: Acknowledge receipt
    TelegramSubscriber-->>Bot: Log event sent confirmation
Loading

Poem

In the land of code, where bots reside,
A new feature now takes stride.
Telegram whispers in the night,
Tracing logs with all its might.
With tokens and chats, messages flow,
Our bot's new powers now aglow.
Hooray for updates, cheers all around,
In the digital realm, new friends are found!


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@race-of-sloths
Copy link

race-of-sloths commented May 31, 2024

🎉 This pull request is now a part of the Race of Sloths🎉

Thank you @akorchyn for your contribution!

More info about the author - @akorchyn

sloth_stats

What is the Race of Sloths

Race of Sloths is a friendly competition where you can participate in challenges and compete with other open-source contributors within your normal workflow

For contributors:

  • Tag us inside your pull requests
  • Wait for the maintainer to review and score your pull request
  • Check out your position in the Leaderboard
  • Keep weekly and monthly streaks to reach higher positions
  • Boast your contributions with a dynamic picture of your Profile

For maintainers:

  • Score pull requests that participate in the Race of Sloths
  • Engage contributors with fair scoring and fast responses so they keep their streaks
  • Promote the Race to the point where the Race starts promoting you
  • Grow the community of your contributors

Feel free to check our website for additional details!

Bot commands
  • Include a PR: @race-of-sloths include to enter the Race with your PR
  • 🛑 Reject this PR: @race-of-sloths exclude to send this PR back to the drawing board.
  • Assign points: @race-of-sloths score [1/2/3/5/8/13] to award points based on your assessment.
  • 🔕 Pause us: @race-of-sloths pause to stop me on your repo.

Current status: waiting for scoring

Important

We're waiting for maintainer to score this pull request with @race-of-sloths score [0,1,2,3,5,8,13] command

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 6c9bd9f and bc6971a.

Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
Files selected for processing (6)
  • .env.example (1 hunks)
  • Messages.toml (1 hunks)
  • bot/Cargo.toml (1 hunks)
  • bot/src/api/mod.rs (1 hunks)
  • bot/src/api/telegram.rs (1 hunks)
  • bot/src/main.rs (4 hunks)
Files skipped from review due to trivial changes (4)
  • .env.example
  • Messages.toml
  • bot/Cargo.toml
  • bot/src/api/mod.rs
Additional comments not posted (4)
bot/src/api/telegram.rs (2)

6-8: The TelegramSubscriber struct is well-defined and appropriate for the intended functionality.


28-38: The initialization function for TelegramSubscriber is correctly implemented and effectively sets up the message sending task.

bot/src/main.rs (2)

25-26: The addition of telegram_token and telegram_chat_id to the Env struct is correctly implemented.


49-52: The integration of TelegramSubscriber into the application's logging system is correctly implemented.

Comment on lines +45 to +57
impl<S: Subscriber> tracing_subscriber::Layer<S> for TelegramSubscriber {
fn on_event(&self, event: &Event<'_>, _ctx: tracing_subscriber::layer::Context<'_, S>) {
let mut visitor = MessageVisitor::default();
event.record(&mut visitor);

let message = format!("{}", visitor);

let level = event.metadata().level();
if level <= &Level::WARN {
self.send_to_telegram(&message, level);
}
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding a comment explaining why only events with a level of WARN or higher are sent to Telegram.

+ // Send messages to Telegram only for warnings and more severe events
  if level <= &Level::WARN {
      self.send_to_telegram(&message, level);
  }
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
impl<S: Subscriber> tracing_subscriber::Layer<S> for TelegramSubscriber {
fn on_event(&self, event: &Event<'_>, _ctx: tracing_subscriber::layer::Context<'_, S>) {
let mut visitor = MessageVisitor::default();
event.record(&mut visitor);
let message = format!("{}", visitor);
let level = event.metadata().level();
if level <= &Level::WARN {
self.send_to_telegram(&message, level);
}
}
}
impl<S: Subscriber> tracing_subscriber::Layer<S> for TelegramSubscriber {
fn on_event(&self, event: &Event<'_>, _ctx: tracing_subscriber::layer::Context<'_, S>) {
let mut visitor = MessageVisitor::default();
event.record(&mut visitor);
let message = format!("{}", visitor);
let level = event.metadata().level();
// Send messages to Telegram only for warnings and more severe events
if level <= &Level::WARN {
self.send_to_telegram(&message, level);
}
}
}

Comment on lines +10 to +26
async fn sender_task(
mut reader: mpsc::UnboundedReceiver<(String, Level)>,
client: Client,
bot_token: String,
chat_id: String,
) {
while let Some((message, level)) = reader.recv().await {
let url = format!("https://api.telegram.org/bot{}/sendMessage", bot_token);
let message = format!("*{}*: `{message}`", level.as_str());
let params = [
("chat_id", chat_id.as_str()),
("text", &message),
("parse_mode", "MarkdownV2"),
];
let _ = client.post(&url).form(&params).send().await;
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider enhancing error handling for the HTTP request to Telegram. Currently, failures are silently ignored.

- let _ = client.post(&url).form(&params).send().await;
+ match client.post(&url).form(&params).send().await {
+     Ok(response) if response.status().is_success() => {},
+     Ok(response) => eprintln!("Failed to send message: Received HTTP {}", response.status()),
+     Err(e) => eprintln!("Failed to send message: {}", e),
+ }
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
async fn sender_task(
mut reader: mpsc::UnboundedReceiver<(String, Level)>,
client: Client,
bot_token: String,
chat_id: String,
) {
while let Some((message, level)) = reader.recv().await {
let url = format!("https://api.telegram.org/bot{}/sendMessage", bot_token);
let message = format!("*{}*: `{message}`", level.as_str());
let params = [
("chat_id", chat_id.as_str()),
("text", &message),
("parse_mode", "MarkdownV2"),
];
let _ = client.post(&url).form(&params).send().await;
}
}
async fn sender_task(
mut reader: mpsc::UnboundedReceiver<(String, Level)>,
client: Client,
bot_token: String,
chat_id: String,
) {
while let Some((message, level)) = reader.recv().await {
let url = format!("https://api.telegram.org/bot{}/sendMessage", bot_token);
let message = format!("*{}*: `{message}`", level.as_str());
let params = [
("chat_id", chat_id.as_str()),
("text", &message),
("parse_mode", "MarkdownV2"),
];
match client.post(&url).form(&params).send().await {
Ok(response) if response.status().is_success() => {},
Ok(response) => eprintln!("Failed to send message: Received HTTP {}", response.status()),
Err(e) => eprintln!("Failed to send message: {}", e),
}
}
}

@akorchyn akorchyn merged commit 7810b65 into main May 31, 2024
1 check passed
@akorchyn
Copy link
Collaborator Author

@race-of-sloths score 3

@race-of-sloths
Copy link

❌ Self-scoring is not permitted.

Let's keep it fair! 👍

@race-of-sloths
Copy link

🔄 The PR has been merged.

Important

This pull request is a part of the Race of Sloths and has not been scored yet. Scoring will close in 24 hours! 🕰️

@race-of-sloths
Copy link

✅ PR is finalized!

Your contribution is much appreciated with a final score of 0. Check out the updates in your profile! 🎊

@akorchyn akorchyn deleted the telegram-error-logs branch October 24, 2024 16:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants