-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatastorage.js
More file actions
100 lines (91 loc) · 3.38 KB
/
datastorage.js
File metadata and controls
100 lines (91 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
let db;
function startDB(pageName) {
const request = indexedDB.open(pageName);
request.onerror = function (e) {
console.error(e);
}
request.onupgradeneeded = function (e) {
// fires on first open, or upgrade
objectStore = e.target.result.createObjectStore('log', { keyPath: 'uuid' });
// create an index on number, just in case
objectStore.createIndex('req_number', 'req_number', { unique: true });
// log success
objectStore.transaction.oncomplete = function (event) {
console.log('database upgraded');
}
}
request.onsuccess = function (e) {
db = e.target.result;
// edit - only clear on clear log. make sure it is cleared out
// db.transaction('log').objectStore('log').openCursor().onsuccess = e => e.target.result ? clearDatabase() : null;
// load network timestamps from db and put on screen
const oldTable = getAllData().then(result => {
// result is an array of (all) values
// need to sort by number, then format as { req_number, uuid, timeStamp, protocol, uri, request, response, content }
result.map(row => {
const mappedRow = {
index: row.req_number,
uuid: row.uuid,
timeStamp: row.requestTime,
protocol: row.protocol,
request: {},
response: { status: row.status },
uri: row.url,
content: row.response
}
appendRecord(mappedRow);
});
createChannel();
})
// db error handling
db.onerror = function (e) {
console.error(e);
}
}
}
function storeRows(data) {
// store values in the log
const transaction = db.transaction('log', 'readwrite');
// set up the completion handler
transaction.oncomplete = e => console.log('database updated');
// now try to add one or more rows to the DB
if (data.length) {
data.map(row => {
const writeRequest = transaction.objectStore('log');
writeRequest.onsuccess = () => console.log(`row ${row[1]} added`);
const rowData = {};
['uuid', 'req_number', 'requestTime', 'protocol', 'url', 'status', 'response'].map((col, idx) => {
rowData[col] = row[idx];
});
writeRequest.add(rowData);
})
}
}
function getAllData() {
return new Promise((resolve, reject) => {
const result = [];
const logStore = db.transaction('log').objectStore('log');
logStore.openCursor().onsuccess = event => {
const cursor = event.target.result;
if (cursor) {
result.push(cursor.value);
cursor.continue();
} else {
console.log('no more entries');
return resolve(result.sort((a, b) => a.req_number - b.req_number));
}
}
})
}
function clearDatabase() {
const logStore = db.transaction('log', 'readwrite').objectStore('log');
logStore.openCursor().onsuccess = event => {
const cursor = event.target.result;
if (cursor) {
const req = logStore.delete(cursor.key);
cursor.continue();
} else {
console.log('all entries deleted');
}
}
}