diff --git a/app/controllers/exceptions_controller.rb b/app/controllers/exceptions_controller.rb new file mode 100644 index 0000000..08111dd --- /dev/null +++ b/app/controllers/exceptions_controller.rb @@ -0,0 +1,9 @@ +class ExceptionsController < ApplicationController + def index + @pagy, @exceptions = pagy(ExceptionLog.order(id: :desc), items: 25) + end + + def show + @exception = ExceptionLog.find(params[:id]) + end +end diff --git a/app/javascript/styles/application.scss b/app/javascript/styles/application.scss index 4750858..c566b76 100644 --- a/app/javascript/styles/application.scss +++ b/app/javascript/styles/application.scss @@ -6,6 +6,7 @@ @import "yiff.media/home"; @import "yiff.rest/home"; @import "yiff.rocks/home"; +@import "exceptions"; div#notice { padding: 0.25em; @@ -51,3 +52,64 @@ body.c-application { .backtrace-line { list-style: none; } + +// Bootstrap does not have built in dark pagination +.pagy-bootstrap { + $gray-100: #f8f9fa; + $gray-600: #6c757d; + $gray-800: #343a40; + $pagination-focus-outline: 0; + $focus-ring-width: 0.25rem; + $focus-ring-opacity: 0.25; + $blue: #0d6efd; + $white: #fff; + $primary: $blue; + $focus-ring-color: rgba($primary, $focus-ring-opacity); + $focus-ring-blur: 0; + $focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width + $focus-ring-color; + $pagination-focus-box-shadow: $focus-ring-box-shadow; + + $pagination-dark-color: $gray-100; + $pagination-dark-bg: $gray-800; + $pagination-dark-border-color: $gray-600; + + $pagination-dark-hover-color: $pagination-dark-color; + $pagination-dark-hover-bg: $gray-600; + $pagination-dark-hover-border-color: $pagination-dark-border-color; + $component-active-color: $white; + $component-active-bg: $primary; + $pagination-active-color: $component-active-color; + $pagination-active-bg: $component-active-bg; + $pagination-active-border-color: $component-active-bg; + + .page-link { + color: $pagination-dark-color; + background-color: $pagination-dark-bg; + border-color: $pagination-dark-border-color; + + &:hover { + color: $pagination-dark-hover-color; + background-color: $pagination-dark-hover-bg; + border-color: $pagination-dark-hover-border-color; + } + + &:focus { + outline: $pagination-focus-outline; + box-shadow: $pagination-focus-box-shadow; + } + } + + .page-item { + &.active .page-link { + color: $pagination-active-color; + background-color: $pagination-active-bg; + border-color: $pagination-active-border-color; + } + + &.disabled .page-link { + background-color: $pagination-dark-bg; + border-color: $pagination-dark-border-color; + } + } +} diff --git a/app/javascript/styles/exceptions.scss b/app/javascript/styles/exceptions.scss new file mode 100644 index 0000000..20c8bf8 --- /dev/null +++ b/app/javascript/styles/exceptions.scss @@ -0,0 +1,12 @@ +body.c-exceptions { + background-color: #2C2F33; + color: #FFFDD0; + + a { + color: #FFF; + } +} + +.backtrace-line { + list-style: none; +} diff --git a/app/javascript/styles/yiff.rest/v2.scss b/app/javascript/styles/yiff.rest/v2.scss index 1a32f21..3e014bb 100644 --- a/app/javascript/styles/yiff.rest/v2.scss +++ b/app/javascript/styles/yiff.rest/v2.scss @@ -7,67 +7,6 @@ body.s-v2-yiff-rest { text-decoration: none; } - // Bootstrap does not have built in dark pagination - .pagy-bootstrap { - $gray-100: #f8f9fa; - $gray-600: #6c757d; - $gray-800: #343a40; - $pagination-focus-outline: 0; - $focus-ring-width: 0.25rem; - $focus-ring-opacity: 0.25; - $blue: #0d6efd; - $white: #fff; - $primary: $blue; - $focus-ring-color: rgba($primary, $focus-ring-opacity); - $focus-ring-blur: 0; - $focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width - $focus-ring-color; - $pagination-focus-box-shadow: $focus-ring-box-shadow; - - $pagination-dark-color: $gray-100; - $pagination-dark-bg: $gray-800; - $pagination-dark-border-color: $gray-600; - - $pagination-dark-hover-color: $pagination-dark-color; - $pagination-dark-hover-bg: $gray-600; - $pagination-dark-hover-border-color: $pagination-dark-border-color; - $component-active-color: $white; - $component-active-bg: $primary; - $pagination-active-color: $component-active-color; - $pagination-active-bg: $component-active-bg; - $pagination-active-border-color: $component-active-bg; - - .page-link { - color: $pagination-dark-color; - background-color: $pagination-dark-bg; - border-color: $pagination-dark-border-color; - - &:hover { - color: $pagination-dark-hover-color; - background-color: $pagination-dark-hover-bg; - border-color: $pagination-dark-hover-border-color; - } - - &:focus { - outline: $pagination-focus-outline; - box-shadow: $pagination-focus-box-shadow; - } - } - - .page-item { - &.active .page-link { - color: $pagination-active-color; - background-color: $pagination-active-bg; - border-color: $pagination-active-border-color; - } - - &.disabled .page-link { - background-color: $pagination-dark-bg; - border-color: $pagination-dark-border-color; - } - } - } - .category-list, .category-image-list { a { color: #ede660; diff --git a/app/logical/yiffyapi_error_codes.rb b/app/logical/yiffyapi_error_codes.rb index d83bc27..93a6fa7 100644 --- a/app/logical/yiffyapi_error_codes.rb +++ b/app/logical/yiffyapi_error_codes.rb @@ -30,11 +30,10 @@ class YiffyAPIErrorCodes METHOD_NOT_ALLOWED = new(1025, 405) # legacy codes that are spread out - # unused - IMAGES_INVALID_RESPONSE_TYPE = new(1023, nil) + IMAGES_INVALID_RESPONSE_TYPE = new(1023, nil) # unused IMAGES_CATEGORY_NOT_FOUND = new(1030, 404) - # unused - IMAGES_EMPTY_CATEGORY = new(1031, nil) + + IMAGES_EMPTY_CATEGORY = new(1031, nil) # unused IMAGES_NOT_FOUND = new(1040, 404) IMAGES_NO_RESULTS = new(1041, 400) IMAGES_AMOUNT_LT_ONE = new(1051, 400) diff --git a/app/models/api_image.rb b/app/models/api_image.rb index c761bb6..30af06b 100644 --- a/app/models/api_image.rb +++ b/app/models/api_image.rb @@ -35,7 +35,7 @@ class APIImage < ApplicationRecord invalidate_cache end - def file_header_info(file_path) + def file_header_info(file_path) File.open(file_path) do |bin| mime_type = Marcel::MimeType.for(bin) ext = case mime_type diff --git a/app/views/exceptions/index.html.erb b/app/views/exceptions/index.html.erb new file mode 100644 index 0000000..cb65856 --- /dev/null +++ b/app/views/exceptions/index.html.erb @@ -0,0 +1,30 @@ + + + + + + + + + + + + + <% @exceptions.each do |exception| %> + + + + + + + + + <% end %> +
Created AtCodeCommitController/ActionMessageStacktrace
<%= compact_time(exception.created_at) %><%= exception.code %><%= exception.version.present? ? link_to(exception.version, GitHelper.commit_url(exception.version)) : "Unknown" %><%= exception.extra_params.dig("params", "controller") %>/<%= exception.extra_params.dig("params", "action") %><%= truncate(exception.message, length: 50) %><%= link_to("View", exception_path(exception)) %>
+ + + diff --git a/app/views/exceptions/show.html.erb b/app/views/exceptions/show.html.erb new file mode 100644 index 0000000..cfe3846 --- /dev/null +++ b/app/views/exceptions/show.html.erb @@ -0,0 +1,23 @@ +
+
+

<%= @exception.class_name %>

+
<%= @exception.message %>
+
+
+ Error Code: <%= @exception.code %>
+ Created At: <%= compact_time @exception.created_at %>
+ Commit: <%= @exception.version %>
+ IP Address: <%= @exception.ip_addr %>
+
+
+ Extra Params: +
<%= JSON.pretty_generate(@exception.extra_params) %>
+ Stacktrace: +
<%= Rails.backtrace_cleaner.clean(@exception.trace.split("\n")).join("\n") %>
+ Raw Stacktrace: +
<%= @exception.trace %>
+
+ +<% content_for(:page_title) do %> + Exceptions - <%= @exception.code %> +<% end %> diff --git a/config/default_config.rb b/config/default_config.rb index 4c1f1c0..08b7063 100644 --- a/config/default_config.rb +++ b/config/default_config.rb @@ -264,6 +264,9 @@ module Websites def e621_apikey end + + def exceptions_domain + end end class EnvironmentConfiguration diff --git a/config/routes.rb b/config/routes.rb index 86480ac..146be4e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,6 +9,8 @@ Rails.application.routes.draw do extend YiffMediaRoutes extend YiffRestRoutes extend YiffRocksRoutes + extend OtherRoutes + get "up" => "rails/health#show", as: :rails_health_check get "/online", to: "application#online" diff --git a/config/routes/other_routes.rb b/config/routes/other_routes.rb new file mode 100644 index 0000000..a05ec12 --- /dev/null +++ b/config/routes/other_routes.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module OtherRoutes + def self.extended(router) + router.instance_exec do + constraints(DomainConstraint.new(Websites.config.exceptions_domain, "exceptions")) do + resources(:exceptions, only: %i[index show], path: "") + end + end + end +end