Explorar o código

impl reconnect API

Yuki Takei %!s(int64=6) %!d(string=hai) anos
pai
achega
0e16a4f259
Modificáronse 2 ficheiros con 27 adicións e 1 borrados
  1. 23 1
      src/server/routes/apiv3/search.js
  2. 4 0
      src/server/service/search.js

+ 23 - 1
src/server/routes/apiv3/search.js

@@ -48,10 +48,32 @@ module.exports = (crowi) => {
       return res.status(200).send({ info });
     }
     catch (err) {
-      return res.apiv3Err(err);
+      return res.apiv3Err(err, 503);
     }
   });
 
+  /**
+   * @swagger
+   *
+   *  /search/connection:
+   *    get:
+   *      tags: [Search]
+   *      summary: /search/connection
+   *      description: Reconnect to Elasticsearch
+   *      responses:
+   *        200:
+   *          description: Successfully connected
+   */
+  router.post('/connection', accessTokenParser, loginRequired, adminRequired, async(req, res) => {
+    try {
+      const search = crowi.getSearcher();
+      await search.initClient();
+      return res.status(200).send();
+    }
+    catch (err) {
+      return res.apiv3Err(err, 503);
+    }
+  });
 
   const validatorForPutIndices = [
     body('operation').isString().isIn(['rebuild', 'normalize']),

+ 4 - 0
src/server/service/search.js

@@ -64,6 +64,10 @@ class SearchService {
     tagEvent.on('update', this.delegator.syncTagChanged.bind(this.delegator));
   }
 
+  async initClient() {
+    return this.delegator.initClient();
+  }
+
   async getInfo() {
     return this.delegator.getInfo();
   }