Add more details to version() return value

This commit is contained in:
D. Berge
2023-11-02 19:46:44 +01:00
parent 46bb207dfb
commit f0fa2b75d5

View File

@@ -1,6 +1,11 @@
const semver = require("semver");
const { exec } = require("child_process");
const { readFileSync } = require('fs');
const { pool } = require('./db/connection');
const { info } = require('./db');
const api = require('../api');
const pkg = require("../package.json");
const { ALERT, ERROR, WARNING, NOTICE, INFO, DEBUG } = require('DOUGAL_ROOT/debug')(__filename);
function compatible () {
@@ -23,9 +28,8 @@ function compatible () {
* false otherwise.
*/
function compatible_schema () {
const { info } = require('./db');
return new Promise ( async (resolve, reject) => {
const current = await info.get(null, "version/db_schema");
const current = await schema_version();
const wanted = pkg.config.db_schema;
const component = "schema";
if (semver.satisfies(current, wanted)) {
@@ -37,9 +41,8 @@ function compatible_schema () {
}
function compatible_api () {
const api = require('../api');
return new Promise ( async (resolve, reject) => {
const current = api.locals.version;
const current = api_version();
const wanted = pkg.config.api;
const component = "api";
if (semver.satisfies(current, wanted)) {
@@ -50,12 +53,51 @@ function compatible_api () {
});
}
async function db_version () {
const client = await pool.connect();
let res;
try {
res = (await client.query("SELECT version(), PostGIS_Version();"))?.rows[0];
} catch (err) {
ERROR(err);
} finally {
client.release();
}
return res;
}
async function os_version () {
try {
return Object.fromEntries(
readFileSync("/etc/os-release")
.toString("utf-8")
.split("\n")
.map(i =>
i.split("=", 2)
.map(i => i.replace(/^"|"$/g, ""))
)
.filter(i =>
["ID", "NAME", "PRETTY_NAME", "VERSION", "VERSION_ID"].includes(i[0])
)
);
} catch (err) {
ERROR(err);
}
}
async function schema_version () {
return await info.get(null, "version/db_schema");
}
function api_version () {
return api.locals.version;
}
/** Return software name.
*
*/
function name () {
const pkg = require("../package.json");
function app_name () {
return pkg.name ?? pkg.description ?? "Unknown";
}
@@ -81,11 +123,36 @@ async function describe () {
});
}
function version () {
function version_old () {
return pkg.version;
}
async function version () {
const name = app_name();
const server = pkg.version;
const tag = await describe();
const api = await api_version();
const schema = await schema_version();
const db = await db_version();
const os = await os_version();
const compatibility = [
await compatible_schema(),
await compatible_api()
]
return {
name,
server,
tag,
api,
schema,
db,
os,
compatibility
}
}
version.compatible = compatible;
version.name = name;
version.name = app_name;
version.describe = describe;
module.exports = version;