9799: Fix up live_log_lines so it works for all work units.
authorTom Clegg <tom@curoverse.com>
Tue, 30 Aug 2016 20:30:17 +0000 (16:30 -0400)
committerTom Clegg <tom@curoverse.com>
Wed, 31 Aug 2016 02:05:36 +0000 (22:05 -0400)
apps/workbench/app/models/container_work_unit.rb
apps/workbench/app/models/job.rb
apps/workbench/app/models/proxy_work_unit.rb
apps/workbench/test/integration/websockets_test.rb

index 42a4f4bd5b6110f9ad65260ba66c2b2037de8642..c8af093e8f7ebb8af41f457770be4cda9afd04e7 100644 (file)
@@ -134,13 +134,6 @@ class ContainerWorkUnit < ProxyWorkUnit
     [get_combined(:uuid), get(:uuid)].uniq
   end
 
-  def live_log_lines(limit=2000)
-    event_types = ["stdout", "stderr", "arv-mount", "crunch-run"]
-    log_lines = Log.where(event_type: event_types, object_uuid: log_object_uuids).order("id DESC").limit(limit)
-    log_lines.results.reverse.
-      flat_map { |log| log.properties[:text].split("\n") rescue [] }
-  end
-
   def render_log
     collection = Collection.find(log_collection) rescue nil
     if collection
index 73f1f63be4c7d5dcb5fa33e390d722c87b16e0b0..bf202c4eaaadffbd92f1a44d1160c3bd8c51572e 100644 (file)
@@ -43,8 +43,7 @@ class Job < ArvadosBase
   end
 
   def stderr_log_query(limit=nil)
-    query = Log.where(event_type: "stderr", object_uuid: self.uuid)
-               .order("id DESC")
+    query = Log.where(object_uuid: self.uuid).order("created_at DESC")
     query = query.limit(limit) if limit
     query
   end
index feab5d8eb4a22e599bc328978d2ad5e0dcae4781..11ec0ee196326d6a5c7d06cf0f0455a11fc9b167 100644 (file)
@@ -332,6 +332,15 @@ class ProxyWorkUnit < WorkUnit
     [uuid]
   end
 
+  def live_log_lines(limit)
+    Log.where(object_uuid: log_object_uuids).
+      order("created_at DESC").
+      limit(limit).
+      select { |log| log.properties[:text].is_a? String }.
+      reverse.
+      flat_map { |log| log.properties[:text].split("\n") }
+  end
+
   protected
 
   def get key, obj=@proxied
index 3cfd792e8da9bf38d746e346f7339e7f1cbda755..54712d396a84e0ac75445b84232b036fe28f1333 100644 (file)
@@ -201,7 +201,6 @@ class WebsocketTest < ActionDispatch::IntegrationTest
 
   test "test running job with just a few previous log records" do
     job = api_fixture("jobs")['running']
-    visit page_with_token("active", "/jobs/#{job['uuid']}")
 
     # Create just one old log record
     dispatch_log(owner_uuid: job['owner_uuid'],
@@ -209,7 +208,7 @@ class WebsocketTest < ActionDispatch::IntegrationTest
                  event_type: "stderr",
                  properties: {"text" => "Historic log message"})
 
-    click_link("Log")
+    visit page_with_token("active", "/jobs/#{job['uuid']}\#Log")
 
     # Expect "all" historic log records because we have less than
     # default Rails.configuration.running_job_log_records_to_fetch count
@@ -224,25 +223,23 @@ class WebsocketTest < ActionDispatch::IntegrationTest
   end
 
   test "test running job with too many previous log records" do
-    Rails.configuration.running_job_log_records_to_fetch = 5
-
+    max = 5
+    Rails.configuration.running_job_log_records_to_fetch = max
     job = api_fixture("jobs")['running']
-    visit page_with_token("active", "/jobs/#{job['uuid']}")
 
-    # Create Rails.configuration.running_job_log_records_to_fetch + 1 log records
-    (0..Rails.configuration.running_job_log_records_to_fetch).each do |count|
+    # Create max+1 log records
+    (0..max).each do |count|
       dispatch_log(owner_uuid: job['owner_uuid'],
                    object_uuid: job['uuid'],
                    event_type: "stderr",
                    properties: {"text" => "Old log message #{count}"})
     end
 
-    # Go to log tab, which results in subscribing to websockets
-    click_link("Log")
+    visit page_with_token("active", "/jobs/#{job['uuid']}\#Log")
 
     # Expect all but the first historic log records,
     # because that was one too many than fetch count.
-    (1..Rails.configuration.running_job_log_records_to_fetch).each do |count|
+    (1..max).each do |count|
       assert_text "Old log message #{count}"
     end
     assert_no_text 'Old log message 0'