Class: Judges::Baza

Inherits:
Object show all
Defined in:
lib/judges/baza.rb

Overview

Baza.

Author

Yegor Bugayenko (yegor256@gmail.com)

Copyright

Copyright © 2024 Yegor Bugayenko

License

MIT

Instance Method Summary collapse

Constructor Details

#initialize(host, port, token, ssl: true, timeout: 5, loog: Loog::NULL) ⇒ Baza

rubocop:disable Metrics/ParameterLists



36
37
38
39
40
41
42
43
44
# File 'lib/judges/baza.rb', line 36

def initialize(host, port, token, ssl: true, timeout: 5, loog: Loog::NULL)
  # rubocop:enable Metrics/ParameterLists
  @host = host
  @port = port
  @ssl = ssl
  @token = token
  @timeout = timeout
  @loog = loog
end

Instance Method Details

#finished?(id) ⇒ Boolean

The job with this ID is finished already?

Returns:

  • (Boolean)


96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/judges/baza.rb', line 96

def finished?(id)
  finished = false
  elapsed(@loog) do
    ret = with_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

#name_exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/judges/baza.rb', line 130

def name_exists?(name)
  exists = 0
  elapsed(@loog) do
    ret = checked(
      Typhoeus::Request.get(
        home.append('exists').append(name).to_s,
        headers:
      )
    )
    exists = ret.body == 'yes'
    throw :"The name \"#{name}\" #{exists ? 'exists' : "doesn't exist"} at #{@host}"
  end
  exists
end

#pull(id) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/judges/baza.rb', line 69

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
        request.run
        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) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/judges/baza.rb', line 46

def push(name, data)
  id = 0
  elapsed(@loog) do
    ret = with_retries do
      checked(
        Typhoeus::Request.put(
          home.append('push').append(name).to_s,
          body: data,
          headers: headers.merge(
            'Content-Type' => 'application/octet-stream',
            'Content-Length' => data.size
          ),
          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) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/judges/baza.rb', line 113

def recent(name)
  job = 0
  elapsed(@loog) do
    ret = with_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