cpee-logging-xes-yaml 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67349c15e1ff6d822febc79b960677462af169351a9b51c2cd44d55108e7d648
4
- data.tar.gz: 363d7980e7e6c545bab3012471bd710b90b4e72b3601a6f7acccaceba9681503
3
+ metadata.gz: b2f390c43e6c32b2abead85f3ead4fa971dda1cb24226c784a7048024c364d53
4
+ data.tar.gz: 4a5b8ffceb7522522568a8499d35118942dfb74a4521df7e45ebec646667cd20
5
5
  SHA512:
6
- metadata.gz: b45a7d336194bcc4fcd797762dcfd8b01f07576beec18f32d6815702058013963270b88b0c589da51f435058bd0e104d89fbdac80d3247eaa2410c936aa25236
7
- data.tar.gz: e4b0e88672ff0221fecbc8821a12b1bb3776386b27c3d1fd02f9645d86fd8612b004799892ff4e0a5f170d5ea2c69175083b09f25d7d22950e2fc14bf2f2a005
6
+ metadata.gz: 9b472f1e1258dd2c6d88156a088c1e97e79b208bea4b59df1933b5f818443094c19b16c2f6c6f9d4510d785bfb7c9c8bcb1288adcf8f148e3c8ce6d2e10efc06
7
+ data.tar.gz: b5d446c669f4e2e95323dd3c319d97926dca9690746b852855b5ce90b12c91711a6a63e4f4c4c62a9a6db655a68fde18d9e2c28571b57e17de1796b5078df250
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee-logging-xes-yaml"
3
- s.version = "1.5.0"
3
+ s.version = "1.5.1"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0-or-later"
6
6
  s.summary = "Logging for the cloud process execution engine (cpee.org)"
@@ -27,6 +27,43 @@ module CPEE
27
27
 
28
28
  SERVER = File.expand_path(File.join(__dir__,'implementation.xml'))
29
29
 
30
+ TEMPLATE_XES_XML_START = <<-END
31
+ <log xmlns="http://www.xes-standard.org/" xes.version="2.0" xes.features="nested-attributes">
32
+ <string key="creator" value="cpee.org"/>
33
+ <extension name="Time" prefix="time" uri="http://www.xes-standard.org/time.xesext"/>
34
+ <extension name="Concept" prefix="concept" uri="http://www.xes-standard.org/concept.xesext"/>
35
+ <extension name="ID" prefix="id" uri="http://www.xes-standard.org/identity.xesext"/>
36
+ <extension name="Lifecycle" prefix="lifecycle" uri="http://www.xes-standard.org/lifecycle.xesext"/>
37
+ <extension name="CPEE" prefix="cpee" uri="http://cpee.org/cpee.xesext"/>
38
+ <extension name="stream" prefix="stream" uri="https://cpee.org/datastream/datastream.xesext"/>
39
+ <global scope="trace">
40
+ <string key="concept:name" value="__NOTSPECIFIED__"/>
41
+ <string key="cpee:name" value="__NOTSPECIFIED__"/>
42
+ </global>
43
+ <global scope="event">
44
+ <string key="concept:name" value="__NOTSPECIFIED__"/>
45
+ <string key="concept:instance" value="-1"/>
46
+ <string key="concept:endpoint" value="__NOTSPECIFIED__"/>
47
+ <string key="id:id" value="__NOTSPECIFIED__"/>
48
+ <string key="lifecycle:transition" value="complete" />
49
+ <string key="cpee:lifecycle:transition" value="activity/calling"/>
50
+ <date key="time:timestamp" value="__NOTSPECIFIED__"/>
51
+ </global>
52
+ END
53
+ TEMPLATE_XES_XML_TRC = <<-END
54
+ <trace xmlns="http://www.xes-standard.org/"/>
55
+ END
56
+ TEMPLATE_XES_XML_EVT = <<-END
57
+ <event xmlns="http://www.xes-standard.org/"/>
58
+ END
59
+ TEMPLATE_XES_XML_MID = <<-END
60
+ <trace>
61
+ END
62
+ TEMPLATE_XES_XML_END = <<-END
63
+ </trace>
64
+ </log>
65
+ END
66
+
30
67
  class HeaderAndFile #{{{
31
68
  def initialize(header, io)
32
69
  @header = header
@@ -91,6 +128,101 @@ module CPEE
91
128
  end
92
129
  end
93
130
 
131
+ class DownloadXML < Riddl::Implementation
132
+ def self::rec_type(it) #{{{
133
+ if it.is_a?(String) && it =~ /^[\dT:+.-]+$/ && (Time.parse(it) rescue nil)
134
+ 'x:date'
135
+ elsif it.is_a? Float
136
+ 'x:float'
137
+ elsif it.is_a? Integer
138
+ 'x:int'
139
+ elsif it.is_a? String
140
+ 'x:string'
141
+ end
142
+ end #}}}
143
+
144
+ def self::format_secs(s) #{{{
145
+ return 'long' if s.infinite?
146
+ s = s.to_i
147
+ m = s / 60
148
+ m < 0 ? "#{s}s" : "#{'%02d' % m}m #{'%02d' % (s%60)}s"
149
+ end #}}}
150
+
151
+ def self::rec_a_insert(event,node,level=0) #{{{
152
+ event.each do |i|
153
+ tnode = node
154
+ case i
155
+ when Hash
156
+ tnode = node.add('x:list', 'key' => 'element')
157
+ self::rec_insert(i,tnode,level+1)
158
+ when Array
159
+ tnode = node.add('x:list', 'key' => 'element')
160
+ self::rec_insert(i,tnode,level+1)
161
+ when String
162
+ node.add(rec_type(i), 'key' => 'element', 'value' => (i.empty? ? "__UNSPECIFIED__" : i))
163
+ when Integer, Float
164
+ node.add(rec_type(i), 'key' => 'element', 'value' => i)
165
+ end
166
+ end
167
+ end #}}}
168
+
169
+ def self::rec_insert(event,node,level=0) #{{{
170
+ event.each do |k,v|
171
+ case v
172
+ when String
173
+ node.add(rec_type(v), 'key' => k, 'value' => (v.empty? ? "__UNSPECIFIED__" : v))
174
+ when Integer
175
+ node.add(rec_type(v), 'key' => k, 'value' => v)
176
+ when Float
177
+ node.add(rec_type(v), 'key' => k, 'value' => v)
178
+ when Array
179
+ tnode = node.add('x:list', 'key' => k)
180
+ self::rec_a_insert(v,tnode,level+1)
181
+ when Hash
182
+ tnode = node.add('x:list', 'key' => k)
183
+ self::rec_insert(v,tnode)
184
+ end
185
+ end
186
+ end #}}}
187
+
188
+ def response
189
+ opts = @a[0]
190
+ fname = File.join(opts[:log_dir],@r[-1]).sub(/xml$/,'yaml')
191
+ if File.exist?(fname)
192
+ body = StringIO.new
193
+
194
+ body.write(TEMPLATE_XES_XML_START)
195
+
196
+ io = File.open(fname)
197
+ YAML.load_stream(io) do |e|
198
+ if trace = e.dig('log','trace')
199
+ xml = XML::Smart.string(TEMPLATE_XES_XML_TRC)
200
+ xml.register_namespace 'x', 'http://www.xes-standard.org/'
201
+ trace.each do |t,tv|
202
+ xml.find('//x:trace').each do |ele|
203
+ ele.add('x:string', 'key' => t, 'value' => tv)
204
+ end
205
+ end
206
+ body.write(' ' + xml.root.dump.gsub(/\n/,"\n ") + "\n")
207
+ body.write(TEMPLATE_XES_XML_MID)
208
+ end
209
+ if e.dig('event')
210
+ xml = XML::Smart.string(TEMPLATE_XES_XML_EVT)
211
+ xml.register_namespace 'x', 'http://www.xes-standard.org/'
212
+ DownloadXML::rec_insert(e.dig('event'),xml.root)
213
+ body.write(' ' + xml.root.dump.gsub(/\n/,"\n ") + "\n")
214
+ end
215
+ end
216
+ body.write(TEMPLATE_XES_XML_END)
217
+ body.rewind
218
+
219
+ Riddl::Parameter::Complex::new('log','application/xml',body)
220
+ else
221
+ @status = 404
222
+ end
223
+ end
224
+ end
225
+
94
226
  class Handler < Riddl::Implementation
95
227
  def response
96
228
  opts = @a[0]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpee-logging-xes-yaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler