Grassroots Infrastructure
The Grassroots Infrastructure is a suite of computing tools to help users and developers use scientific data infrastructure that can easily be interconnected.
RemoteServiceJob Struct Reference

A datatype describing a ServiceJob that is run on a remote Grassroots Server. More...

#include <remote_service_job.h>

Inheritance diagram for RemoteServiceJob:
[legend]
Collaboration diagram for RemoteServiceJob:
[legend]

Public Member Functions

RemoteServiceJobAllocateRemoteServiceJob (struct Service *service_p, const char *job_name_s, const char *job_description_s, const char *remote_service_s, const char *remote_uri_s, uuid_t remote_job_id)
 Allocate a RemoteServiceJob. More...
 
void FreeRemoteServiceJob (ServiceJob *job_p)
 Free the RemoteServiceJob. More...
 
RemoteServiceJobCreateRemoteServiceJobFromResultsJSON (const char *remote_service_s, const char *remote_uri_s, const uuid_t remote_job_id, const json_t *results_p, struct Service *service_p, const char *job_name_s, const char *job_description_s, OperationStatus status)
 Create a RemoteServiceJob from the JSON fragment returned from the ExternalServer that ran the job. More...
 
bool IsRemoteServiceJobJSON (const json_t *job_json_p)
 Test whether a given JSON object represents a RemoteServiceJob. More...
 
RemoteServiceJobGetRemoteServiceJobFromJSON (const json_t *job_json_p, struct Service *service_p, GrassrootsServer *grassroots_p)
 Create a RemoteServiceJob from a given JSON fragment. More...
 
json_t * GetRemoteServiceJobAsJSON (RemoteServiceJob *job_p, bool omit_results_flag)
 Create a given JSON fragment for a given RemoteServiceJob. More...
 
bool SetRemoteServiceJobDetails (RemoteServiceJob *remote_job_p, const char *remote_service_s, const char *remote_uri_s, const uuid_t remote_job_id)
 Set the RemoteServiceJob-specific details for a given RemoteServiceJob. More...
 
- Public Member Functions inherited from ServiceJob
void FreeServiceJob (ServiceJob *job_p)
 Free a ServiceJob. More...
 
void FreeBaseServiceJob (ServiceJob *job_p)
 Free a ServiceJob ignoring if it is a subclass. More...
 
ServiceJobAllocateServiceJob (struct Service *service_p, const char *job_name_s, const char *job_description_s, bool(*update_fn)(struct ServiceJob *job_p), bool(*calculate_results_fn)(struct ServiceJob *job_p), void(*free_job_fn)(struct ServiceJob *job_p), const char *job_type_s)
 Allocate a ServiceJob. More...
 
ServiceJobCreateAndAddServiceJobToService (struct Service *service_p, const char *job_name_s, const char *job_description_s, bool(*update_fn)(struct ServiceJob *job_p), bool(*calculate_results_fn)(struct ServiceJob *job_p), void(*free_job_fn)(struct ServiceJob *job_p))
 Allocate a ServiceJob and add it to a ServiceJobSet. More...
 
bool InitServiceJob (ServiceJob *job_p, struct Service *service_p, const char *job_name_s, const char *job_description_s, bool(*update_fn)(struct ServiceJob *job_p), bool(*calculate_results_fn)(struct ServiceJob *job_p), void(*free_job_fn)(struct ServiceJob *job_p), uuid_t *id_p, const char *job_type_s)
 Initialise a ServiceJob. More...
 
void ClearServiceJob (ServiceJob *job_p)
 Clear a Service Job ready for reuse. More...
 
ServiceJobCloneServiceJob (const ServiceJob *src_p)
 Create a deep copy of a ServiceJob. More...
 
bool CopyServiceJob (const ServiceJob *src_p, ServiceJob *dest_p)
 Make a deep copy of one ServiceJob to another. More...
 
struct ServiceGetServiceFromServiceJob (ServiceJob *job_p)
 Get the owning Service for a given ServiceJob. More...
 
bool SetServiceJobDescription (ServiceJob *job_p, const char *const description_s)
 Set the description of ServiceJob. More...
 
bool SetServiceJobURL (ServiceJob *job_p, const char *const url_s)
 Set the description of ServiceJob. More...
 
bool SetServiceJobName (ServiceJob *job_p, const char *const name_s)
 Set the name of ServiceJob. More...
 
json_t * GetServiceJobAsJSON (ServiceJob *const job_p, bool omit_results_flag)
 Get a ServiceJob as JSON. More...
 
json_t * GetServiceJobStatusAsJSON (ServiceJob *job_p, bool omit_results_flag)
 Get the Current OperationStatus of a ServiceJob as JSON. More...
 
ServiceJobCreateServiceJobFromJSON (const json_t *job_json_p, GrassrootsServer *grassroots_p)
 Create a ServiceJob from a json_t object. More...
 
bool InitServiceJobFromJSON (ServiceJob *job_p, const json_t *json_p, struct Service *service_p, GrassrootsServer *grassroots_p)
 Get a ServiceJob from a json_t object. More...
 
OperationStatus GetServiceJobStatus (ServiceJob *job_p)
 Get the Current OperationStatus of a ServiceJob. More...
 
OperationStatus GetCachedServiceJobStatus (const ServiceJob *job_p)
 Get the last retrieved OperationStatus of a ServiceJob. More...
 
const char * GetServiceJobName (const ServiceJob *job_p)
 Get the name of ServiceJob. More...
 
bool CloseServiceJob (ServiceJob *job_p)
 Close a ServiceJob. More...
 
void ClearServiceJobResults (ServiceJob *job_p, bool free_memory_flag)
 Clear the results associated with a ServiceJob. More...
 
char * SerialiseServiceJobToJSON (ServiceJob *const job_p, bool omit_results_flag)
 Save the ServiceJob to a persistent format that allows the ServiceJob to be recreated in a potentially different thread and/or process. More...
 
ServiceJobCreateServiceJobFromResultsJSON (const json_t *results_p, struct Service *service_p, const char *name_s, const char *description_s, OperationStatus status, const char *job_type_s)
 Create a ServiceJob from a JSON Resource fragment. More...
 
bool InitServiceJobFromResultsJSON (ServiceJob *job_p, const json_t *results_p, struct Service *service_p, const char *name_s, const char *description_s, OperationStatus status, const char *job_type_s)
 Fill in the data for a ServiceJob from a given JSON fragement. More...
 
bool AddParameterErrorMessageToServiceJob (ServiceJob *job_p, const char *const param_s, const ParameterType param_type, const char *const value_s)
 Add a key-value pair error statement to a ServiceJob. More...
 
bool AddGeneralErrorMessageToServiceJob (ServiceJob *job_p, const char *const value_s)
 Add a key-value pair error statement to a ServiceJob. More...
 
bool AddCompoundErrorToServiceJob (ServiceJob *job_p, const char *param_s, const ParameterType param_type, json_t *error_details_p)
 Add a key-value pair error statement to a ServiceJob. More...
 
bool AddResultToServiceJob (ServiceJob *job_p, json_t *result_p)
 Add a result to ServiceJob. More...
 
void SetServiceJobStatus (ServiceJob *job_p, OperationStatus status)
 Set the current OperationStatus for a given ServiceJob. More...
 
void SetServiceJobUpdateFunction (ServiceJob *job_p, bool(*update_fn)(ServiceJob *job_p))
 Set the function that a ServiceJob will use to update itself. More...
 
void SetServiceJobFreeFunction (ServiceJob *job_p, void(*free_fn)(ServiceJob *job_p))
 Set the function that a ServiceJob will use to free itself. More...
 
void SetServiceJobCalculateResultFunction (ServiceJob *job_p, bool(*calculate_fn)(ServiceJob *job_p))
 Set the function that a ServiceJob will use to calculate its results. More...
 
bool UpdateServiceJob (ServiceJob *job_p)
 Update, if appropriate, a given ServiceJob. More...
 
uint32 GetNumberOfServiceJobResults (const ServiceJob *job_p)
 Get the number of results stored on a ServiceJob. More...
 
bool ReplaceServiceJobResults (ServiceJob *job_p, json_t *results_p)
 Replace the set of results for a given ServiceJob. More...
 
bool AddLinkedServiceToServiceJob (ServiceJob *job_p, struct LinkedService *linked_service_p)
 Add a LinkedService to ServiceJob. More...
 
void ProcessLinkedServices (ServiceJob *job_p)
 Attempt to extract the relevant data for all LinkedServices that the ServiceJob's Service has and store them in the ServiceJob. More...
 
bool CalculateServiceJobResult (ServiceJob *job_p)
 Calculate the results for the given ServiceJob. More...
 
void SetServiceJobUUID (ServiceJob *job_p, const uuid_t new_job_id)
 Replace the uuid for a given ServiceJob. More...
 

Data Fields

const char *const RSJ_TYPE_S = "remote_service_job"
 The job type for RemoteServiceJobs. More...
 
ServiceJob rsj_job
 The base ServiceJob. More...
 
char * rsj_uri_s
 The URI for the ExternalServer that is running the RemoteServiceJob. More...
 
char * rsj_service_name_s
 The name of the Service that will run the RemoteServiceJob. More...
 
uuid_t rsj_remote_job_id
 The UUID of the RemoteServiceJob on its remote Server. More...
 
- Data Fields inherited from ServiceJob
struct Servicesj_service_p
 The Service that is running this job. More...
 
uuid_t sj_id
 The unique identifier for this job. More...
 
enum OperationStatus sj_status
 Is the service currently in an open state? More...
 
char * sj_service_name_s
 The name of the Service that this ServiceJob is for. More...
 
char * sj_name_s
 The name of the ServiceJob. More...
 
char * sj_description_s
 The description of the ServiceJob. More...
 
char * sj_url_s
 Any user-facing URL for showing results of running this ServiceJob. More...
 
json_t * sj_result_p
 The JSON fragment for the results of this ServiceJob. More...
 
json_t * sj_metadata_p
 The JSON fragment for any extra information for this ServiceJob. More...
 
json_t * sj_errors_p
 The JSON fragment for any errors that have occurred whilst running this ServiceJob. More...
 
json_t * sj_linked_services_p
 A JSON array where each object contains the details of running a different Service based upon the results of this ServiceJob. More...
 
bool(* sj_update_fn )(struct ServiceJob *job_p)
 The callback function to use when checking the status of this ServiceJob. More...
 
void(* sj_free_fn )(struct ServiceJob *job_p)
 The callback function to use when freeing this ServiceJob. More...
 
bool(* sj_calculate_result_fn )(struct ServiceJob *job_p)
 The callback function to use when a ServiceJob needs to generate its results This is useful for subclasses of ServiceJob that need custom behaviour. More...
 
bool sj_is_updating_flag
 Is this ServiceJob in the process of updating itself? More...
 
char * sj_type_s
 The type of ServiceJob. More...
 

Detailed Description

A datatype describing a ServiceJob that is run on a remote Grassroots Server.

Member Function Documentation

◆ AllocateRemoteServiceJob()

RemoteServiceJob * AllocateRemoteServiceJob ( struct Service service_p,
const char *  job_name_s,
const char *  job_description_s,
const char *  remote_service_s,
const char *  remote_uri_s,
uuid_t  remote_job_id 
)

Allocate a RemoteServiceJob.

Parameters
service_pThe local Service will connect to the ExternalServer that will run this RemoteServiceJob.
job_name_sThe name of the RemoteServiceJob.
job_description_sAn optional description to give the RemoteServiceJob. This can be NULL.
remote_service_sThe name of the Service on the ExternalServer that will run the RemoteServiceJob.
remote_uri_sThe URI for the ExternalServer that is running the RemoteServiceJob.
remote_job_idThe UUID of the RemoteServiceJob on this local Server.
Returns
The new RemoteServiceJob or NULL upon error.

◆ FreeRemoteServiceJob()

void FreeRemoteServiceJob ( ServiceJob job_p)

Free the RemoteServiceJob.

Parameters
job_pThe RemoteServiceJob to free.

◆ CreateRemoteServiceJobFromResultsJSON()

RemoteServiceJob * CreateRemoteServiceJobFromResultsJSON ( const char *  remote_service_s,
const char *  remote_uri_s,
const uuid_t  remote_job_id,
const json_t *  results_p,
struct Service service_p,
const char *  job_name_s,
const char *  job_description_s,
OperationStatus  status 
)

Create a RemoteServiceJob from the JSON fragment returned from the ExternalServer that ran the job.

Parameters
remote_service_sThe name of the Service on the ExternalServer that will run the RemoteServiceJob.
remote_uri_sThe URI for the ExternalServer that is running the RemoteServiceJob.
remote_job_idThe UUID of the RemoteServiceJob on this local Server.
results_pThe results of the RemoreServiceJob. This can be NULL.
service_pThe local Service will connect to the ExternalServer that will run this RemoteServiceJob.
job_name_sThe name of the RemoteServiceJob.
job_description_sAn optional description to give the RemoteServiceJob. This can be NULL.
statusThe OperationStatus to set the RemoteServiceJob's status to.
Returns
The newly-created RemoteServiceJob or NULL upon error.

◆ IsRemoteServiceJobJSON()

bool IsRemoteServiceJobJSON ( const json_t *  job_json_p)

Test whether a given JSON object represents a RemoteServiceJob.

Parameters
job_json_pThe JSON object to check.
Returns
true if theSON object represents a RemoteServiceJob, false otherwise.

◆ GetRemoteServiceJobFromJSON()

RemoteServiceJob * GetRemoteServiceJobFromJSON ( const json_t *  job_json_p,
struct Service service_p,
GrassrootsServer grassroots_p 
)

Create a RemoteServiceJob from a given JSON fragment.

Parameters
job_json_pThe JSON fragment to create the RemoteServiceJob from.
Returns
The newly-allocated RemoteServiceJob or NULL upon error.

◆ GetRemoteServiceJobAsJSON()

json_t * GetRemoteServiceJobAsJSON ( RemoteServiceJob job_p,
bool  omit_results_flag 
)

Create a given JSON fragment for a given RemoteServiceJob.

Parameters
job_pThe RemoteServiceJob to create the JSON fragment for.
omit_results_flagtrue if the BlastServiceJob is to exclude any results from the created JSON fragment, false to include them.
Returns
The newly-created JSON fragment or NULL upon error.

◆ SetRemoteServiceJobDetails()

bool SetRemoteServiceJobDetails ( RemoteServiceJob remote_job_p,
const char *  remote_service_s,
const char *  remote_uri_s,
const uuid_t  remote_job_id 
)

Set the RemoteServiceJob-specific details for a given RemoteServiceJob.

Parameters
remote_job_pThe RemoteServiceJob to update.
remote_service_sThe name of the Service on the ExternalServer that will run the RemoteServiceJob.
remote_uri_sThe URI for the ExternalServer that is running the RemoteServiceJob.
remote_job_idThe UUID of the RemoteServiceJob on the ExternalServer.
Returns
true if the RemoteServiceJob was updated successfully, false upon error

Field Documentation

◆ RSJ_TYPE_S

const char* const RSJ_TYPE_S = "remote_service_job"

The job type for RemoteServiceJobs.

◆ rsj_job

ServiceJob rsj_job

The base ServiceJob.

◆ rsj_uri_s

char* rsj_uri_s

The URI for the ExternalServer that is running the RemoteServiceJob.

◆ rsj_service_name_s

char* rsj_service_name_s

The name of the Service that will run the RemoteServiceJob.

◆ rsj_remote_job_id

uuid_t rsj_remote_job_id

The UUID of the RemoteServiceJob on its remote Server.


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