Skip to content

Commit 7e03d29

Browse files
committed
Fixed bugs.
1 parent ac72830 commit 7e03d29

File tree

5 files changed

+62
-37
lines changed

5 files changed

+62
-37
lines changed

Diff for: Dockerfile

-1
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,3 @@ ENV PATH ${DIST_PATH}/bin:$PATH
7474
# Default entrypoint and exposed port
7575
EXPOSE 5000
7676
ENTRYPOINT ["braynsService"]
77-
CMD ["--uri", "0.0.0.0:5000"]

Diff for: src/brayns/core/Launcher.cpp

+29-26
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,39 @@ namespace
3232
{
3333
using namespace brayns;
3434

35+
WebSocketServerSettings extractServerSettings(const ServiceSettings &settings)
36+
{
37+
auto ssl = std::optional<SslSettings>();
38+
39+
if (settings.ssl)
40+
{
41+
ssl = SslSettings{
42+
.privateKeyFile = settings.privateKeyFile,
43+
.certificateFile = settings.certificateFile,
44+
.caLocation = settings.caLocation,
45+
.privateKeyPassphrase = settings.privateKeyPassphrase,
46+
};
47+
}
48+
49+
return {
50+
.host = settings.host,
51+
.port = settings.port,
52+
.maxThreadCount = settings.maxThreadCount,
53+
.maxQueueSize = settings.maxQueueSize,
54+
.maxFrameSize = settings.maxFrameSize,
55+
.ssl = std::move(ssl),
56+
};
57+
}
58+
3559
void startServerAndRunService(const ServiceSettings &settings, Logger &logger)
3660
{
3761
auto level = getEnumValue<LogLevel>(settings.logLevel);
3862
logger.setLevel(level);
3963

64+
logger.info("{}", getCopyright());
65+
66+
logger.debug("Service options:{}", stringifyArgvSettings(settings));
67+
4068
auto token = StopToken();
4169

4270
logger.info("Building JSON-RPC API");
@@ -56,33 +84,12 @@ void startServerAndRunService(const ServiceSettings &settings, Logger &logger)
5684

5785
logger.info("Starting websocket server on {}:{}", settings.host, settings.port);
5886

59-
auto ssl = std::optional<SslSettings>();
60-
61-
if (settings.ssl)
62-
{
63-
ssl = SslSettings{
64-
.privateKeyFile = settings.privateKeyFile,
65-
.certificateFile = settings.certificateFile,
66-
.caLocation = settings.caLocation,
67-
.privateKeyPassphrase = settings.privateKeyPassphrase,
68-
};
69-
}
70-
71-
auto serverSettings = WebSocketServerSettings{
72-
.host = settings.host,
73-
.port = settings.port,
74-
.maxThreadCount = settings.maxThreadCount,
75-
.maxQueueSize = settings.maxQueueSize,
76-
.maxFrameSize = settings.maxFrameSize,
77-
.ssl = std::move(ssl),
78-
};
79-
87+
auto serverSettings = extractServerSettings(settings);
8088
auto server = startServer(serverSettings, logger);
8189

8290
logger.info("Websocket server started");
8391

8492
logger.info("Service running");
85-
8693
runService(server, api, token, logger);
8794
}
8895
}
@@ -109,10 +116,6 @@ int runServiceFromArgv(int argc, const char **argv)
109116
return 0;
110117
}
111118

112-
logger.info("{}", getCopyright());
113-
114-
logger.debug("Service options:{}", stringifyArgvSettings(settings));
115-
116119
startServerAndRunService(settings, logger);
117120

118121
return 0;

Diff for: src/brayns/core/api/Endpoint.h

+12-5
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,18 @@ struct JsonObjectReflector<EndpointSchema>
4646
static auto reflect()
4747
{
4848
auto builder = JsonBuilder<EndpointSchema>();
49-
builder.field("method", [](auto &object) { return &object.method; }).description("Endpoint method");
50-
builder.field("description", [](auto &object) { return &object.method; }).description("Endpoint description");
51-
builder.field("params", [](auto &object) { return &object.params; }).description("Endpoint params JSON schema");
52-
builder.field("result", [](auto &object) { return &object.result; }).description("Endpoint result JSON schema");
53-
builder.field("async", [](auto &object) { return &object.async; }).description("Wether the endpoint is async");
49+
builder.field("method", [](auto &object) { return &object.method; })
50+
.description("JSON-RPC method that has to be specified to reach the endpoint");
51+
builder.field("description", [](auto &object) { return &object.description; })
52+
.description("Short description of what the method does");
53+
builder.field("params", [](auto &object) { return &object.params; })
54+
.description("JSON schema of the method params");
55+
builder.field("result", [](auto &object) { return &object.result; })
56+
.description("JSON schema of the method result");
57+
builder.field("async", [](auto &object) { return &object.async; })
58+
.description(
59+
"If true, the endpoint does not return its result directly but instead an object {\"task_id\": ID}. "
60+
"This ID can be used to get the method result, cancel it or get its progress");
5461
return builder.build();
5562
}
5663
};

Diff for: src/brayns/core/endpoints/CoreEndpoints.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void addCoreEndpoints(ApiBuilder &builder, Api &api, StopToken &token)
138138
builder.endpoint("get-methods", [&](NullJson) { return MethodsResult{api.getMethods()}; })
139139
.description("Get available JSON-RPC methods");
140140
builder.endpoint("get-schema", [&](SchemaParams params) { return api.getSchema(params.method); })
141-
.description("Get the schema of the given JSON-RCP method");
141+
.description("Get the schema of the given JSON-RPC method");
142142

143143
builder.endpoint("get-tasks", [&](NullJson) { return TasksResult{api.getTasks()}; })
144144
.description("Get tasks that are currently running");

Diff for: src/brayns/core/service/Service.cpp

+20-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ namespace
2929
{
3030
using namespace brayns;
3131

32+
struct ResponseData
33+
{
34+
std::string data;
35+
bool binary = false;
36+
};
37+
3238
JsonRpcRequest parseRequest(const RawRequest &request)
3339
{
3440
if (request.binary)
@@ -39,7 +45,7 @@ JsonRpcRequest parseRequest(const RawRequest &request)
3945
return parseJsonRpcRequest(request.data);
4046
}
4147

42-
RawResponse composeResponse(const JsonRpcId &id, RawResult result)
48+
ResponseData composeResponse(const JsonRpcId &id, RawResult result)
4349
{
4450
if (result.binary.empty())
4551
{
@@ -80,14 +86,20 @@ std::optional<JsonRpcRequest> tryParseRequest(const RawRequest &request, Logger
8086
return std::nullopt;
8187
}
8288

83-
RawResponse executeRequest(JsonRpcRequest request, Api &api, Logger &logger)
89+
ResponseData executeRequest(JsonRpcRequest request, Api &api, Logger &logger)
8490
{
8591
auto params = RawParams{std::move(request.params), std::move(request.binary)};
8692

8793
logger.info("Calling endpoint for request {}", request.id);
8894
auto result = api.execute(request.method, std::move(params));
8995
logger.info("Successfully called endpoint");
9096

97+
if (std::holds_alternative<NullJson>(request.id))
98+
{
99+
logger.info("No ID in request, skipping response");
100+
return {};
101+
}
102+
91103
logger.info("Composing response");
92104
auto response = composeResponse(request.id, std::move(result));
93105
logger.info("Successfully composed response");
@@ -99,8 +111,12 @@ void tryExecuteRequest(JsonRpcRequest request, const ResponseHandler &respond, A
99111
{
100112
try
101113
{
102-
auto response = executeRequest(std::move(request), api, logger);
103-
respond(response);
114+
auto [data, binary] = executeRequest(std::move(request), api, logger);
115+
116+
if (!data.empty())
117+
{
118+
respond({data, binary});
119+
}
104120
}
105121
catch (const JsonRpcException &e)
106122
{

0 commit comments

Comments
 (0)