Skip to content

Commit eef2e02

Browse files
committed
[DOC] Add example script discarding all sessions for an activity
Signed-off-by: Olivier Mehani <[email protected]>
1 parent dca983d commit eef2e02

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
#!/usr/bin/env ruby
2+
require 'net/http'
3+
require 'json'
4+
5+
require 'learnosity/sdk/request/init'
6+
7+
activityId = 'demoActivity'
8+
maxCount = 100
9+
10+
class SessionDiscarder
11+
def initialize
12+
@sessionsStatusesUri = URI('https://data.learnosity.com/v1/sessions/statuses')
13+
14+
@security_packet = {
15+
'consumer_key' => 'yis0TYCu7U9V4o7M',
16+
'domain' => 'localhost'
17+
}
18+
# XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control
19+
@consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22'
20+
end
21+
22+
def get_sessions_for_activity(activityId)
23+
sessionsStatusesRequest = { "activity_id": [ activityId ] }
24+
25+
reqno = 0
26+
continue = true
27+
sessions = []
28+
while continue do
29+
reqno += 1
30+
31+
init = Learnosity::Sdk::Request::Init.new(
32+
'data',
33+
@security_packet,
34+
@consumer_secret,
35+
sessionsStatusesRequest
36+
)
37+
request = init.generate
38+
39+
puts ">>> [#{@sessionsStatusesUri} (#{reqno})] #{JSON::generate(sessionsStatusesRequest)}"
40+
41+
res = Net::HTTP.post_form(@sessionsStatusesUri, request)
42+
response = JSON.parse(res.body)
43+
44+
puts "<<< [#{res.code}] #{response['meta']['records']} records, next: #{response['meta']['next']}"
45+
46+
if ( !response['meta']['next'].nil? \
47+
and !response['meta']['records'].nil? and response['meta']['records'] > 0)
48+
sessionsStatusesRequest['next'] = response['meta']['next']
49+
else
50+
continue = false
51+
end
52+
53+
response['data'].each { |session|
54+
sessions += [ session ]
55+
}
56+
end
57+
return sessions
58+
end
59+
60+
def update_statuses(statuses)
61+
sessionsDiscardRequest = { "statuses": statuses }
62+
63+
init = Learnosity::Sdk::Request::Init.new(
64+
'data',
65+
@security_packet,
66+
@consumer_secret,
67+
sessionsDiscardRequest,
68+
'update'
69+
)
70+
request = init.generate
71+
72+
puts ">>> [#{@sessionsStatusesUri}] #{JSON::generate(sessionsDiscardRequest)}"
73+
74+
res = Net::HTTP.post_form(@sessionsStatusesUri, request)
75+
response = JSON.parse(res.body)
76+
77+
puts "<<< [#{res.code}] job_reference: #{response['data']['job_reference']}"
78+
end
79+
end
80+
81+
sd = SessionDiscarder.new
82+
83+
sessions = sd.get_sessions_for_activity(activityId)
84+
85+
statuses = []
86+
sessions.each { |session|
87+
if session['status'] != 'Discarded'
88+
session['status'] = 'Discarded'
89+
statuses += [ session ]
90+
if statuses.count == maxCount
91+
sd.update_statuses(statuses)
92+
statuses = []
93+
end
94+
end
95+
}
96+
if statuses.count > 0
97+
sd.update_statuses(statuses)
98+
end

0 commit comments

Comments
 (0)