zgcp_toolkit 1.1.0 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -19
- data/lib/zgcp_toolkit.rb +1 -0
- data/lib/zgcp_toolkit/formatter/request.rb +101 -0
- data/lib/zgcp_toolkit/generators/templates/zgcp_toolkit.rb +5 -3
- data/lib/zgcp_toolkit/logger.rb +15 -48
- data/lib/zgcp_toolkit/version.rb +1 -1
- data/zgcp_toolkit.gemspec +1 -0
- metadata +18 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e1a9df2f0bcc6d3287fbe692e9e2c4fc9f6709302b3d6e43b6b5962e78571351
         | 
| 4 | 
            +
              data.tar.gz: 3253cdf248c707f9bd4c8e11c97d621fe224f12c80132bef53ec137f70f30780
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d43f0d91122f12bbe3e160bb57643705ab21d039c5be263d5da333da90e405f4d33b57ca15cc4268a6121b1c8c3fe8000180d71a465983a178cd812aa1aa24c3
         | 
| 7 | 
            +
              data.tar.gz: 32993c081275fb71b82b9e102b5dda2696781cda57b03d9527daa94ec5324867a81a07b5834190f3384869176262e6f7e2bcb83e622c5e4e533253c24f9e6f9e
         | 
    
        data/README.md
    CHANGED
    
    | @@ -6,6 +6,7 @@ Manage integration between Rails & Google Cloud services. | |
| 6 6 | 
             
            Add this line to your application's Gemfile:
         | 
| 7 7 |  | 
| 8 8 | 
             
            ```ruby
         | 
| 9 | 
            +
            gem 'stackdriver' # Stackdriver gem auto installs middlewares to catch errors if you are running a Rails app.
         | 
| 9 10 | 
             
            gem 'zgcp_toolkit'
         | 
| 10 11 | 
             
            ```
         | 
| 11 12 |  | 
| @@ -42,23 +43,10 @@ end | |
| 42 43 | 
             
            logger = ZgcpToolkit::Logger.new(:log_name)
         | 
| 43 44 | 
             
            logger.info("Heyyyyyy!")
         | 
| 44 45 | 
             
            logger.error(message: "Heyyyyy!", backtrace: ["line-1", "line-2"])
         | 
| 45 | 
            -
            logger.error(message: "Hello Bug !!", backtrace: ["line-1", "line-2"] | 
| 46 | 
            +
            logger.error(message: "Hello Bug !!", backtrace: ["line-1", "line-2"])
         | 
| 46 47 | 
             
            logger.warn("Hey hey nyc!")
         | 
| 47 48 | 
             
            ```
         | 
| 48 49 |  | 
| 49 | 
            -
            - Set `send_unexpected_error_to_slack` to `false` will delete `push_slack` key from unexpected error log.
         | 
| 50 | 
            -
             | 
| 51 | 
            -
            ```ruby
         | 
| 52 | 
            -
            namespace :test_log do 
         | 
| 53 | 
            -
              task do: :environment
         | 
| 54 | 
            -
                ZgcpToolkit::Logger.create(:log_name) do |logger|
         | 
| 55 | 
            -
                  logger.send_unexpected_error_to_slack = false
         | 
| 56 | 
            -
                  raise 'errors'
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
            end
         | 
| 60 | 
            -
            ```
         | 
| 61 | 
            -
             | 
| 62 50 | 
             
            ### Controller
         | 
| 63 51 |  | 
| 64 52 | 
             
            You can send controller errors to Google Cloud Loggings
         | 
| @@ -69,11 +57,8 @@ You can send controller errors to Google Cloud Loggings | |
| 69 57 | 
             
            rescue_from StandardError do |e|
         | 
| 70 58 | 
             
              raise e if Rails.env.development?
         | 
| 71 59 |  | 
| 72 | 
            -
               | 
| 73 | 
            -
               | 
| 74 | 
            -
             | 
| 75 | 
            -
              # If you want send notity to slack 
         | 
| 76 | 
            -
              # logger.error_request(e, request, push_slack: true)
         | 
| 60 | 
            +
              # Useful ENV information will also be sent along with the error
         | 
| 61 | 
            +
              ZgcpToolkit::Logger.report_error_request(e, request)
         | 
| 77 62 |  | 
| 78 63 | 
             
              head :internal_server_error
         | 
| 79 64 | 
             
            end
         | 
    
        data/lib/zgcp_toolkit.rb
    CHANGED
    
    
| @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            module ZgcpToolkit::Formatter
         | 
| 2 | 
            +
              class Request
         | 
| 3 | 
            +
                FILTERED_ENV_LIST = %w(
         | 
| 4 | 
            +
                  CONTENT_LENGTH
         | 
| 5 | 
            +
                  CONTENT_TYPE
         | 
| 6 | 
            +
                  HTTP_ACCEPT
         | 
| 7 | 
            +
                  HTTP_ACCEPT_ENCODING
         | 
| 8 | 
            +
                  HTTP_ACCEPT_LANGUAGE
         | 
| 9 | 
            +
                  HTTP_CACHE_CONTROL
         | 
| 10 | 
            +
                  HTTP_COOKIE
         | 
| 11 | 
            +
                  HTTP_HOST
         | 
| 12 | 
            +
                  HTTP_ORIGIN
         | 
| 13 | 
            +
                  HTTP_REFERER
         | 
| 14 | 
            +
                  HTTP_SEC_CH_UA
         | 
| 15 | 
            +
                  HTTP_SEC_CH_UA_MOBILE
         | 
| 16 | 
            +
                  HTTP_SEC_FETCH_DEST
         | 
| 17 | 
            +
                  HTTP_SEC_FETCH_MODE
         | 
| 18 | 
            +
                  HTTP_SEC_FETCH_SITE
         | 
| 19 | 
            +
                  HTTP_SEC_FETCH_USER
         | 
| 20 | 
            +
                  HTTP_UPGRADE_INSECURE_REQUESTS
         | 
| 21 | 
            +
                  HTTP_USER_AGENT
         | 
| 22 | 
            +
                  HTTP_VERSION
         | 
| 23 | 
            +
                  HTTP_VIA
         | 
| 24 | 
            +
                  HTTP_X_FORWARDED_FOR
         | 
| 25 | 
            +
                  HTTP_X_FORWARDED_PROTO
         | 
| 26 | 
            +
                  ORIGINAL_FULLPATH
         | 
| 27 | 
            +
                  ORIGINAL_SCRIPT_NAME
         | 
| 28 | 
            +
                  PATH_INFO
         | 
| 29 | 
            +
                  QUERY_STRING
         | 
| 30 | 
            +
                  REMOTE_ADDR
         | 
| 31 | 
            +
                  REMOTE_PORT
         | 
| 32 | 
            +
                  REQUEST_METHOD
         | 
| 33 | 
            +
                  REQUEST_URI
         | 
| 34 | 
            +
                  SERVER_NAME
         | 
| 35 | 
            +
                  SERVER_PORT
         | 
| 36 | 
            +
                  SERVER_PROTOCOL
         | 
| 37 | 
            +
                ).freeze
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def call(request)
         | 
| 40 | 
            +
                  log_object = {}
         | 
| 41 | 
            +
                  log_object[:request]     = request_filter(request)
         | 
| 42 | 
            +
                  log_object[:session]     = session_filter(request)
         | 
| 43 | 
            +
                  log_object[:environment] = environment_filter(request)
         | 
| 44 | 
            +
                  log_object
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def format_for_report(request)
         | 
| 48 | 
            +
                  log_object = {}
         | 
| 49 | 
            +
                  log_object[:request]     = beauty_format request_filter(request)
         | 
| 50 | 
            +
                  log_object[:session]     = beauty_format session_filter(request)
         | 
| 51 | 
            +
                  log_object[:environment] = beauty_format separation_environment_filter(request)
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  result = log_object.map { |key, value| "#{key.capitalize}:\n#{value}\n" }
         | 
| 54 | 
            +
                  result.join("\n")
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                private
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                def beauty_format(data)
         | 
| 60 | 
            +
                  data.map { |k,v| "#{k.to_s.indent(4)}: #{v}" }.join("\n")
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                def environment_filter(request)
         | 
| 64 | 
            +
                  result = {}
         | 
| 65 | 
            +
                  request.filtered_env.keys.each do |key|
         | 
| 66 | 
            +
                    result[key] = request.filtered_env[key]
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
                  result
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                def separation_environment_filter(request)
         | 
| 72 | 
            +
                  result = {}
         | 
| 73 | 
            +
                  FILTERED_ENV_LIST.each do |key|
         | 
| 74 | 
            +
                    result[key] = request.filtered_env[key]
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
                  result
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                def session_filter(request)
         | 
| 80 | 
            +
                  result = {}
         | 
| 81 | 
            +
                  result[:session_id]   = request.ssl? ? "[FILTERED]" : request.session['session_id'] || request.env['rack.session.options'][:id].inspect
         | 
| 82 | 
            +
                  result[:data_session] = request.session.to_hash
         | 
| 83 | 
            +
                  result
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                def request_filter(request)
         | 
| 87 | 
            +
                  result = {}
         | 
| 88 | 
            +
                  result[:url]            = request.url
         | 
| 89 | 
            +
                  result[:request_method] = request.request_method
         | 
| 90 | 
            +
                  result[:ip_address]     = request.remote_ip
         | 
| 91 | 
            +
                  result[:parameters]     = request.filtered_parameters.inspect
         | 
| 92 | 
            +
                  result[:timestamp]      = Time.current
         | 
| 93 | 
            +
                  result[:server]         = Socket.gethostname
         | 
| 94 | 
            +
                  result[:process]        = $$
         | 
| 95 | 
            +
                  if defined?(Rails) && Rails.respond_to?(:root)
         | 
| 96 | 
            +
                    result[:rails_root] = Rails.root
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
                  result
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
            end
         | 
| @@ -1,5 +1,7 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 1 | 
            +
            if Rails.env.development? || Rails.env.test?
         | 
| 2 | 
            +
              loggers = [:std_out]
         | 
| 3 | 
            +
            else
         | 
| 4 | 
            +
              loggers = [:google_cloud_logging]
         | 
| 5 | 
            +
            end
         | 
| 4 6 |  | 
| 5 7 | 
             
            ZgcpToolkit::Logger.config.registered_loggers = loggers
         | 
    
        data/lib/zgcp_toolkit/logger.rb
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'dry/configurable'
         | 
| 2 | 
            +
            require "google/cloud/error_reporting"
         | 
| 2 3 | 
             
            require 'zgcp_toolkit/logger/stdout'
         | 
| 3 4 | 
             
            require 'zgcp_toolkit/logger/google_cloud_logging'
         | 
| 4 5 |  | 
| @@ -30,13 +31,20 @@ module ZgcpToolkit | |
| 30 31 | 
             
                    begin
         | 
| 31 32 | 
             
                      yield(logger) if block_given?
         | 
| 32 33 | 
             
                    rescue StandardError => e
         | 
| 33 | 
            -
                       | 
| 34 | 
            -
                      logger.flush!
         | 
| 34 | 
            +
                      Google::Cloud::ErrorReporting.report e
         | 
| 35 35 | 
             
                    end
         | 
| 36 36 |  | 
| 37 37 | 
             
                    logger
         | 
| 38 38 | 
             
                  end
         | 
| 39 39 |  | 
| 40 | 
            +
                  def report_error_request(error, request)
         | 
| 41 | 
            +
                    message = ZgcpToolkit::Formatter::Request.new.format_for_report(request)
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    Google::Cloud::ErrorReporting.report error do |event|
         | 
| 44 | 
            +
                      event.message = event.message + "\n\n" + message
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
              
         | 
| 40 48 | 
             
                  private
         | 
| 41 49 |  | 
| 42 50 | 
             
                  def valid_name?(log_name)
         | 
| @@ -47,29 +55,28 @@ module ZgcpToolkit | |
| 47 55 |  | 
| 48 56 | 
             
                DEFAULT_BACKTRACE_LIMIT = 10
         | 
| 49 57 |  | 
| 50 | 
            -
                attr_accessor : | 
| 58 | 
            +
                attr_accessor :backtrace_limit
         | 
| 51 59 | 
             
                attr_reader :loggers, :log_name
         | 
| 52 60 |  | 
| 53 61 | 
             
                def initialize(log_name)
         | 
| 54 62 | 
             
                  @log_name = log_name
         | 
| 55 | 
            -
                  @send_unexpected_error_to_slack = true
         | 
| 56 63 | 
             
                  @backtrace_limit = DEFAULT_BACKTRACE_LIMIT
         | 
| 57 64 | 
             
                  @loggers = ZgcpToolkit::Logger.registered_loggers.map { |logger| logger.new(log_name) }
         | 
| 58 65 | 
             
                end
         | 
| 59 66 |  | 
| 60 67 | 
             
                [:debug, :info, :warn, :error, :fatal, :unknown].each do |log_level_method|
         | 
| 61 | 
            -
                  define_method(log_level_method) do |log,  | 
| 68 | 
            +
                  define_method(log_level_method) do |log, **kwargs|
         | 
| 62 69 | 
             
                    log_object =
         | 
| 63 70 | 
             
                      case log
         | 
| 64 71 | 
             
                      when StandardError
         | 
| 65 72 | 
             
                        obj = { message: log.message, backtrace: log.backtrace.first(backtrace_limit) }
         | 
| 66 | 
            -
                        obj.merge!( | 
| 73 | 
            +
                        obj.merge!(kwargs)
         | 
| 67 74 | 
             
                        obj
         | 
| 68 75 | 
             
                      when Hash
         | 
| 69 76 | 
             
                        log
         | 
| 70 77 | 
             
                      when String
         | 
| 71 78 | 
             
                        obj = { message: log }
         | 
| 72 | 
            -
                        obj.merge!( | 
| 79 | 
            +
                        obj.merge!(kwargs)
         | 
| 73 80 | 
             
                        obj
         | 
| 74 81 | 
             
                      else
         | 
| 75 82 | 
             
                        raise UnsupportedLogType, "#{log.class.name} is not supported!"
         | 
| @@ -79,7 +86,7 @@ module ZgcpToolkit | |
| 79 86 | 
             
                end
         | 
| 80 87 |  | 
| 81 88 | 
             
                def error_request(error, request, **args)
         | 
| 82 | 
            -
                  filter_request_params =  | 
| 89 | 
            +
                  filter_request_params = ZgcpToolkit::Formatter::Request.new.call(request)
         | 
| 83 90 |  | 
| 84 91 | 
             
                  error({ message: error.message, backtrace: error.backtrace.first(backtrace_limit) }.merge!(filter_request_params).merge!(args))
         | 
| 85 92 | 
             
                end
         | 
| @@ -87,45 +94,5 @@ module ZgcpToolkit | |
| 87 94 | 
             
                def flush!
         | 
| 88 95 | 
             
                  loggers.each { |a| a.flush! }
         | 
| 89 96 | 
             
                end
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                private
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                def format_request_env(request)
         | 
| 94 | 
            -
                  log_object = {}
         | 
| 95 | 
            -
                  log_object[:request]     = request_filter(request)
         | 
| 96 | 
            -
                  log_object[:session]     = session_filter(request)
         | 
| 97 | 
            -
                  log_object[:environment] = environment_filter(request)
         | 
| 98 | 
            -
                  log_object
         | 
| 99 | 
            -
                end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                def environment_filter(request)
         | 
| 102 | 
            -
                  result = {}
         | 
| 103 | 
            -
                  request.filtered_env.keys.each do |key|
         | 
| 104 | 
            -
                    result[key] = request.filtered_env[key]
         | 
| 105 | 
            -
                  end
         | 
| 106 | 
            -
                  result
         | 
| 107 | 
            -
                end
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                def session_filter(request)
         | 
| 110 | 
            -
                  result = {}
         | 
| 111 | 
            -
                  result[:session_id]   = request.ssl? ? "[FILTERED]" : request.session['session_id'] || request.env['rack.session.options'][:id].inspect
         | 
| 112 | 
            -
                  result[:data_session] = request.session.to_hash
         | 
| 113 | 
            -
                  result
         | 
| 114 | 
            -
                end
         | 
| 115 | 
            -
             | 
| 116 | 
            -
                def request_filter(request)
         | 
| 117 | 
            -
                  result = {}
         | 
| 118 | 
            -
                  result[:url]            = request.url
         | 
| 119 | 
            -
                  result[:request_method] = request.request_method
         | 
| 120 | 
            -
                  result[:ip_address]     = request.remote_ip
         | 
| 121 | 
            -
                  result[:parameters]     = request.filtered_parameters.inspect
         | 
| 122 | 
            -
                  result[:timestamp]      = Time.current
         | 
| 123 | 
            -
                  result[:server]         = Socket.gethostname
         | 
| 124 | 
            -
                  result[:process]        = $$
         | 
| 125 | 
            -
                  if defined?(Rails) && Rails.respond_to?(:root)
         | 
| 126 | 
            -
                    result[:rails_root] = Rails.root
         | 
| 127 | 
            -
                  end
         | 
| 128 | 
            -
                  result
         | 
| 129 | 
            -
                end
         | 
| 130 97 | 
             
              end
         | 
| 131 98 | 
             
            end
         | 
    
        data/lib/zgcp_toolkit/version.rb
    CHANGED
    
    
    
        data/zgcp_toolkit.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: zgcp_toolkit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.2.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - ZIGExN VeNtura developers
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-08-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: stackdriver
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: 0.11.6
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: google-cloud-error_reporting
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - "~>"
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: 0.42.0
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - "~>"
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: 0.42.0
         | 
| 41 55 | 
             
            description: Manage essential toolset
         | 
| 42 56 | 
             
            email: kuruma-dev@zigexn.vn
         | 
| 43 57 | 
             
            executables: []
         | 
| @@ -55,6 +69,7 @@ files: | |
| 55 69 | 
             
            - bin/console
         | 
| 56 70 | 
             
            - bin/setup
         | 
| 57 71 | 
             
            - lib/zgcp_toolkit.rb
         | 
| 72 | 
            +
            - lib/zgcp_toolkit/formatter/request.rb
         | 
| 58 73 | 
             
            - lib/zgcp_toolkit/generators/templates/zgcp_toolkit.rb
         | 
| 59 74 | 
             
            - lib/zgcp_toolkit/generators/zgcp_toolkit_generator.rb
         | 
| 60 75 | 
             
            - lib/zgcp_toolkit/logger.rb
         | 
| @@ -83,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 83 98 | 
             
                - !ruby/object:Gem::Version
         | 
| 84 99 | 
             
                  version: '0'
         | 
| 85 100 | 
             
            requirements: []
         | 
| 86 | 
            -
            rubygems_version: 3. | 
| 101 | 
            +
            rubygems_version: 3.0.8
         | 
| 87 102 | 
             
            signing_key: 
         | 
| 88 103 | 
             
            specification_version: 4
         | 
| 89 104 | 
             
            summary: GCP Toolkit
         |