holepunch-hop 0.2.6 → 0.2.8
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.
- package/package.json +3 -2
- package/src/adapters/sqliteDatabase.js +163 -0
- package/src/adapters/timeConvertor.js +43 -0
- package/src/bees.js +18 -2
- package/src/drive.js +127 -6
- package/src/fileParser.js +3 -23
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "holepunch-hop",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "data interface to HOP",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"hyperswarm": "^4.3.5",
|
|
39
39
|
"localdrive": "github:holepunchto/localdrive",
|
|
40
40
|
"luxon": "^3.4.4",
|
|
41
|
-
"chrono-node": "^2.7.5"
|
|
41
|
+
"chrono-node": "^2.7.5",
|
|
42
|
+
"sqlite3": "^5.1.7"
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"assert": "^2.0.0",
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
/**
|
|
3
|
+
* Adapter utility for sqlite database
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* @class SqliteAdapter
|
|
7
|
+
* @package holepunch-hop
|
|
8
|
+
* @copyright Copyright (c) 2024 James Littlejohn
|
|
9
|
+
* @license http://www.gnu.org/licenses/old-licenses/gpl-3.0.html
|
|
10
|
+
* @version $Id$
|
|
11
|
+
*/
|
|
12
|
+
import EventEmitter from 'events'
|
|
13
|
+
import sqlite3 from 'sqlite3'
|
|
14
|
+
|
|
15
|
+
class SqliteAdapter extends EventEmitter {
|
|
16
|
+
|
|
17
|
+
constructor(options) {
|
|
18
|
+
super()
|
|
19
|
+
this.dataBase = {}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* setup new sqlite Database
|
|
24
|
+
* @method newDatabase
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
newDatabase = async function (db) {
|
|
28
|
+
let newSqlite = {}
|
|
29
|
+
this.createDbConnection(db)
|
|
30
|
+
// ask for tables
|
|
31
|
+
let tables = await this.discoverTables()
|
|
32
|
+
// let header = await this.discoverColumns()
|
|
33
|
+
newSqlite.tables = tables
|
|
34
|
+
// newSqlite.headers = header
|
|
35
|
+
return newSqlite
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* discover colum names in a table
|
|
40
|
+
* @method tableQuery
|
|
41
|
+
*
|
|
42
|
+
*/
|
|
43
|
+
tableQuery = async function (data) {
|
|
44
|
+
let newSqlite = {}
|
|
45
|
+
this.createDbConnection(data.file)
|
|
46
|
+
// ask for tables
|
|
47
|
+
let headers = await this.discoverColumns(data.table)
|
|
48
|
+
newSqlite.headers = headers
|
|
49
|
+
return newSqlite
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* setup sqlite db and get tables and columns
|
|
54
|
+
* @method createDbConnection
|
|
55
|
+
*
|
|
56
|
+
*/
|
|
57
|
+
createDbConnection = function (db) {
|
|
58
|
+
this.dataBase = new sqlite3.Database(db, (error) => {
|
|
59
|
+
if (error) {
|
|
60
|
+
return console.error(error.message)
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
console.log("Connection with SQLite has been established")
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* setup sqlite db and get tables and columns
|
|
69
|
+
* @method discoverTables
|
|
70
|
+
*
|
|
71
|
+
*/
|
|
72
|
+
discoverTables = async function () {
|
|
73
|
+
// tables available
|
|
74
|
+
let tables = []
|
|
75
|
+
const res = await new Promise((resolve, reject) => {
|
|
76
|
+
let sqlTable = `SELECT name FROM sqlite_master WHERE type='table'`
|
|
77
|
+
|
|
78
|
+
this.dataBase.all(sqlTable, [], (err, rows) => {
|
|
79
|
+
if (err) {
|
|
80
|
+
reject(err)
|
|
81
|
+
}
|
|
82
|
+
rows.forEach((row) => {
|
|
83
|
+
tables.push(row)
|
|
84
|
+
})
|
|
85
|
+
resolve(tables)
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
return res
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* setup sqlite db and get tables and columns
|
|
93
|
+
* @method discoverColumns
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
discoverColumns = async function (table) {
|
|
97
|
+
// columns in table
|
|
98
|
+
let header = []
|
|
99
|
+
const res = await new Promise((resolve, reject) => {
|
|
100
|
+
let sqlTableCols = `PRAGMA table_info('` + table + `')`
|
|
101
|
+
this.dataBase.all(sqlTableCols, [], (err, rows) => {
|
|
102
|
+
if (err) {
|
|
103
|
+
reject(err)
|
|
104
|
+
}
|
|
105
|
+
rows.forEach((row) => {
|
|
106
|
+
header.push(row)
|
|
107
|
+
})
|
|
108
|
+
resolve(header)
|
|
109
|
+
})
|
|
110
|
+
})
|
|
111
|
+
return res
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* query a table for data
|
|
116
|
+
* @method queryTable
|
|
117
|
+
*
|
|
118
|
+
*/
|
|
119
|
+
queryTable = async function (table) {
|
|
120
|
+
// columns in table
|
|
121
|
+
let data = []
|
|
122
|
+
const res = await new Promise((resolve, reject) => {
|
|
123
|
+
let sqlQuery = `SELECT * FROM MI_BAND_ACTIVITY_SAMPLE WHERE DEVICE_ID = 3 ORDER BY TIMESTAMP DESC LIMIT 1400` // AND TIMESTAMP BETWEEN 1627677840 AND 1627678380`
|
|
124
|
+
|
|
125
|
+
this.dataBase.all(sqlQuery, [], (err, rows) => {
|
|
126
|
+
if (err) {
|
|
127
|
+
reject(err)
|
|
128
|
+
}
|
|
129
|
+
rows.forEach((row) => {
|
|
130
|
+
data.push(row)
|
|
131
|
+
})
|
|
132
|
+
resolve(data)
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
return res
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* query device table
|
|
140
|
+
* @method deviceQuery
|
|
141
|
+
*
|
|
142
|
+
*/
|
|
143
|
+
deviceQuery = async function (table) {
|
|
144
|
+
let data = []
|
|
145
|
+
const res = await new Promise((resolve, reject) => {
|
|
146
|
+
let sqlQuery = `SELECT * FROM ` + table
|
|
147
|
+
|
|
148
|
+
this.dataBase.all(sqlQuery, [], (err, rows) => {
|
|
149
|
+
if (err) {
|
|
150
|
+
reject(err)
|
|
151
|
+
}
|
|
152
|
+
rows.forEach((row) => {
|
|
153
|
+
data.push(row)
|
|
154
|
+
})
|
|
155
|
+
resolve(data)
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
return res
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export default SqliteAdapter
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
/**
|
|
3
|
+
* standard time inputs
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* @class TimeConvertor
|
|
7
|
+
* @package holepunch-hop
|
|
8
|
+
* @copyright Copyright (c) 2024 James Littlejohn
|
|
9
|
+
* @license http://www.gnu.org/licenses/old-licenses/gpl-3.0.html
|
|
10
|
+
* @version $Id$
|
|
11
|
+
*/
|
|
12
|
+
import EventEmitter from 'events'
|
|
13
|
+
import { DateTime, Interval } from 'luxon'
|
|
14
|
+
import * as chrono from 'chrono-node'
|
|
15
|
+
|
|
16
|
+
class TimeConvertor extends EventEmitter {
|
|
17
|
+
|
|
18
|
+
constructor(options) {
|
|
19
|
+
super()
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* try to match to known time formats
|
|
24
|
+
* @method testDataExtact
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
testDataExtact = function (sampleDate) {
|
|
28
|
+
let parseDate0 = DateTime.fromISO(sampleDate)
|
|
29
|
+
let parseDate1 = DateTime.fromHTTP(sampleDate)
|
|
30
|
+
let parseDate2 = DateTime.fromJSDate(sampleDate)
|
|
31
|
+
/* let parseDate3 = DateTime.fromFormat(sampleDate, "dd-MM-yyyy HH:MM")
|
|
32
|
+
console.log(parseDate3)
|
|
33
|
+
let parseDate4 = DateTime.local(sampleDate)
|
|
34
|
+
console.log(parseDate4)
|
|
35
|
+
// .fromJSDate(sampleDate) // .fromHTTP(sampleDate) // fromFormat(sampleDate, "YYY-MM-DD ") //.fromISO(sampleDate) // or DateTime. fromFormat("23-06-2019", "dd-MM-yyyy") .(splitRow[0])// new Date(splitRow[0])
|
|
36
|
+
// console.log(parseDate) */
|
|
37
|
+
let millDate = parseDate2.toMillis()
|
|
38
|
+
return millDate
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default TimeConvertor
|
package/src/bees.js
CHANGED
|
@@ -113,6 +113,7 @@ class HyperBee extends EventEmitter {
|
|
|
113
113
|
*
|
|
114
114
|
*/
|
|
115
115
|
savePubliclibrary = async function (refContract) {
|
|
116
|
+
console.log(refContract)
|
|
116
117
|
let beeSave = await this.dbPublicLibrary.put(refContract.data.hash, refContract.data.contract)
|
|
117
118
|
// go query the key are return the info. to ensure data save asplanned.
|
|
118
119
|
let saveCheck = await this.getPublicLibrary(refContract.data.hash)
|
|
@@ -131,8 +132,8 @@ class HyperBee extends EventEmitter {
|
|
|
131
132
|
*
|
|
132
133
|
*/
|
|
133
134
|
savePeerLibrary = async function (refContract) {
|
|
134
|
-
await this.dbPeerLibrary.put(refContract.hash, refContract.contract)
|
|
135
|
-
let saveCheck = await this.getPeerLibrary(refContract.hash)
|
|
135
|
+
await this.dbPeerLibrary.put(refContract.data.hash, refContract.data.contract)
|
|
136
|
+
let saveCheck = await this.getPeerLibrary(refContract.data.hash)
|
|
136
137
|
let returnMessage = {}
|
|
137
138
|
returnMessage.stored = true
|
|
138
139
|
returnMessage.type = refContract.reftype
|
|
@@ -398,6 +399,21 @@ class HyperBee extends EventEmitter {
|
|
|
398
399
|
|
|
399
400
|
}
|
|
400
401
|
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* delete nxp ref contract public
|
|
406
|
+
* @method deleteRefcontPubliclibrary
|
|
407
|
+
*
|
|
408
|
+
*/
|
|
409
|
+
deleteRefcontPubliclibrary = async function (nxpID) {
|
|
410
|
+
let deleteInfo = {}
|
|
411
|
+
let deleteStatus = await this.dbPublicLibrary.del(nxpID)
|
|
412
|
+
deleteInfo.success = deleteStatus
|
|
413
|
+
deleteInfo.nxp = nxpID
|
|
414
|
+
return deleteInfo
|
|
415
|
+
}
|
|
416
|
+
|
|
401
417
|
/**
|
|
402
418
|
* delete nxp ref contract from peer library
|
|
403
419
|
* @method deleteRefcontPeerlibrary
|
package/src/drive.js
CHANGED
|
@@ -13,7 +13,10 @@ import fs from 'fs'
|
|
|
13
13
|
import Hyperdrive from 'hyperdrive'
|
|
14
14
|
import b4a from 'b4a'
|
|
15
15
|
import Fileparser from './fileParser.js'
|
|
16
|
+
import SqliteAdapter from './adapters/sqliteDatabase.js'
|
|
16
17
|
import csv from 'csv-parser'
|
|
18
|
+
import { DateTime, Interval } from 'luxon'
|
|
19
|
+
import * as chrono from 'chrono-node'
|
|
17
20
|
|
|
18
21
|
class HypDrive extends EventEmitter {
|
|
19
22
|
|
|
@@ -24,6 +27,8 @@ class HypDrive extends EventEmitter {
|
|
|
24
27
|
this.swarm = swarm
|
|
25
28
|
this.drive = {}
|
|
26
29
|
this.fileUtility = new Fileparser('')
|
|
30
|
+
this.AdapterSqlite = new SqliteAdapter()
|
|
31
|
+
this.dataBase = {}
|
|
27
32
|
// this.setupHyperdrive()
|
|
28
33
|
}
|
|
29
34
|
|
|
@@ -83,7 +88,6 @@ class HypDrive extends EventEmitter {
|
|
|
83
88
|
*/
|
|
84
89
|
listFilesFolder = function (folder) {
|
|
85
90
|
const stream = this.drive.list('') // [options])
|
|
86
|
-
// console.log(stream)
|
|
87
91
|
// Handle stream events --> data, end, and error
|
|
88
92
|
let dataDrive = []
|
|
89
93
|
stream.on('data', function(chunk) {
|
|
@@ -150,6 +154,37 @@ class HypDrive extends EventEmitter {
|
|
|
150
154
|
}
|
|
151
155
|
|
|
152
156
|
|
|
157
|
+
/**
|
|
158
|
+
* save csv data to hyperdrive file
|
|
159
|
+
* @method saveSqliteFirst
|
|
160
|
+
*
|
|
161
|
+
*/
|
|
162
|
+
saveSqliteFirst = async function (path, name, data) {
|
|
163
|
+
let fileResponse = {}
|
|
164
|
+
// file input management
|
|
165
|
+
// protocol to save original file
|
|
166
|
+
let newPathFile = await this.hyperdriveFilesave(path, name, data)
|
|
167
|
+
// extract table and then table columns
|
|
168
|
+
// extract out the headers name for columns
|
|
169
|
+
const parseData = await this.SQLiteSetup(name)
|
|
170
|
+
fileResponse.filename = name
|
|
171
|
+
fileResponse.header = parseData.headers
|
|
172
|
+
fileResponse.tables = parseData.tables
|
|
173
|
+
return fileResponse
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* blind sqlite lookup of data (maybe restricture no. of rows of data iniitally)
|
|
179
|
+
* @method blindDataSqlite
|
|
180
|
+
*
|
|
181
|
+
*/
|
|
182
|
+
blindDataSqlite = async function (dataInfo) {
|
|
183
|
+
let parseData = await this.SQLiteQuery(dataInfo)
|
|
184
|
+
return parseData
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
|
|
153
188
|
/**
|
|
154
189
|
* save to hyperdrive file
|
|
155
190
|
* @method hyperdriveFilesave
|
|
@@ -184,8 +219,6 @@ class HypDrive extends EventEmitter {
|
|
|
184
219
|
}
|
|
185
220
|
}))
|
|
186
221
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
222
|
return hyperdrivePath
|
|
190
223
|
}
|
|
191
224
|
|
|
@@ -206,20 +239,108 @@ class HypDrive extends EventEmitter {
|
|
|
206
239
|
* rebuidl file and give directory location
|
|
207
240
|
* @method hyperdriveLocalfile
|
|
208
241
|
*
|
|
209
|
-
|
|
242
|
+
*/
|
|
210
243
|
hyperdriveLocalfile = async function (path) {
|
|
211
244
|
// File reads to buffer and recreate file
|
|
212
245
|
// const bufFromGet2 = await this.drive.get(path)
|
|
213
246
|
const { value: entry } = await this.drive.entry(path)
|
|
214
247
|
const blobs = await this.drive.getBlobs()
|
|
215
248
|
const bufFromEntry = await blobs.get(entry.blob)
|
|
216
|
-
|
|
217
249
|
let localFile = 'localdb'
|
|
218
|
-
// fs.writeFileSync(localFile, bufFromGet2)
|
|
219
250
|
fs.writeFileSync(localFile, bufFromEntry)
|
|
220
251
|
return localFile
|
|
221
252
|
}
|
|
222
253
|
|
|
254
|
+
/**
|
|
255
|
+
* set file path, read and make sqlite3 connect db
|
|
256
|
+
* @method SQLiteSetup
|
|
257
|
+
*
|
|
258
|
+
*/
|
|
259
|
+
SQLiteSetup = async function (file) {
|
|
260
|
+
// const stream = this.liveDataAPI.DriveFiles.listFilesFolder('sqlite/')
|
|
261
|
+
let dbFile = await this.hyperdriveLocalfile('sqlite/' + file)
|
|
262
|
+
let summarySQLinfo = await this.AdapterSqlite.newDatabase(dbFile)
|
|
263
|
+
return summarySQLinfo
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* set file path, read and make sqlite3 connect db
|
|
268
|
+
* @method SQLiteSourceSetup
|
|
269
|
+
*
|
|
270
|
+
*/
|
|
271
|
+
SQLiteSourceSetup = async function (data) {
|
|
272
|
+
// const stream = this.liveDataAPI.DriveFiles.listFilesFolder('sqlite/')
|
|
273
|
+
let dbFile = await this.hyperdriveLocalfile('sqlite/' + data.db)
|
|
274
|
+
data.file = dbFile
|
|
275
|
+
let summarySQLinfo = await this.AdapterSqlite.tableQuery(data)
|
|
276
|
+
return summarySQLinfo
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* ask for device tables and info.
|
|
282
|
+
* @method SQLiteDeviceSetup
|
|
283
|
+
*
|
|
284
|
+
*/
|
|
285
|
+
SQLiteDeviceSetup = async function (data) {
|
|
286
|
+
// const stream = this.liveDataAPI.DriveFiles.listFilesFolder('sqlite/')
|
|
287
|
+
let dbFile = await this.hyperdriveLocalfile('sqlite/' + data.db)
|
|
288
|
+
data.file = dbFile
|
|
289
|
+
let summaryTable = await this.AdapterSqlite.tableQuery(data)
|
|
290
|
+
let summaryDevice = await this.AdapterSqlite.deviceQuery(data.table)
|
|
291
|
+
let summarySQLinfo = {}
|
|
292
|
+
summarySQLinfo.tables = summaryTable
|
|
293
|
+
summarySQLinfo.devices = summaryDevice
|
|
294
|
+
return summarySQLinfo
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* set file path, read and make sqlite3 connect db
|
|
299
|
+
* @method SQLiteQuery
|
|
300
|
+
*
|
|
301
|
+
*/
|
|
302
|
+
SQLiteQuery = async function (dataInfo) {
|
|
303
|
+
let timestampCol = ''
|
|
304
|
+
// is the sqliite database sill accive?
|
|
305
|
+
// const stream = this.liveDataAPI.DriveFiles.listFilesFolder('sqlite/')
|
|
306
|
+
let dbFile = await this.hyperdriveLocalfile('sqlite/' + dataInfo.file.file)
|
|
307
|
+
let queryData = await this.AdapterSqlite.queryTable(dataInfo)
|
|
308
|
+
let contextKeys = Object.keys(queryData[0])
|
|
309
|
+
timestampCol = contextKeys[dataInfo.context.timestamp]
|
|
310
|
+
// now prepare into data and labels
|
|
311
|
+
let blindData = {}
|
|
312
|
+
let extractCol = []
|
|
313
|
+
let extractLabel = []
|
|
314
|
+
for (let rowi of queryData) {
|
|
315
|
+
extractCol.push(rowi[dataInfo.context.name.name])
|
|
316
|
+
// assume data column for now and parse to mills seconds
|
|
317
|
+
let testCH1 = chrono.parseDate(rowi[timestampCol])
|
|
318
|
+
let parseDate = testCH1 * 1000 // this.testDataExtact(testCH1)
|
|
319
|
+
extractLabel.push(parseDate)
|
|
320
|
+
}
|
|
321
|
+
blindData.data = extractCol
|
|
322
|
+
blindData.label = extractLabel
|
|
323
|
+
return blindData
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* try to match to known time formats
|
|
329
|
+
* @method testDataExtact
|
|
330
|
+
*
|
|
331
|
+
*/
|
|
332
|
+
testDataExtact = function (sampleDate) {
|
|
333
|
+
let parseDate0 = DateTime.fromISO(sampleDate)
|
|
334
|
+
let parseDate1 = DateTime.fromHTTP(sampleDate)
|
|
335
|
+
let parseDate2 = DateTime.fromJSDate(sampleDate)
|
|
336
|
+
/* let parseDate3 = DateTime.fromFormat(sampleDate, "dd-MM-yyyy HH:MM")
|
|
337
|
+
let parseDate4 = DateTime.local(sampleDate)
|
|
338
|
+
// .fromJSDate(sampleDate) // .fromHTTP(sampleDate) // fromFormat(sampleDate, "YYY-MM-DD ") //.fromISO(sampleDate) // or DateTime. fromFormat("23-06-2019", "dd-MM-yyyy") .(splitRow[0])// new Date(splitRow[0])
|
|
339
|
+
*/
|
|
340
|
+
let millDate = parseDate2.toMillis()
|
|
341
|
+
return millDate
|
|
342
|
+
}
|
|
343
|
+
|
|
223
344
|
/**
|
|
224
345
|
* taken in csv file and read per line
|
|
225
346
|
* @method readCSVfile
|
package/src/fileParser.js
CHANGED
|
@@ -11,7 +11,6 @@ import atob from 'atob'
|
|
|
11
11
|
* @license http://www.gnu.org/licenses/old-licenses/gpl-3.0.html
|
|
12
12
|
* @version $Id$
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
14
|
import fs from 'fs'
|
|
16
15
|
import os from 'os'
|
|
17
16
|
import util from 'util'
|
|
@@ -19,12 +18,14 @@ import events from 'events'
|
|
|
19
18
|
import axios from 'axios'
|
|
20
19
|
import csv from 'csv-parser'
|
|
21
20
|
import crypto from 'crypto'
|
|
21
|
+
import TimeConvert from './adapters/timeConvertor.js'
|
|
22
22
|
import { DateTime, Interval } from 'luxon'
|
|
23
23
|
import * as chrono from 'chrono-node'
|
|
24
24
|
|
|
25
25
|
var FileParser = function (path) {
|
|
26
26
|
events.EventEmitter.call(this)
|
|
27
27
|
this.storepath = path
|
|
28
|
+
this.convertTime = new TimeConvert()
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
/**
|
|
@@ -162,7 +163,7 @@ FileParser.prototype.TEMPwebCSVparse = function (fData) {
|
|
|
162
163
|
extractCol.push(splitRow[fData.context.id])
|
|
163
164
|
// assume data column for now and parse to mills seconds
|
|
164
165
|
let testCH1 = chrono.parseDate(splitRow[fData.context.timestamp])
|
|
165
|
-
let parseDate = this.testDataExtact(testCH1)
|
|
166
|
+
let parseDate = this.convertTime.testDataExtact(testCH1)
|
|
166
167
|
// let parseDate = DateTime.fromISO(splitRow[0])
|
|
167
168
|
// let millDate = parseDate.toMillis()
|
|
168
169
|
extractLabel.push(parseDate)
|
|
@@ -173,30 +174,9 @@ FileParser.prototype.TEMPwebCSVparse = function (fData) {
|
|
|
173
174
|
let extractedPair = {}
|
|
174
175
|
extractedPair.label = extractLabel
|
|
175
176
|
extractedPair.data = extractCol
|
|
176
|
-
console.log('finsiehd')
|
|
177
|
-
console.log(extractedPair)
|
|
178
177
|
return extractedPair
|
|
179
178
|
}
|
|
180
179
|
|
|
181
|
-
/**
|
|
182
|
-
* try to match to known time formats
|
|
183
|
-
* @method testDataExtact
|
|
184
|
-
*
|
|
185
|
-
*/
|
|
186
|
-
FileParser.prototype.testDataExtact = function (sampleDate) {
|
|
187
|
-
let parseDate0 = DateTime.fromISO(sampleDate)
|
|
188
|
-
let parseDate1 = DateTime.fromHTTP(sampleDate)
|
|
189
|
-
let parseDate2 = DateTime.fromJSDate(sampleDate)
|
|
190
|
-
/* let parseDate3 = DateTime.fromFormat(sampleDate, "dd-MM-yyyy HH:MM")
|
|
191
|
-
console.log(parseDate3)
|
|
192
|
-
let parseDate4 = DateTime.local(sampleDate)
|
|
193
|
-
console.log(parseDate4)
|
|
194
|
-
// .fromJSDate(sampleDate) // .fromHTTP(sampleDate) // fromFormat(sampleDate, "YYY-MM-DD ") //.fromISO(sampleDate) // or DateTime. fromFormat("23-06-2019", "dd-MM-yyyy") .(splitRow[0])// new Date(splitRow[0])
|
|
195
|
-
// console.log(parseDate) */
|
|
196
|
-
let millDate = parseDate2.toMillis()
|
|
197
|
-
return millDate
|
|
198
|
-
}
|
|
199
|
-
|
|
200
180
|
/**
|
|
201
181
|
* read csv headers and extract info
|
|
202
182
|
* @method extractCSVHeaderInfo
|