var datum = (dsum/dt).toFixed(4);
var preamble = match[1].trim().split(' ');
var timestamp = preamble[0].replace('_','T');
- var found = false;
- for( var i=0; i < jobGraphData.length; i++ ) {
- if( jobGraphData[i]['t'] == timestamp ) {
- jobGraphData[i][series] = datum;
- found = true;
- break;
- }
- }
- if( !found ){
+ var xpoints = $.grep( jobGraphData, function(e){ return e['t'] === timestamp; });
+ if(xpoints.length) {
+ // xpoints[0] is the x point that that matched the timestamp and so already existed: add the new datum
+ xpoints[0][series] = datum;
+ } else {
var entry = { 't': timestamp };
entry[series] = datum;
jobGraphData.push( entry );
}
}
}
+
+$(document).on('arv-log-event', '#log_graph_div', function(event, eventData) {
+ if( eventData.properties.text ) {
+ var series_length = jobGraphSeries.length;
+ processLogLineForChart( eventData.properties.text, jobGraphSeries, jobGraphData);
+ if( series_length < jobGraphSeries.length) {
+ // series have changed, draw entirely new graph
+ $('#log_graph_div').html('');
+ jobGraph = Morris.Line({
+ element: 'log_graph_div',
+ data: jobGraphData,
+ xkey: 't',
+ ykeys: jobGraphSeries,
+ labels: jobGraphSeries
+ });
+ } else {
+ jobGraph.setData( jobGraphData );
+ }
+ }
+
+} );
\ No newline at end of file
return results
end
- def stderr_log_records(job_uuids)
- Log.where(event_type: 'stderr',
- object_uuid: job_uuids).order('id DESC').results
+ def stderr_log_records(job_uuids, extra_filters = nil)
+ filters = [["event_type", "=", "stderr"],
+ ["object_uuid", "in", job_uuids]]
+ filters += extra_filters if extra_filters
+ last_entry = Log.order('id DESC').limit(1).filter(filters).results.first
+ if last_entry
+ filters += [["event_at", ">=", last_entry.event_at - 3.minutes]]
+ Log.order('id DESC')
+ .limit(10000)
+ .filter(filters)
+ .results
+ else
+ []
+ end
end
end
<% if !@object.log %>
-<div id="log_graph_div" data-object-uuid="<%= @object.uuid %>"></div>
+<div id="log_graph_div"
+ class="arv-log-event-listener"
+ data-object-uuid="<%= @object.uuid %>"></div>
<% log_history = stderr_log_history([@object.uuid]) %>
<%= javascript_tag do %>
var jobGraphData = [];
var jobGraphSeries = [];
- <% stderr_log_records([@object.uuid]).each.with_index do |log_record, index| %>
- <% puts log_record.to_yaml %>
+ <% stderr_log_records([@object.uuid],[['properties','~','crunchstat:.*-- interval']])
+ .each.with_index do |log_record, index| %>
var logLine = '<%=j log_record.properties[:text] %>';
processLogLineForChart( logLine, jobGraphSeries, jobGraphData );
<% end %>