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.
grassroots_server.h
Go to the documentation of this file.
1 /*
2 ** Copyright 2014-2018 The Earlham Institute
3 **
4 ** Licensed under the Apache License, Version 2.0 (the "License");
5 ** you may not use this file except in compliance with the License.
6 ** You may obtain a copy of the License at
7 **
8 ** http://www.apache.org/licenses/LICENSE-2.0
9 **
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
15 */
16 /*
17  * grassroots_server.h
18  *
19  * Created on: 26 Jul 2019
20  * Author: billy
21  */
22 
23 #ifndef CORE_SERVER_SERVER_INCLUDE_GRASSROOTS_SERVER_H_
24 #define CORE_SERVER_SERVER_INCLUDE_GRASSROOTS_SERVER_H_
25 
27 
28 #include "jansson.h"
29 
30 
31 #include "servers_manager.h"
32 #include "schema_version.h"
33 #include "user_details.h"
34 #include "handler.h"
35 
36 /*
37  * forward declarations
38  */
39 struct JobsManager;
40 struct ServersManager;
41 struct MongoClientManager;
42 struct Service;
43 
44 
45 typedef struct GrassrootsServer
46 {
50  char *gs_path_s;
51 
57 
63 
64 
70 
76 
77 
83 
84 
90 
91 
92 
94 
96 
98 
100 
101  json_t *gs_config_p;
102 
104 
105  struct MongoClientManager *gs_mongo_manager_p;
106 
107 // struct PersistentServiceData *gs_persistent_service_data_p;
109 
110 
111 
112 #ifdef __cplusplus
113 extern "C"
114 {
115 #endif
116 
117 
125 GRASSROOTS_SERVICE_MANAGER_API GrassrootsServer *AllocateGrassrootsServer (const char *grassroots_path_s, const char *config_filename_s, const char *service_config_path_s, const char *services_path_s, const char *references_path_s,
126  const char *jobs_managers_path_s, const char *servers_managers_path_s, struct JobsManager *external_jobs_manager_p, MEM_FLAG jobs_manager_flag, struct ServersManager *external_servers_manager_p, MEM_FLAG servers_manager_flag);
127 
128 
137 
138 
139 
147 
148 
149 
150 GRASSROOTS_SERVICE_MANAGER_API bool SetGrassrootsServerConfig (GrassrootsServer *server_p, const char *config_filename_s);
151 
152 
153 
155 
156 
162 
163 
169 
170 
171 
181 GRASSROOTS_SERVICE_MANAGER_API void LoadMatchingServicesByName (GrassrootsServer *grassroots_p, LinkedList *services_p, const char *service_name_s, const char *service_alias_s, User *user_p);
182 
183 
194 GRASSROOTS_SERVICE_MANAGER_API void LoadMatchingServices (GrassrootsServer *grassroots_p, LinkedList *services_p, DataResource *resource_p, Handler *handler_p, User *user_p);
195 
196 
204 GRASSROOTS_SERVICE_MANAGER_API void LoadKeywordServices (GrassrootsServer *grassroots_p, LinkedList *services_p, User *user_p);
205 
206 
218 GRASSROOTS_SERVICE_MANAGER_API json_t *ProcessServerJSONMessage (GrassrootsServer *grassroots_p, json_t *json_req_p, User *user_p, const char **error_ss);
219 
220 
235 GRASSROOTS_SERVICE_MANAGER_API json_t *GetInitialisedResponseOnServer (GrassrootsServer *server_p, User *user_p, const json_t *req_p, const char *key_s, json_t *value_p);
236 
237 
238 
248 GRASSROOTS_SERVICE_MANAGER_API json_t *GetGlobalConfigValue (const GrassrootsServer *grassroots_p, const char *key_s);
249 
250 
258 
259 
267 
268 
276 
277 
286 GRASSROOTS_SERVICE_MANAGER_API const json_t *GetProviderAsJSON (const GrassrootsServer *grassroots_p);
287 
288 
296 GRASSROOTS_SERVICE_MANAGER_API bool IsServiceEnabled (const GrassrootsServer *grassroots_p, const char *service_name_s);
297 
298 
299 
315  const char *operation_name_s, User *user_p);
316 
317 
324 GRASSROOTS_SERVICE_MANAGER_API const char *GetJobLoggingURI (const GrassrootsServer *grassroots_p);
325 
326 
328 
329 
339 
340 
341 
342 
343 
344 
345 GRASSROOTS_SERVICE_MANAGER_API const char *GetServerRootDirectory (const GrassrootsServer * const grassroots_p);
346 
347 
368 GRASSROOTS_SERVICE_MANAGER_API json_t *GetGlobalServiceConfig (GrassrootsServer *grassroots_p, const char * const service_name_s, bool *alloc_flag_p);
369 
370 
371 
380 GRASSROOTS_SERVICE_MANAGER_API User *GetUserByEmailAddress (const GrassrootsServer *grassroots_p, const char *email_s);
381 
382 
383 
384 
393 GRASSROOTS_SERVICE_MANAGER_API User *GetUserByIdString (const GrassrootsServer *grassroots_p, const char *id_s);
394 
395 
396 
405 GRASSROOTS_SERVICE_MANAGER_API User *GetUserById (const GrassrootsServer *grassroots_p, const bson_oid_t *id_p);
406 
407 
416 
417 
427 GRASSROOTS_SERVICE_MANAGER_API struct Service *GetServiceByName (GrassrootsServer *grassroots_p, const char *const service_name_s, const char *const service_alias_s);
428 
429 
430 
431 #ifdef __cplusplus
432 }
433 #endif
434 
435 #endif /* CORE_SERVER_SERVER_INCLUDE_GRASSROOTS_SERVER_H_ */
ConnectToExternalServers
void ConnectToExternalServers(GrassrootsServer *server_p)
Connect to any defined separate Grassroots servers.
GrassrootsServer::gs_jobs_manager_p
struct JobsManager * gs_jobs_manager_p
Definition: grassroots_server.h:93
ServersManager
A datatype for monitoring ExternalServers.
Definition: servers_manager.h:141
SchemaVersion
This is a datatype to store the versioning details for the Grassroots JSON schema that is being used.
Definition: schema_version.h:44
GrassrootsServer::ProcessServerJSONMessage
json_t * ProcessServerJSONMessage(GrassrootsServer *grassroots_p, json_t *json_req_p, User *user_p, const char **error_ss)
Process a given JSON request and produce the server response.
GrassrootsServer::GetUserByEmailAddress
User * GetUserByEmailAddress(const GrassrootsServer *grassroots_p, const char *email_s)
Get an existing User by the email address.
MEM_FLAG
MEM_FLAG
An enum specifying the particular status of a piece of dynamically allocated memory for a particular ...
Definition: memory_allocations.h:38
SetGrassrootsServerConfig
bool SetGrassrootsServerConfig(GrassrootsServer *server_p, const char *config_filename_s)
GrassrootsServer::gs_config_p
json_t * gs_config_p
Definition: grassroots_server.h:101
GetServerRootDirectory
const char * GetServerRootDirectory(const GrassrootsServer *const grassroots_p)
JobsManager
A datatype for monitoring ServiceJobs.
Definition: jobs_manager.h:98
DataResource
A datatype representing a URI.
Definition: data_resource.h:40
grassroots_service_manager_library.h
handler.h
Service::GetServiceByName
struct Service * GetServiceByName(GrassrootsServer *grassroots_p, const char *const service_name_s, const char *const service_alias_s)
Get a Service by its name.
schema_version.h
GrassrootsServer::AllocateGrassrootsServer
GrassrootsServer * AllocateGrassrootsServer(const char *grassroots_path_s, const char *config_filename_s, const char *service_config_path_s, const char *services_path_s, const char *references_path_s, const char *jobs_managers_path_s, const char *servers_managers_path_s, struct JobsManager *external_jobs_manager_p, MEM_FLAG jobs_manager_flag, struct ServersManager *external_servers_manager_p, MEM_FLAG servers_manager_flag)
Allocate a GrassrootsServer.
GrassrootsServer::gs_servers_manager_mem
MEM_FLAG gs_servers_manager_mem
Definition: grassroots_server.h:99
Service::LoadMatchingServices
void LoadMatchingServices(GrassrootsServer *grassroots_p, LinkedList *services_p, DataResource *resource_p, Handler *handler_p, User *user_p)
Load the Services that are able to act upon a given Resource.
IsServiceEnabled
bool IsServiceEnabled(const GrassrootsServer *grassroots_p, const char *service_name_s)
Check if a named Service is enabled upon this Grassroots server.
GrassrootsServer::gs_mongo_manager_p
struct MongoClientManager * gs_mongo_manager_p
Definition: grassroots_server.h:105
GrassrootsServer::GetUserById
User * GetUserById(const GrassrootsServer *grassroots_p, const bson_oid_t *id_p)
Get an existing User by the id.
GrassrootsServer::gs_path_s
char * gs_path_s
The path to the root directory for this GrassrootsServer.
Definition: grassroots_server.h:50
Service::LoadMatchingServicesByName
void LoadMatchingServicesByName(GrassrootsServer *grassroots_p, LinkedList *services_p, const char *service_name_s, const char *service_alias_s, User *user_p)
Load the Service that matches a given service name.
GrassrootsServer::GetAllUsers
LinkedList * GetAllUsers(const GrassrootsServer *grassroots_p)
Get a list of all Users.
Service
A datatype which defines an available service, its capabilities and its parameters.
Definition: service.h:153
GetServerProviderName
const char * GetServerProviderName(const GrassrootsServer *grassroots_p)
Get the Provider name for this Grassroots Server.
GrassrootsServer::GetGlobalConfigValue
json_t * GetGlobalConfigValue(const GrassrootsServer *grassroots_p, const char *key_s)
Get a configuration value from the global Grassroots configuration file.
servers_manager.h
GrassrootsServer::gs_services_path_s
char * gs_services_path_s
The relative path from gs_path_s to the folder containing the service modules.
Definition: grassroots_server.h:75
GrassrootsServer::gs_references_path_s
char * gs_references_path_s
The relative path from gs_path_s to the folder containing the reference services.
Definition: grassroots_server.h:69
LinkedList
A doubly-linked list that can be traversed in either direction.
Definition: linked_list.h:56
InitGrassrootsServer
bool InitGrassrootsServer(GrassrootsServer *server_p)
GetSchemaVersion
const SchemaVersion * GetSchemaVersion(GrassrootsServer *server_p)
GrassrootsServer::gs_jobs_manager_mem
MEM_FLAG gs_jobs_manager_mem
Definition: grassroots_server.h:95
GrassrootsServer::gs_servers_managers_path_s
char * gs_servers_managers_path_s
The relative path from gs_path_s to the folder containing the servers managers modules.
Definition: grassroots_server.h:89
GrassrootsServer::gs_schema_version_p
SchemaVersion * gs_schema_version_p
Definition: grassroots_server.h:103
GRASSROOTS_SERVICE_MANAGER_LOCAL
#define GRASSROOTS_SERVICE_MANAGER_LOCAL
Definition: grassroots_service_manager_library.h:47
Service::LoadKeywordServices
void LoadKeywordServices(GrassrootsServer *grassroots_p, LinkedList *services_p, User *user_p)
Load all Services that can be run upon a keyword parameter.
GrassrootsServer::GetUserByIdString
User * GetUserByIdString(const GrassrootsServer *grassroots_p, const char *id_s)
Get an existing User by the id.
GrassrootsServer::GetServersManager
struct ServersManager * GetServersManager(GrassrootsServer *server_p)
Get the ServersManager for a given GrassrootsServer.
GrassrootsServer
Definition: grassroots_server.h:45
User
A datatype to store user credentials.
Definition: user_details.h:40
GrassrootsServer::gs_servers_manager_p
struct ServersManager * gs_servers_manager_p
Definition: grassroots_server.h:97
user_details.h
GrassrootsServer::FreeGrassrootsServer
void FreeGrassrootsServer(GrassrootsServer *server_p)
Free a GrassrootsServer.
GetJobLoggingURI
const char * GetJobLoggingURI(const GrassrootsServer *grassroots_p)
Get the job logging URI for this Grassroots Server.
GetServerProviderDescription
const char * GetServerProviderDescription(const GrassrootsServer *grassroots_p)
Get the Provider description for this Grassroots Server.
Service::AddReferenceServices
void AddReferenceServices(GrassrootsServer *grassroots_p, LinkedList *services_p, const char *operation_name_s, User *user_p)
Add any reference Services to the list of available Services.
GrassrootsServer::gs_jobs_managers_path_s
char * gs_jobs_managers_path_s
The relative path from gs_path_s to the folder containing the jobs managers modules.
Definition: grassroots_server.h:82
GrassrootsServer::GetInitialisedResponseOnServer
json_t * GetInitialisedResponseOnServer(GrassrootsServer *server_p, User *user_p, const json_t *req_p, const char *key_s, json_t *value_p)
Create a response object with a valid header and a given key and value.
GetServerProviderURI
const char * GetServerProviderURI(const GrassrootsServer *grassroots_p)
Get the Provider URI for this Grassroots Server.
JobsManager::GetJobsManager
struct JobsManager * GetJobsManager(GrassrootsServer *grassroots_p)
Get the current Server-wide JobsManager.
Handler
A Handler is a datatype for accessing data.
Definition: handler.h:72
GrassrootsServer::gs_config_filename_s
char * gs_config_filename_s
The path to the global grassroots config file for this GrassrootsServer.
Definition: grassroots_server.h:56
GRASSROOTS_SERVICE_MANAGER_API
#define GRASSROOTS_SERVICE_MANAGER_API
Definition: grassroots_service_manager_library.h:46
GrassrootsServer::GetGlobalServiceConfig
json_t * GetGlobalServiceConfig(GrassrootsServer *grassroots_p, const char *const service_name_s, bool *alloc_flag_p)
Get a configuration value for a named Service.
DisconnectFromExternalServers
GRASSROOTS_SERVICE_MANAGER_LOCAL void DisconnectFromExternalServers(GrassrootsServer *server_p)
Disconnect to any defined separate Grassroots servers.
GrassrootsServer::gs_config_path_s
char * gs_config_path_s
The relative path from gs_path_s to the folder containing the individual service config files.
Definition: grassroots_server.h:62
GetProviderAsJSON
const json_t * GetProviderAsJSON(const GrassrootsServer *grassroots_p)
Get the JSON fragment with all of the details of the Provider for this Grassroots Server.