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_SRC_RESTENDPOINT_HPP_
12
#define RESTCMD_SRC_RESTENDPOINT_HPP_
13
14
#include <nlohmann/json.hpp>
15
16
#include <pistache/http.h>
17
#include <pistache/http_header.h>
18
#include <pistache/description.h>
19
#include <pistache/router.h>
20
#include <pistache/endpoint.h>
21
#include <pistache/client.h>
22
#include <pistache/mime.h>
23
24
#include "
cmdlib/cmd/Nljs.hpp
"
25
26
#include "
restcmd/Issues.hpp
"
27
28
#include <thread>
29
#include <chrono>
30
#include <future>
31
#include <memory>
32
#include <string>
33
34
namespace
dunedaq
{
35
namespace
restcmd
{
36
37
typedef
nlohmann::json
cmdobj_t
;
38
39
class
RestEndpoint
{
40
public
:
41
explicit
RestEndpoint
(
const
std::string&
/*uri*/
,
int
port,
42
std::function<
void
(
const
cmdobj_t
&,
cmdlib::cmd::CommandReply
)> callback) noexcept
43
:
port_
{
static_cast<
uint16_t
>
(port) }
44
,
address_
{ Pistache::Ipv4::any(),
port_
}
45
,
http_endpoint_
{ std::make_shared<Pistache::Http::Endpoint>(
address_
) }
46
,
description_
{
"DUNE DAQ cmdlib API"
,
"0.1"
}
47
,
accepted_mime_
{ MIME(Application, Json) }
48
,
http_client_
{ std::make_shared<Pistache::Http::Client>() }
49
,
command_callback_
{ callback }
50
{ }
51
52
void
init
(
size_t
threads);
53
void
start
();
54
void
stop
();
55
void
shutdown
();
56
57
// Client handler
58
void
handleResponseCommand
(
const
cmdobj_t
& cmd,
cmdlib::cmd::CommandReply
& meta);
59
uint16_t
getPort
()
const
{
60
return
static_cast<
uint16_t
>
(
port_
);
61
}
62
std::shared_ptr<Pistache::Http::Client>
getHttpClient
()
const
{
63
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
74
// REST
75
Pistache::Port
port_
;
76
Pistache::Address
address_
;
77
std::shared_ptr<Pistache::Http::Endpoint>
http_endpoint_
;
78
Pistache::Rest::Description
description_
;
79
Pistache::Rest::Router
router_
;
80
Pistache::Http::Mime::MediaType
accepted_mime_
;
81
82
// CLIENT
83
std::shared_ptr<Pistache::Http::Client>
http_client_
;
84
Pistache::Http::Client::Options
http_client_options_
;
85
std::vector<Pistache::Async::Promise<Pistache::Http::Response>>
http_client_responses_
;
86
87
// Function to call with received POST bodies
88
std::function<void(
const
cmdobj_t
&,
cmdlib::cmd::CommandReply
)>
command_callback_
;
89
90
// Background server thread
91
std::thread
server_thread_
;
92
93
};
94
95
}
// namespace restcmd
96
}
// namespace dunedaq
97
98
#endif
// RESTCMD_SRC_RESTENDPOINT_HPP_
dunedaq::restcmd::RestEndpoint::init
void init(size_t threads)
Definition
RestEndpoint.cpp:20
dunedaq::restcmd::RestEndpoint::port_
Pistache::Port port_
Definition
RestEndpoint.hpp:75
dunedaq::restcmd::RestEndpoint::start
void start()
Definition
RestEndpoint.cpp:35
dunedaq::restcmd::RestEndpoint::address_
Pistache::Address address_
Definition
RestEndpoint.hpp:76
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:41
dunedaq::restcmd::RestEndpoint::createRouting
void createRouting()
Definition
RestEndpoint.cpp:54
dunedaq::restcmd::RestEndpoint::getHttpClient
std::shared_ptr< Pistache::Http::Client > getHttpClient() const
Definition
RestEndpoint.hpp:62
dunedaq::restcmd::RestEndpoint::getPort
uint16_t getPort() const
Definition
RestEndpoint.hpp:59
dunedaq::restcmd::RestEndpoint::router_
Pistache::Rest::Router router_
Definition
RestEndpoint.hpp:79
dunedaq::restcmd::RestEndpoint::description_
Pistache::Rest::Description description_
Definition
RestEndpoint.hpp:78
dunedaq::restcmd::RestEndpoint::server_thread_
std::thread server_thread_
Definition
RestEndpoint.hpp:91
dunedaq::restcmd::RestEndpoint::http_client_
std::shared_ptr< Pistache::Http::Client > http_client_
Definition
RestEndpoint.hpp:83
dunedaq::restcmd::RestEndpoint::handle_route_command
void handle_route_command(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response)
Definition
RestEndpoint.cpp:78
dunedaq::restcmd::RestEndpoint::http_endpoint_
std::shared_ptr< Pistache::Http::Endpoint > http_endpoint_
Definition
RestEndpoint.hpp:77
dunedaq::restcmd::RestEndpoint::http_client_options_
Pistache::Http::Client::Options http_client_options_
Definition
RestEndpoint.hpp:84
dunedaq::restcmd::RestEndpoint::stop
void stop()
dunedaq::restcmd::RestEndpoint::accepted_mime_
Pistache::Http::Mime::MediaType accepted_mime_
Definition
RestEndpoint.hpp:80
dunedaq::restcmd::RestEndpoint::command_callback_
std::function< void(const cmdobj_t &, cmdlib::cmd::CommandReply)> command_callback_
Definition
RestEndpoint.hpp:88
dunedaq::restcmd::RestEndpoint::handleResponseCommand
void handleResponseCommand(const cmdobj_t &cmd, cmdlib::cmd::CommandReply &meta)
Definition
RestEndpoint.cpp:96
dunedaq::restcmd::RestEndpoint::http_client_responses_
std::vector< Pistache::Async::Promise< Pistache::Http::Response > > http_client_responses_
Definition
RestEndpoint.hpp:85
dunedaq::restcmd::RestEndpoint::shutdown
void shutdown()
Definition
RestEndpoint.cpp:47
Nljs.hpp
dunedaq::restcmd
Definition
RestEndpoint.hpp:35
dunedaq::restcmd::cmdobj_t
nlohmann::json cmdobj_t
Definition
RestEndpoint.hpp:37
dunedaq
Including Qt Headers.
Definition
module.cpp:16
Issues.hpp
dunedaq::cmdlib::cmd::CommandReply
Definition
Structs.hpp:45
Generated on
for DUNE-DAQ by
1.17.0