Class: Judges::Baza
Overview
Interface to the API of zerocracy.com.
You make an instance of this class and then call one of its methods. The object will make HTTP request to www.zerocracy.com and interpret the results returned.
- Author
-
Yegor Bugayenko ([email protected])
- Copyright
-
Copyright © 2024 Yegor Bugayenko
- License
-
MIT
Instance Method Summary collapse
-
#finished?(id) ⇒ Boolean
The job with this ID is finished already?.
-
#initialize(host, port, token, ssl: true, timeout: 30, retries: 3, loog: Loog::NULL) ⇒ Baza
constructor
A new instance of Baza.
-
#lock(name, owner) ⇒ Object
Lock the name.
-
#name_exists?(name) ⇒ Boolean
Check whether the name of the job exists on the server.
-
#pull(id) ⇒ Bytes
Pull factbase from the server.
-
#push(name, data, meta) ⇒ Integer
Push factbase to the server.
-
#recent(name) ⇒ Integer
Get the ID of the job by the name.
-
#unlock(name, owner) ⇒ Object
Unlock the name.
Constructor Details
#initialize(host, port, token, ssl: true, timeout: 30, retries: 3, loog: Loog::NULL) ⇒ Baza
41 42 43 44 45 46 47 48 49 |
# File 'lib/judges/baza.rb', line 41 def initialize(host, port, token, ssl: true, timeout: 30, retries: 3, loog: Loog::NULL) @host = host @port = port @ssl = ssl @token = token @timeout = timeout @loog = loog @retries = retries end |
Instance Method Details
#finished?(id) ⇒ Boolean
The job with this ID is finished already?
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/judges/baza.rb', line 117 def finished?(id) finished = false elapsed(@loog) do ret = with_retries(max_tries: @retries) do checked( Typhoeus::Request.get( home.append('finished').append(id).to_s, headers: ) ) end finished = ret.body == 'yes' throw :"The job ##{id} is #{finished ? '' : 'not yet '}finished at #{@host}" end finished end |
#lock(name, owner) ⇒ Object
Lock the name.
137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/judges/baza.rb', line 137 def lock(name, owner) elapsed(@loog) do with_retries(max_tries: @retries) do checked( Typhoeus::Request.get( home.append('lock').append(name).add(owner:).to_s, headers: ), 302 ) end end end |
#name_exists?(name) ⇒ Boolean
Check whether the name of the job exists on the server.
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/judges/baza.rb', line 191 def name_exists?(name) exists = 0 elapsed(@loog) do ret = with_retries(max_tries: @retries) do checked( Typhoeus::Request.get( home.append('exists').append(name).to_s, headers: ) ) end exists = ret.body == 'yes' throw :"The name \"#{name}\" #{exists ? 'exists' : "doesn't exist"} at #{@host}" end exists end |
#pull(id) ⇒ Bytes
Pull factbase from the server.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/judges/baza.rb', line 86 def pull(id) data = 0 elapsed(@loog) do Tempfile.open do |file| File.open(file, 'wb') do |f| request = Typhoeus::Request.new( home.append('pull').append("#{id}.fb").to_s, headers: headers.merge( 'Accept' => 'application/octet-stream' ), connecttimeout: @timeout, timeout: @timeout ) request.on_body do |chunk| f.write(chunk) end with_retries(max_tries: @retries) do request.run end checked(request.response) end data = File.binread(file) throw :"Pulled #{data.size} bytes of job ##{id} factbase at #{@host}" end end data end |
#push(name, data, meta) ⇒ Integer
Push factbase to the server.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/judges/baza.rb', line 56 def push(name, data, ) id = 0 hdrs = headers.merge( 'Content-Type' => 'application/octet-stream', 'Content-Length' => data.size ) unless .empty? hdrs = hdrs.merge('X-Zerocracy-Meta' => .map { |v| Base64.encode64(v).gsub("\n", '') }.join(' ')) end elapsed(@loog) do ret = with_retries(max_tries: @retries) do checked( Typhoeus::Request.put( home.append('push').append(name).to_s, body: data, headers: hdrs, connecttimeout: @timeout, timeout: @timeout ) ) end id = ret.body.to_i throw :"Pushed #{data.size} bytes to #{@host}, job ID is ##{id}" end id end |
#recent(name) ⇒ Integer
Get the ID of the job by the name.
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/judges/baza.rb', line 171 def recent(name) job = 0 elapsed(@loog) do ret = with_retries(max_tries: @retries) do checked( Typhoeus::Request.get( home.append('recent').append("#{name}.txt").to_s, headers: ) ) end job = ret.body.to_i throw :"The recent \"#{name}\" job's ID is ##{job} at #{@host}" end job end |
#unlock(name, owner) ⇒ Object
Unlock the name.
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/judges/baza.rb', line 154 def unlock(name, owner) elapsed(@loog) do with_retries(max_tries: @retries) do checked( Typhoeus::Request.get( home.append('unlock').append(name).add(owner:).to_s, headers: ), 302 ) end end end |