buzzrb 0.4.0 → 0.5.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 +4 -4
- data/buzzrb.gemspec +2 -2
- data/lib/buzz/error.rb +3 -0
- data/lib/buzz/resources/reporting.rb +53 -14
- data/lib/buzz/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f2b0def7e301a26ceeaee2e000224b6c92962af3296e7ce18859ac69f32a314e
|
|
4
|
+
data.tar.gz: dfba2184f95d0395dc42b90b130162815d335d729fec0995d2e9cf018222fcd2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cee5da98edc7e203d740f76945c5ce469af645f55f04e5c2795f82fda80d883bada6a8cbbd6ce14cc99299bcf9b340e93f148586cd686d16920e76cc4d68bc58
|
|
7
|
+
data.tar.gz: 77438264221d2d174ee6dcaad5f7a9ccdf8e0d4cb166079362d0bd2a3fd35a67a12277c290a5e008bc2cd3066b917f702c82b3ecdf9299fe4c228efa07c290c4
|
data/buzzrb.gemspec
CHANGED
|
@@ -5,9 +5,9 @@ require_relative "lib/buzz/version"
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "buzzrb"
|
|
7
7
|
spec.version = Buzz::VERSION
|
|
8
|
-
spec.authors = ["
|
|
8
|
+
spec.authors = ["swlkr"]
|
|
9
9
|
spec.summary = "Ruby client for the Buzz/Freewheel Advertiser API v2.0"
|
|
10
|
-
spec.homepage = "https://github.com/
|
|
10
|
+
spec.homepage = "https://github.com/swlkr/buzzrb"
|
|
11
11
|
spec.license = "MIT"
|
|
12
12
|
spec.required_ruby_version = ">= 3.0"
|
|
13
13
|
|
data/lib/buzz/error.rb
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
module Buzz
|
|
4
4
|
module Resources
|
|
5
|
+
# Beeswax Report Builder 2.0. Queries are async: POST run-query returns a
|
|
6
|
+
# task_id, then GET async-results until 200 (204 means still running).
|
|
7
|
+
# https://api-docs.freewheel.tv/advertiser/v2.0/docs/reporting
|
|
5
8
|
class Reporting
|
|
6
9
|
attr_reader :client
|
|
7
10
|
|
|
@@ -9,28 +12,64 @@ module Buzz
|
|
|
9
12
|
@client = client
|
|
10
13
|
end
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
body =
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
def run_query(view:, fields:, filters: {}, result_format: "json", query_timezone: nil, **params)
|
|
16
|
+
body = {view: view, fields: Array(fields)}
|
|
17
|
+
body[:filters] = filters if filters && !filters.empty?
|
|
18
|
+
body[:result_format] = result_format if result_format
|
|
19
|
+
body[:query_timezone] = query_timezone if query_timezone
|
|
20
|
+
body.merge!(params)
|
|
21
|
+
|
|
22
|
+
response = client.post("/rest/v2/reporting/run-query", body)
|
|
23
|
+
task_id = response.data.is_a?(Hash) ? response.data["task_id"] : nil
|
|
24
|
+
raise Error.new("run-query did not return a task_id", status: response.status, body: response.data) if task_id.nil? || task_id.to_s.empty?
|
|
25
|
+
|
|
26
|
+
task_id
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def async_results(task_id)
|
|
30
|
+
client.get("/rest/v2/reporting/async-results/#{task_id}")
|
|
17
31
|
end
|
|
18
32
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
33
|
+
def query(view:, fields:, filters: {}, result_format: "json", query_timezone: nil, timeout: 300, interval: 1, **params)
|
|
34
|
+
task_id = run_query(view: view, fields: fields, filters: filters, result_format: result_format, query_timezone: query_timezone, **params)
|
|
35
|
+
wait_for_results(task_id, timeout: timeout, interval: interval)
|
|
22
36
|
end
|
|
23
37
|
|
|
24
|
-
def
|
|
25
|
-
client.get("/rest/v2/reports
|
|
38
|
+
def reports
|
|
39
|
+
client.get("/rest/v2/reporting/reports").data
|
|
26
40
|
end
|
|
27
41
|
|
|
28
|
-
def
|
|
29
|
-
client.
|
|
42
|
+
def report(name)
|
|
43
|
+
client.get("/rest/v2/reporting/reports/#{name}").data
|
|
30
44
|
end
|
|
31
45
|
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def wait_for_results(task_id, timeout:, interval:)
|
|
49
|
+
started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
50
|
+
|
|
51
|
+
loop do
|
|
52
|
+
response = async_results(task_id)
|
|
53
|
+
return extract_rows(response.data) if response.status == 200
|
|
54
|
+
|
|
55
|
+
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started
|
|
56
|
+
if elapsed >= timeout
|
|
57
|
+
raise QueryTimeoutError.new(
|
|
58
|
+
"Reporting query #{task_id} did not complete within #{timeout}s",
|
|
59
|
+
status: response.status,
|
|
60
|
+
body: response.data
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
sleep interval
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def extract_rows(data)
|
|
69
|
+
return data if data.is_a?(Array)
|
|
70
|
+
return data["results"] if data.is_a?(Hash) && data.key?("results")
|
|
71
|
+
|
|
72
|
+
data
|
|
34
73
|
end
|
|
35
74
|
end
|
|
36
75
|
end
|
data/lib/buzz/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: buzzrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- swlkr
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
@@ -78,7 +78,7 @@ files:
|
|
|
78
78
|
- lib/buzz/resources/targeting.rb
|
|
79
79
|
- lib/buzz/response.rb
|
|
80
80
|
- lib/buzz/version.rb
|
|
81
|
-
homepage: https://github.com/
|
|
81
|
+
homepage: https://github.com/swlkr/buzzrb
|
|
82
82
|
licenses:
|
|
83
83
|
- MIT
|
|
84
84
|
metadata: {}
|
|
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
97
|
version: '0'
|
|
98
98
|
requirements: []
|
|
99
|
-
rubygems_version: 3.
|
|
99
|
+
rubygems_version: 3.6.9
|
|
100
100
|
specification_version: 4
|
|
101
101
|
summary: Ruby client for the Buzz/Freewheel Advertiser API v2.0
|
|
102
102
|
test_files: []
|