|
 |
7cfb7a |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
 |
7cfb7a |
From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com>
|
|
 |
7cfb7a |
Date: Fri, 7 Apr 2017 16:25:46 -0300
|
|
 |
7cfb7a |
Subject: [PATCH] New API functions to enable search queries of collections
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
Currently it is not possible to specify search query to optimize the
|
|
 |
7cfb7a |
collections returned by the REST API. It is necessary to retrieve and
|
|
 |
7cfb7a |
parse the full results and then iterate over the data to find what you
|
|
 |
7cfb7a |
are really looking for.
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
This patch introduces the search functionality for the APIs that are
|
|
 |
7cfb7a |
currently supported, improving bandwidth usage and also the need to
|
|
 |
7cfb7a |
iterate over the results.
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
Like the previous patch, this patch also introduces an auxiliary
|
|
 |
7cfb7a |
function in ovirt-collection to retrieve a sub-collection with a search
|
|
 |
7cfb7a |
query.
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
govirt/govirt.sym | 4 +++
|
|
 |
7cfb7a |
govirt/ovirt-api.c | 60 +++++++++++++++++++++++++++++++
|
|
 |
7cfb7a |
govirt/ovirt-api.h | 3 ++
|
|
 |
7cfb7a |
govirt/ovirt-collection-private.h | 6 ++++
|
|
 |
7cfb7a |
govirt/ovirt-collection.c | 31 ++++++++++++++++
|
|
 |
7cfb7a |
5 files changed, 104 insertions(+)
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
diff
|
|
 |
7cfb7a |
index 8371779..d02e77f 100644
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
@@ -105,6 +105,10 @@ GOVIRT_0.3.2 {
|
|
 |
7cfb7a |
ovirt_resource_delete;
|
|
 |
7cfb7a |
ovirt_resource_delete_async;
|
|
 |
7cfb7a |
ovirt_resource_delete_finish;
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ ovirt_api_search_storage_domains;
|
|
 |
7cfb7a |
+ ovirt_api_search_vms;
|
|
 |
7cfb7a |
+ ovirt_api_search_vm_pools;
|
|
 |
7cfb7a |
} GOVIRT_0.3.1;
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
GOVIRT_0.3.4 {
|
|
 |
7cfb7a |
diff
|
|
 |
7cfb7a |
index 37c0935..ca3fdcf 100644
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
@@ -135,6 +135,26 @@ OvirtCollection *ovirt_api_get_vms(OvirtApi *api)
|
|
 |
7cfb7a |
return api->priv->vms;
|
|
 |
7cfb7a |
}
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
+/**
|
|
 |
7cfb7a |
+ * ovirt_api_search_vms:
|
|
 |
7cfb7a |
+ * @api: a
|
|
 |
7cfb7a |
+ * @query: search query
|
|
 |
7cfb7a |
+ *
|
|
 |
7cfb7a |
+ * Return value: (transfer full):
|
|
 |
7cfb7a |
+ */
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_api_search_vms(OvirtApi *api, const char *query)
|
|
 |
7cfb7a |
+{
|
|
 |
7cfb7a |
+ g_return_val_if_fail(OVIRT_IS_API(api), NULL);
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ return ovirt_sub_collection_new_from_resource_search(OVIRT_RESOURCE(api),
|
|
 |
7cfb7a |
+ "vms/search",
|
|
 |
7cfb7a |
+ "vms",
|
|
 |
7cfb7a |
+ OVIRT_TYPE_VM,
|
|
 |
7cfb7a |
+ "vm",
|
|
 |
7cfb7a |
+ query);
|
|
 |
7cfb7a |
+}
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
/**
|
|
 |
7cfb7a |
* ovirt_api_get_vm_pools:
|
|
 |
7cfb7a |
* @api: a
|
|
 |
7cfb7a |
@@ -160,6 +180,26 @@ OvirtCollection *ovirt_api_get_vm_pools(OvirtApi *api)
|
|
 |
7cfb7a |
}
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
+/**
|
|
 |
7cfb7a |
+ * ovirt_api_search_vm_pools:
|
|
 |
7cfb7a |
+ * @api: a
|
|
 |
7cfb7a |
+ * @query: search query
|
|
 |
7cfb7a |
+ *
|
|
 |
7cfb7a |
+ * Return value: (transfer full):
|
|
 |
7cfb7a |
+ */
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_api_search_vm_pools(OvirtApi *api, const char *query)
|
|
 |
7cfb7a |
+{
|
|
 |
7cfb7a |
+ g_return_val_if_fail(OVIRT_IS_API(api), NULL);
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ return ovirt_sub_collection_new_from_resource_search(OVIRT_RESOURCE(api),
|
|
 |
7cfb7a |
+ "vmpools/search",
|
|
 |
7cfb7a |
+ "vmpools",
|
|
 |
7cfb7a |
+ OVIRT_TYPE_VM_POOL,
|
|
 |
7cfb7a |
+ "vmpool",
|
|
 |
7cfb7a |
+ query);
|
|
 |
7cfb7a |
+}
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
/**
|
|
 |
7cfb7a |
* ovirt_api_get_storage_domains:
|
|
 |
7cfb7a |
* @api: a
|
|
 |
7cfb7a |
@@ -183,3 +223,23 @@ OvirtCollection *ovirt_api_get_storage_domains(OvirtApi *api)
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
return api->priv->storage_domains;
|
|
 |
7cfb7a |
}
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+/**
|
|
 |
7cfb7a |
+ * ovirt_api_search_storage_domains:
|
|
 |
7cfb7a |
+ * @api: a
|
|
 |
7cfb7a |
+ * @query: search query
|
|
 |
7cfb7a |
+ *
|
|
 |
7cfb7a |
+ * Return value: (transfer full):
|
|
 |
7cfb7a |
+ */
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_api_search_storage_domains(OvirtApi *api, const char *query)
|
|
 |
7cfb7a |
+{
|
|
 |
7cfb7a |
+ g_return_val_if_fail(OVIRT_IS_API(api), NULL);
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ return ovirt_sub_collection_new_from_resource_search(OVIRT_RESOURCE(api),
|
|
 |
7cfb7a |
+ "storagedomains/search",
|
|
 |
7cfb7a |
+ "storage_domains",
|
|
 |
7cfb7a |
+ OVIRT_TYPE_STORAGE_DOMAIN,
|
|
 |
7cfb7a |
+ "storage_domain",
|
|
 |
7cfb7a |
+ query);
|
|
 |
7cfb7a |
+}
|
|
 |
7cfb7a |
diff
|
|
 |
7cfb7a |
index 5f0d4e9..1bf6c02 100644
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
@@ -62,8 +62,11 @@ GType ovirt_api_get_type(void);
|
|
 |
7cfb7a |
OvirtApi *ovirt_api_new(void);
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
OvirtCollection *ovirt_api_get_storage_domains(OvirtApi *api);
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_api_search_storage_domains(OvirtApi *api, const char *query);
|
|
 |
7cfb7a |
OvirtCollection *ovirt_api_get_vms(OvirtApi *api);
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_api_search_vms(OvirtApi *api, const char *query);
|
|
 |
7cfb7a |
OvirtCollection *ovirt_api_get_vm_pools(OvirtApi *api);
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_api_search_vm_pools(OvirtApi *api, const char *query);
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
G_END_DECLS
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
diff --git a/govirt/ovirt-collection-private.h b/govirt/ovirt-collection-private.h
|
|
 |
7cfb7a |
index d955fc6..cf7e603 100644
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
+++ b/govirt/ovirt-collection-private.h
|
|
 |
7cfb7a |
@@ -46,6 +46,12 @@ OvirtCollection *ovirt_sub_collection_new_from_resource(OvirtResource *resource,
|
|
 |
7cfb7a |
const char *collection_name,
|
|
 |
7cfb7a |
GType resource_type,
|
|
 |
7cfb7a |
const char *resource_name);
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_sub_collection_new_from_resource_search(OvirtResource *resource,
|
|
 |
7cfb7a |
+ const char *href,
|
|
 |
7cfb7a |
+ const char *collection_name,
|
|
 |
7cfb7a |
+ GType resource_type,
|
|
 |
7cfb7a |
+ const char *resource_name,
|
|
 |
7cfb7a |
+ const char *query);
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
G_END_DECLS
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
diff
|
|
 |
7cfb7a |
index 6ec1c6e..d36d750 100644
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
@@ -358,6 +358,37 @@ OvirtCollection *ovirt_sub_collection_new_from_resource(OvirtResource *resource,
|
|
 |
7cfb7a |
return ovirt_collection_new(link, collection_name, resource_type, resource_name);
|
|
 |
7cfb7a |
}
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
+OvirtCollection *ovirt_sub_collection_new_from_resource_search(OvirtResource *resource,
|
|
 |
7cfb7a |
+ const char *href,
|
|
 |
7cfb7a |
+ const char *collection_name,
|
|
 |
7cfb7a |
+ GType resource_type,
|
|
 |
7cfb7a |
+ const char *resource_name,
|
|
 |
7cfb7a |
+ const char *query)
|
|
 |
7cfb7a |
+{
|
|
 |
7cfb7a |
+ const char *link;
|
|
 |
7cfb7a |
+ char *substr;
|
|
 |
7cfb7a |
+ gchar *link_query, *escaped_query;
|
|
 |
7cfb7a |
+ OvirtCollection *collection;
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ link = ovirt_resource_get_sub_collection(resource, href);
|
|
 |
7cfb7a |
+ if (link == NULL)
|
|
 |
7cfb7a |
+ return NULL;
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ * we need to strip out {query} substring.
|
|
 |
7cfb7a |
+ */
|
|
 |
7cfb7a |
+ substr = g_strrstr(link, "{query}");
|
|
 |
7cfb7a |
+ if (substr != NULL)
|
|
 |
7cfb7a |
+ *substr = '\0';
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ escaped_query = g_uri_escape_string(query, NULL, FALSE);
|
|
 |
7cfb7a |
+ link_query = g_strconcat(link, escaped_query, NULL);
|
|
 |
7cfb7a |
+ collection = ovirt_collection_new(link_query, collection_name, resource_type, resource_name);
|
|
 |
7cfb7a |
+ g_free(escaped_query);
|
|
 |
7cfb7a |
+ g_free(link_query);
|
|
 |
7cfb7a |
+
|
|
 |
7cfb7a |
+ return collection;
|
|
 |
7cfb7a |
+}
|
|
 |
7cfb7a |
|
|
 |
7cfb7a |
/**
|
|
 |
7cfb7a |
* ovirt_collection_fetch:
|