gh-archive 0.11 → 0.12
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/lib/gh-archive.rb +69 -3
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9e36482fd8eeb76b12db28c1e68ad836d77a5985af6aa0e570a025bcb664b1a0
         | 
| 4 | 
            +
              data.tar.gz: a91e869a8e3f614e8280f03749bcd31ce0de3c7c4e9dc9dd3d777c1a3f1e0d3f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4423afb5e0538be2abbe4ac21aeba3919081f0c61943ad9801add90b85b6f2e9df907836c13e00c6b300b28766c65c5cb2e78bc040393ebd38c9618092f2957d
         | 
| 7 | 
            +
              data.tar.gz: c0caf8f4e47419744f7694748ed608c2e7da8fc0094477ce96bad211cf0b398ef5d43550fdcfd25ba1bc820cafd470ebc4f7526c39c171ef991bfc5fd2399882
         | 
    
        data/lib/gh-archive.rb
    CHANGED
    
    | @@ -9,6 +9,71 @@ require 'thread/promise' | |
| 9 9 |  | 
| 10 10 | 
             
            require_relative File.expand_path('../gh-archive/events', __FILE__)
         | 
| 11 11 |  | 
| 12 | 
            +
            module GHArchive
         | 
| 13 | 
            +
                class ThreadPool
         | 
| 14 | 
            +
                    def initialize(size)
         | 
| 15 | 
            +
                        @size = size
         | 
| 16 | 
            +
                        @threads = []
         | 
| 17 | 
            +
                        @queue = []
         | 
| 18 | 
            +
                        @mutex = Mutex.new
         | 
| 19 | 
            +
                        
         | 
| 20 | 
            +
                        @consumer_thread = Thread.start do
         | 
| 21 | 
            +
                            while !@shutdown || @threads.size > 0 || @queue.size > 0
         | 
| 22 | 
            +
                                sleep 0.1 if @queue.size == 0 || @threads.size == @size
         | 
| 23 | 
            +
                                @threads.delete_if { |t| !t.alive? }
         | 
| 24 | 
            +
                                
         | 
| 25 | 
            +
                                if @threads.size < @size && @queue.size > 0
         | 
| 26 | 
            +
                                    @mutex.synchronize do
         | 
| 27 | 
            +
                                        args, job = @queue.shift
         | 
| 28 | 
            +
                                        @threads << Thread.start(*args, &job)
         | 
| 29 | 
            +
                                    end
         | 
| 30 | 
            +
                                end
         | 
| 31 | 
            +
                            end
         | 
| 32 | 
            +
                        end
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                    
         | 
| 35 | 
            +
                    def process(*args, &block)
         | 
| 36 | 
            +
                        raise "Block expected" unless block_given?
         | 
| 37 | 
            +
                        raise "Can not add jobs while shutting down" if @shutdown
         | 
| 38 | 
            +
                        
         | 
| 39 | 
            +
                        @mutex.synchronize do
         | 
| 40 | 
            +
                            @queue << [args, block]
         | 
| 41 | 
            +
                        end
         | 
| 42 | 
            +
                        
         | 
| 43 | 
            +
                        return self.enqueued
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
                    
         | 
| 46 | 
            +
                    def shutdown
         | 
| 47 | 
            +
                        @shutdown = true
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                    
         | 
| 50 | 
            +
                    def shutdown!
         | 
| 51 | 
            +
                        self.shutdown
         | 
| 52 | 
            +
                        @mutex.synchronize do
         | 
| 53 | 
            +
                            @queue.clear
         | 
| 54 | 
            +
                        end
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                    
         | 
| 57 | 
            +
                    def enqueued
         | 
| 58 | 
            +
                        return @queue.size
         | 
| 59 | 
            +
                    end
         | 
| 60 | 
            +
                    
         | 
| 61 | 
            +
                    def shutdown?
         | 
| 62 | 
            +
                        @shutdown
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
                    
         | 
| 65 | 
            +
                    def alive?
         | 
| 66 | 
            +
                        @consumer_thread.alive?
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
                    
         | 
| 69 | 
            +
                    def wait
         | 
| 70 | 
            +
                        while alive?
         | 
| 71 | 
            +
                            sleep 0.1
         | 
| 72 | 
            +
                        end
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
            end
         | 
| 76 | 
            +
             | 
| 12 77 | 
             
            module GHAUtils
         | 
| 13 78 | 
             
                def get_gha_filename(date)
         | 
| 14 79 | 
             
                    return ("%04d-%02d-%02d-%d.json.gz" % [date.year, date.month, date.day, date.hour])
         | 
| @@ -22,9 +87,10 @@ module GHAUtils | |
| 22 87 | 
             
                end
         | 
| 23 88 |  | 
| 24 89 | 
             
                def read_gha_file(file)
         | 
| 25 | 
            -
                     | 
| 90 | 
            +
                    
         | 
| 91 | 
            +
                    if !file.is_a?(StringIO) && file.path.end_with?(".json")
         | 
| 26 92 | 
             
                        content = file.read
         | 
| 27 | 
            -
                    elsif file.path.end_with?(".gz") || file.path.start_with?("/tmp/open-uri")
         | 
| 93 | 
            +
                    elsif file.is_a?(StringIO) || file.path.end_with?(".gz") || file.path.start_with?("/tmp/open-uri")
         | 
| 28 94 | 
             
                        content = read_gha_file_content(file)
         | 
| 29 95 | 
             
                    else
         | 
| 30 96 | 
             
                        raise "Invalid file extension for #{file.path}: expected `.json.gz` or `json`,"
         | 
| @@ -202,7 +268,7 @@ class OnlineGHAProvider < GHAProvider | |
| 202 268 |  | 
| 203 269 | 
             
                def proactive(pool_size = 10)
         | 
| 204 270 | 
             
                    @proactive = true
         | 
| 205 | 
            -
                    @pool =  | 
| 271 | 
            +
                    @pool = GHArchive::ThreadPool.new(pool_size)
         | 
| 206 272 |  | 
| 207 273 | 
             
                    return self
         | 
| 208 274 | 
             
                end
         |