-
Notifications
You must be signed in to change notification settings - Fork 3
/
purge_db.js
136 lines (107 loc) · 2.89 KB
/
purge_db.js
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
* ### Модуль поиска и прочистки Удаленны документов
*
* @module purge_db
*
* Created 11.06.2020
* поиск в _canges Базы удалённых документов
* и прочистка полностью удалённых документов
*/
/**
* ### Переменные окружения
* DEBUG "wb:*,-not_this"
* ZONE 23
* DBUSER admin
* DBPWD admin
* COUCHPATH http://cou223:5984/wb_
*/
'use strict';
const debug = require('debug')('wb:purge_db');
const PouchDB = require('pouchdb')
.plugin(require('pouchdb-find'));
const request = require('request');
debug('required');
const yargs = require('yargs')
.usage('Usage: $0 [options] <command>')
.demand(0)
.strict()
.alias('d', 'database').nargs('d', 1).describe('d', 'Database name')
.version('v', 'Show version', '0.0.1').alias('v', 'version')
.help('h').alias('h', 'help')
.example('node purge_db -d wb_23_doc', 'purge deleted docs in database wb_23_doc')
.epilog('\nMore information about the library: https://github.com/oknosoft/windowbuilder');
const {
argv: {
database
}
} = yargs;
// инициализируем параметры сеанса и метаданные
const {
ZONE,
DBUSER,
DBPWD,
COUCHPATH
} = process.env;
const prefix = 'wb_';
var auth = "Basic " + new Buffer.from(DBUSER + ":" + DBPWD).toString("base64");
const path = database ? `${COUCHPATH.replace(prefix, '')}${database}` : `${COUCHPATH}${ZONE}_doc`;
const db = new PouchDB(path, {
auth: {
username: DBUSER,
password: DBPWD
},
skip_setup: true,
ajax: {
timeout: 100000
}
});
var processed_docs = 0,
conflicts_docs = 0;
//var db = $p.adapters.pouch.remote.doc
var pageSize = 10;
var lastSeq = 0;
function find_purge(item) {
// Есть проблеммы если документ был Удалён а после создан
// надо проверить есть ли он на самом деле
return db.get(item)
.catch(async (err) => {
let rs = {};
rs[item.id] = [item.changes[0].rev];
return await request.post(`${path}/_purge`, {
json: rs,
headers: {
"Authorization": auth
}
}, (error) => {
if (error) {
console.error(error);
}
});
});
}
function fetchNextPage() {
return db.changes({
since: lastSeq,
limit: pageSize,
selector: {
"_deleted": true
}
}).then(function(changes) {
if (changes.results.length < pageSize) {
console.log(changes.last_seq);
changes.results.forEach(async (item) => {
await find_purge(item);
});
} else {
changes.results.forEach(async (item) => {
//console.log(item);
await find_purge(item);
});
lastSeq = changes.last_seq;
return fetchNextPage();
}
});
}
fetchNextPage().catch(function(err) {
console.log(err);
});