libzypp  17.37.10
provide.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 #ifndef ZYPP_MEDIA_PROVIDE_H_INCLUDED
10 #define ZYPP_MEDIA_PROVIDE_H_INCLUDED
11 
12 #include <zypp-core/fs/PathInfo.h>
13 #include <zypp-core/ManagedFile.h>
16 #include <zypp-core/zyppng/base/Base>
17 #include <zypp-core/zyppng/async/AsyncOp>
19 #include <zypp-core/ByteCount.h>
20 #include <zypp-media/ng/LazyMediaHandle>
21 #include <zypp-media/ng/ProvideFwd>
22 #include <zypp-media/ng/ProvideRes>
23 #include <zypp-media/auth/AuthData>
24 #include <boost/any.hpp>
25 
26 namespace zypp {
27  class Url;
28  namespace media {
29  struct CredManagerOptions;
30  }
31 }
32 
45 namespace zyppng {
46 
47  class ProvidePrivate;
48  using AnyMap = std::unordered_map<std::string, boost::any>;
50 
55  {
56  public:
57 
59 
60  ProvideMediaHandle () = default;
61  ProvideMediaHandle ( Provide &parent, AttachedMediaInfo_Ptr mediaInfoRef );
62  std::shared_ptr<Provide> parent() const;
63  bool isValid () const;
64  std::string handle() const;
65  const zypp::Url &baseUrl() const;
66  const zypp::MirroredOrigin &origin() const;
67  const std::optional<zypp::Pathname> &localPath() const;
68  zyppng::AttachedMediaInfo_constPtr mediaInfo() const;
69  private:
70  ProvideWeakRef _parent;
71  AttachedMediaInfo_Ptr _mediaRef;
72  };
73 
79  {
80  public:
81 
82  struct Stats {
83  std::chrono::steady_clock::time_point _startTime;
84  std::chrono::steady_clock::time_point _lastPulseTime;
85  uint _itemsSinceStart = 0; //< How many items have been started since Provide::start() was called
86  uint _runningItems = 0; //< How many items are currently running
87  zypp::ByteCount _finishedBytes; //< The number of bytes that were finished completely
88  zypp::ByteCount _expectedBytes; //< The number of currently expected bytes
89  zypp::ByteCount _partialBytes; //< The number of bytes of items that were already partially downloaded but the item they belong to is not finished
90  zypp::ByteCount _perSecondSinceLastPulse; //< The download speed since the last pulse
91  zypp::ByteCount _perSecond; //< The download speed we are currently operating with
92  };
93 
94  ProvideStatus( ProvideRef parent );
95  virtual ~ProvideStatus(){}
96 
97  virtual void provideStart ();
98  virtual void provideDone (){}
99  virtual void itemStart ( ProvideItem &item ){}
100  virtual void itemDone ( ProvideItem &item );
101  virtual void itemFailed ( ProvideItem &item );
102  virtual void requestStart ( ProvideItem &item, uint32_t reqId, const zypp::Url &url, const AnyMap &extraData = {} ){}
103  virtual void requestDone ( ProvideItem &item, uint32_t reqId, const AnyMap &extraData = {} ){}
104  virtual void requestRedirect ( ProvideItem &item, uint32_t reqId, const zypp::Url &toUrl, const AnyMap &extraData = {} ){}
105  virtual void requestFailed ( ProvideItem &item, uint32_t reqId, const std::exception_ptr &err, const AnyMap &requestData = {} ){}
106  virtual void pulse ( );
107 
108  const Stats &stats() const;
109 
110  private:
112  ProvideWeakRef _provider;
113  };
114 
115  class Provide : public Base
116  {
118  template<class T> friend class ProvidePromise;
119  friend class ProvideItem;
120  friend class ProvideMediaHandle;
121  friend class ProvideStatus;
122  public:
123 
126  using Res = ProvideRes;
127 
128  static ProvideRef create( const zypp::Pathname &workDir = "" );
129 
134  expected<LazyMediaHandle> prepareMedia ( const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request );
135  expected<LazyMediaHandle> prepareMedia ( const zypp::Url &url, const ProvideMediaSpec &request );
136 
138  AsyncOpRef<expected<MediaHandle>> attachMedia( const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request );
139  AsyncOpRef<expected<MediaHandle>> attachMedia( const zypp::Url &url, const ProvideMediaSpec &request );
140 
141  AsyncOpRef<expected<ProvideRes>> provide( const zypp::MirroredOrigin &origin, const ProvideFileSpec &request );
142  AsyncOpRef<expected<ProvideRes>> provide( const zypp::Url &url, const ProvideFileSpec &request );
143  AsyncOpRef<expected<ProvideRes>> provide( const MediaHandle &attachHandle, const zypp::Pathname &fileName, const ProvideFileSpec &request );
144  AsyncOpRef<expected<ProvideRes>> provide( const LazyMediaHandle &attachHandle, const zypp::Pathname &fileName, const ProvideFileSpec &request );
145 
146 
150  AsyncOpRef<expected<zypp::CheckSum>> checksumForFile ( const zypp::Pathname &p, const std::string &algorithm );
151 
155  AsyncOpRef<expected<zypp::ManagedFile>> copyFile ( const zypp::Pathname &source, const zypp::Pathname &target );
156  AsyncOpRef<expected<zypp::ManagedFile>> copyFile ( ProvideRes &&source, const zypp::Pathname &target );
157 
158  void start();
159  void setWorkerPath( const zypp::Pathname &path );
160  bool isRunning() const;
161  bool ejectDevice ( const std::string &queueRef, const std::string &device );
162 
163  void setStatusTracker( ProvideStatusRef tracker );
164 
165  const zypp::Pathname &providerWorkdir () const;
166 
167  const zypp::media::CredManagerOptions &credManangerOptions () const;
168  void setCredManagerOptions( const zypp::media::CredManagerOptions & opt );
169 
170  SignalProxy<void()> sigIdle();
171 
172  enum Action {
173  ABORT, // abort and return error
174  RETRY, // retry
175  SKIP // abort and set skip request
176  };
177  using MediaChangeAction = std::optional<Action>;
178 
186 
191  SignalProxy< std::optional<zypp::media::AuthData> ( const zypp::Url &reqUrl, const std::string &triedUsername, const std::map<std::string, std::string> &extraValues ) > sigAuthRequired();
192 
193 
194  static auto copyResultToDest ( ProvideRef provider, const zypp::Pathname &targetPath ) {
195  return [ providerRef=std::move(provider), targetPath = targetPath ]( ProvideRes &&file ){
196  zypp::filesystem::assert_dir( targetPath.dirname () );
197  return providerRef->copyFile( std::move(file), targetPath );
198  };
199  }
200 
201 
202  private:
203  Provide( const zypp::Pathname &workDir );
204  };
205 
206 }
207 #endif
SignalProxy< void()> sigIdle()
Definition: provide.cc:1224
const zypp::Pathname & providerWorkdir() const
Definition: provide.cc:1208
zypp::ByteCount _finishedBytes
Definition: provide.h:87
int assert_dir(const Pathname &path, unsigned mode)
Like &#39;mkdir -p&#39;.
Definition: PathInfo.cc:324
const zypp::media::CredManagerOptions & credManangerOptions() const
Definition: provide.cc:1213
virtual void pulse()
Definition: provide.cc:1275
ProvideStatus(ProvideRef parent)
Definition: provide.cc:1241
virtual void requestDone(ProvideItem &item, uint32_t reqId, const AnyMap &extraData={})
Definition: provide.h:103
Store and operate with byte count.
Definition: ByteCount.h:31
A ProvideRes object is a reference counted ownership of a resource in the cache provided by a Provide...
Definition: provideres.h:35
virtual void itemStart(ProvideItem &item)
Definition: provide.h:99
AsyncOpRef< expected< zypp::CheckSum > > checksumForFile(const zypp::Pathname &p, const std::string &algorithm)
Definition: provide.cc:1135
AttachedMediaInfo_Ptr _mediaRef
Definition: provide.h:71
virtual void itemFailed(ProvideItem &item)
Definition: provide.cc:1265
virtual void requestFailed(ProvideItem &item, uint32_t reqId, const std::exception_ptr &err, const AnyMap &requestData={})
Definition: provide.h:105
DEFINE_PTR_TYPE(AttachedSyncMediaInfo)
virtual void provideDone()
Definition: provide.h:98
Definition: Arch.h:363
virtual ~ProvideStatus()
Definition: provide.h:95
static ProvideRef create(const zypp::Pathname &workDir="")
Definition: provide.cc:1005
zypp::ByteCount _perSecond
Definition: provide.h:91
std::chrono::steady_clock::time_point _lastPulseTime
Definition: provide.h:84
zyppng::AttachedMediaInfo_constPtr mediaInfo() const
Definition: provide.cc:993
const std::optional< zypp::Pathname > & localPath() const
Definition: provide.cc:985
void setCredManagerOptions(const zypp::media::CredManagerOptions &opt)
Definition: provide.cc:1219
bool isRunning() const
SignalProxy< MediaChangeAction(const std::string &queueRef, const std::string &label, const int32_t mediaNr, const std::vector< std::string > &devices, const std::optional< std::string > &desc)> sigMediaChangeRequested()
Definition: provide.cc:1229
virtual void requestRedirect(ProvideItem &item, uint32_t reqId, const zypp::Url &toUrl, const AnyMap &extraData={})
Definition: provide.h:104
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
zypp::ByteCount _expectedBytes
Definition: provide.h:88
virtual void itemDone(ProvideItem &item)
Definition: provide.cc:1252
Pathname dirname() const
Return all but the last component od this path.
Definition: Pathname.h:126
bool ejectDevice(const std::string &queueRef, const std::string &device)
Definition: provide.cc:1195
void setWorkerPath(const zypp::Pathname &path)
Definition: provide.cc:1190
ProvideWeakRef _provider
Definition: provide.h:112
std::optional< Action > MediaChangeAction
Definition: provide.h:177
virtual void provideStart()
Definition: provide.cc:1245
zypp::ByteCount _partialBytes
Definition: provide.h:89
Provide(const zypp::Pathname &workDir)
Definition: provide.cc:999
zypp::Url Url
Definition: url.h:15
std::shared_ptr< AsyncOp< T > > AsyncOpRef
Definition: asyncop.h:255
#define ZYPP_DECLARE_PRIVATE(Class)
Definition: zyppglobal.h:87
const zypp::Url & baseUrl() const
Definition: provide.cc:969
zypp::ByteCount _perSecondSinceLastPulse
Definition: provide.h:90
const zypp::MirroredOrigin & origin() const
Definition: provide.cc:977
ProvideWeakRef _parent
Definition: provide.h:70
void setStatusTracker(ProvideStatusRef tracker)
Definition: provide.cc:1203
std::chrono::steady_clock::time_point _startTime
Definition: provide.h:83
const Stats & stats() const
Definition: provide.cc:1270
AsyncOpRef< expected< zypp::ManagedFile > > copyFile(const zypp::Pathname &source, const zypp::Pathname &target)
Definition: provide.cc:1155
expected< LazyMediaHandle > prepareMedia(const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request)
Definition: provide.cc:1010
constexpr std::string_view device("device")
std::string handle() const
Definition: provide.cc:962
std::unordered_map< std::string, boost::any > AnyMap
Definition: provide.h:48
AsyncOpRef< expected< MediaHandle > > attachMedia(const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request)
Definition: provide.cc:1046
Easy-to use interface to the ZYPP dependency resolver.
Definition: Application.cc:19
std::shared_ptr< Provide > parent() const
Definition: provide.cc:952
AsyncOpRef< expected< ProvideRes > > provide(const zypp::MirroredOrigin &origin, const ProvideFileSpec &request)
Definition: provide.cc:1069
static auto copyResultToDest(ProvideRef provider, const zypp::Pathname &targetPath)
Definition: provide.h:194
Url manipulation class.
Definition: Url.h:92
AsyncOpRef< expected< MediaHandle > > attachMediaIfNeeded(LazyMediaHandle lazyHandle)
Definition: provide.cc:1026
virtual void requestStart(ProvideItem &item, uint32_t reqId, const zypp::Url &url, const AnyMap &extraData={})
Definition: provide.h:102
SignalProxy< std::optional< zypp::media::AuthData > const zypp::Url &reqUrl, const std::string &triedUsername, const std::map< std::string, std::string > &extraValues) > sigAuthRequired()
Definition: provide.cc:1234