RStudio Launcher Plugin SDK  1.1.3
A software development kit for creating plugins that work the the RStudio Launcher.
IJobSource.hpp
1 /*
2  * IJobSource.hpp
3  *
4  * Copyright (C) 2020 by RStudio, PBC
5  *
6  * Unless you have received this program directly from RStudio pursuant to the terms of a commercial license agreement
7  * with RStudio, then this program is licensed to you under the following terms:
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
10  * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
11  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
12  * permit persons to whom the Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
15  * Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18  * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 
24 #ifndef LAUNCHER_PLUGINS_I_JOB_SOURCE_HPP
25 #define LAUNCHER_PLUGINS_I_JOB_SOURCE_HPP
26 
27 #include <set>
28 
29 #include <Error.hpp>
30 #include <api/Job.hpp>
31 #include <api/ResponseTypes.hpp>
32 #include <api/stream/AbstractOutputStream.hpp>
33 #include <api/stream/AbstractResourceStream.hpp>
34 #include <jobs/AbstractJobRepository.hpp>
35 #include <jobs/JobStatusNotifier.hpp>
36 
37 namespace rstudio {
38 namespace launcher_plugins {
39 namespace system {
40 
41 class User;
42 
43 } // namespace system
44 } // namespace launcher_plugins
45 } // namespace rstudio
46 
47 namespace rstudio {
48 namespace launcher_plugins {
49 namespace api {
50 
53 {
58  AllowUnknownImages(false),
59  SupportsContainers(false)
60  {
61  }
62 
65 
67  std::set<std::string> ContainerImages;
68 
70  std::string DefaultImage;
71 
74 };
75 
78 {
81 
83  JobConfigList CustomConfig;
84 
86  PlacementConstraintList PlacementConstraints;
87 
89  std::set<std::string> Queues;
90 
95  ResourceLimitList ResourceLimits;
96 };
97 
100 {
101 public:
105  virtual ~IJobSource() = default;
106 
114  virtual Error initialize() = 0;
115 
128  virtual bool cancelJob(JobPtr in_job, bool& out_isComplete, std::string& out_statusMessage) = 0;
129 
147  virtual Error getConfiguration(const system::User& in_user, JobSourceConfiguration& out_configuration) const = 0;
148 
157  virtual Error getNetworkInfo(JobPtr in_job, NetworkInfo& out_networkInfo) const = 0;
158 
172  virtual bool killJob(JobPtr in_job, bool& out_isComplete, std::string& out_statusMessage) = 0;
173 
187  virtual bool resumeJob(JobPtr in_job, bool& out_isComplete, std::string& out_statusMessage) = 0;
188 
202  virtual bool stopJob(JobPtr in_job, bool& out_isComplete, std::string& out_statusMessage) = 0;
203 
218  virtual bool suspendJob(JobPtr in_job, bool& out_isComplete, std::string& out_statusMessage) = 0;
219 
231  virtual Error submitJob(JobPtr io_job, bool& out_wasInvalidRequest) const = 0;
232 
245  virtual Error createOutputStream(
246  OutputType in_outputType,
247  JobPtr in_job,
248  AbstractOutputStream::OnOutput in_onOutput,
249  AbstractOutputStream::OnComplete in_onComplete,
250  AbstractOutputStream::OnError in_onError,
251  OutputStreamPtr& out_outputStream) = 0;
252 
262  virtual Error createResourceStream(
263  ConstJobPtr in_job,
264  comms::AbstractLauncherCommunicatorPtr in_launcherCommunicator,
265  AbstractResourceStreamPtr& out_resourceStream) = 0;
266 
267 protected:
275  IJobSource(jobs::JobRepositoryPtr in_jobRepository, jobs::JobStatusNotifierPtr in_jobStatusNotifier) :
276  m_jobRepository(std::move(in_jobRepository)),
277  m_jobStatusNotifier(std::move(in_jobStatusNotifier))
278  {
279  }
280 
282  jobs::JobRepositoryPtr m_jobRepository;
283 
285  jobs::JobStatusNotifierPtr m_jobStatusNotifier;
286 };
287 
288 } // namespace api
289 } // namespace launcher_plugins
290 } // namespace rstudio
291 
292 #endif
rstudio::launcher_plugins::api::NetworkInfo
Represents the network information for a job.
Definition: ResponseTypes.hpp:129
rstudio::launcher_plugins::api::IJobSource::initialize
virtual Error initialize()=0
Initializes the Job Source.
rstudio::launcher_plugins::api::IJobSource::submitJob
virtual Error submitJob(JobPtr io_job, bool &out_wasInvalidRequest) const =0
Submits a job to the Job Scheduling System.
rstudio::launcher_plugins::api::JobSourceConfiguration::ResourceLimits
ResourceLimitList ResourceLimits
Definition: IJobSource.hpp:95
rstudio::launcher_plugins::api::IJobSource::cancelJob
virtual bool cancelJob(JobPtr in_job, bool &out_isComplete, std::string &out_statusMessage)=0
Cancels a pending job.
rstudio::launcher_plugins::api::ContainerConfiguration::DefaultImage
std::string DefaultImage
Definition: IJobSource.hpp:70
rstudio::launcher_plugins::api::JobSourceConfiguration::Queues
std::set< std::string > Queues
Definition: IJobSource.hpp:89
rstudio::launcher_plugins::api::IJobSource::getConfiguration
virtual Error getConfiguration(const system::User &in_user, JobSourceConfiguration &out_configuration) const =0
Gets the configuration and capabilities of this Job Source for the specified user.
rstudio::launcher_plugins::system::User
Class which represents a system user.
Definition: User.hpp:55
rstudio::launcher_plugins::api::ContainerConfiguration
Describes the container configuration of the Job Source.
Definition: IJobSource.hpp:52
rstudio::launcher_plugins::api::IJobSource::createOutputStream
virtual Error createOutputStream(OutputType in_outputType, JobPtr in_job, AbstractOutputStream::OnOutput in_onOutput, AbstractOutputStream::OnComplete in_onComplete, AbstractOutputStream::OnError in_onError, OutputStreamPtr &out_outputStream)=0
Creates an output stream for the specified job.
rstudio::launcher_plugins::api::IJobSource::createResourceStream
virtual Error createResourceStream(ConstJobPtr in_job, comms::AbstractLauncherCommunicatorPtr in_launcherCommunicator, AbstractResourceStreamPtr &out_resourceStream)=0
Creates a resource utilization metric stream for the specified job.
rstudio::launcher_plugins::api::AbstractOutputStream::OnComplete
std::function< void(uint64_t)> OnComplete
Definition: AbstractOutputStream.hpp:66
rstudio::launcher_plugins::api::IJobSource::m_jobStatusNotifier
jobs::JobStatusNotifierPtr m_jobStatusNotifier
Definition: IJobSource.hpp:285
rstudio::launcher_plugins::api::ContainerConfiguration::AllowUnknownImages
bool AllowUnknownImages
Definition: IJobSource.hpp:64
rstudio::launcher_plugins::api::IJobSource::~IJobSource
virtual ~IJobSource()=default
Virtual Destructor.
rstudio::launcher_plugins::api::IJobSource::suspendJob
virtual bool suspendJob(JobPtr in_job, bool &out_isComplete, std::string &out_statusMessage)=0
Suspends a running job.
rstudio::launcher_plugins::api::ContainerConfiguration::SupportsContainers
bool SupportsContainers
Definition: IJobSource.hpp:73
rstudio::launcher_plugins::api::ContainerConfiguration::ContainerConfiguration
ContainerConfiguration()
Default constructor.
Definition: IJobSource.hpp:57
rstudio::launcher_plugins::api::IJobSource::resumeJob
virtual bool resumeJob(JobPtr in_job, bool &out_isComplete, std::string &out_statusMessage)=0
Resumes a suspended job.
rstudio::launcher_plugins::api::JobSourceConfiguration::PlacementConstraints
PlacementConstraintList PlacementConstraints
Definition: IJobSource.hpp:86
rstudio::launcher_plugins::Error
Class which represents an error.
Definition: Error.hpp:174
rstudio::launcher_plugins::api::JobSourceConfiguration
Describes the capabilities and configuration of this Job Source.
Definition: IJobSource.hpp:77
rstudio::launcher_plugins::api::JobSourceConfiguration::ContainerConfig
ContainerConfiguration ContainerConfig
Definition: IJobSource.hpp:80
rstudio::launcher_plugins::api::IJobSource::m_jobRepository
jobs::JobRepositoryPtr m_jobRepository
Definition: IJobSource.hpp:282
rstudio::launcher_plugins::api::IJobSource
Generic interface for communicating with a Job Source. Implementation is plugin specific.
Definition: IJobSource.hpp:99
rstudio::launcher_plugins::api::IJobSource::stopJob
virtual bool stopJob(JobPtr in_job, bool &out_isComplete, std::string &out_statusMessage)=0
Stops a running job.
rstudio::launcher_plugins::api::IJobSource::IJobSource
IJobSource(jobs::JobRepositoryPtr in_jobRepository, jobs::JobStatusNotifierPtr in_jobStatusNotifier)
Constructor.
Definition: IJobSource.hpp:275
rstudio::launcher_plugins::api::ContainerConfiguration::ContainerImages
std::set< std::string > ContainerImages
Definition: IJobSource.hpp:67
rstudio::launcher_plugins::api::IJobSource::killJob
virtual bool killJob(JobPtr in_job, bool &out_isComplete, std::string &out_statusMessage)=0
Forcibly kills a running job.
rstudio::launcher_plugins::api::IJobSource::getNetworkInfo
virtual Error getNetworkInfo(JobPtr in_job, NetworkInfo &out_networkInfo) const =0
Gets the network information for the specified job.
rstudio::launcher_plugins::api::JobSourceConfiguration::CustomConfig
JobConfigList CustomConfig
Definition: IJobSource.hpp:83