libhoney 1.3.2 → 1.4.0
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 +5 -5
- data/README.md +28 -0
- data/lib/libhoney/client.rb +20 -1
- data/lib/libhoney/event.rb +1 -5
- data/lib/libhoney/mock_transmission.rb +26 -0
- data/lib/libhoney/transmission.rb +4 -0
- data/lib/libhoney/version.rb +1 -1
- data/lib/libhoney.rb +1 -0
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 930fb89e75aad3624d26e929b09d4b900a88df25ad4c0462eedd85ea5efe1091
         | 
| 4 | 
            +
              data.tar.gz: 0f7584e0ca46508f3da2d74523c15126f78f230312c865c2facadcac49dcb187
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f3990fcde2ad49d87eb9503ef89ca42cc7ab03c6c6ec2527bd1ec84062496a8e3c514e7b53c09ef5a278390f778afb807a3728617e0e00de89f1b7d0c1494285
         | 
| 7 | 
            +
              data.tar.gz: 4bee236b58007911ad8c1e0ced9754bc127a1629aa330903c7a40ed8452d0d8c3274ed0e2b444ae04965137a50a72ce6198e9a278fbbb2a4af5fbccba60719f5
         | 
    
        data/README.md
    CHANGED
    
    | @@ -59,6 +59,34 @@ honeycomb.close | |
| 59 59 |  | 
| 60 60 | 
             
            You can find a more complete example demonstrating usage in [`example/fact.rb`](example/fact.rb)
         | 
| 61 61 |  | 
| 62 | 
            +
            ## Testing instrumented code
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            Once you've instrumented your code to send events to Honeycomb, you may want to
         | 
| 65 | 
            +
            consider writing tests that verify your code is producing the events you expect,
         | 
| 66 | 
            +
            annotating them with the right information, etc. That way, if your code changes
         | 
| 67 | 
            +
            and breaks the instrumentation, you'll find out straight away, instead of at 3am
         | 
| 68 | 
            +
            when you need that data available for debugging!
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            To support this use case, libhoney provides a
         | 
| 71 | 
            +
            [`TestClient`](http://www.rubydoc.info/gems/libhoney/Libhoney/TestClient) which
         | 
| 72 | 
            +
            you can swap in for the usual `Client`. Example usage:
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            ```ruby
         | 
| 75 | 
            +
            fakehoney = Libhoney::TestClient.new
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            my_app = MyApp.new(..., fakehoney, ...)
         | 
| 78 | 
            +
            my_app.do_stuff
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            expect(fakehoney.events.size).to eq 3
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            first_event = fakehoney.events[0]
         | 
| 83 | 
            +
            expect(first_event.data['hovercraft_contents']).to eq 'Eels'
         | 
| 84 | 
            +
            ```
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            For more detail see the docs for
         | 
| 87 | 
            +
            [`TestClient`](http://www.rubydoc.info/gems/libhoney/Libhoney/TestClient) and
         | 
| 88 | 
            +
            [`Event`](http://www.rubydoc.info/gems/libhoney/Libhoney/Event).
         | 
| 89 | 
            +
             | 
| 62 90 | 
             
            ## Contributions
         | 
| 63 91 |  | 
| 64 92 | 
             
            Features, bug fixes and other changes to libhoney are gladly accepted. Please
         | 
    
        data/lib/libhoney/client.rb
    CHANGED
    
    | @@ -53,12 +53,14 @@ module Libhoney | |
| 53 53 | 
             
                # @param dataset [String] the dataset you want
         | 
| 54 54 | 
             
                # @param sample_rate [Fixnum] cause libhoney to send 1 out of sampleRate events.  overrides the libhoney instance's value.
         | 
| 55 55 | 
             
                # @param api_host [String] the base url to send events to
         | 
| 56 | 
            +
                # @param transmission [Object] transport used to actually send events. If nil (the default), will be lazily initialized with a {TransmissionClient} on first event send.
         | 
| 56 57 | 
             
                # @param block_on_send [Boolean] if more than pending_work_capacity events are written, block sending further events
         | 
| 57 58 | 
             
                # @param block_on_responses [Boolean] if true, block if there is no thread reading from the response queue
         | 
| 58 59 | 
             
                def initialize(writekey: '',
         | 
| 59 60 | 
             
                               dataset: '',
         | 
| 60 61 | 
             
                               sample_rate: 1,
         | 
| 61 62 | 
             
                               api_host: 'https://api.honeycomb.io/',
         | 
| 63 | 
            +
                               transmission: nil,
         | 
| 62 64 | 
             
                               block_on_send: false,
         | 
| 63 65 | 
             
                               block_on_responses: false,
         | 
| 64 66 | 
             
                               max_batch_size: 50,
         | 
| @@ -83,7 +85,7 @@ module Libhoney | |
| 83 85 | 
             
                  @max_concurrent_batches = max_concurrent_batches
         | 
| 84 86 | 
             
                  @pending_work_capacity = pending_work_capacity
         | 
| 85 87 | 
             
                  @responses = SizedQueue.new(2 * @pending_work_capacity)
         | 
| 86 | 
            -
                  @tx =  | 
| 88 | 
            +
                  @tx = transmission
         | 
| 87 89 | 
             
                  @lock = Mutex.new
         | 
| 88 90 |  | 
| 89 91 | 
             
                  self
         | 
| @@ -203,6 +205,23 @@ module Libhoney | |
| 203 205 | 
             
                def should_drop(sample_rate)
         | 
| 204 206 | 
             
                  rand(1..sample_rate) != 1
         | 
| 205 207 | 
             
                end
         | 
| 208 | 
            +
              end
         | 
| 206 209 |  | 
| 210 | 
            +
              # A client with the network stubbed out for testing purposes. Does not
         | 
| 211 | 
            +
              # actually send any events to Honeycomb; instead, records events for later
         | 
| 212 | 
            +
              # inspection.
         | 
| 213 | 
            +
              #
         | 
| 214 | 
            +
              # @note This class is intended for use in tests, for example if you want to
         | 
| 215 | 
            +
              #       verify what events your instrumented code is sending. Use in
         | 
| 216 | 
            +
              #       production is not recommended.
         | 
| 217 | 
            +
              class TestClient < Client
         | 
| 218 | 
            +
                def initialize(*args, **kwargs)
         | 
| 219 | 
            +
                  super(*args, transmission: MockTransmissionClient.new, **kwargs)
         | 
| 220 | 
            +
                end
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                # @return [Array<Event>] the recorded events
         | 
| 223 | 
            +
                def events
         | 
| 224 | 
            +
                  @tx.events
         | 
| 225 | 
            +
                end
         | 
| 207 226 | 
             
              end
         | 
| 208 227 | 
             
            end
         | 
    
        data/lib/libhoney/event.rb
    CHANGED
    
    | @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            module Libhoney
         | 
| 2 2 | 
             
              ##
         | 
| 3 3 | 
             
              # This is the event object that you can fill up with data.
         | 
| 4 | 
            -
              # The data itself is a ruby hash.
         | 
| 5 4 | 
             
              class Event
         | 
| 6 5 | 
             
                attr_accessor :writekey, :dataset, :sample_rate, :api_host
         | 
| 7 6 | 
             
                attr_accessor :timestamp, :metadata
         | 
| 8 7 |  | 
| 8 | 
            +
                # @return [Hash<String=>any>] the fields in this event
         | 
| 9 9 | 
             
                attr_reader :data
         | 
| 10 10 |  | 
| 11 11 | 
             
                # @api private
         | 
| @@ -92,10 +92,6 @@ module Libhoney | |
| 92 92 | 
             
                # @return [self] this event.
         | 
| 93 93 | 
             
                def send_presampled
         | 
| 94 94 | 
             
                  raise ArgumentError.new("No metrics added to event. Won't send empty event.")         if self.data.length == 0
         | 
| 95 | 
            -
                  raise ArgumentError.new("No APIHost for Honeycomb. Can't send to the Great Unknown.") if self.api_host == ""
         | 
| 96 | 
            -
                  raise ArgumentError.new("No WriteKey specified. Can't send event.")                   if self.writekey == ""
         | 
| 97 | 
            -
                  raise ArgumentError.new("No Dataset for Honeycomb. Can't send datasetless.")          if self.dataset == ""
         | 
| 98 | 
            -
             | 
| 99 95 | 
             
                  @libhoney.send_event(self)
         | 
| 100 96 | 
             
                  self
         | 
| 101 97 | 
             
                end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module Libhoney
         | 
| 2 | 
            +
              # For testing use: a mock version of TransmissionClient that retains all
         | 
| 3 | 
            +
              # events in an in-memory queue for inspection (and does not send them to
         | 
| 4 | 
            +
              # Honeycomb, or perform any network activity).
         | 
| 5 | 
            +
              #
         | 
| 6 | 
            +
              # @note This class is intended for use in tests, for example if you want to
         | 
| 7 | 
            +
              #       verify what events your instrumented code is sending. Use in
         | 
| 8 | 
            +
              #       production is not recommended.
         | 
| 9 | 
            +
              class MockTransmissionClient
         | 
| 10 | 
            +
                def initialize
         | 
| 11 | 
            +
                  @events = []
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                # @return [Array<Event>] the recorded events
         | 
| 15 | 
            +
                attr_reader :events
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                # Records an event
         | 
| 18 | 
            +
                def add(event)
         | 
| 19 | 
            +
                  @events.push(event)
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                # Does nothing.
         | 
| 23 | 
            +
                def close(drain)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -26,6 +26,10 @@ module Libhoney | |
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 28 | 
             
                def add(event)
         | 
| 29 | 
            +
                  raise ArgumentError, "No APIHost for Honeycomb. Can't send to the Great Unknown." if event.api_host == ""
         | 
| 30 | 
            +
                  raise ArgumentError, "No WriteKey specified. Can't send event." if event.writekey == ""
         | 
| 31 | 
            +
                  raise ArgumentError, "No Dataset for Honeycomb. Can't send datasetless." if event.dataset == ""
         | 
| 32 | 
            +
             | 
| 29 33 | 
             
                  begin
         | 
| 30 34 | 
             
                    @send_queue.enq(event, !@block_on_send)
         | 
| 31 35 | 
             
                  rescue ThreadError
         | 
    
        data/lib/libhoney/version.rb
    CHANGED
    
    
    
        data/lib/libhoney.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: libhoney
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - The Honeycomb.io Team
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017- | 
| 11 | 
            +
            date: 2017-11-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -127,6 +127,7 @@ files: | |
| 127 127 | 
             
            - lib/libhoney/builder.rb
         | 
| 128 128 | 
             
            - lib/libhoney/client.rb
         | 
| 129 129 | 
             
            - lib/libhoney/event.rb
         | 
| 130 | 
            +
            - lib/libhoney/mock_transmission.rb
         | 
| 130 131 | 
             
            - lib/libhoney/response.rb
         | 
| 131 132 | 
             
            - lib/libhoney/transmission.rb
         | 
| 132 133 | 
             
            - lib/libhoney/version.rb
         | 
| @@ -151,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 151 152 | 
             
                  version: '0'
         | 
| 152 153 | 
             
            requirements: []
         | 
| 153 154 | 
             
            rubyforge_project: 
         | 
| 154 | 
            -
            rubygems_version: 2. | 
| 155 | 
            +
            rubygems_version: 2.7.2
         | 
| 155 156 | 
             
            signing_key: 
         | 
| 156 157 | 
             
            specification_version: 4
         | 
| 157 158 | 
             
            summary: send data to Honeycomb
         |