Initial Commit:
This commit is contained in:
3
README.rdoc
Normal file
3
README.rdoc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
= exception_handler
|
||||||
|
|
||||||
|
Description goes here
|
||||||
54
app/controllers/exceptionhandler_controller.rb
Normal file
54
app/controllers/exceptionhandler_controller.rb
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# exceptionhandler_controller.rb
|
||||||
|
# @date Feb. 15, 2012
|
||||||
|
# @author ricky barrette <rickbarrette@gmail.com>
|
||||||
|
# @author twenty codes <twentycodes@gmail.com>
|
||||||
|
#
|
||||||
|
# Copyright 2012 Rick Barrette
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# This controller class will handler incomming http requests containing new exception reports.
|
||||||
|
# When a new exception report is recieved, it will be compared to existing bug issues.
|
||||||
|
# If there is a match, the existing issue will be updated
|
||||||
|
# if not a new bug issue will be generated.
|
||||||
|
class ExceptionhandlerController < ApplicationController
|
||||||
|
unloadable
|
||||||
|
|
||||||
|
helper :exceptionhandler
|
||||||
|
include ExceptionhandlerHelper
|
||||||
|
|
||||||
|
def index
|
||||||
|
# @bug_id = Tracker.find_by_name("Bug").id
|
||||||
|
# @issues = Project.find_by_name(params[:app]).issues
|
||||||
|
# @custom_fields = CustomField
|
||||||
|
|
||||||
|
if params.size < 8
|
||||||
|
@output = "<strong> not enough args </strong>"
|
||||||
|
else
|
||||||
|
issue_id = check_for_existing_report
|
||||||
|
if issue_id > 0
|
||||||
|
# TODO update report
|
||||||
|
@output = issue_id
|
||||||
|
else
|
||||||
|
if file_new_report
|
||||||
|
@output = "new report filed"
|
||||||
|
else
|
||||||
|
@output = "Failed to file report"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue RuntimeError
|
||||||
|
@output = "ERROR"
|
||||||
|
end
|
||||||
|
|
||||||
|
end #EOF
|
||||||
98
app/helpers/exceptionhandler_helper.rb
Normal file
98
app/helpers/exceptionhandler_helper.rb
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# exceptionhandler_helper.rb
|
||||||
|
# @date Feb. 15, 2012
|
||||||
|
# @author ricky barrette <rickbarrette@gmail.com>
|
||||||
|
# @authro twenty codes <twentycodes@gmail.com>
|
||||||
|
#
|
||||||
|
# Copyright 2012 Rick Barrette
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
module ExceptionhandlerHelper
|
||||||
|
|
||||||
|
# Checks the database for exisiting reports
|
||||||
|
# @return id report is existing else 0
|
||||||
|
def check_for_existing_report
|
||||||
|
bug_id = Tracker.find_by_name("Bug").id
|
||||||
|
issues = Project.find_by_name(params[:app]).issues
|
||||||
|
issues.each do |issue|
|
||||||
|
if issue.tracker_id == bug_id
|
||||||
|
id = check_issue(issue)
|
||||||
|
if id > 0
|
||||||
|
return id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
# checks a specific issue agains params
|
||||||
|
# @return id of report if matching, else 0
|
||||||
|
def check_issue(issue)
|
||||||
|
if issue.subject == params[:msg]
|
||||||
|
# if issue.description == params[:description]
|
||||||
|
if check_issue_custom_values(issue)
|
||||||
|
return issue.id
|
||||||
|
end
|
||||||
|
# else
|
||||||
|
# return 0
|
||||||
|
# end
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#checks if this issue is a match for params based on it's custom values'
|
||||||
|
# @return true if matching
|
||||||
|
def check_issue_custom_values (issue)
|
||||||
|
count = 0
|
||||||
|
custom_fields = CustomField
|
||||||
|
issue.custom_field_values.each do |value|
|
||||||
|
case custom_fields.find_by_id(value.custom_field_id).name
|
||||||
|
when "Version"
|
||||||
|
if value.value == params[:version]
|
||||||
|
count += 1
|
||||||
|
end
|
||||||
|
when "StackTrace"
|
||||||
|
if value.value == params[:stackTrace]
|
||||||
|
count += 1
|
||||||
|
end
|
||||||
|
when "Cause"
|
||||||
|
if value.value == params[:cause]
|
||||||
|
count += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if count == 3
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# files a new exception report in redmine
|
||||||
|
# @return true if new report was filed
|
||||||
|
def file_new_report
|
||||||
|
issue = Issue.new
|
||||||
|
issue.tracker = Tracker.find_by_name("Bug")
|
||||||
|
issue.subject = params[:msg]
|
||||||
|
issue.description = params[:description]
|
||||||
|
issue.project = Project.find_by_name(params[:app])
|
||||||
|
issue.start_date = Time.now.localtime.strftime("%Y-%m-%d")
|
||||||
|
issue.priority = IssuePriority.find_by_name("Normal")
|
||||||
|
issue.author = User.find_by_mail("rickbarrette@gmail.com")
|
||||||
|
issue.status = IssueStatus.find_by_name("New")
|
||||||
|
|
||||||
|
issue.save
|
||||||
|
end
|
||||||
|
|
||||||
|
end #EOF
|
||||||
2
app/views/exceptionhandler/index.html.erb
Normal file
2
app/views/exceptionhandler/index.html.erb
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<h1>Exception Handler</h1>
|
||||||
|
<%= @output %>
|
||||||
3
config/locales/en.yml
Normal file
3
config/locales/en.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# English strings go here for Rails i18n
|
||||||
|
en:
|
||||||
|
my_label: "My label"
|
||||||
10
init.rb
Normal file
10
init.rb
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
require 'redmine'
|
||||||
|
|
||||||
|
Redmine::Plugin.register :redmine_exception_handler do
|
||||||
|
name 'Redmine Exception Handler plugin'
|
||||||
|
author 'Rick Barrette <rickbarrette@gmail.com>'
|
||||||
|
description 'This is an Exception Report Handler plugin for Redmine'
|
||||||
|
version '0.0.1'
|
||||||
|
url 'http://example.com/path/to/plugin'
|
||||||
|
author_url 'http://rickbarrette.dyndns.org'
|
||||||
|
end
|
||||||
2
lang/en.yml
Normal file
2
lang/en.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# English strings go here
|
||||||
|
my_label: "My label"
|
||||||
8
test/functional/exceptionhandler_controller_test.rb
Normal file
8
test/functional/exceptionhandler_controller_test.rb
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
require File.dirname(__FILE__) + '/../test_helper'
|
||||||
|
|
||||||
|
class ExceptionhandlerControllerTest < ActionController::TestCase
|
||||||
|
# Replace this with your real tests.
|
||||||
|
def test_truth
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
||||||
5
test/test_helper.rb
Normal file
5
test/test_helper.rb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Load the normal Rails helper
|
||||||
|
require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper')
|
||||||
|
|
||||||
|
# Ensure that we are using the temporary fixture path
|
||||||
|
Engines::Testing.set_fixture_path
|
||||||
Reference in New Issue
Block a user