DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
snbmodules
include
snbmodules
interfaces
transfer_interface_SCP.hpp
Go to the documentation of this file.
1
8
9
#ifndef SNBMODULES_INCLUDE_SNBMODULES_INTERFACES_TRANSFER_INTERFACE_SCP_HPP_
10
#define SNBMODULES_INCLUDE_SNBMODULES_INTERFACES_TRANSFER_INTERFACE_SCP_HPP_
11
12
#include "
snbmodules/common/status_enum.hpp
"
13
#include "
snbmodules/interfaces/transfer_interface_abstract.hpp
"
14
15
#include <chrono>
16
#include <cstdio>
17
#include <fstream>
18
#include <iostream>
19
20
#include <map>
21
#include <string>
22
23
namespace
dunedaq::snbmodules
{
24
25
class
TransferInterfaceSCP
:
public
TransferInterfaceAbstract
26
{
27
28
public
:
29
TransferInterfaceSCP
(
GroupMetadata
&
config
,
bool
is_uploader)
30
:
TransferInterfaceAbstract
(
config
)
31
{
32
if
(
config
.get_protocol_options().contains(
"user"
)) {
33
m_params.user = config.get_protocol_options()[
"user"
].get<std::string>();
34
}
else
{
35
ers::fatal(ConfigError(ERS_HERE,
"user is mandatory in SCP protocol options"
));
36
return;
37
}
38
39
if (
config
.get_protocol_options().contains(
"use_password"
)) {
40
m_params.use_password = config.get_protocol_options()[
"use_password"
].get<bool>();
41
}
42
43
m_is_uploader
= is_uploader;
44
}
45
virtual
~TransferInterfaceSCP
() =
default
;
46
47
bool
upload_file
(
TransferMetadata
& f_meta)
override
48
{
49
TLOG
() <<
"debug : SCP : Uploading file "
<< f_meta.
get_file_name
();
50
f_meta.
set_status
(
status_type::e_status::UPLOADING
);
51
52
// nothing to do
53
TLOG
() <<
"debug : SCP : Sucess Upload"
;
54
f_meta.
set_status
(
status_type::e_status::FINISHED
);
55
f_meta.
set_bytes_transferred
(f_meta.
get_size
());
56
return
true
;
57
}
58
bool
download_file
(
TransferMetadata
& f_meta, std::filesystem::path dest)
override
59
{
60
TLOG
() <<
"debug : SCP : Downloading file "
<< f_meta.
get_file_name
();
61
f_meta.
set_status
(
status_type::e_status::DOWNLOADING
);
62
63
m_files_being_transferred
[f_meta.
get_file_name
()] = dest;
64
65
std::string exec =
""
;
66
if
(
m_params
.use_password) {
67
exec =
"scp "
+
m_params
.user +
"@"
+ f_meta.
get_src
().
get_ip
() +
":"
+ f_meta.
get_file_path
().string() +
" "
+
68
dest.string();
69
}
else
{
70
71
exec =
"scp -o PasswordAuthentication='no' "
+
m_params
.user +
"@"
+ f_meta.
get_src
().
get_ip
() +
":"
+
72
f_meta.
get_file_path
().string() +
" "
+ dest.string();
73
}
74
75
TLOG
() <<
"debug : executing "
<< exec;
76
if
(system(exec.c_str()) == 0)
// NOLINT
77
{
78
TLOG
() <<
"debug : SCP : Sucess Download"
;
79
f_meta.
set_status
(
status_type::e_status::FINISHED
);
80
f_meta.
set_bytes_transferred
(f_meta.
get_size
());
81
}
else
{
82
ers::error
(ErrorSCPDownloadError(
ERS_HERE
,
"Please check the logs for more information."
));
83
f_meta.
set_status
(
status_type::e_status::ERROR
);
84
f_meta.
set_error_code
(
"Something went wrong during the download"
);
85
f_meta.
set_bytes_transferred
(0);
86
return
false
;
87
}
88
89
return
true
;
90
}
91
92
bool
pause_file
(
TransferMetadata
& f_meta)
override
93
{
94
TLOG
() <<
"debug : SCP : Pausing file "
<< f_meta.
get_file_name
();
95
f_meta.
set_status
(
status_type::e_status::PAUSED
);
96
f_meta.
set_bytes_transferred
(0);
97
return
true
;
98
}
99
100
bool
resume_file
(
TransferMetadata
& f_meta)
override
101
{
102
TLOG
() <<
"debug : SCP : Resuming file "
<< f_meta.
get_file_name
();
103
104
if
(
m_is_uploader
) {
105
return
upload_file
(f_meta);
106
}
else
{
107
return
download_file
(f_meta,
m_files_being_transferred
[f_meta.
get_file_name
()]);
108
}
109
}
110
111
bool
hash_file
(
TransferMetadata
& f_meta)
override
112
{
113
TLOG
() <<
"debug : SCP : Hashing file "
<< f_meta.
get_file_name
();
114
f_meta.
set_status
(
status_type::e_status::HASHING
);
115
return
true
;
116
}
117
118
bool
cancel_file
(
TransferMetadata
& f_meta)
override
119
{
120
TLOG
() <<
"debug : SCP : Cancelling file "
<< f_meta.
get_file_name
();
121
f_meta.
set_status
(
status_type::e_status::CANCELLED
);
122
return
true
;
123
}
124
125
private
:
126
struct
scp_parameters
127
{
128
std::string
user
;
129
bool
use_password
=
false
;
130
}
m_params
;
131
132
bool
m_is_uploader
;
133
std::map<std::string, std::filesystem::path>
m_files_being_transferred
;
134
};
135
}
// namespace dunedaq::snbmodules
136
#endif
// SNBMODULES_INCLUDE_SNBMODULES_INTERFACES_TRANSFER_INTERFACE_SCP_HPP_
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
dunedaq::snbmodules::GroupMetadata
Definition
group_metadata.hpp:26
dunedaq::snbmodules::IPFormat::get_ip
std::string get_ip() const
Definition
ip_format.hpp:116
dunedaq::snbmodules::TransferInterfaceAbstract::TransferInterfaceAbstract
TransferInterfaceAbstract(GroupMetadata &config)
Definition
transfer_interface_abstract.hpp:29
dunedaq::snbmodules::TransferInterfaceSCP::download_file
bool download_file(TransferMetadata &f_meta, std::filesystem::path dest) override
Definition
transfer_interface_SCP.hpp:58
dunedaq::snbmodules::TransferInterfaceSCP::upload_file
bool upload_file(TransferMetadata &f_meta) override
Definition
transfer_interface_SCP.hpp:47
dunedaq::snbmodules::TransferInterfaceSCP::pause_file
bool pause_file(TransferMetadata &f_meta) override
Definition
transfer_interface_SCP.hpp:92
dunedaq::snbmodules::TransferInterfaceSCP::m_files_being_transferred
std::map< std::string, std::filesystem::path > m_files_being_transferred
Definition
transfer_interface_SCP.hpp:133
dunedaq::snbmodules::TransferInterfaceSCP::cancel_file
bool cancel_file(TransferMetadata &f_meta) override
Definition
transfer_interface_SCP.hpp:118
dunedaq::snbmodules::TransferInterfaceSCP::hash_file
bool hash_file(TransferMetadata &f_meta) override
Definition
transfer_interface_SCP.hpp:111
dunedaq::snbmodules::TransferInterfaceSCP::m_is_uploader
bool m_is_uploader
Definition
transfer_interface_SCP.hpp:132
dunedaq::snbmodules::TransferInterfaceSCP::resume_file
bool resume_file(TransferMetadata &f_meta) override
Definition
transfer_interface_SCP.hpp:100
dunedaq::snbmodules::TransferInterfaceSCP::TransferInterfaceSCP
TransferInterfaceSCP(GroupMetadata &config, bool is_uploader)
Definition
transfer_interface_SCP.hpp:29
dunedaq::snbmodules::TransferInterfaceSCP::~TransferInterfaceSCP
virtual ~TransferInterfaceSCP()=default
dunedaq::snbmodules::TransferInterfaceSCP::m_params
struct dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters m_params
dunedaq::snbmodules::TransferMetadata
Definition
transfer_metadata.hpp:29
dunedaq::snbmodules::TransferMetadata::set_error_code
void set_error_code(std::string error_code)
Definition
transfer_metadata.hpp:224
dunedaq::snbmodules::TransferMetadata::get_file_path
std::filesystem::path get_file_path() const
Definition
transfer_metadata.hpp:255
dunedaq::snbmodules::TransferMetadata::set_bytes_transferred
void set_bytes_transferred(uint64_t bytes_transferred)
Definition
transfer_metadata.hpp:180
dunedaq::snbmodules::TransferMetadata::get_src
IPFormat get_src() const
Definition
transfer_metadata.hpp:258
dunedaq::snbmodules::TransferMetadata::set_status
void set_status(status_type::e_status status)
Definition
transfer_metadata.hpp:194
dunedaq::snbmodules::TransferMetadata::get_size
uint64_t get_size() const
Definition
transfer_metadata.hpp:260
dunedaq::snbmodules::TransferMetadata::get_file_name
std::string get_file_name() const
Definition
transfer_metadata.hpp:256
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::config
Definition
config_api_info.hpp:26
dunedaq::snbmodules
Definition
bookkeeper.hpp:30
ers::error
void error(const Issue &issue)
Definition
ers.hpp:92
status_enum.hpp
dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters
Definition
transfer_interface_SCP.hpp:127
dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters::user
std::string user
Definition
transfer_interface_SCP.hpp:128
dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters::use_password
bool use_password
Definition
transfer_interface_SCP.hpp:129
dunedaq::snbmodules::status_type::CANCELLED
@ CANCELLED
Definition
status_enum.hpp:32
dunedaq::snbmodules::status_type::PAUSED
@ PAUSED
Definition
status_enum.hpp:34
dunedaq::snbmodules::status_type::ERROR
@ ERROR
Definition
status_enum.hpp:27
dunedaq::snbmodules::status_type::DOWNLOADING
@ DOWNLOADING
Definition
status_enum.hpp:42
dunedaq::snbmodules::status_type::FINISHED
@ FINISHED
Definition
status_enum.hpp:31
dunedaq::snbmodules::status_type::HASHING
@ HASHING
Definition
status_enum.hpp:40
dunedaq::snbmodules::status_type::UPLOADING
@ UPLOADING
Definition
status_enum.hpp:41
transfer_interface_abstract.hpp
Generated on
for DUNE-DAQ by
1.17.0