mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 10:07:08 +00:00
Add more details to version() return value
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user