echi-converter 0.0.2 → 0.0.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.
- data/History.txt +15 -4
- data/Manifest.txt +1 -0
- data/config/application.yml +3 -1
- data/config/extended_version13.yml +234 -0
- data/lib/echi-converter.rb +69 -11
- data/lib/echi-converter/version.rb +1 -1
- data/lib/main.rb +5 -1
- data/website/index.html +4 -3
- data/website/index.txt +2 -1
- metadata +3 -2
data/History.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
== 0.0.1 2007-07-22
|
2
2
|
|
3
|
-
* 1 major enhancement:
|
3
|
+
* 1 major enhancement(s):
|
4
4
|
* Initial release
|
5
5
|
* Alpha phase
|
6
6
|
|
@@ -12,6 +12,17 @@
|
|
12
12
|
* Changed BOOLEAN fields to char(1) with Y/N possible values (FR#12741)
|
13
13
|
* Added the ability to toggle deleting or leaving the FTP files (FR#12702)
|
14
14
|
* Removed some extraneous debug info
|
15
|
-
* 1
|
16
|
-
* Bug #
|
17
|
-
* Bug #12746 - Properly parse Bytearray for Boolean fields
|
15
|
+
* 1 Bug fix(es):
|
16
|
+
* Bug #12528 - Handle segstart/segstop dates properly
|
17
|
+
* Bug #12746 - Properly parse Bytearray for Boolean fields
|
18
|
+
|
19
|
+
== 0.0.3 2007-08-10
|
20
|
+
|
21
|
+
* Major enhancement(s):
|
22
|
+
* Added support for import of ASCII CSV files (FR#12997)
|
23
|
+
* Minor enhancement(s):
|
24
|
+
* Added support of processing 'chr' files only (FR#12996)
|
25
|
+
* Added a configuration element to turn logging of file processing to a table on/off
|
26
|
+
* Removed the net/ssh library include, as not using sftp for now
|
27
|
+
* Bug fix(es):
|
28
|
+
* Added proper error handling when ftp user does not have delete rights
|
data/Manifest.txt
CHANGED
data/config/application.yml
CHANGED
@@ -8,8 +8,10 @@ echi_password: sanfran2007!
|
|
8
8
|
echi_connect_type: ftp #only ftp supported now, possible for ssh in the future
|
9
9
|
echi_ftp_directory: /Users/ftp/anonymous
|
10
10
|
echi_ftp_retry: 3
|
11
|
-
echi_ftp_delete:
|
11
|
+
echi_ftp_delete: N #to not delete the files off of the FTP server set to N
|
12
12
|
echi_schema: extended_version13.yml
|
13
|
+
echi_format: ASCII #valid settings are ASCII or BINARY
|
14
|
+
echi_process_log: N #valid is Y/N to turn it on or off
|
13
15
|
|
14
16
|
#Currently only ftp supported, but may want to add UUCP/Serial later
|
15
17
|
echi_xfer_type: ftp
|
@@ -0,0 +1,234 @@
|
|
1
|
+
#ECH File construct, order is important, as the application sequentially reads the file
|
2
|
+
#Version 12 - Extended Schema
|
3
|
+
fields:
|
4
|
+
- name: callid
|
5
|
+
type: int
|
6
|
+
length: 4
|
7
|
+
- name: acwtime
|
8
|
+
type: int
|
9
|
+
length: 4
|
10
|
+
- name: onholdtime
|
11
|
+
type: int
|
12
|
+
length: 4
|
13
|
+
- name: consulttime
|
14
|
+
type: int
|
15
|
+
length: 4
|
16
|
+
- name: disptime
|
17
|
+
type: int
|
18
|
+
length: 4
|
19
|
+
- name: duration
|
20
|
+
type: int
|
21
|
+
length: 4
|
22
|
+
- name: segstart
|
23
|
+
type: datetime
|
24
|
+
length: 4
|
25
|
+
- name: segstop
|
26
|
+
type: datetime
|
27
|
+
length: 4
|
28
|
+
- name: talktime
|
29
|
+
type: int
|
30
|
+
length: 4
|
31
|
+
- name: netintime
|
32
|
+
type: int
|
33
|
+
length: 4
|
34
|
+
- name: origholdtime
|
35
|
+
type: int
|
36
|
+
length: 4
|
37
|
+
- name: queuetime
|
38
|
+
type: int
|
39
|
+
length: 4
|
40
|
+
- name: ringtime
|
41
|
+
type: int
|
42
|
+
length: 4
|
43
|
+
- name: dispivector
|
44
|
+
type: int
|
45
|
+
length: 2
|
46
|
+
- name: dispsplit
|
47
|
+
type: int
|
48
|
+
length: 2
|
49
|
+
- name: firstivector
|
50
|
+
type: int
|
51
|
+
length: 2
|
52
|
+
- name: split1
|
53
|
+
type: int
|
54
|
+
length: 2
|
55
|
+
- name: split2
|
56
|
+
type: int
|
57
|
+
length: 2
|
58
|
+
- name: split3
|
59
|
+
type: int
|
60
|
+
length: 2
|
61
|
+
- name: trunkgroup
|
62
|
+
type: int
|
63
|
+
length: 2
|
64
|
+
- name: tk_locid
|
65
|
+
type: int
|
66
|
+
length: 2
|
67
|
+
- name: orig_locid
|
68
|
+
type: int
|
69
|
+
length: 2
|
70
|
+
- name: answer_locid
|
71
|
+
type: int
|
72
|
+
length: 2
|
73
|
+
- name: obs_locid
|
74
|
+
type: int
|
75
|
+
length: 2
|
76
|
+
- name: uui_len
|
77
|
+
type: int
|
78
|
+
length: 2
|
79
|
+
- name: assist
|
80
|
+
type: bool
|
81
|
+
length: 1
|
82
|
+
- name: audio_difficulty
|
83
|
+
type: bool
|
84
|
+
length: 1
|
85
|
+
- name: conference
|
86
|
+
type: bool
|
87
|
+
length: 1
|
88
|
+
- name: da_queued
|
89
|
+
type: bool
|
90
|
+
length: 1
|
91
|
+
- name: hold_abn
|
92
|
+
type: bool
|
93
|
+
length: 1
|
94
|
+
- name: malicious
|
95
|
+
type: bool
|
96
|
+
length: 1
|
97
|
+
- name: observing_call
|
98
|
+
type: bool
|
99
|
+
length: 1
|
100
|
+
- name: transferred
|
101
|
+
type: bool
|
102
|
+
length: 1
|
103
|
+
- name: agent_released
|
104
|
+
type: bool_int
|
105
|
+
length: 1
|
106
|
+
- name: acdnum
|
107
|
+
type: int
|
108
|
+
length: 1
|
109
|
+
- name: call_disp
|
110
|
+
type: int
|
111
|
+
length: 1
|
112
|
+
- name: disppriority
|
113
|
+
type: int
|
114
|
+
length: 1
|
115
|
+
- name: holds
|
116
|
+
type: int
|
117
|
+
length: 1
|
118
|
+
- name: segment
|
119
|
+
type: int
|
120
|
+
length: 1
|
121
|
+
- name: ansreason
|
122
|
+
type: int
|
123
|
+
length: 1
|
124
|
+
- name: origreason
|
125
|
+
type: int
|
126
|
+
length: 1
|
127
|
+
- name: dispsklevel
|
128
|
+
type: int
|
129
|
+
length: 1
|
130
|
+
- name: events0
|
131
|
+
type: int
|
132
|
+
length: 1
|
133
|
+
- name: events1
|
134
|
+
type: int
|
135
|
+
length: 1
|
136
|
+
- name: events2
|
137
|
+
type: int
|
138
|
+
length: 1
|
139
|
+
- name: events3
|
140
|
+
type: int
|
141
|
+
length: 1
|
142
|
+
- name: events4
|
143
|
+
type: int
|
144
|
+
length: 1
|
145
|
+
- name: events5
|
146
|
+
type: int
|
147
|
+
length: 1
|
148
|
+
- name: events6
|
149
|
+
type: int
|
150
|
+
length: 1
|
151
|
+
- name: events7
|
152
|
+
type: int
|
153
|
+
length: 1
|
154
|
+
- name: events8
|
155
|
+
type: int
|
156
|
+
length: 1
|
157
|
+
- name: ucid
|
158
|
+
type: str
|
159
|
+
length: 21
|
160
|
+
- name: dispvdn
|
161
|
+
type: str
|
162
|
+
length: 8
|
163
|
+
- name: eqloc
|
164
|
+
type: str
|
165
|
+
length: 10
|
166
|
+
- name: firstvdn
|
167
|
+
type: str
|
168
|
+
length: 8
|
169
|
+
- name: orig_logid
|
170
|
+
type: str
|
171
|
+
length: 10
|
172
|
+
- name: ans_logid
|
173
|
+
type: str
|
174
|
+
length: 10
|
175
|
+
- name: last_observer
|
176
|
+
type: str
|
177
|
+
length: 10
|
178
|
+
- name: dialed_number
|
179
|
+
type: str
|
180
|
+
length: 25
|
181
|
+
- name: calling_party
|
182
|
+
type: str
|
183
|
+
length: 13
|
184
|
+
- name: collect_digits
|
185
|
+
type: str
|
186
|
+
length: 17
|
187
|
+
- name: cwc_digits
|
188
|
+
type: str
|
189
|
+
length: 17
|
190
|
+
- name: calling_II
|
191
|
+
type: str
|
192
|
+
length: 3
|
193
|
+
- name: cwcs0
|
194
|
+
type: str
|
195
|
+
length: 17
|
196
|
+
- name: cwcs1
|
197
|
+
type: str
|
198
|
+
length: 17
|
199
|
+
- name: cwcs2
|
200
|
+
type: str
|
201
|
+
length: 17
|
202
|
+
- name: cwcs3
|
203
|
+
type: str
|
204
|
+
length: 17
|
205
|
+
- name: cwcs4
|
206
|
+
type: str
|
207
|
+
length: 17
|
208
|
+
- name: vdn2
|
209
|
+
type: str
|
210
|
+
length: 8
|
211
|
+
- name: vdn3
|
212
|
+
type: str
|
213
|
+
length: 8
|
214
|
+
- name: vdn4
|
215
|
+
type: str
|
216
|
+
length: 8
|
217
|
+
- name: vdn5
|
218
|
+
type: str
|
219
|
+
length: 8
|
220
|
+
- name: vdn6
|
221
|
+
type: str
|
222
|
+
length: 8
|
223
|
+
- name: vdn7
|
224
|
+
type: str
|
225
|
+
length: 8
|
226
|
+
- name: vdn8
|
227
|
+
type: str
|
228
|
+
length: 8
|
229
|
+
- name: vdn9
|
230
|
+
type: str
|
231
|
+
length: 8
|
232
|
+
- name: asaiuui
|
233
|
+
type: str
|
234
|
+
length: 96
|
data/lib/echi-converter.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'active_record'
|
3
3
|
require 'faster_csv'
|
4
4
|
require 'net/ftp'
|
5
|
-
require 'net/ssh'
|
5
|
+
#require 'net/ssh'
|
6
6
|
#require 'net/sftp'
|
7
7
|
require 'fileutils'
|
8
8
|
|
@@ -110,11 +110,13 @@ module EchiConverter
|
|
110
110
|
fileversion = dump_binary 'int', 4
|
111
111
|
@log.debug "Version " + fileversion.to_s
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
113
|
+
if @config["echi_process_log"] == "Yes"
|
114
|
+
#Log the file
|
115
|
+
echi_log = EchiLog.new
|
116
|
+
echi_log.filename = filename
|
117
|
+
echi_log.filenumber = filenumber
|
118
|
+
echi_log.version = fileversion
|
119
|
+
end
|
118
120
|
|
119
121
|
bool_cnt = 0
|
120
122
|
record_cnt = 0
|
@@ -158,10 +160,12 @@ module EchiConverter
|
|
158
160
|
destination_directory = @workingdirectory + '/../files/processed/'
|
159
161
|
FileUtils.mv(echi_file, destination_directory)
|
160
162
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
163
|
+
if @config["echi_process_log"] == "Yes"
|
164
|
+
#Finish logging the details on the file
|
165
|
+
echi_log.records = record_cnt
|
166
|
+
echi_log.processed_at = Time.now
|
167
|
+
echi_log.save
|
168
|
+
end
|
165
169
|
|
166
170
|
return record_cnt
|
167
171
|
end
|
@@ -214,7 +218,11 @@ module EchiConverter
|
|
214
218
|
ftp_session.getbinaryfile(remote_filename, local_filename)
|
215
219
|
files_to_process[file_cnt] = remote_filename
|
216
220
|
if @config["echi_ftp_delete"] == 'Y'
|
217
|
-
|
221
|
+
begin
|
222
|
+
ftp_session.delete(remote_filename)
|
223
|
+
rescue => err
|
224
|
+
@log.fatal err
|
225
|
+
end
|
218
226
|
end
|
219
227
|
file_cnt += 1
|
220
228
|
end
|
@@ -227,4 +235,54 @@ module EchiConverter
|
|
227
235
|
end
|
228
236
|
end
|
229
237
|
|
238
|
+
def process_ascii filename
|
239
|
+
echi_file = @workingdirectory + "/../files/to_process/" + filename
|
240
|
+
|
241
|
+
if @config["echi_process_log"] == "Yes"
|
242
|
+
#Log the file
|
243
|
+
echi_log = EchiLog.new
|
244
|
+
echi_log.filename = filename
|
245
|
+
echi_log.filenumber = filenumber
|
246
|
+
echi_log.version = fileversion
|
247
|
+
end
|
248
|
+
|
249
|
+
record_cnt = 0
|
250
|
+
FasterCSV.foreach(echi_file) do |row|
|
251
|
+
if row != nil
|
252
|
+
@log.debug '<====================START RECORD====================>'
|
253
|
+
echi_record = EchiRecord.new
|
254
|
+
cnt = 0
|
255
|
+
@echi_schema["fields"].each do | field |
|
256
|
+
if field["type"] == "bool" || field["type"] == "bool_int"
|
257
|
+
case row[cnt]
|
258
|
+
when "0"
|
259
|
+
echi_record[field["name"]] = "N"
|
260
|
+
when "1"
|
261
|
+
echi_record[field["name"]] = "Y"
|
262
|
+
end
|
263
|
+
@log.debug field["name"] + ' == ' + row[cnt]
|
264
|
+
else
|
265
|
+
echi_record[field["name"]] = row[cnt]
|
266
|
+
if row[cnt] != nil
|
267
|
+
@log.debug field["name"] + ' == ' + row[cnt]
|
268
|
+
end
|
269
|
+
end
|
270
|
+
cnt += 1
|
271
|
+
end
|
272
|
+
echi_record.save
|
273
|
+
@log.debug '<====================STOP RECORD====================>'
|
274
|
+
record_cnt += 1
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
if @config["echi_process_log"] == "Yes"
|
279
|
+
#Finish logging the details on the file
|
280
|
+
echi_log.records = record_cnt
|
281
|
+
echi_log.processed_at = Time.now
|
282
|
+
echi_log.save
|
283
|
+
end
|
284
|
+
|
285
|
+
return record_cnt
|
286
|
+
end
|
287
|
+
|
230
288
|
require @workingdirectory + '/echi-converter/version.rb'
|
data/lib/main.rb
CHANGED
@@ -32,7 +32,11 @@ loop do
|
|
32
32
|
#Process the files
|
33
33
|
files = fetch_ftp_files
|
34
34
|
files.each do | file |
|
35
|
-
|
35
|
+
if @config["echi_format"] == 'BINARY'
|
36
|
+
record_cnt = convert_binary_file file
|
37
|
+
elsif @config["echi_format"] == 'ASCII'
|
38
|
+
record_cnt = process_ascii file
|
39
|
+
end
|
36
40
|
@log.info "Processed file #{file} with #{record_cnt.to_s} records"
|
37
41
|
end
|
38
42
|
|
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>ECHI Converter</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/echi-converter"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/echi-converter" class="numbers">0.0.
|
36
|
+
<a href="http://rubyforge.org/projects/echi-converter" class="numbers">0.0.3</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ ‘echi-converter’</h1>
|
39
39
|
|
@@ -59,7 +59,7 @@
|
|
59
59
|
<ol>
|
60
60
|
<li>Support of ActiveRecord (means you may use Oracle, MySQL, MS-SQL, Postgres, <span class="caps">DB2</span>, etc)</li>
|
61
61
|
<li>Generate your schema via ActiveRecord Migrations</li>
|
62
|
-
<li>Fetch Binary files from the Avaya <span class="caps">CMS</span> platform via <span class="caps">FTP</span></li>
|
62
|
+
<li>Fetch Binary or <span class="caps">ASCII CSV</span> files from the Avaya <span class="caps">CMS</span> platform via <span class="caps">FTP</span></li>
|
63
63
|
<li>Convert from the defined Binary format to <span class="caps">ASCII</span></li>
|
64
64
|
<li>Insert the records into the defined database table</li>
|
65
65
|
<li>Change schema structure via <span class="caps">YML</span> configuration file to accommodate various releases of the <span class="caps">ECHI</span> format</li>
|
@@ -176,6 +176,7 @@
|
|
176
176
|
|
177
177
|
<ol>
|
178
178
|
<li>‘echi-converter-create’ works fine with <span class="caps">OSX</span>/Linux, need to test validate with a Win32 platform</li>
|
179
|
+
<li>Determine what to do with the files on the <span class="caps">FTP</span> server of the Avaya <span class="caps">CMS</span>, delete them or leave them and add methods to ensure no duplication</li>
|
179
180
|
</ol>
|
180
181
|
|
181
182
|
|
@@ -205,7 +206,7 @@
|
|
205
206
|
|
206
207
|
<p>Comments are welcome. Send an email to <a href="mailto:jason@goecke.net">jason [at] goecke.net</a>.</p>
|
207
208
|
<p class="coda">
|
208
|
-
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>,
|
209
|
+
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 11th August 2007<br>
|
209
210
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
210
211
|
</p>
|
211
212
|
</div>
|
data/website/index.txt
CHANGED
@@ -18,7 +18,7 @@ The utility provides the following capabilities:
|
|
18
18
|
|
19
19
|
# Support of ActiveRecord (means you may use Oracle, MySQL, MS-SQL, Postgres, DB2, etc)
|
20
20
|
# Generate your schema via ActiveRecord Migrations
|
21
|
-
# Fetch Binary files from the Avaya CMS platform via FTP
|
21
|
+
# Fetch Binary or ASCII CSV files from the Avaya CMS platform via FTP
|
22
22
|
# Convert from the defined Binary format to ASCII
|
23
23
|
# Insert the records into the defined database table
|
24
24
|
# Change schema structure via YML configuration file to accommodate various releases of the ECHI format
|
@@ -95,6 +95,7 @@ h2. ToDo
|
|
95
95
|
Items to be done to move this out of alpha stage:
|
96
96
|
|
97
97
|
# 'echi-converter-create' works fine with OSX/Linux, need to test validate with a Win32 platform
|
98
|
+
# Determine what to do with the files on the FTP server of the Avaya CMS, delete them or leave them and add methods to ensure no duplication
|
98
99
|
|
99
100
|
|
100
101
|
h2. Forum
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: echi-converter
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-08-
|
6
|
+
version: 0.0.3
|
7
|
+
date: 2007-08-11 00:00:00 -07:00
|
8
8
|
summary: ECHI Conversion Utility - Provides a utility to fetch Avaya CMS / ECHI binary files, convert them and insert into a database table via ActiveRecord
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- config/application.yml
|
52
52
|
- config/database.yml
|
53
53
|
- config/extended_version12.yml
|
54
|
+
- config/extended_version13.yml
|
54
55
|
- db/migrate/001_create_echi_records.rb
|
55
56
|
- db/migrate/002_create_echi_logs.rb
|
56
57
|
- bin/echi-converter-create
|