DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
restcmd
include
restcmd
RestEndpoint.hpp
Go to the documentation of this file.
1
11
#ifndef RESTCMD_INCLUDE_RESTCMD_RESTENDPOINT_HPP_
12
#define RESTCMD_INCLUDE_RESTCMD_RESTENDPOINT_HPP_
13
14
#include "
restcmd/Issues.hpp
"
15
16
#include "
cmdlib/cmd/Nljs.hpp
"
17
18
#include <nlohmann/json.hpp>
19
20
#include <pistache/client.h>
21
#include <pistache/description.h>
22
#include <pistache/endpoint.h>
23
#include <pistache/http.h>
24
#include <pistache/http_header.h>
25
#include <pistache/mime.h>
26
#include <pistache/router.h>
27
28
#include <chrono>
29
#include <future>
30
#include <memory>
31
#include <string>
32
#include <thread>
33
#include <vector>
34
35
namespace
dunedaq::restcmd
{
36
37
typedef
nlohmann::json
cmdobj_t
;
38
39
class
RestEndpoint
40
{
41
public
:
42
explicit
RestEndpoint
(
const
std::string&
/*uri*/
,
43
int
port,
44
std::function<
void
(
const
cmdobj_t
&,
cmdlib::cmd::CommandReply
)> callback) noexcept
45
:
port_
{
static_cast<
uint16_t
>
(port) }
// NOLINT(build/unsigned)
46
,
address_
{ Pistache::Ipv4::any(),
port_
}
47
,
http_endpoint_
{ std::make_shared<Pistache::Http::Endpoint>(
address_
) }
48
,
description_
{
"DUNE DAQ cmdlib API"
,
"0.1"
}
49
,
accepted_mime_
{ MIME(Application, Json) }
50
,
http_client_
{ std::make_shared<Pistache::Http::Client>() }
51
,
command_callback_
{ callback }
52
{
53
}
54
55
void
init
(
size_t
threads);
56
void
start
();
57
void
stop
();
58
void
shutdown
();
59
60
// Client handler
61
void
handleResponseCommand
(
const
cmdobj_t
& cmd,
cmdlib::cmd::CommandReply
& meta);
62
uint16_t
getPort
()
const
{
return
static_cast<
uint16_t
>
(
port_
); }
// NOLINT(build/unsigned)
63
std::shared_ptr<Pistache::Http::Client>
getHttpClient
()
const
{
return
http_client_
; }
64
65
private
:
66
void
createRouting
();
67
void
createDescription
();
68
// void serveTask();
69
70
// Route handler
71
void
handle_route_command
(
const
Pistache::Rest::Request&, Pistache::Http::ResponseWriter response);
72
73
// REST
74
Pistache::Port
port_
;
75
Pistache::Address
address_
;
76
std::shared_ptr<Pistache::Http::Endpoint>
http_endpoint_
;
77
Pistache::Rest::Description
description_
;
78
Pistache::Rest::Router
router_
;
79
Pistache::Http::Mime::MediaType
accepted_mime_
;
80
81
// CLIENT
82
std::shared_ptr<Pistache::Http::Client>
http_client_
;
83
Pistache::Http::Client::Options
http_client_options_
;
84
std::vector<Pistache::Async::Promise<Pistache::Http::Response>>
http_client_responses_
;
85
86
// Function to call with received POST bodies
87
std::function<void(
const
cmdobj_t
&,
cmdlib::cmd::CommandReply
)>
command_callback_
;
88
89
// Background server thread
90
std::thread
server_thread_
;
91
};
92
93
}
// namespace dunedaq::restcmd
94
95
#endif
// RESTCMD_INCLUDE_RESTCMD_RESTENDPOINT_HPP_
dunedaq::restcmd::RestEndpoint::init
void init(size_t threads)
Definition
RestEndpoint.cpp:22
dunedaq::restcmd::RestEndpoint::port_
Pistache::Port port_
Definition
RestEndpoint.hpp:74
dunedaq::restcmd::RestEndpoint::start
void start()
Definition
RestEndpoint.cpp:38
dunedaq::restcmd::RestEndpoint::address_
Pistache::Address address_
Definition
RestEndpoint.hpp:75
dunedaq::restcmd::RestEndpoint::createDescription
void createDescription()
dunedaq::restcmd::RestEndpoint::RestEndpoint
RestEndpoint(const std::string &, int port, std::function< void(const cmdobj_t &, cmdlib::cmd::CommandReply)> callback) noexcept
Definition
RestEndpoint.hpp:42
dunedaq::restcmd::RestEndpoint::createRouting
void createRouting()
Definition
RestEndpoint.cpp:59
dunedaq::restcmd::RestEndpoint::getHttpClient
std::shared_ptr< Pistache::Http::Client > getHttpClient() const
Definition
RestEndpoint.hpp:63
dunedaq::restcmd::RestEndpoint::getPort
uint16_t getPort() const
Definition
RestEndpoint.hpp:62
dunedaq::restcmd::RestEndpoint::router_
Pistache::Rest::Router router_
Definition
RestEndpoint.hpp:78
dunedaq::restcmd::RestEndpoint::description_
Pistache::Rest::Description description_
Definition
RestEndpoint.hpp:77
dunedaq::restcmd::RestEndpoint::server_thread_
std::thread server_thread_
Definition
RestEndpoint.hpp:90
dunedaq::restcmd::RestEndpoint::http_client_
std::shared_ptr< Pistache::Http::Client > http_client_
Definition
RestEndpoint.hpp:82
dunedaq::restcmd::RestEndpoint::handle_route_command
void handle_route_command(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response)
Definition
RestEndpoint.cpp:85
dunedaq::restcmd::RestEndpoint::http_endpoint_
std::shared_ptr< Pistache::Http::Endpoint > http_endpoint_
Definition
RestEndpoint.hpp:76
dunedaq::restcmd::RestEndpoint::http_client_options_
Pistache::Http::Client::Options http_client_options_
Definition
RestEndpoint.hpp:83
dunedaq::restcmd::RestEndpoint::stop
void stop()
dunedaq::restcmd::RestEndpoint::accepted_mime_
Pistache::Http::Mime::MediaType accepted_mime_
Definition
RestEndpoint.hpp:79
dunedaq::restcmd::RestEndpoint::command_callback_
std::function< void(const cmdobj_t &, cmdlib::cmd::CommandReply)> command_callback_
Definition
RestEndpoint.hpp:87
dunedaq::restcmd::RestEndpoint::handleResponseCommand
void handleResponseCommand(const cmdobj_t &cmd, cmdlib::cmd::CommandReply &meta)
Definition
RestEndpoint.cpp:104
dunedaq::restcmd::RestEndpoint::http_client_responses_
std::vector< Pistache::Async::Promise< Pistache::Http::Response > > http_client_responses_
Definition
RestEndpoint.hpp:84
dunedaq::restcmd::RestEndpoint::shutdown
void shutdown()
Definition
RestEndpoint.cpp:51
Nljs.hpp
dunedaq::restcmd
Definition
RestEndpoint.hpp:35
dunedaq::restcmd::cmdobj_t
nlohmann::json cmdobj_t
Definition
RestEndpoint.hpp:37
Issues.hpp
dunedaq::cmdlib::cmd::CommandReply
Definition
Structs.hpp:45
Generated on
for DUNE-DAQ by
1.18.0