DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::snbmodules::TransferInterfaceSCP Class Reference

#include <transfer_interface_SCP.hpp>

Inheritance diagram for dunedaq::snbmodules::TransferInterfaceSCP:
[legend]
Collaboration diagram for dunedaq::snbmodules::TransferInterfaceSCP:
[legend]

Classes

struct  scp_parameters
 

Public Member Functions

 TransferInterfaceSCP (GroupMetadata &config, bool is_uploader)
 
virtual ~TransferInterfaceSCP ()=default
 
bool upload_file (TransferMetadata &f_meta) override
 
bool download_file (TransferMetadata &f_meta, std::filesystem::path dest) override
 
bool pause_file (TransferMetadata &f_meta) override
 
bool resume_file (TransferMetadata &f_meta) override
 
bool hash_file (TransferMetadata &f_meta) override
 
bool cancel_file (TransferMetadata &f_meta) override
 
- Public Member Functions inherited from dunedaq::snbmodules::TransferInterfaceAbstract
 TransferInterfaceAbstract (GroupMetadata &config)
 
virtual ~TransferInterfaceAbstract ()=default
 
GroupMetadataget_transfer_options ()
 

Private Attributes

struct dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters m_params
 
bool m_is_uploader
 
std::map< std::string, std::filesystem::path > m_files_being_transferred
 

Additional Inherited Members

- Protected Attributes inherited from dunedaq::snbmodules::TransferInterfaceAbstract
GroupMetadatam_config
 MetadataAbstract of the transfer, contain settings and status of the transfer.
 

Detailed Description

Definition at line 25 of file transfer_interface_SCP.hpp.

Constructor & Destructor Documentation

◆ TransferInterfaceSCP()

dunedaq::snbmodules::TransferInterfaceSCP::TransferInterfaceSCP ( GroupMetadata & config,
bool is_uploader )
inline

Definition at line 29 of file transfer_interface_SCP.hpp.

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 }
#define ERS_HERE
struct dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters m_params
void fatal(const Issue &issue)
Definition ers.hpp:88

◆ ~TransferInterfaceSCP()

virtual dunedaq::snbmodules::TransferInterfaceSCP::~TransferInterfaceSCP ( )
virtualdefault

Member Function Documentation

◆ cancel_file()

bool dunedaq::snbmodules::TransferInterfaceSCP::cancel_file ( TransferMetadata & f_meta)
inlineoverridevirtual

Implements dunedaq::snbmodules::TransferInterfaceAbstract.

Definition at line 118 of file transfer_interface_SCP.hpp.

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 }
#define TLOG(...)
Definition macro.hpp:22

◆ download_file()

bool dunedaq::snbmodules::TransferInterfaceSCP::download_file ( TransferMetadata & f_meta,
std::filesystem::path dest )
inlineoverridevirtual

Implements dunedaq::snbmodules::TransferInterfaceAbstract.

Definition at line 58 of file transfer_interface_SCP.hpp.

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 }
std::map< std::string, std::filesystem::path > m_files_being_transferred
void error(const Issue &issue)
Definition ers.hpp:81

◆ hash_file()

bool dunedaq::snbmodules::TransferInterfaceSCP::hash_file ( TransferMetadata & f_meta)
inlineoverridevirtual

Implements dunedaq::snbmodules::TransferInterfaceAbstract.

Definition at line 111 of file transfer_interface_SCP.hpp.

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 }

◆ pause_file()

bool dunedaq::snbmodules::TransferInterfaceSCP::pause_file ( TransferMetadata & f_meta)
inlineoverridevirtual

Implements dunedaq::snbmodules::TransferInterfaceAbstract.

Definition at line 92 of file transfer_interface_SCP.hpp.

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 }

◆ resume_file()

bool dunedaq::snbmodules::TransferInterfaceSCP::resume_file ( TransferMetadata & f_meta)
inlineoverridevirtual

Implements dunedaq::snbmodules::TransferInterfaceAbstract.

Definition at line 100 of file transfer_interface_SCP.hpp.

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 }
bool download_file(TransferMetadata &f_meta, std::filesystem::path dest) override
bool upload_file(TransferMetadata &f_meta) override

◆ upload_file()

bool dunedaq::snbmodules::TransferInterfaceSCP::upload_file ( TransferMetadata & f_meta)
inlineoverridevirtual

Implements dunedaq::snbmodules::TransferInterfaceAbstract.

Definition at line 47 of file transfer_interface_SCP.hpp.

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 }

Member Data Documentation

◆ m_files_being_transferred

std::map<std::string, std::filesystem::path> dunedaq::snbmodules::TransferInterfaceSCP::m_files_being_transferred
private

Definition at line 133 of file transfer_interface_SCP.hpp.

◆ m_is_uploader

bool dunedaq::snbmodules::TransferInterfaceSCP::m_is_uploader
private

Definition at line 132 of file transfer_interface_SCP.hpp.

◆ m_params

struct dunedaq::snbmodules::TransferInterfaceSCP::scp_parameters dunedaq::snbmodules::TransferInterfaceSCP::m_params
private

The documentation for this class was generated from the following file: