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(
44 kMaxPoolHandles, perf::StatisticsTemplate(
"download", &stats_)))
45 , sig_mgr_(new signature::SignatureManager())
46 , revision_(min_revision)
47 , continuous_(continuous)
48 , verbose_(verbose) { }
52 const std::string config_file =
"/etc/cvmfs/repositories.d/" + repository_
57 "SwissknifeSubscriber - could not parse configuration file");
62 if (options.
GetValue(
"CVMFS_SERVER_URL", &arg)) {
63 dl_mgr_->SetHostChain(arg);
70 if (!sig_mgr_->LoadPublicRsaKeys(public_keys)) {
72 "SwissknifeSubscriber - could not load public keys");
81 const std::string &msg_text) {
85 "SwissknifeSubscriber - could not decode message.");
91 reinterpret_cast<unsigned char *>(&(msg.
manifest_[0])),
92 msg.
manifest_.size(),
"", repo, 0, NULL, sig_mgr_.weak_ref(),
93 dl_mgr_.weak_ref(), &ensemble);
97 "SwissknifeSubscriber - manifest has invalid signature: %d",
103 reinterpret_cast<const unsigned char *>(msg.
manifest_.data()),
108 "SwissknifeSubscriber - could not parse manifest.");
112 uint64_t new_revision = manifest->revision();
113 bool triggered =
false;
114 if (new_revision > revision_) {
117 "SwissknifeSubscriber - repository %s is now at revision %" PRIu64
119 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,...)