Files
gh-dapi-claude-code-marketp…/skills/bugsnag/bugsnag.rb
2025-11-29 18:17:37 +08:00

250 lines
8.5 KiB
Ruby
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env ruby
require_relative 'bugsnag_helper'
class BugsnagCLI
def initialize
@helper = BugsnagHelper.new
rescue StandardError => e
puts "❌ Ошибка инициализации: #{e.message}"
puts ""
puts "Убедитесь что установлены переменные окружения:"
puts "export BUGSNAG_DATA_API_KEY='your_api_key' # Обязательно для всех команд"
puts "export BUGSNAG_PROJECT_ID='your_project_id' # Обязательно только для команд работы с ошибками"
puts ""
puts "💡 Команды 'organizations' и 'projects' работают без BUGSNAG_PROJECT_ID"
exit 1
end
def run(args = [])
if args.empty?
puts show_help
return
end
command = args[0].downcase
case command
when 'list', 'errors', 'show', 'показать', 'список'
list_errors(args[1..-1])
when 'open', 'открыть', 'opened', 'открытые'
show_open_errors(args[1..-1])
when 'details', 'error', 'детали'
show_error_details(args[1])
when 'resolve', 'close', 'resolve-error', 'отметить', 'решить'
resolve_error(args[1])
when 'events', 'события'
show_events(args[1], args[2])
when 'analyze', 'analysis', 'анализ', 'проанализировать'
analyze_errors
when 'organizations', 'orgs', 'организации'
list_organizations
when 'projects', 'проекты'
list_projects
when 'comment', 'комментарий'
add_error_comment(args[1], args[2..-1].join(' '))
when 'comments', 'комментарии'
show_error_comments(args[1])
when 'help', 'помощь', 'h'
puts show_help
else
puts "❌ Неизвестная команда: #{command}"
puts show_help
end
rescue StandardError => e
puts "❌ Ошибка выполнения: #{e.message}"
end
private
def list_errors(options = [])
limit = extract_option('--limit', options) || 20
status = extract_option('--status', options)
severity = extract_option('--severity', options)
puts "📋 Получение списка ошибок..."
puts ""
result = @helper.list_errors(limit: limit.to_i, status: status, severity: severity)
puts result
end
def show_open_errors(options = [])
limit = extract_option('--limit', options) || 20
severity = extract_option('--severity', options)
puts "📋 Получение списка **открытых** ошибок..."
puts ""
result = @helper.list_errors(limit: limit.to_i, status: 'open', severity: severity)
puts result
end
def show_error_details(error_id)
unless error_id
puts "❌ Укажите ID ошибки"
puts "Пример: bugsnag-lookuper details 5f8a9b2c"
return
end
puts "🔍 Получение деталей ошибки #{error_id}..."
puts ""
result = @helper.get_error_details(error_id)
puts result
# Также покажем последние события
puts ""
puts "📊 **Последние события:**"
events_result = @helper.get_error_events(error_id, 3)
puts events_result
end
def resolve_error(error_id)
unless error_id
puts "❌ Укажите ID ошибки для пометки как выполненной"
puts "Пример: bugsnag-lookuper resolve 5f8a9b2c"
return
end
puts "🔄 Пометка ошибки #{error_id} как выполненной..."
result = @helper.resolve_error(error_id)
puts result
end
def show_events(error_id, limit = nil)
unless error_id
puts "❌ Укажите ID ошибки"
puts "Пример: bugsnag-lookuper events 5f8a9b2c 5"
return
end
event_limit = limit&.to_i || 10
puts "📊 Получение событий ошибки #{error_id} (лимит: #{event_limit})..."
puts ""
result = @helper.get_error_events(error_id, limit: event_limit)
puts result
end
def analyze_errors
puts "📈 Анализ ошибок в проекте..."
puts ""
result = @helper.analyze_errors
puts result
end
def list_organizations
puts "🏢 Получение списка организаций..."
puts ""
result = @helper.list_organizations
puts result
end
def list_projects
puts "📦 Получение списка проектов..."
puts ""
result = @helper.list_projects
puts result
end
def add_error_comment(error_id, message)
unless error_id && !message.empty?
puts "❌ Укажите ID ошибки и текст комментария"
puts "Пример: bugsnag.rb comment 5f8a9b2c 'Investigating this issue'"
return
end
puts "💬 Добавление комментария к ошибке #{error_id}..."
result = @helper.add_comment(error_id, message)
puts result
end
def show_error_comments(error_id)
unless error_id
puts "❌ Укажите ID ошибки"
puts "Пример: bugsnag.rb comments 5f8a9b2c"
return
end
puts "💬 Получение комментариев для ошибки #{error_id}..."
puts ""
result = @helper.list_comments(error_id)
puts result
end
def show_help
<<~HELP
🚀 **Bugsnag** - Инструмент для работы с Bugsnag API
**Использование:**
`skill: "bugsnag" "<команда> [аргументы]"`
**Команды:**
📋 **Просмотр ошибок:**
`list` / `show` / `показать` - Список всех ошибок
`open` / `открыть` / `открытые` - Только **открытые** ошибки
`list --limit 50` - Показать до 50 ошибок
`list --status open` - Только открытые ошибки
`list --severity error` - Только ошибки (не предупреждения)
🔍 **Детали ошибки:**
`details <error_id>` / `детали <id>` - Полная информация об ошибке
Пример: `details 5f8a9b2c`
**Управление статусами:**
`resolve <error_id>` / `resolve-error <id>` / `отметить <id>` - Отметить как выполненную
Пример: `resolve 5f8a9b2c`
📊 **События ошибки:**
`events <error_id> [limit]` / `события <id> [лимит]` - Показать события
Пример: `events 5f8a9b2c 5`
📈 **Анализ:**
`analyze` / `analysis` / `анализ` - Анализ паттернов ошибок
💬 **Комментарии:**
`comment <error_id> "message"` / `комментарий <id> "текст"` - Добавить комментарий
`comments <error_id>` / `комментарии <id>` - Показать все комментарии
🏢 **Организации:**
`organizations` / `orgs` / `организации` - Список всех организаций
📦 **Проекты:**
`projects` / `проекты` - Список всех проектов
**Справка:**
`help` / `помощь` / `h` - Показать эту справку
**Настройка:**
```bash
export BUGSNAG_DATA_API_KEY="your_api_key" # Обязательно для всех команд
export BUGSNAG_PROJECT_ID="your_project_id" # Обязательно для команд работы с ошибками
```
💡 **Важно:** Команды `organizations` и `projects` работают **БЕЗ** BUGSNAG_PROJECT_ID.
Используйте их для получения списка доступных проектов и их ID.
HELP
end
def extract_option(option_name, options)
index = options.find_index { |opt| opt.start_with?(option_name) }
return nil unless index
option = options[index]
value = nil
if option.include?('=')
value = option.split('=', 2)[1]
options.delete_at(index)
elsif options[index + 1] && !options[index + 1].start_with?('--')
value = options.delete_at(index + 1)
options.delete_at(index)
else
options.delete_at(index)
end
value
end
end
# Handle execution through MCP or direct CLI
cli = BugsnagCLI.new
cli.run(ARGV)