Class: PromptWarden::Uploader
- Inherits:
-
Object
- Object
- PromptWarden::Uploader
- Includes:
- Singleton
- Defined in:
- lib/prompt_warden/uploader.rb
Class Method Summary collapse
-
.retry_failed! ⇒ Object
Retry all failed uploads from disk.
Instance Method Summary collapse
-
#enqueue(payload) ⇒ Object
Enqueue compressed batch for async upload.
-
#initialize ⇒ Uploader
constructor
A new instance of Uploader.
Constructor Details
#initialize ⇒ Uploader
Returns a new instance of Uploader.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/prompt_warden/uploader.rb', line 13 def initialize cfg = PromptWarden.configuration @token = cfg.project_token @logger = cfg.logger api_url = cfg.respond_to?(:api_url) ? cfg.api_url : 'https://httpbin.org/post' @client = Faraday.new(url: api_url) do |f| f.request :retry, max: cfg.max_retries, interval: 0.05, backoff_factor: 2, methods: i[get post], retry_statuses: [500, 502, 503] f.adapter :net_http end @queue = Queue.new start_worker end |
Class Method Details
.retry_failed! ⇒ Object
Retry all failed uploads from disk
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/prompt_warden/uploader.rb', line 39 def self.retry_failed! files = Dir.glob(File.join(Dir.tmpdir, 'pw_failed_*.json.gz')) logger = PromptWarden.configuration.logger if files.empty? logger.info "No failed upload files found to retry" return end logger.info "Found #{files.size} failed upload file(s) to retry" files.each do |file| begin instance.enqueue(File.binread(file)) File.delete(file) logger.info "Successfully retried and deleted: #{File.basename(file)}" rescue => e # If upload fails again, leave the file for next retry logger.error "Retry failed for #{File.basename(file)}: #{e.class}: #{e.message}" end end end |
Instance Method Details
#enqueue(payload) ⇒ Object
Enqueue compressed batch for async upload
34 35 36 |
# File 'lib/prompt_warden/uploader.rb', line 34 def enqueue(payload) @queue << payload end |