move datatypes to separate endpoint

This commit is contained in:
John
2021-11-05 17:47:49 +01:00
parent 4e9b8b755d
commit 1b47ae7815
3 changed files with 87 additions and 57 deletions
+70 -45
View File
@@ -123,6 +123,28 @@ paths:
500:
description: Circuit or message not found.
content: { }
/datatypes:
get:
summary: Get all known field data types.
responses:
200:
description: Success.
content:
application/json;charset=utf-8:
schema:
$ref: '#/components/schemas/DataTypes'
400:
description: Invalid request parameters.
content: { }
403:
description: User not authorized.
content: { }
404:
description: Circuit or message not found.
content: { }
500:
description: General error.
content: { }
/{file}:
get:
summary: Retrieve a particular file.
@@ -289,51 +311,6 @@ components:
type: integer
description: the time in UTC seconds of the last update of any message.
example: 1493483370
types:
type: array
description: the known field data types (only with definition and without since).
items:
type: object
properties:
type:
type: string
description: the type name.
example: UCH
isbits:
type: boolean
description: true when the length is in bits.
isadjustable:
type: boolean
description: whether the length is adjustable.
isignored:
type: boolean
description: whether the result is ignored.
length:
type: number
minimum: -1
maximum: 31
description: the field length in bytes (-1 for remainder, number
of bits when isbits is true).
result:
enum:
- void
- string
- number
- date
- time
- datetime
description: the result type.
divisor:
type: number
description: the divisor for numeric types (only if applicable, positive
for divisor, negative for reciprocal i.e. 1/-divisor).
precision:
type: number
description: the precision (number of fraction digits) when divisor is >1.
required:
- type
- isbits
- length
Circuit:
type: object
properties:
@@ -497,6 +474,54 @@ components:
comment:
type: string
description: the field comment.
DataType:
description: a known field data type.
type: object
properties:
type:
type: string
description: the type name.
example: UCH
isbits:
type: boolean
description: true when the length is in bits.
isadjustable:
type: boolean
description: whether the length is adjustable.
isignored:
type: boolean
description: whether the result is ignored.
length:
type: number
minimum: -1
maximum: 31
description: the field length in bytes (-1 for remainder, number
of bits when isbits is true).
result:
enum:
- void
- string
- number
- date
- time
- datetime
description: the result type.
divisor:
type: number
description: the divisor for numeric types (only if applicable, positive
for divisor, negative for reciprocal i.e. 1/-divisor).
precision:
type: number
description: the precision (number of fraction digits) when divisor is >1.
required:
- type
- isbits
- length
DataTypes:
type: array
description: the known field data types.
items:
$ref: '#/components/schemas/DataType'
Data:
required:
- global
+16 -11
View File
@@ -2000,10 +2000,6 @@ bool parseBoolQuery(const string& value) {
}
result_t MainLoop::executeGet(const vector<string>& args, bool* connected, ostringstream* ostream) {
bool required = false, full = false, withWrite = false, raw = false;
bool withDefinition = false;
string newDefinition;
OutputFormat verbosity = OF_NAMES;
time_t maxAge = -1;
size_t argPos = 1;
string uri = args[argPos++];
@@ -2018,6 +2014,10 @@ result_t MainLoop::executeGet(const vector<string>& args, bool* connected, ostri
circuit = uri.substr(6, pos - 6);
name = uri.substr(pos + 1);
}
bool required = false, full = false, withWrite = false, raw = false;
bool withDefinition = false;
string newDefinition;
OutputFormat verbosity = OF_NAMES;
time_t since = 0;
size_t pollPriority = 0;
bool exact = false;
@@ -2199,13 +2199,8 @@ result_t MainLoop::executeGet(const vector<string>& args, bool* connected, ostri
*ostream << ",\n \"reconnects\": " << m_reconnectCount
<< ",\n \"masters\": " << m_busHandler->getMasterCount()
<< ",\n \"messages\": " << m_messages->size()
<< ",\n \"lastup\": " << static_cast<unsigned>(maxLastUp);
if (withDefinition && since <= 0) {
*ostream << ",\n \"types\": [";
DataTypeList::getInstance()->dump(verbosity, true, ostream);
*ostream << "\n ]";
}
*ostream << "\n }"
<< ",\n \"lastup\": " << static_cast<unsigned>(maxLastUp)
<< "\n }"
<< "\n}";
type = 6;
}
@@ -2213,6 +2208,16 @@ result_t MainLoop::executeGet(const vector<string>& args, bool* connected, ostri
return formatHttpResult(ret, type, ostream);
} // request for "/data..."
if (uri == "/datatypes") {
*ostream << "[";
OutputFormat verbosity = OF_NAMES|OF_JSON|OF_ALL_ATTRS;
DataTypeList::getInstance()->dump(verbosity, true, ostream);
*ostream << "\n]";
type = 6;
*connected = false;
return formatHttpResult(ret, type, ostream);
}
if (uri.length() < 1 || uri[0] != '/' || uri.find("//") != string::npos || uri.find("..") != string::npos) {
ret = RESULT_ERR_INVALID_ARG;
} else {
+1 -1
View File
@@ -1125,7 +1125,7 @@ void DataTypeList::dump(OutputFormat outputFormat, bool appendDivisor, ostream*
continue;
}
if (json) {
*output << sep << " {";
*output << sep << " {";
}
if ((dataType->getBitCount() % 8) != 0) {
dataType->dump(outputFormat, dataType->getBitCount(), appendDivisor, output);