cpee-logging-xes-yaml 1.3.2 → 1.3.3

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: 99c79d272d96fc0194b782ae5f93492b7a50f5daac07cb60da447d2be314cbc8
4
- data.tar.gz: ceb9ac1ca98aa9bae3fc4fb15c3e617ec306fa00bc62e8f627888169ee8ca703
3
+ metadata.gz: 5d0f1a3d5cdf89d14a2c7ff96d36f0d331496ca095d4c395c49c770e827ed279
4
+ data.tar.gz: 67c87266391555e7dd326420e341549314d3b111b036637c965e42300972489d
5
5
  SHA512:
6
- metadata.gz: fe2f39dad68c6a86308811d25df6a1e41e9133984c1c67c6512240128abce5fa57727f915615cbe2fae21ef61bead8ab20b36e5c8bbab43181d7a9a38d116459
7
- data.tar.gz: 94fa1197bc3e2b820464c947204aaa3ec376c13d90a87f3f371c11c39548aee98c4ec6fc71de28969ef319e07df780eb024db674e5777e33796cfc8a62b9dc51
6
+ metadata.gz: 97bdab2b3cfaafb419e5dd20a87eab3ec096a08a15c22fac43f1a7209e3a440bb31246007c85f38dc51ed60ed28115d651191c4de24aae6d8480341e7d286cc1
7
+ data.tar.gz: 434309fe76ed0653a8af989e4fd074c21d2164f37518d4808c54fe8bb77bd8c86b2bf1f6aa39fa556070a68d32a13b4262052a7caa2089237e84b14d7394f88b
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee-logging-xes-yaml"
3
- s.version = "1.3.2"
3
+ s.version = "1.3.3"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
6
6
  s.summary = "Logging for the cloud process execution engine (cpee.org)"
@@ -18,10 +18,9 @@ require 'weel'
18
18
  require 'digest/sha1'
19
19
 
20
20
  class StreamPoint
21
- attr_accessor :value, :timestamp, :source, :meta
22
- attr_reader :id
21
+ attr_accessor :value, :timestamp, :source, :meta, :id
23
22
 
24
- def initialize(id)
23
+ def initialize(id=nil)
25
24
  @id = id
26
25
  @value = nil
27
26
  @timestamp = Time.now
@@ -101,6 +100,7 @@ module CPEE
101
100
  tp = nil
102
101
  if val.is_a? StreamPoint
103
102
  tp = val
103
+ tp.id = tid if tp.id.nil?
104
104
  tp.source = tso if tp.source.nil?
105
105
  else
106
106
  tp = StreamPoint.new(tid)
@@ -24,8 +24,10 @@ require 'xml/smart'
24
24
  require 'yaml'
25
25
  require 'typhoeus'
26
26
  require 'stringio'
27
+ require 'typhoeus'
28
+ require 'date'
27
29
 
28
- def wrap(s, width=78, indent=18, extra_indent=4)
30
+ def wrap(s, width=78, indent=19, extra_indent=4)
29
31
  lines = []
30
32
  line, s = s[0..indent-2], s[indent..-1]
31
33
  s.split(/\n/).each do |ss|
@@ -91,20 +93,69 @@ def react(name,copy=false,deep=0)
91
93
  end
92
94
  end
93
95
 
96
+ def extract(path)
97
+ if path =~ /^http.*/
98
+ response = Typhoeus.get(path)
99
+ if response.success?
100
+ text = response.response_body
101
+ end
102
+ else
103
+ text = File.read(File.join(__dir__,path))
104
+ end
105
+ yaml = Psych.load_stream(text)
106
+ changes = []
107
+
108
+ info = yaml.shift()
109
+ uuid = info.dig('log','trace','cpee:instance')
110
+ yaml.each() do |el|
111
+ if(el['event']['id:id'] == 'external' && (el.dig('event','cpee:lifecycle:transition') == 'endpoints/change' || el.dig('event','cpee:lifecycle:transition') == 'dataelements/change'|| el.dig('event','cpee:lifecycle:transition') == 'description/change'))
112
+ changes.push(el)
113
+ end
114
+ end
115
+ #puts "found #{changes.size()} changes"
116
+
117
+ changes.sort!() {|a,b| DateTime.strptime(a.dig('event','time:timestamp'),'%Y-%m-%dT%H:%M:%S.%L%:z') <=> DateTime.strptime(b.dig('event','time:timestamp'),'%Y-%m-%dT%H:%M:%S.%L%:z')}
118
+ #p changes.map() {|el| el.dig('event','time:timestamp')}
119
+
120
+ de = ep = desc = nil
121
+ counter = 0
122
+ changes.each() do |change|
123
+ if(change.dig('event','cpee:lifecycle:transition') == 'dataelements/change') then
124
+ de = change.dig('event','data')
125
+ end
126
+ if(change.dig('event','cpee:lifecycle:transition') == 'endpoints/change') then
127
+ ep = change.dig('event','data')
128
+ end
129
+ if(change.dig('event','cpee:lifecycle:transition') == 'description/change') then
130
+ desc = change.dig('event','cpee:description')
131
+ end
132
+ if(change.dig('event','cpee:lifecycle:transition') == 'description/change' || change.dig('event','cpee:lifecycle:transition') == 'endpoints/change') then
133
+ yield uuid, de, ep, desc, counter if block_given?
134
+ counter += 1
135
+ end
136
+ end
137
+
138
+ [de, ep, desc]
139
+ end
140
+
94
141
  exname = File.basename($0)
95
142
 
96
143
  ARGV.options { |opt|
97
144
  opt.summary_indent = ' ' * 2
98
- opt.summary_width = 15
145
+ opt.summary_width = 16
99
146
  opt.banner = "Usage:\n#{opt.summary_indent}#{exname} new [DIR] | view [URI] | copy [URI]\n"
100
147
  opt.on("Options:")
101
148
  opt.on("--help", "-h", "This text") { puts opt; exit }
102
149
  opt.on("")
103
- opt.on(wrap("new [DIR] scaffolds a sample logging service. Add a handler to a cpee instance to experience the pleasure.",78,18,0))
150
+ opt.on(wrap("new [DIR] scaffolds a sample logging service. Add a handler to a cpee instance to experience the pleasure."))
151
+ opt.on("")
152
+ opt.on(wrap("view [DIR] view the dependencies between processes and subprocesses. Works for local and remote logs. Examples:\n#{exname} view https://cpee.org/log/123.xes.yaml\n#{exname} view https://cpee.org/log/a.xes.yaml > index.txt\n#{exname} view ~/log/logs/456.xes.yaml"))
104
153
  opt.on("")
105
- opt.on(wrap("view [DIR] view the dependencies between processes and subprocesses.\nWorks for local and remote logs. Examples:\n#{exname} view https://cpee.org/log/123.xes.yaml\n#{exname} view https://cpee.org/log/a.xes.yaml > index.txt\n#{exname} view ~/log/logs/456.xes.yaml"))
154
+ opt.on(wrap("copy [DIR] copy dependent processes and subprocesses to the current directory. Works for local and remote logs. Examples:\n#{exname} copy https://cpee.org/log/123.xes.yaml\n#{exname} copy ~/log/logs/456.xes.yaml"))
106
155
  opt.on("")
107
- opt.on(wrap("copy [DIR] copy dependent processes and subprocesses to the current\ndirectory. Works for local and remote logs. Examples:\n#{exname} copy https://cpee.org/log/123.xes.yaml\n#{exname} copy ~/log/logs/456.xes.yaml"))
156
+ opt.on(wrap("extract-all [LOG] extract cpee testset from cpee xes-yaml log. Works for local and remote logs. Write logs to files in folder named like the instance uuid contained in the log. Examples:\n#{exname} extract https://cpee.org/log/123.xes.yaml\n#{exname} extract ~/log/logs/456.xes.yaml"))
157
+ opt.on("")
158
+ opt.on(wrap("extract-last [LOG] extract cpee testset from cpee xes-yaml log. Works for local and remote logs. Write last revision of the model to stdout. Examples:\n#{exname} extract https://cpee.org/log/123.xes.yaml\n#{exname} extract ~/log/logs/456.xes.yaml"))
108
159
  opt.parse!
109
160
  }
110
161
  if (ARGV.length != 2)
@@ -112,20 +163,66 @@ if (ARGV.length != 2)
112
163
  exit
113
164
  else
114
165
  command = ARGV[0]
115
- dir = ARGV[1]
166
+ path = ARGV[1]
116
167
  end
117
168
 
118
169
  if command == 'new'
119
- if !File.exist?(dir)
120
- FileUtils.cp_r(File.join(curpath,'..','server'),dir)
121
- FileUtils.mkdir(File.join(dir,'logs')) rescue nil
170
+ if !File.exist?(path)
171
+ FileUtils.cp_r(File.join(curpath,'..','server'),path)
172
+ FileUtils.mkdir(File.join(path,'logs')) rescue nil
122
173
  else
123
174
  puts 'Directory already exists.'
124
175
  end
125
176
  elsif command == 'view'
126
- react dir, false
177
+ react path, false
127
178
  elsif command == 'copy'
128
- react dir, true
179
+ react path, true
180
+ elsif command == 'extract-all'
181
+ extract(path) do |uuid, de, ep, desc, version|
182
+ xml = XML::Smart.string('<testset xmlns="http://cpee.org/ns/properties/2.0"><executionhandler>ruby</executionhandler></testset>')
183
+ dataelements = xml.root().add('dataelements')
184
+ endpoints = xml.root().add('endpoints')
185
+ description = xml.root().add('description').add(XML::Smart.string('<description xmlns="http://cpee.org/ns/description/1.0"/>').root())
186
+ unless de.nil?
187
+ de.each do |d|
188
+ dataelements.add(d['name'],d['value'])
189
+ end
190
+ end
191
+ unless ep.nil?
192
+ ep.each do |e|
193
+ endpoints.add(e['name'],e['value'])
194
+ end
195
+ end
196
+ unless desc.nil?
197
+ description.replace_by(XML::Smart.string(desc).root())
198
+ end
199
+ dirname = File.join(__dir__,uuid)
200
+ filename = File.join(dirname,"#{uuid}_#{version}.xml")
201
+ Dir.mkdir(dirname) unless Dir.exist?(dirname)
202
+ File.write(filename, xml.to_s())
203
+ end
204
+ elsif command == 'extract-last'
205
+ de, ep, desc = extract(path)
206
+
207
+ xml = XML::Smart.string('<testset xmlns="http://cpee.org/ns/properties/2.0"><executionhandler>ruby</executionhandler></testset>')
208
+ dataelements = xml.root().add('dataelements')
209
+ endpoints = xml.root().add('endpoints')
210
+ description = xml.root().add('description').add(XML::Smart.string('<description xmlns="http://cpee.org/ns/description/1.0"/>').root())
211
+ unless de.nil?
212
+ de.each do |d|
213
+ dataelements.add(d['name'],d['value'])
214
+ end
215
+ end
216
+ unless ep.nil?
217
+ ep.each do |e|
218
+ endpoints.add(e['name'],e['value'])
219
+ end
220
+ end
221
+ unless desc.nil?
222
+ description.replace_by(XML::Smart.string(desc).root())
223
+ end
224
+
225
+ puts xml.to_s
129
226
  else
130
227
  puts ARGV.options
131
228
  end
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.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: tools
11
11
  cert_chain: []
12
- date: 2023-04-21 00:00:00.000000000 Z
12
+ date: 2024-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: riddl
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubygems_version: 3.3.26
101
+ rubygems_version: 3.4.10
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Logging for the cloud process execution engine (cpee.org)