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 #{{{