log/server.rb in cpee-1.3.195 vs log/server.rb in cpee-1.3.196

- old
+ new

@@ -10,64 +10,81 @@ require 'riddl/utils/downloadify' require 'riddl/utils/turtle' class Logging < Riddl::Implementation #{{{ + LOGTEMPLATE = <<-END + <log xmlns="http://www.xes-standard.org/" xes.version="2.0" xes.features="nested-attributes"> + <extension name="Time" prefix="time" uri="http://www.xes-standard.org/time.xesext"/> + <extension name="Concept" prefix="concept" uri="http://www.xes-standard.org/concept.xesext"/> + <extension name="Organizational" prefix="org" uri="http://www.xes-standard.org/org.xesext"/> + <trace/> + </log> + END def response topic = @p[1].value - event = @p[2].value - if(topic == 'activity' && (event=='done' || event == 'calling')) + event_name = @p[2].value + if(topic == 'activity' && (event_name=='done' || event_name == 'calling')) log_dir = ::File.dirname(__FILE__) + "/logs" instancenr = @h['CPEE_INSTANCE'].split('/').last notification = JSON.parse(@p[3].value) + uuid = notification['instance_uuid'] parameters = notification['parameters'] - log_hash = notification['log_hash'] - Dir.mkdir(log_dir+'/'+instancenr) unless Dir.exist?(log_dir+'/'+instancenr) - unless File.exist?(log_dir+'/'+instancenr+'/log.xes') - FileUtils.cp(::File.dirname(__FILE__)+'/template.xes', log_dir+'/'+instancenr+'/log.xes') - XML::Smart.modify(log_dir+'/'+instancenr+'/log.xes') do |xml| + Dir.mkdir(log_dir+'/'+uuid) unless Dir.exist?(log_dir+'/'+uuid) + time_added=false + XML::Smart.modify(log_dir+'/'+uuid+'/log.xes',LOGTEMPLATE) do |xml| + begin trace = xml.find("/xmlns:log/xmlns:trace").first - trace.add 'string', :key => "concept:name", :value => "Instance #{instancenr}" + trace.add 'string', :key => "concept:name", :value => "Instance #{instancenr}" if trace.find('xmlns:string').empty? + event = trace.add "event" + event.add 'string', :key => "concept:name", :value => parameters["label"] if parameters && parameters.has_key?('label') + event.add 'string', :key => "concept:instance", :value => notification["endpoint"] if notification["endpoint"] + event.add 'string', :key => "id:id", :value => notification["activity"] + event.add 'string', :key => "lifecycle:transition", :value => event_name=='done'?"complete":"start" + data_send = ((parameters[:arguments].nil? ? [] : parameters[:arguments]) rescue []) + if data_send.any? + list = event.add 'list', :key => "data_send" + data_send.each do |k,v| + list.add 'string', :key => k , :value => v + end + end + event.add 'date', :key => "time:timestamp", :value => Time.now unless time_added + rescue => e + puts e.message + puts e.backtrace end end - + elsif(event_name=='receiving') + log_dir = ::File.dirname(__FILE__) + "/logs" + instancenr = @h['CPEE_INSTANCE'].split('/').last + notification = JSON.parse(@p[3].value) + uuid = notification['instance_uuid'] + receiving = notification['received'] + Dir.mkdir(log_dir+'/'+uuid) unless Dir.exist?(log_dir+'/'+uuid) time_added=false - XML::Smart.modify(log_dir+'/'+instancenr+'/log.xes') do |xml| - trace = xml.find("/xmlns:log/xmlns:trace").first - event = trace.add "event" - event.add 'string', :key => "concept:name", :value => parameters["label"] - event.add 'string', :key => "lifecycle:transition", :value => event=='done'?"complete":"start" - data_send = ((parameters[:arguments].nil? ? [] : parameters[:arguments]) rescue []) - if data_send.any? - list = event.add 'list', :key => "data_send" - data_send.each do |k,v| - list.add 'string', :key => k , :value => v - end - end - if log_hash.has_key?("data_received") - log_hash["data_received"].delete_if do |e| - if e.keys[0]=="timestamp" - event.add 'date', :key => "time:timestamp", :value => e.values[0] - time_added=true - true - else - false + XML::Smart.modify(log_dir+'/'+uuid+'/log.xes',LOGTEMPLATE) do |xml| + begin + trace = xml.find("/xmlns:log/xmlns:trace").first + trace.add 'string', :key => "concept:name", :value => "Instance #{instancenr}" if trace.find('xmlns:string').empty? + event = trace.add "event" + event.add 'string', :key => "concept:instance", :value => notification["endpoint"] if notification["endpoint"] + event.add 'string', :key => "id:id", :value => notification["activity"] + event.add 'string', :key => "lifecycle:transition", :value => "unknown" + if receiving.any? + list = event.add 'list', :key => "data_received" + receiving.each do |k,v| + list.add 'string', :key => k, :value => v end end - if log_hash["data_received"].length > 0 - list = event.add 'list', :key => "data_received" - log_hash["data_received"].each{|e| list.add 'string', :key => e.keys[0] , :value => e.values[0]} - end + event.add 'date', :key => "time:timestamp", :value => Time.now unless time_added + rescue => e + puts e.message + puts e.backtrace end - event.add 'date', :key => "time:timestamp", :value => Time.now unless time_added - end + end else pp "Something wrong" end - - - - end end #}}} Riddl::Server.new(::File.dirname(__FILE__) + '/log.xml', :host => "cpee.org", :port => 9299) do #{{{