5 #ifndef __STDC_FORMAT_MACROS
7 #define __STDC_FORMAT_MACROS
38 const std::string& repository, uint64_t min_revision,
39 bool continuous,
bool verbose)
40 : notify::SubscriberSSE(server_url),
41 repository_(repository),
43 dl_mgr_(new download::DownloadManager(kMaxPoolHandles,
44 perf::StatisticsTemplate(
"download", &stats_))),
45 sig_mgr_(new signature::SignatureManager()),
46 revision_(min_revision),
47 continuous_(continuous),
54 const std::string config_file =
55 "/etc/cvmfs/repositories.d/" + repository_ +
"/client.conf";
59 "SwissknifeSubscriber - could not parse configuration file");
64 if (options.
GetValue(
"CVMFS_SERVER_URL", &arg)) {
65 dl_mgr_->SetHostChain(arg);
70 std::string public_keys =
72 if (!sig_mgr_->LoadPublicRsaKeys(public_keys)) {
74 "SwissknifeSubscriber - could not load public keys");
83 const std::string& msg_text) {
87 "SwissknifeSubscriber - could not decode message.");
93 reinterpret_cast<unsigned char*>(&(msg.
manifest_[0])),
95 sig_mgr_.weak_ref(), dl_mgr_.weak_ref(), &ensemble);
99 "SwissknifeSubscriber - manifest has invalid signature: %d",
105 reinterpret_cast<const unsigned char*>(msg.
manifest_.data()),
110 "SwissknifeSubscriber - could not parse manifest.");
114 uint64_t new_revision = manifest->revision();
115 bool triggered =
false;
116 if (new_revision > revision_) {
118 "SwissknifeSubscriber - repository %s is now at revision %"
119 PRIu64
".", repo.c_str(), new_revision);
123 revision_ = new_revision;
127 if (!continuous_ && triggered) {
149 int DoSubscribe(
const std::string& server_url,
const std::string& repo,
150 uint64_t min_revision,
bool continuous,
bool verbose) {
151 SwissknifeSubscriber subscriber(server_url, repo, min_revision, continuous,
154 if (!subscriber.Init()) {
160 const int num_retries = 10;
161 const uint64_t interval = 60;
const manifest::Manifest * manifest() const
static Manifest * LoadMem(const unsigned char *buffer, const unsigned length)
Failures Verify(unsigned char *manifest_data, size_t manifest_size, const std::string &base_url, const std::string &repository_name, const uint64_t minimum_timestamp, const shash::Any *base_catalog, signature::SignatureManager *signature_manager, download::DownloadManager *download_manager, ManifestEnsemble *ensemble)
string JoinStrings(const vector< string > &strings, const string &joint)
UniquePtr< download::DownloadManager > dl_mgr_
UniquePtr< signature::SignatureManager > sig_mgr_
const LogFacilities & kLogError
const LogFacilities & kLogInfo
virtual ~SwissknifeSubscriber()
virtual notify::Subscriber::Status Consume(const std::string &repo, const std::string &msg_text)
const int kMaxPoolHandles
int DoSubscribe(const std::string &server_url, const std::string &repo, uint64_t min_revision, bool continuous, bool verbose)
bool TryParsePath(const std::string &config_file)
bool GetValue(const std::string &key, std::string *value) const
SwissknifeSubscriber(const std::string &server_url, const std::string &repository, uint64_t min_revision, bool continuous, bool verbose)
virtual bool FromJSONString(const std::string &s)
static LogFacilities info
std::vector< std::string > FindFilesBySuffix(const std::string &dir, const std::string &suffix)
static LogFacilities error
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)