solid_errors 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/solid_errors/errors_controller.rb +34 -0
- data/app/models/solid_errors/error.rb +22 -0
- data/app/models/solid_errors/occurrence.rb +21 -0
- data/app/models/solid_errors/record.rb +11 -0
- data/app/views/layouts/application.html.erb +987 -0
- data/app/views/solid_errors/errors/_actions.html.erb +12 -0
- data/app/views/solid_errors/errors/_error.html.erb +24 -0
- data/app/views/solid_errors/errors/index.html.erb +18 -0
- data/app/views/solid_errors/errors/show.html.erb +101 -0
- data/app/views/solid_errors/occurrences/_collection.html.erb +25 -0
- data/app/views/solid_errors/occurrences/_occurrence.html.erb +46 -0
- data/config/routes.rb +5 -0
- data/lib/solid_errors/backtrace.rb +48 -0
- data/lib/solid_errors/backtrace_line.rb +113 -0
- data/lib/solid_errors/engine.rb +23 -0
- data/lib/solid_errors/subscriber.rb +59 -0
- data/lib/solid_errors/version.rb +1 -1
- data/lib/solid_errors.rb +5 -2
- metadata +33 -11
- data/.standard.yml +0 -3
- data/CHANGELOG.md +0 -5
- data/CODE_OF_CONDUCT.md +0 -84
- data/Gemfile +0 -12
- data/LICENSE.txt +0 -21
- data/sig/solid_errors.rbs +0 -4
- data/solid_errors.gemspec +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 509ba91aaa45d6edaf9918a6f9d0de411e0870d4342f6aeaa41bbe6fea4b0610
|
4
|
+
data.tar.gz: 11745536969906ac0f57a1e473b69d5d005e856ab416b5a5a91eaceed6bdbdc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f80084195a84102dbabccc585486d1dd6754aa339d522d5d204ea1c3b6b63b7f0fe57a4f36cac9cfbcd9bb3b2dec85612d99c86506f651960ad6b667b1b58967
|
7
|
+
data.tar.gz: d5244b25271c162e7db7b2ec41634bf4d38c27a185e255ba8076973c63c68ab5a6dae5683933084a9cefb1edff06e1b03e61ab426e3915d5949e4f30699beb61
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module SolidErrors
|
2
|
+
class ErrorsController < ApplicationController
|
3
|
+
before_action :set_error, only: %i[ show update ]
|
4
|
+
|
5
|
+
# GET /errors
|
6
|
+
def index
|
7
|
+
@errors = Error.unresolved
|
8
|
+
.joins(:occurrences)
|
9
|
+
.select('errors.*, MAX(occurrences.created_at) AS recent_occurrence')
|
10
|
+
.group('errors.id')
|
11
|
+
.order('recent_occurrence DESC')
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET /errors/1
|
15
|
+
def show
|
16
|
+
end
|
17
|
+
|
18
|
+
# PATCH/PUT /errors/1
|
19
|
+
def update
|
20
|
+
@error.update!(error_params)
|
21
|
+
redirect_to errors_path, notice: "Error marked as resolved."
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
# Only allow a list of trusted parameters through.
|
26
|
+
def error_params
|
27
|
+
params.require(:error).permit(:resolved_at)
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_error
|
31
|
+
@error = Error.find(params[:id])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SolidErrors
|
2
|
+
class Error < Record
|
3
|
+
SEVERITY_TO_EMOJI = {
|
4
|
+
error: "🔥",
|
5
|
+
warning: "⚠️",
|
6
|
+
info: "ℹ️"
|
7
|
+
}
|
8
|
+
|
9
|
+
has_many :occurrences, class_name: "SolidErrors::Occurrence", dependent: :destroy
|
10
|
+
|
11
|
+
validates :exception_class, presence: true
|
12
|
+
validates :message, presence: true
|
13
|
+
validates :severity, presence: true
|
14
|
+
|
15
|
+
scope :resolved, -> { where.not(resolved_at: nil) }
|
16
|
+
scope :unresolved, -> { where(resolved_at: nil) }
|
17
|
+
|
18
|
+
def emoji
|
19
|
+
SEVERITY_TO_EMOJI[severity.to_sym]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module SolidErrors
|
2
|
+
class Occurrence < Record
|
3
|
+
belongs_to :error
|
4
|
+
|
5
|
+
# The parsed exception backtrace. Lines in this backtrace that are from installed gems
|
6
|
+
# have the base path for gem installs replaced by "[GEM_ROOT]", while those in the project
|
7
|
+
# have "[PROJECT_ROOT]".
|
8
|
+
# @return [Array<{:number, :file, :method => String}>]
|
9
|
+
def parsed_backtrace
|
10
|
+
return @parsed_backtrace if defined? @parsed_backtrace
|
11
|
+
|
12
|
+
@parsed_backtrace = parse_backtrace(backtrace.split("\n"))
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def parse_backtrace(backtrace)
|
18
|
+
Backtrace.parse(backtrace)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidErrors
|
4
|
+
class Record < ActiveRecord::Base
|
5
|
+
self.abstract_class = true
|
6
|
+
|
7
|
+
connects_to **SolidErrors.connects_to if SolidErrors.connects_to
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
ActiveSupport.run_load_hooks :solid_errors_record, SolidErrors::Record
|