card-mod-new_relic 0.1
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 +7 -0
 - data/README.md +20 -0
 - data/lib/card/mod/new_relic.rb +1 -0
 - data/set/all/cache.rb +4 -0
 - data/set/all/fetch.rb +4 -0
 - data/set/all/initialize.rb +2 -0
 - data/set/all/new_relic.rb +88 -0
 - data/set/all/pattern.rb +2 -0
 - metadata +94 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA256:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9d5ae87a5aa454d6e841898a99d92e42aac6203e9539b80f9538ee038d42cc3c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 252bf0a2edb83784da2c1d4d96fd06f83cca84db549b1d870886bdf67d065f14
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: cbf91735500f0d5bb74bb81abe50bd15ad42601c88b2a1998a59d9a25cf6849461230761930c8d1ad144b5f76ce4eed1117ad7b98b32404ddce66f6610b839fb
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2c82dd418cf0caaf9cfd153089ca55e0ad18fe072afb3281658cc4edba5e3582ec13b3131937d83304ce77b29db1045fe217470bb23b01bcd7611f15966b0595
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # @title README - mod: new relic
         
     | 
| 
      
 3 
     | 
    
         
            +
            -->
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # NewRelic mod (experimental)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            NewRelic is a sophisticated web-based performance tracking tool.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            This mod supports integration with NewRelic by adding tracers for important
         
     | 
| 
      
 10 
     | 
    
         
            +
            methods like `Card#fetch`, `Format#final_render`, `Card::Query.new`, 
         
     | 
| 
      
 11 
     | 
    
         
            +
            `Voo.process`, and for action events.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            There are also _many_ other tracers not activated but that can easily be
         
     | 
| 
      
 14 
     | 
    
         
            +
            copied from the source code here and reused in a local mod.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            To attach this mod to your NewRelic account, add a `newrelic.yml` file in the
         
     | 
| 
      
 17 
     | 
    
         
            +
            deck's `config` directory. 
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            For full documentation of agent configuration options, please refer to
         
     | 
| 
      
 20 
     | 
    
         
            +
            https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "newrelic_rpm"
         
     | 
    
        data/set/all/cache.rb
    ADDED
    
    
    
        data/set/all/fetch.rb
    ADDED
    
    
| 
         @@ -0,0 +1,88 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            event :new_relic_act_transaction, after: :act, when: :new_relic_tracking? do
         
     | 
| 
      
 2 
     | 
    
         
            +
              add_new_relic_card_attributes
         
     | 
| 
      
 3 
     | 
    
         
            +
              add_new_relic_act_attributes unless @action == :read
         
     | 
| 
      
 4 
     | 
    
         
            +
              name_new_relic_transaction new_relic_transaction_name_parts, category: :controller
         
     | 
| 
      
 5 
     | 
    
         
            +
            end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            event :notify_new_relic, after: :notable_exception_raised, when: :new_relic_tracking? do
         
     | 
| 
      
 8 
     | 
    
         
            +
              ::NewRelic::Agent.notice_error Card::Error.current
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            event :new_relic_act_start, before: :act, when: :new_relic_tracking? do
         
     | 
| 
      
 12 
     | 
    
         
            +
              @act_start = Time.now
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ::Card::Set::Event::IntegrateWithDelayJob.after_perform do |job|
         
     | 
| 
      
 16 
     | 
    
         
            +
              Director.contextualize_delayed_event *job.arguments[0..3] do
         
     | 
| 
      
 17 
     | 
    
         
            +
                card = job.arguments[1]
         
     | 
| 
      
 18 
     | 
    
         
            +
                card&.track_delayed_job job
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            # for override. cards with same label are grouped in new relic reporting
         
     | 
| 
      
 23 
     | 
    
         
            +
            def new_relic_label
         
     | 
| 
      
 24 
     | 
    
         
            +
              type_code
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            def new_relic_tracking?
         
     | 
| 
      
 28 
     | 
    
         
            +
              Rails.env.production?
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            def track_delayed_job job
         
     | 
| 
      
 32 
     | 
    
         
            +
              name_new_relic_transaction ["delayed-#{job.queue_name}"]
         
     | 
| 
      
 33 
     | 
    
         
            +
              add_new_relic_card_attributes
         
     | 
| 
      
 34 
     | 
    
         
            +
              add_new_relic_act_attributes time=false
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            private
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            def new_relic_transaction_name_parts
         
     | 
| 
      
 40 
     | 
    
         
            +
              controller = Env[:controller]
         
     | 
| 
      
 41 
     | 
    
         
            +
              parts = [controller&.action_name, new_relic_label]
         
     | 
| 
      
 42 
     | 
    
         
            +
              return parts unless @action == :read
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              parts << controller&.response_format
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            def name_new_relic_transaction name_parts, args={}
         
     | 
| 
      
 48 
     | 
    
         
            +
              name = Array.wrap(name_parts).compact.map(&:to_s).join "-"
         
     | 
| 
      
 49 
     | 
    
         
            +
              ::NewRelic::Agent.set_transaction_name name, args
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            def add_new_relic_card_attributes
         
     | 
| 
      
 53 
     | 
    
         
            +
              ::NewRelic::Agent.add_custom_attributes(
         
     | 
| 
      
 54 
     | 
    
         
            +
                card: { type: type_code, name: name },
         
     | 
| 
      
 55 
     | 
    
         
            +
                user: { roles: all_roles.join(", ") }
         
     | 
| 
      
 56 
     | 
    
         
            +
              )
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            def add_new_relic_act_attributes time=true
         
     | 
| 
      
 60 
     | 
    
         
            +
              args = { act: { actions: action_names_for_new_relic } }
         
     | 
| 
      
 61 
     | 
    
         
            +
              args[:time_from_start] = "#{(Time.now - @act_start) * 1000} ms" if time
         
     | 
| 
      
 62 
     | 
    
         
            +
              ::NewRelic::Agent.add_custom_attributes args
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            def action_names_for_new_relic
         
     | 
| 
      
 66 
     | 
    
         
            +
              return unless (actions = Director.act&.actions(false))
         
     | 
| 
      
 67 
     | 
    
         
            +
              actions.map(&:card).compact.map &:name
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            # test new relic custom metrics
         
     | 
| 
      
 71 
     | 
    
         
            +
            # module ::ActiveRecord::ConnectionAdapters
         
     | 
| 
      
 72 
     | 
    
         
            +
            #   class AbstractMysqlAdapter
         
     | 
| 
      
 73 
     | 
    
         
            +
            #     unless method_defined? :new_relic_execute
         
     | 
| 
      
 74 
     | 
    
         
            +
            #       alias_method :new_relic_execute, :execute
         
     | 
| 
      
 75 
     | 
    
         
            +
            #       def execute sql, name=nil
         
     | 
| 
      
 76 
     | 
    
         
            +
            #         result, duration = count_ms { original_execute(sql, name) }
         
     | 
| 
      
 77 
     | 
    
         
            +
            #         ::NewRelic::Agent.record_metric "Custom/Card/queries", duration
         
     | 
| 
      
 78 
     | 
    
         
            +
            #         result
         
     | 
| 
      
 79 
     | 
    
         
            +
            #       end
         
     | 
| 
      
 80 
     | 
    
         
            +
            #
         
     | 
| 
      
 81 
     | 
    
         
            +
            #       def count_ms
         
     | 
| 
      
 82 
     | 
    
         
            +
            #         start = Time.now
         
     | 
| 
      
 83 
     | 
    
         
            +
            #         result = yield
         
     | 
| 
      
 84 
     | 
    
         
            +
            #         [result, (Time.now - start) * 1000]
         
     | 
| 
      
 85 
     | 
    
         
            +
            #       end
         
     | 
| 
      
 86 
     | 
    
         
            +
            #     end
         
     | 
| 
      
 87 
     | 
    
         
            +
            #   end
         
     | 
| 
      
 88 
     | 
    
         
            +
            # end
         
     | 
    
        data/set/all/pattern.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,94 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: card-mod-new_relic
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: '0.1'
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Philipp Kühl
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Ethan McCutchen
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire:
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2021-10-26 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: card
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 18 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 19 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 20 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 21 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 22 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 23 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 24 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 25 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 26 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 27 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 28 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 29 
     | 
    
         
            +
              name: decko
         
     | 
| 
      
 30 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 31 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 32 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 33 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 34 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 35 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 36 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 37 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 38 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 39 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 40 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 41 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 42 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 43 
     | 
    
         
            +
              name: newrelic_rpm
         
     | 
| 
      
 44 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 45 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 46 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 47 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 48 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 49 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 50 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 51 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 52 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 53 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 54 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 55 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 56 
     | 
    
         
            +
            description: handle new relic integration with decko decks
         
     | 
| 
      
 57 
     | 
    
         
            +
            email:
         
     | 
| 
      
 58 
     | 
    
         
            +
            - info@decko.org
         
     | 
| 
      
 59 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 60 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 61 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 62 
     | 
    
         
            +
            files:
         
     | 
| 
      
 63 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/card/mod/new_relic.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - set/all/cache.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - set/all/fetch.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            - set/all/initialize.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - set/all/new_relic.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - set/all/pattern.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            homepage: http://decko.org
         
     | 
| 
      
 71 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 72 
     | 
    
         
            +
            - GPL-3.0
         
     | 
| 
      
 73 
     | 
    
         
            +
            metadata:
         
     | 
| 
      
 74 
     | 
    
         
            +
              card-mod: new_relic
         
     | 
| 
      
 75 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
      
 76 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 77 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 79 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 80 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 81 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 82 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 83 
     | 
    
         
            +
                  version: '2.5'
         
     | 
| 
      
 84 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 86 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 87 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 88 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 89 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 90 
     | 
    
         
            +
            rubygems_version: 3.2.28
         
     | 
| 
      
 91 
     | 
    
         
            +
            signing_key:
         
     | 
| 
      
 92 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 93 
     | 
    
         
            +
            summary: new relic support for decko
         
     | 
| 
      
 94 
     | 
    
         
            +
            test_files: []
         
     |