@@ -27,6 +27,18 @@ const VIEW_INDEXES_TO_MONITOR = {
27
27
users : [ 'users' ] ,
28
28
} ;
29
29
30
+ const NOUVEAU_INDEXES_TO_MONITOR = {
31
+ medic : {
32
+ 'medic' : [
33
+ 'contacts_by_freetext' ,
34
+ 'reports_by_freetext' ,
35
+ ] ,
36
+ } ,
37
+ sentinel : { } ,
38
+ usersmeta : { } ,
39
+ users : { } ,
40
+ } ;
41
+
30
42
const MESSAGE_QUEUE_STATUS_KEYS = [ 'due' , 'scheduled' , 'muted' , 'failed' , 'delivered' ] ;
31
43
const fromEntries = ( keys , value ) => {
32
44
// "shim" of Object.fromEntries
@@ -115,7 +127,7 @@ const getFragmentation = ({ sizes }, viewIndexInfos) => {
115
127
return totalFile / totalActive ;
116
128
} ;
117
129
118
- const mapDbInfo = ( dbInfo , viewIndexInfos ) => {
130
+ const mapDbInfo = ( dbInfo , viewIndexInfos , nouveauIndexInfos ) => {
119
131
return {
120
132
name : dbInfo . db_name || '' ,
121
133
update_sequence : getSequenceNumber ( dbInfo . update_seq ) ,
@@ -131,8 +143,13 @@ const mapDbInfo = (dbInfo, viewIndexInfos) => {
131
143
sizes : {
132
144
active : defaultNumber ( viewIndexInfo . view_index ?. sizes ?. active ) ,
133
145
file : defaultNumber ( viewIndexInfo . view_index ?. sizes ?. file ) ,
134
- }
135
- } ) )
146
+ } ,
147
+ } ) ) ,
148
+ nouveau_indexes : nouveauIndexInfos ?. map ( nouveauIndexInfo => ( {
149
+ name : nouveauIndexInfo . name ,
150
+ doc_count : defaultNumber ( nouveauIndexInfo . search_index . num_docs ) ,
151
+ file_size : defaultNumber ( nouveauIndexInfo . search_index . disk_size ) ,
152
+ } ) ) ,
136
153
} ;
137
154
} ;
138
155
@@ -167,11 +184,38 @@ const fetchViewIndexInfosForDb = (db) => Promise.all(
167
184
168
185
const fetchAllViewIndexInfos = ( ) => Promise . all ( Object . keys ( VIEW_INDEXES_TO_MONITOR ) . map ( fetchViewIndexInfosForDb ) ) ;
169
186
187
+ const fetchNouveauIndexInfo = ( db , designDoc , indexName ) => request
188
+ . get ( {
189
+ url : `${ environment . serverUrl } /${ db } /_design/${ designDoc } /_nouveau_info/${ indexName } ` ,
190
+ json : true
191
+ } )
192
+ . then ( data => ( { ...data , name : `${ designDoc } /${ indexName } ` } ) )
193
+ . catch ( err => {
194
+ logger . error ( 'Error fetching nouveau index info: %o' , err ) ;
195
+ return null ;
196
+ } ) ;
197
+
198
+ const fetchNouveauIndexInfosForDdoc = ( db , ddoc ) => NOUVEAU_INDEXES_TO_MONITOR [ db ] [ ddoc ] . map (
199
+ indexName => fetchNouveauIndexInfo ( DBS_TO_MONITOR [ db ] , ddoc , indexName ) ,
200
+ ) ;
201
+
202
+ const fetchNouveauIndexInfosForDb = ( db ) => Promise . all ( Object . keys ( NOUVEAU_INDEXES_TO_MONITOR [ db ] ) . flatMap (
203
+ ddoc => fetchNouveauIndexInfosForDdoc ( db , ddoc ) ,
204
+ ) ) . then ( ( nouveauIndexInfos ) => nouveauIndexInfos . filter ( info => info ) ) ;
205
+
206
+ const fetchAllNouveauIndexInfos = ( ) => Promise . all (
207
+ Object . keys ( NOUVEAU_INDEXES_TO_MONITOR ) . map ( fetchNouveauIndexInfosForDb ) ,
208
+ ) ;
209
+
170
210
const getDbInfos = async ( ) => {
171
- const [ dbInfos , viewIndexInfos ] = await Promise . all ( [ fetchDbsInfo ( ) , fetchAllViewIndexInfos ( ) ] ) ;
211
+ const [ dbInfos , viewIndexInfos , nouveauIndexInfos ] = await Promise . all ( [
212
+ fetchDbsInfo ( ) ,
213
+ fetchAllViewIndexInfos ( ) ,
214
+ fetchAllNouveauIndexInfos ( ) ,
215
+ ] ) ;
172
216
const result = { } ;
173
217
Object . keys ( DBS_TO_MONITOR ) . forEach ( ( dbKey , i ) => {
174
- result [ dbKey ] = mapDbInfo ( dbInfos [ i ] , viewIndexInfos [ i ] ) ;
218
+ result [ dbKey ] = mapDbInfo ( dbInfos [ i ] , viewIndexInfos [ i ] , nouveauIndexInfos [ i ] ) ;
175
219
} ) ;
176
220
return result ;
177
221
} ;
0 commit comments