cpee-logging-xes-yaml 1.5.0 → 1.5.2

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: c27951cb51fe4d76a704f6b3d56c05503cfe760ebde414a2c6bfdb2991e2566d
4
+ data.tar.gz: e596c6b80c788fed3d1449da6398b4aeb19651894bc3f774b96928b31ab79a8d
5
5
  SHA512:
6
- metadata.gz: b45a7d336194bcc4fcd797762dcfd8b01f07576beec18f32d6815702058013963270b88b0c589da51f435058bd0e104d89fbdac80d3247eaa2410c936aa25236
7
- data.tar.gz: e4b0e88672ff0221fecbc8821a12b1bb3776386b27c3d1fd02f9645d86fd8612b004799892ff4e0a5f170d5ea2c69175083b09f25d7d22950e2fc14bf2f2a005
6
+ metadata.gz: 70a342c2e56adcf99095d8cb9a0170719a3d4951dd3110c93b1f1adf871363a43d400be829344f8c41bc65e65827ef42118628863b2e545930e80975d90a578b
7
+ data.tar.gz: a01d079c9a8d6a4fb5aac1ddf10900ba9677ebe3d25a1b299c51d6eb8e2afce85001427bc7df85ca007cc7ffa709f5c5fff10fdeb9fee46b073f99bc97045fb7
@@ -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.2"
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,47 @@ module CPEE
27
27
 
28
28
  SERVER = File.expand_path(File.join(__dir__,'implementation.xml'))
29
29
 
30
+ ### Pieces for writing XML{{{
31
+ TEMPLATE_XES_XML_START = <<-END
32
+ <log xmlns="http://www.xes-standard.org/" xes.version="2.0" xes.features="nested-attributes">
33
+ <string key="creator" value="cpee.org"/>
34
+ <extension name="Time" prefix="time" uri="http://www.xes-standard.org/time.xesext"/>
35
+ <extension name="Concept" prefix="concept" uri="http://www.xes-standard.org/concept.xesext"/>
36
+ <extension name="ID" prefix="id" uri="http://www.xes-standard.org/identity.xesext"/>
37
+ <extension name="Lifecycle" prefix="lifecycle" uri="http://www.xes-standard.org/lifecycle.xesext"/>
38
+ <extension name="CPEE" prefix="cpee" uri="http://cpee.org/cpee.xesext"/>
39
+ <extension name="stream" prefix="stream" uri="https://cpee.org/datastream/datastream.xesext"/>
40
+ <global scope="trace">
41
+ <string key="concept:name" value="__NOTSPECIFIED__"/>
42
+ <string key="cpee:name" value="__NOTSPECIFIED__"/>
43
+ </global>
44
+ <global scope="event">
45
+ <string key="concept:name" value="__NOTSPECIFIED__"/>
46
+ <string key="concept:instance" value="-1"/>
47
+ <string key="concept:endpoint" value="__NOTSPECIFIED__"/>
48
+ <string key="id:id" value="__NOTSPECIFIED__"/>
49
+ <string key="lifecycle:transition" value="complete" />
50
+ <string key="cpee:lifecycle:transition" value="activity/calling"/>
51
+ <date key="time:timestamp" value="__NOTSPECIFIED__"/>
52
+ </global>
53
+ END
54
+ TEMPLATE_XES_XML_TRC = <<-END
55
+ <trace xmlns="http://www.xes-standard.org/"/>
56
+ END
57
+ TEMPLATE_XES_XML_EVT = <<-END
58
+ <event xmlns="http://www.xes-standard.org/"/>
59
+ END
60
+ TEMPLATE_XES_XML_MID = <<-END
61
+ <trace>
62
+ END
63
+ TEMPLATE_XES_XML_MID_END = <<-END
64
+ </trace>
65
+ END
66
+ TEMPLATE_XES_XML_END = <<-END
67
+ </log>
68
+ END
69
+ #}}}
70
+
30
71
  class HeaderAndFile #{{{
31
72
  def initialize(header, io)
32
73
  @header = header
@@ -77,7 +118,7 @@ module CPEE
77
118
  private :append_to_outbuf
78
119
  end #}}}
79
120
 
80
- class DownloadYAML < Riddl::Implementation
121
+ class DownloadYAML < Riddl::Implementation #{{{
81
122
  def response
82
123
  opts = @a[0]
83
124
  fname = File.join(opts[:log_dir],@r[-1])
@@ -89,6 +130,109 @@ module CPEE
89
130
  @status = 404
90
131
  end
91
132
  end
133
+ end #}}}
134
+
135
+ class DownloadXML < Riddl::Implementation
136
+ def self::rec_type(it) #{{{
137
+ if it.is_a?(String) && it =~ /^[\dT:+.-]+$/ && (Time.parse(it) rescue nil)
138
+ 'x:date'
139
+ elsif it.is_a? Float
140
+ 'x:float'
141
+ elsif it.is_a? Integer
142
+ 'x:int'
143
+ elsif it.is_a? String
144
+ 'x:string'
145
+ end
146
+ end #}}}
147
+
148
+ def self::format_secs(s) #{{{
149
+ return 'long' if s.infinite?
150
+ s = s.to_i
151
+ m = s / 60
152
+ m < 0 ? "#{s}s" : "#{'%02d' % m}m #{'%02d' % (s%60)}s"
153
+ end #}}}
154
+
155
+ def self::rec_a_insert(event,node,level=0) #{{{
156
+ event.each do |i|
157
+ tnode = node
158
+ case i
159
+ when Hash
160
+ tnode = node.add('x:list', 'key' => 'element')
161
+ self::rec_insert(i,tnode,level+1)
162
+ when Array
163
+ tnode = node.add('x:list', 'key' => 'element')
164
+ self::rec_insert(i,tnode,level+1)
165
+ when String
166
+ node.add(rec_type(i), 'key' => 'element', 'value' => (i.empty? ? "__UNSPECIFIED__" : i))
167
+ when Integer, Float
168
+ node.add(rec_type(i), 'key' => 'element', 'value' => i)
169
+ end
170
+ end
171
+ end #}}}
172
+
173
+ def self::rec_insert(event,node,level=0) #{{{
174
+ event.each do |k,v|
175
+ case v
176
+ when String
177
+ node.add(rec_type(v), 'key' => k, 'value' => (v.empty? ? "__UNSPECIFIED__" : v))
178
+ when Integer
179
+ node.add(rec_type(v), 'key' => k, 'value' => v)
180
+ when Float
181
+ node.add(rec_type(v), 'key' => k, 'value' => v)
182
+ when Array
183
+ tnode = node.add('x:list', 'key' => k)
184
+ self::rec_a_insert(v,tnode,level+1)
185
+ when Hash
186
+ tnode = node.add('x:list', 'key' => k)
187
+ self::rec_insert(v,tnode)
188
+ end
189
+ end
190
+ end #}}}
191
+
192
+ def response
193
+ opts = @a[0]
194
+ fname = File.join(opts[:log_dir],@r[-1]).sub(/xml$/,'yaml')
195
+ hname = File.join(opts[:log_dir],@r[-1]).sub(/xml$/,'header')
196
+ if File.exist?(fname)
197
+ body = StringIO.new
198
+
199
+ body.write(TEMPLATE_XES_XML_START)
200
+
201
+ if File.exist?(hname)
202
+ hio = File.open(hname)
203
+ YAML.load_stream(hio) do |e|
204
+ if trace = e.dig('log','trace')
205
+ xml = XML::Smart.string(TEMPLATE_XES_XML_TRC)
206
+ xml.register_namespace 'x', 'http://www.xes-standard.org/'
207
+ trace.each do |t,tv|
208
+ xml.find('//x:trace').each do |ele|
209
+ ele.add('x:string', 'key' => t, 'value' => tv)
210
+ end
211
+ end
212
+ body.write(' ' + xml.root.dump.gsub(/\n/,"\n ") + "\n")
213
+ end
214
+ end
215
+ end
216
+
217
+ io = File.open(fname)
218
+ body.write(TEMPLATE_XES_XML_MID)
219
+ YAML.load_stream(io) do |e|
220
+ if e.dig('event')
221
+ xml = XML::Smart.string(TEMPLATE_XES_XML_EVT)
222
+ xml.register_namespace 'x', 'http://www.xes-standard.org/'
223
+ DownloadXML::rec_insert(e.dig('event'),xml.root)
224
+ body.write(' ' + xml.root.dump.gsub(/\n/,"\n ") + "\n")
225
+ end
226
+ end
227
+ body.write(TEMPLATE_XES_XML_MID_END)
228
+ body.write(TEMPLATE_XES_XML_END)
229
+ body.rewind
230
+
231
+ Riddl::Parameter::Complex::new('log','application/xml',body)
232
+ else
233
+ @status = 404
234
+ end
235
+ end
92
236
  end
93
237
 
94
238
  class Handler < Riddl::Implementation
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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler