diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/im-asapo.c | 49 | ||||
-rw-r--r-- | src/im-asapo.h | 54 | ||||
-rw-r--r-- | src/im-sandbox.c | 25 | ||||
-rw-r--r-- | src/im-sandbox.h | 1 | ||||
-rw-r--r-- | src/indexamajig.c | 12 |
5 files changed, 124 insertions, 17 deletions
diff --git a/src/im-asapo.c b/src/im-asapo.c index e6061268..4eafd058 100644 --- a/src/im-asapo.c +++ b/src/im-asapo.c @@ -60,10 +60,50 @@ static void show_asapo_error(const char *msg, const AsapoErrorHandle err) } +AsapoStringHandle im_asapo_group_id_from_string(const char *str) +{ + /* FIXME: This function does not yet exist */ + return asapostringhandle_from_string(str); +} + + +AsapoStringHandle im_asapo_make_unique_group_id(const char *endpoint, + const char *token, + const char *beamtime, + const char *path) +{ + AsapoConsumerHandle consumer; + AsapoSourceCredentialsHandle cred; + AsapoStringHandle group_id; + AsapoErrorHandle err = asapo_new_handle(); + + cred = asapo_create_source_credentials(kProcessed, beamtime, "", "", token); + consumer = asapo_create_consumer(endpoint, path, 1, cred, &err); + asapo_free_handle(&cred); + if ( err ) { + show_asapo_error("Cannot create temporary ASAP::O consumer", err); + asapo_free_handle(&consumer); + return NULL; + } + + asapo_consumer_set_timeout(consumer, 1000); + + group_id = asapo_consumer_generate_new_group_id(consumer, &err); + asapo_free_handle(&consumer); + if ( err ) { + show_asapo_error("Cannot create ASAP::O group ID", err); + return NULL; + } + + return group_id; +} + + struct im_asapo *im_asapo_connect(const char *endpoint, const char *token, const char *beamtime, - const char *path) + const char *path, + AsapoStringHandle group_id) { struct im_asapo *a; AsapoSourceCredentialsHandle cred; @@ -83,12 +123,7 @@ struct im_asapo *im_asapo_connect(const char *endpoint, asapo_consumer_set_timeout(a->consumer, 1000); - a->group_id = asapo_consumer_generate_new_group_id(a->consumer, &err); - if ( err ) { - show_asapo_error("Cannot create ASAP::O group ID", err); - free(a); - return NULL; - } + a->group_id = group_id; return a; } diff --git a/src/im-asapo.h b/src/im-asapo.h index 254e7df3..3ffc5808 100644 --- a/src/im-asapo.h +++ b/src/im-asapo.h @@ -36,15 +36,61 @@ #if defined(HAVE_ASAPO) -extern struct im_asapo *im_asapo_connect(); +#include <asapo/consumer_c.h> + +extern struct im_asapo *im_asapo_connect(const char *endpoint, + const char *token, + const char *beamtime, + const char *path, + AsapoStringHandle group_id); + extern void im_asapo_shutdown(struct im_asapo *a); + extern void *im_asapo_fetch(struct im_asapo *a, size_t *pdata_size); +extern AsapoStringHandle im_asapo_group_id_from_string(const char *str); + +extern AsapoStringHandle im_asapo_make_unique_group_id(const char *endpoint, + const char *token, + const char *beamtime, + const char *path); + #else /* defined(HAVE_ASAPO) */ -static UNUSED struct im_asapo *im_asapo_connect() { return NULL; } -static UNUSED void im_asapo_shutdown(struct im_asapo *a) { } -static UNUSED void *im_asapo_fetch(struct im_asapo *a, size_t *psize) { *psize = 0; return NULL; } +typedef void* AsapoStringHandle; + +static UNUSED struct im_asapo *im_asapo_connect(const char *endpoint, + const char *token, + const char *beamtime, + const char *path, + AsapoStringHandle group_id) +{ + return NULL; +} + +static UNUSED void im_asapo_shutdown(struct im_asapo *a) +{ +} + +static UNUSED void *im_asapo_fetch(struct im_asapo *a, size_t *psize) +{ + *psize = 0; + return NULL; +} + +static UNUSED AsapoStringHandle im_asapo_group_id_from_string(const char *str) +{ + return NULL; +} + +static UNUSED AsapoStringHandle im_asapo_make_unique_group_id(const char *endpoint, + const char *token, + const char *beamtime, + const char *path + AsapoStringHandle group_id) +{ + return NULL; +} #endif /* defined(HAVE_ASAPO) */ diff --git a/src/im-sandbox.c b/src/im-sandbox.c index ed58a3be..654f07d1 100644 --- a/src/im-sandbox.c +++ b/src/im-sandbox.c @@ -62,6 +62,7 @@ #include "process_image.h" #include "im-zmq.h" #include "profile.h" +#include "im-asapo.h" struct sandbox @@ -110,6 +111,7 @@ struct sandbox const char *asapo_token; const char *asapo_beamtime; const char *asapo_path; + AsapoStringHandle asapo_group_id; /* Final output */ Stream *stream; @@ -356,12 +358,13 @@ static int run_work(const struct index_args *iargs, Stream *st, } if ( sb->asapo ) { - zmqstuff = im_zmq_connect(sb->zmq_address, - sb->zmq_subscriptions, - sb->n_zmq_subscriptions, - sb->zmq_request); - if ( zmqstuff == NULL ) { - ERROR("ZMQ setup failed.\n"); + asapostuff = im_asapo_connect(sb->asapo_endpoint, + sb->asapo_token, + sb->asapo_beamtime, + sb->asapo_path, + sb->asapo_group_id); + if ( asapostuff == NULL ) { + ERROR("ASAP::O setup failed.\n"); return 1; } } @@ -1077,6 +1080,7 @@ int create_sandbox(struct index_args *iargs, int n_proc, char *prefix, int n_zmq_subscriptions, const char *zmq_request, const char *asapo_endpoint, const char *asapo_token, const char *asapo_beamtime, const char *asapo_path, + const char *asapo_group_id, int timeout, int profile) { int i; @@ -1132,6 +1136,15 @@ int create_sandbox(struct index_args *iargs, int n_proc, char *prefix, return 0; } + if ( asapo_group_id != NULL ) { + sb->asapo_group_id = im_asapo_group_id_from_string(asapo_group_id); + } else { + sb->asapo_group_id = im_asapo_make_unique_group_id(asapo_endpoint, + asapo_token, + asapo_beamtime, + asapo_path); + } + sb->fds = NULL; sb->fhs = NULL; sb->stream = stream; diff --git a/src/im-sandbox.h b/src/im-sandbox.h index 5efd3595..0415cb80 100644 --- a/src/im-sandbox.h +++ b/src/im-sandbox.h @@ -89,6 +89,7 @@ extern int create_sandbox(struct index_args *iargs, int n_proc, char *prefix, int n_zmq_subscriptions, const char *zmq_request, const char *asapo_endpoint, const char *asapo_token, const char *asapo_beamtime, const char *asapo_path, + const char *asapo_group_id, int timeout, int profile); #endif /* IM_SANDBOX_H */ diff --git a/src/indexamajig.c b/src/indexamajig.c index 252a9e8f..ee23fcc3 100644 --- a/src/indexamajig.c +++ b/src/indexamajig.c @@ -88,6 +88,7 @@ struct indexamajig_arguments char *asapo_token; char *asapo_beamtime; char *asapo_path; + char *asapo_group_id; int serial_start; char *temp_location; int if_refine; @@ -422,6 +423,10 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) args->asapo_path = strdup(arg); break; + case 217 : + args->asapo_group_id = strdup(arg); + break; + case 219 : args->iargs.data_format = parse_data_format(arg); if ( args->iargs.data_format == DATA_SOURCE_TYPE_UNKNOWN ) { @@ -846,6 +851,11 @@ int main(int argc, char *argv[]) args.basename = 0; args.zmq_addr = NULL; args.zmq_request = NULL; + args.asapo_endpoint = NULL; + args.asapo_token = NULL; + args.asapo_beamtime = NULL; + args.asapo_path = NULL; + args.asapo_group_id = NULL; args.n_zmq_subscriptions = 0; args.serial_start = 1; args.if_peaks = 1; @@ -958,6 +968,7 @@ int main(int argc, char *argv[]) {"asapo-token", 214, "str", OPTION_NO_USAGE, "ASAP::O token"}, {"asapo-beamtime", 215, "str", OPTION_NO_USAGE, "ASAP::O beamtime ID"}, {"asapo-path", 216, "str", OPTION_NO_USAGE, "ASAP::O path to files"}, + {"asapo-group", 217, "str", OPTION_NO_USAGE, "ASAP::O group ID"}, {"data-format", 219, "str", OPTION_NO_USAGE, "Streamed data format"}, {NULL, 0, 0, OPTION_DOC, "Peak search options:", 3}, @@ -1319,6 +1330,7 @@ int main(int argc, char *argv[]) args.n_zmq_subscriptions, args.zmq_request, args.asapo_endpoint, args.asapo_token, args.asapo_beamtime, args.asapo_path, + args.asapo_group_id, timeout, args.profile); cell_free(args.iargs.cell); |