diff --git a/record-and-playback/core/lib/recordandplayback/events_archiver.rb b/record-and-playback/core/lib/recordandplayback/events_archiver.rb index fc7269c743cf6e785666406e279e78480bc73894..4bb13fdfe9f1f06a5b9b0133c81ffec3dab2a487 100755 --- a/record-and-playback/core/lib/recordandplayback/events_archiver.rb +++ b/record-and-playback/core/lib/recordandplayback/events_archiver.rb @@ -23,10 +23,11 @@ require 'builder' require 'yaml' require 'fileutils' -module BigBlueButton +module BigBlueButton $bbb_props = YAML::load(File.open(File.expand_path('../../../scripts/bigbluebutton.yml', __FILE__))) $recording_dir = $bbb_props['recording_dir'] $raw_recording_dir = "#{$recording_dir}/raw" + $store_recording_status = $bbb_props['store_recording_status'] # Class to wrap Redis so we can mock # for testing @@ -39,23 +40,23 @@ module BigBlueButton @redis = Redis.new(:host => @host, :port => @port, :password => @password) end end - - def connect - @redis.client.connect + + def connect + @redis.client.connect end - + def disconnect @redis.client.disconnect end - + def connected? @redis.client.connected? end - + def metadata_for(meeting_id) @redis.hgetall("meeting:info:#{meeting_id}") end - + def has_breakout_metadata_for(meeting_id) @redis.exists("meeting:breakout:#{meeting_id}") end @@ -63,7 +64,7 @@ module BigBlueButton def breakout_metadata_for(meeting_id) @redis.hgetall("meeting:breakout:#{meeting_id}") end - + def has_breakout_rooms_for(meeting_id) @redis.exists("meeting:breakout:rooms:#{meeting_id}") end @@ -75,11 +76,11 @@ module BigBlueButton def num_events_for(meeting_id) @redis.llen("meeting:#{meeting_id}:recordings") end - + def events_for(meeting_id) @redis.lrange("meeting:#{meeting_id}:recordings", 0, num_events_for(meeting_id)) end - + def event_info_for(meeting_id, event) @redis.hgetall("recording:#{meeting_id}:#{event}") end @@ -135,6 +136,7 @@ module BigBlueButton end RECORDINGS_CHANNEL = "bigbluebutton:from-rap" + RAP_STATUS_LIST = "bigbluebutton:rap:status" def put_message(message_type, meeting_id, additional_payload = {}) events_xml = "#{$raw_recording_dir}/#{meeting_id}/events.xml" @@ -149,6 +151,11 @@ module BigBlueButton "meeting_id" => meeting_id }) @redis.publish RECORDINGS_CHANNEL, msg.to_json + + if $store_recording_status + @redis.lpush RAP_STATUS_LIST, msg.to_json + end + end def put_message_workflow(message_type, workflow, meeting_id, additional_payload = {}) @@ -221,7 +228,7 @@ module BigBlueButton MEETINGID = 'meetingId' MEETINGNAME = 'meetingName' ISBREAKOUT = 'isBreakout' - + def initialize(redis) @redis = redis end @@ -378,16 +385,16 @@ module BigBlueButton def delete_events(meeting_id) meeting_metadata = @redis.metadata_for(meeting_id) if (meeting_metadata != nil) - msgs = @redis.events_for(meeting_id) + msgs = @redis.events_for(meeting_id) msgs.each do |msg| - @redis.delete_event_info_for(meeting_id, msg) + @redis.delete_event_info_for(meeting_id, msg) end @redis.delete_events_for(meeting_id) end - @redis.delete_metadata_for(meeting_id) - @redis.delete_breakout_metadata_for(meeting_id) + @redis.delete_metadata_for(meeting_id) + @redis.delete_breakout_metadata_for(meeting_id) @redis.delete_breakout_rooms_for(meeting_id) end - + end end diff --git a/record-and-playback/core/lib/recordandplayback/workers/archive_worker.rb b/record-and-playback/core/lib/recordandplayback/workers/archive_worker.rb index 9f1058a2de1a52585318a553b34ff7184b13d8ee..747fbb79e1d89cc12638c4f43dae6768073b0fa4 100755 --- a/record-and-playback/core/lib/recordandplayback/workers/archive_worker.rb +++ b/record-and-playback/core/lib/recordandplayback/workers/archive_worker.rb @@ -27,12 +27,7 @@ module BigBlueButton @logger.info("Running archive worker for #{@full_id}") @publisher.put_archive_started(@meeting_id) - # Keep the status files so we can still track - # the recording progress. We need these at the moment - # for the monitoring tools to continue to work. - # We need to find a better way (storing in redis?) - # in the future to be able to monitor progress. - #remove_status_files + remove_status_files script = File.join(BigBlueButton.rap_scripts_path, 'archive', 'archive.rb') if @break_timestamp.nil? diff --git a/record-and-playback/core/lib/recordandplayback/workers/process_worker.rb b/record-and-playback/core/lib/recordandplayback/workers/process_worker.rb index 66fb0403132ac25714b072e3c6138b0e1af7d798..2f00d9a630665f435a9fe627ce28438565e46d25 100755 --- a/record-and-playback/core/lib/recordandplayback/workers/process_worker.rb +++ b/record-and-playback/core/lib/recordandplayback/workers/process_worker.rb @@ -29,12 +29,7 @@ module BigBlueButton script = File.join(BigBlueButton.rap_scripts_path, 'process', "#{@format_name}.rb") if File.exist?(script) - # Keep the status files so we can still track - # the recording progress. We need these at the moment - # for the monitoring tools to continue to work. - # We need to find a better way (storing in redis?) - # in the future to be able to monitor progress. - #remove_status_files + remove_status_files @publisher.put_process_started(@format_name, @meeting_id) diff --git a/record-and-playback/core/lib/recordandplayback/workers/publish_worker.rb b/record-and-playback/core/lib/recordandplayback/workers/publish_worker.rb index 6e658f14ec3d6c136eace80e8d666cc45cf5888f..5c676aa34b5bf4480afdddbc28c014afd31ef729 100755 --- a/record-and-playback/core/lib/recordandplayback/workers/publish_worker.rb +++ b/record-and-playback/core/lib/recordandplayback/workers/publish_worker.rb @@ -36,12 +36,7 @@ module BigBlueButton # If the publish directory exists, the script does nothing FileUtils.rm_rf("#{@recording_dir}/publish/#{@format_name}/#{@full_id}") - # Keep the status files so we can still track - # the recording progress. We need these at the moment - # for the monitoring tools to continue to work. - # We need to find a better way (storing in redis?) - # in the future to be able to monitor progress. - #remove_status_files + remove_status_files # For legacy reasons, the meeting ID passed to the publish script contains # the playback format name. diff --git a/record-and-playback/core/lib/recordandplayback/workers/sanity_worker.rb b/record-and-playback/core/lib/recordandplayback/workers/sanity_worker.rb index 04544bbfdb9541e721d8b183de0865dc88f853a0..16e7e5874c7ed91c9316714b1fc4619df33e05a3 100755 --- a/record-and-playback/core/lib/recordandplayback/workers/sanity_worker.rb +++ b/record-and-playback/core/lib/recordandplayback/workers/sanity_worker.rb @@ -27,12 +27,7 @@ module BigBlueButton @logger.info("Running sanity worker for #{@full_id}") @publisher.put_sanity_started(@meeting_id) - # Keep the status files so we can still track - # the recording progress. We need these at the moment - # for the monitoring tools to continue to work. - # We need to find a better way (storing in redis?) - # in the future to be able to monitor progress. - #remove_status_files + remove_status_files script = File.join(BigBlueButton.rap_scripts_path, 'sanity', 'sanity.rb') if @break_timestamp.nil? diff --git a/record-and-playback/core/scripts/bigbluebutton.yml b/record-and-playback/core/scripts/bigbluebutton.yml index b600778d231a37df98c993f299f920b500d68c65..8d58a20ddece0528e7d0d834664c7304204fa9f9 100755 --- a/record-and-playback/core/scripts/bigbluebutton.yml +++ b/record-and-playback/core/scripts/bigbluebutton.yml @@ -22,6 +22,12 @@ redis_port: 6379 # redis_workers_host: 127.0.0.1 # redis_workers_port: 6379 +# Set to true to insert recording process status into +# redis list with key "store_recording_status: true". +# This is useful if you want to track progress status +# and have another script process it. +store_recording_status: false + # Sequence of recording steps. Keys are the current step, values # are the next step(s). Examples: # current_step: next_step