async function runQueryApiServer()

in nodejs/datastax-v4/ecs-sigv4/app/query-api/query-api-server.js [50:105]


async function runQueryApiServer() {
  try {
    // Check that table exists
    const result = await cassandraClient.execute(
      `SELECT status FROM system_schema_mcs.tables
        WHERE keyspace_name='${keyspace}' AND table_name='${table}'`
    )
    const status = result.first()['status']
    log.info(`${keyspace}.${table} status: ${status}`)
    if (status !=='ACTIVE')
      throw `${keyspace}.${table} is not ACTIVE`

    // Prepare server routing
    const app = express()
    app.use(express.json())
    app.use(express.urlencoded({extended: true}))
    app.get('/countries', (req, res) => {
      const query = `SELECT * FROM ${keyspace}.${table}`;
      let pretty = (typeof req.query.pretty !== 'undefined');
      executeQuery(query, res, pretty)
    })
    app.get('/countries/:id', (req, res) => {
      var id = req.params.id
      const query = `SELECT * FROM ${keyspace}.${table} WHERE id='${id}'`;
      let pretty = (typeof req.query.pretty !== 'undefined');
      executeQuery(query, res, pretty)
    })
    app.get('/ping', (req, res) => {
      res.send("ok\n")
    })
    log.info('Routing configured')

    // Start server
    const host = '0.0.0.0';
    const server = app.listen(port, host);
    log.info(`Service running on http://${host}:${port}`)

    // Set up SIGTERM processing
    process.on('SIGTERM', () => {
      log.info('SIGTERM signal received.');
      log.info('Closing http server.');
      server.close(() => {
        log.info('Http server closed.');
        cassandraClient.shutdown(() => {
          log.info('Cassandra client closed.');
          process.exit(0);
        })
      })
    })
  }
  catch (err) {
    log.error(err)
    if (cassandraClient)
      await cassandraClient.shutdown()
  }
}