aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-05-03 15:28:46 +0200
committerThomas White <taw@physics.org>2022-06-02 12:15:38 +0200
commit992e25b007f8a418fd7860cc34a441932cdf023c (patch)
treeb949c905232ece7bbce237eacde6b4834d4a08e4 /src
parent7cae8ed0e420173b17aec11329411d4284de32cd (diff)
indexamajig: Track metadata (e.g. for ASAP::O)
Diffstat (limited to 'src')
-rw-r--r--src/im-asapo.c3
-rw-r--r--src/im-asapo.h5
-rw-r--r--src/im-sandbox.c29
-rw-r--r--src/process_image.c33
-rw-r--r--src/process_image.h5
5 files changed, 55 insertions, 20 deletions
diff --git a/src/im-asapo.c b/src/im-asapo.c
index 48a32ee4..a095c82e 100644
--- a/src/im-asapo.c
+++ b/src/im-asapo.c
@@ -244,7 +244,7 @@ static void skip_to_stream_end(struct im_asapo *a)
void *im_asapo_fetch(struct im_asapo *a, size_t *pdata_size,
- char **pfilename, char **pevent)
+ char **pmeta, char **pfilename, char **pevent)
{
void *data_copy;
AsapoMessageMetaHandle meta;
@@ -295,6 +295,7 @@ void *im_asapo_fetch(struct im_asapo *a, size_t *pdata_size,
}
memcpy(data_copy, asapo_message_data_get_as_chars(data), msg_size);
+ *pmeta = strdup(asapo_message_meta_get_metadata(meta));
*pfilename = strdup(asapo_message_meta_get_name(meta));
*pevent = strdup("//");
diff --git a/src/im-asapo.h b/src/im-asapo.h
index 26546a88..719b5bf1 100644
--- a/src/im-asapo.h
+++ b/src/im-asapo.h
@@ -45,7 +45,7 @@ extern struct im_asapo *im_asapo_connect(const char *endpoint,
extern void im_asapo_shutdown(struct im_asapo *a);
extern void *im_asapo_fetch(struct im_asapo *a, size_t *pdata_size,
- char **pfilename, char **pevent);
+ char **pmeta, char **pfilename, char **pevent);
extern char *im_asapo_make_unique_group_id(const char *endpoint,
const char *token);
@@ -66,9 +66,10 @@ static UNUSED void im_asapo_shutdown(struct im_asapo *a)
}
static UNUSED void *im_asapo_fetch(struct im_asapo *a, size_t *psize,
- char **pfilename, char **pevent)
+ char **pmeta, char **pfilename, char **pevent)
{
*psize = 0;
+ *pmeta = NULL;
*pfilename = NULL;
*pevent = NULL;
return NULL;
diff --git a/src/im-sandbox.c b/src/im-sandbox.c
index 6e4b7fcd..8137db9e 100644
--- a/src/im-sandbox.c
+++ b/src/im-sandbox.c
@@ -456,6 +456,13 @@ static int run_work(const struct index_args *iargs, Stream *st,
free(line);
ok = 0;
+ /* Default values */
+ pargs.zmq_data = NULL;
+ pargs.zmq_data_size = 0;
+ pargs.asapo_data = NULL;
+ pargs.asapo_data_size = 0;
+ pargs.asapo_meta = NULL;
+
if ( sb->zmq ) {
do {
@@ -474,15 +481,14 @@ static int run_work(const struct index_args *iargs, Stream *st,
char *filename;
char *event;
- /* Temporary (?) abuse of "zmq_data", even though
- * data comes via ASAP::O */
profile_start("asapo-fetch");
- pargs.zmq_data = im_asapo_fetch(asapostuff,
- &pargs.zmq_data_size,
- &filename,
- &event);
+ pargs.asapo_data = im_asapo_fetch(asapostuff,
+ &pargs.asapo_data_size,
+ &pargs.asapo_meta,
+ &filename,
+ &event);
profile_end("asapo-fetch");
- if ( pargs.zmq_data != NULL ) {
+ if ( pargs.asapo_data != NULL ) {
ok = 1;
/* ASAP::O provides a meaningful filename, which
@@ -494,8 +500,6 @@ static int run_work(const struct index_args *iargs, Stream *st,
}
} else {
- pargs.zmq_data = NULL;
- pargs.zmq_data_size = 0;
ok = 1;
}
@@ -507,9 +511,10 @@ static int run_work(const struct index_args *iargs, Stream *st,
profile_end("process-image");
}
- /* pargs.zmq_data will be copied into the image structure, so
- * that it can be queried for "header" values etc. It will
- * eventually be freed by image_free() under process_image() */
+ /* NB pargs.zmq_data, pargs.asapo_data and pargs.asapo_meta
+ * will be copied into the image structure, so
+ * that it can be queried for "header" values etc. They will
+ * eventually be freed by image_free() under process_image(). */
if ( sb->profile ) {
profile_print_and_reset();
diff --git a/src/process_image.c b/src/process_image.c
index 71be87cc..de2d8792 100644
--- a/src/process_image.c
+++ b/src/process_image.c
@@ -188,22 +188,45 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs,
int any_crystals;
if ( pargs->zmq_data != NULL ) {
- set_last_task(last_task, "unpacking messagepack object");
- profile_start("read-data-block");
+
+ set_last_task(last_task, "unpacking ZMQ data");
+ profile_start("read-zmq-data");
image = image_read_data_block(iargs->dtempl,
pargs->zmq_data,
pargs->zmq_data_size,
+ NULL,
+ iargs->data_format,
+ serial,
+ iargs->no_image_data,
+ iargs->no_mask_data);
+ profile_end("read-zmq-data");
+ if ( image == NULL ) return;
+
+ /* image_read_data_block() will leave the filename/event as
+ * NULL, because there's no file (duh). Fill them in now with
+ * the values passed down to us. For ZMQ, these values are just
+ * placeholders. */
+ image->filename = strdup(pargs->filename);
+ image->ev = strdup(pargs->event);
+
+ } else if ( pargs->asapo_data != NULL ) {
+
+ set_last_task(last_task, "unpacking ASAP::O data");
+ profile_start("read-asapo-data");
+ image = image_read_data_block(iargs->dtempl,
+ pargs->asapo_data,
+ pargs->asapo_data_size,
+ pargs->asapo_meta,
iargs->data_format,
serial,
iargs->no_image_data,
iargs->no_mask_data);
- profile_end("read-data-block");
+ profile_end("read-asapo-data");
if ( image == NULL ) return;
/* image_read_data_block() will leave the filename/event as
* NULL, because there's no file (duh). Fill them in now with
- * the values passed down to us. These values might be
- * meaningful (e.g. ASAP::O), or just placeholders. */
+ * the values passed down to us from ASAP::O. */
image->filename = strdup(pargs->filename);
image->ev = strdup(pargs->event);
diff --git a/src/process_image.h b/src/process_image.h
index cbf2713b..5e12ff29 100644
--- a/src/process_image.h
+++ b/src/process_image.h
@@ -119,8 +119,13 @@ struct pattern_args
/* "Input" */
char *filename;
char *event;
+
void *zmq_data;
size_t zmq_data_size;
+
+ char *asapo_data;
+ size_t asapo_data_size;
+ char *asapo_meta;
};