blob: 292420c770869d6006942d4e2f0b81e5dfef39ca [file] [log] [blame]
/**
*
* Copyright (c) 2020 Silicon Labs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* This module provides the REST API to the admin functions.
*
* @module REST API: admin functions
*/
const dbApi = require('../db/db-api.js')
const dbCache = require('../db/db-cache.js')
const restApi = require('../../src-shared/rest-api.js')
const env = require('../util/env')
const { StatusCodes } = require('http-status-codes')
/**
* API: /sql
* Request JSON:
* <pre>
* {
* sql: SQL Query
* }
* </pre>
*
* Response JSON:
* <pre>
* {
* result: Array of rows.
* }
* </pre>
*
* @export
* @param {*} db
* @param {*} app
* @returns callback for the express uri registration
*/
function httpPostSql(db) {
return async (request, response) => {
let sql = request.body.sql
if (sql) {
try {
let rows = await dbApi.dbAll(db, sql, [])
response.status(StatusCodes.OK).json({ result: rows })
} catch (err) {
response.status(StatusCodes.OK).json({ error: err })
}
}
}
}
/**
* API: /version
* Response JSON:
* <pre>
* {
* version: full version.
* featureLevel: feature level.
* hash: git hash code
* timestamp: Unix time from the last commit in the repo.
* date: Date of the last commit in the repo.
* }
* </pre>
*
* @param {*} db
* @returns callback for the express uri registration.
*/
function httpGetVersion(db) {
return (request, response) => {
let version = env.zapVersion()
response.status(StatusCodes.OK).json(version)
}
}
/**
* API: /cache
* Response JSON:
* <pre>
* {
* keys: 0, // global key count
* hits: 0, // global hit count
* misses: 0, // global miss count
* ksize: 0, // global key size count in approximately bytes
* vsize: 0 // global value size count in approximately bytes
* }
* </pre>
*
* @param {*} db
*/
function httpGetCache(db) {
return (request, response) => {
response.status(StatusCodes.OK).json(dbCache.cacheStats())
}
}
exports.post = [
{
uri: restApi.uri.sql,
callback: httpPostSql
}
]
exports.get = [
{
uri: restApi.uri.version,
callback: httpGetVersion
},
{
uri: restApi.uri.cache,
callback: httpGetCache
}
]