summaryrefslogtreecommitdiff
path: root/src/monitor/request-handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/monitor/request-handler.c')
-rw-r--r--src/monitor/request-handler.c232
1 files changed, 43 insertions, 189 deletions
diff --git a/src/monitor/request-handler.c b/src/monitor/request-handler.c
index d503ab6..e31b2c6 100644
--- a/src/monitor/request-handler.c
+++ b/src/monitor/request-handler.c
@@ -40,6 +40,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
+#include <sys/stat.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <assert.h>
@@ -59,13 +60,10 @@ struct request_client {
struct resource_instance {
int id;
- struct syscommon_resman_resource *res;
-
int64_t ts_start;
int64_t ts_end;
};
-static int g_resource_id;
static bool g_request_server_run;
static struct thread *g_server_thread;
@@ -89,23 +87,6 @@ get_resource_instance_by_id(struct request_client *client, int resource_id)
return g_hash_table_lookup(client->resource_table, GINT_TO_POINTER(resource_id));
}
-static struct syscommon_resman_resource *
-get_resource_by_id(struct request_client *client, int resource_id)
-{
- struct resource_instance *res_inst = get_resource_instance_by_id(client, resource_id);
-
- res_inst = get_resource_instance_by_id(client, resource_id);
- if (!res_inst)
- return NULL;
-
- return res_inst->res;
-}
-
-static int clear_sign_bit(unsigned int val)
-{
- return (int)((val << 1) >> 1);
-}
-
static int handle_request_create_resource(struct request_client *client, char *args)
{
struct resource_instance *res_inst;
@@ -126,16 +107,13 @@ static int handle_request_create_resource(struct request_client *client, char *a
*/
resource_type = atoi(args);
- ret = syscommon_resman_create_resource(&res_inst->res, resource_type);
+ ret = syscommon_resman_create_resource(&res_inst->id, resource_type);
if (ret < 0) {
_E("failed to create resource, res:type(%d)\n", resource_type);
free(res_inst);
return ret;
}
- res_inst->id = clear_sign_bit(
- (unsigned int)__sync_fetch_and_add(&g_resource_id, 1));
-
register_resource_to_client(client, res_inst);
return res_inst->id;
@@ -172,7 +150,6 @@ inline __attribute__((always_inline)) int64_t get_time_now(void)
static int handle_request_update_resource(struct request_client *client, char *args)
{
struct resource_instance *res_inst;
- struct syscommon_resman_resource *res;
int resource_id;
int ret;
@@ -193,15 +170,13 @@ static int handle_request_update_resource(struct request_client *client, char *a
return -EINVAL;
}
- res = res_inst->res;
-
res_inst->ts_start = get_time_now();
- ret = syscommon_resman_update_resource_attrs(res);
+ ret = syscommon_resman_update_resource_attrs(resource_id);
res_inst->ts_end = get_time_now();
if (ret < 0) {
res_inst->ts_start = res_inst->ts_end = 0;
_E("failed to update resource attributes, res:name(%s)id(%d)\n",
- syscommon_resman_get_resource_name(res), resource_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id);
return ret;
}
@@ -257,13 +232,12 @@ static int handle_request_get_resource_count(struct request_client *client, char
static void update_resource(gpointer key, gpointer value, gpointer user_data)
{
struct resource_instance *res_inst = value;
- struct syscommon_resman_resource *res = res_inst->res;
int ret;
- ret = syscommon_resman_update_resource_attrs(res);
+ ret = syscommon_resman_update_resource_attrs(res_inst->id);
if (ret < 0)
_E("failed to update resource attributes (name:%s,id:%d)\n",
- syscommon_resman_get_resource_name(res), res_inst->id);
+ syscommon_resman_get_resource_name(res_inst->id), res_inst->id);
}
@@ -286,7 +260,6 @@ static int handle_request_update_resource_all(struct request_client *client, cha
static int handle_request_set_resource_attr(struct request_client *client, char *args, int request_type)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t interest_masks;
@@ -305,30 +278,23 @@ static int handle_request_set_resource_attr(struct request_client *client, char
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
switch (request_type) {
case REQUEST_SET_RESOURCE_ATTR:
- ret = syscommon_resman_set_resource_attr_interest(res, interest_masks);
+ ret = syscommon_resman_set_resource_attr_interest(resource_id, interest_masks);
if (ret < 0)
_E("failed to set attribute interest, client(%d) | res:name(%s)id(%d)\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id);
break;
case REQUEST_UNSET_RESOURCE_ATTR:
- ret = syscommon_resman_unset_resource_attr_interest(res, interest_masks);
+ ret = syscommon_resman_unset_resource_attr_interest(resource_id, interest_masks);
if (ret < 0)
_E("failed to unset attribute interest, client(%d) | res:name(%s)id(%d)\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id);
break;
case REQUEST_IS_RESOURCE_ATTR_SET:
- ret = (int)syscommon_resman_is_resource_attr_interested(res, interest_masks);
+ ret = (int)syscommon_resman_is_resource_attr_interested(resource_id, interest_masks);
break;
default:
return -EINVAL;
@@ -339,7 +305,6 @@ static int handle_request_set_resource_attr(struct request_client *client, char
static int handle_request_set_resource_flag(struct request_client *client, char *args)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t flag_mask;
@@ -358,18 +323,11 @@ static int handle_request_set_resource_flag(struct request_client *client, char
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_set_resource_flag(res, flag_mask);
+ ret = syscommon_resman_set_resource_flag(resource_id, flag_mask);
if (ret < 0) {
_E("failed to set flag to %"PRIu64", client(%d) | res:name(%s)id(%d)\n",
flag_mask, client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id);
return ret;
}
@@ -378,7 +336,6 @@ static int handle_request_set_resource_flag(struct request_client *client, char
static int handle_request_is_resource_attr_supported(struct request_client *client, char *args, bool *supported)
{
- struct resource *res;
int resource_id;
u_int64_t attr_id;
@@ -397,19 +354,11 @@ static int handle_request_is_resource_attr_supported(struct request_client *clie
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- return syscommon_resman_is_resource_attr_supported(res, attr_id, supported);
+ return syscommon_resman_is_resource_attr_supported(resource_id, attr_id, supported);
}
static int handle_request_set_resource_ctrl(struct request_client *client, char *args)
{
- struct syscommon_resman_resource *res;
int resource_id, value, ret;
u_int64_t ctrl_id;
@@ -428,19 +377,12 @@ static int handle_request_set_resource_ctrl(struct request_client *client, char
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_set_resource_control(res, ctrl_id, (void *)(intptr_t)value);
+ ret = syscommon_resman_set_resource_control(resource_id, ctrl_id, (void *)(intptr_t)value);
if (ret < 0) {
_E("failed to set resource control, client(%d) | res:name(%s)id(%d) | ctrl:name(%s)id(%"PRId64")val(%d)\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_control_name(res, ctrl_id), ctrl_id, value);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_control_name(resource_id, ctrl_id), ctrl_id, value);
return ret;
}
@@ -451,7 +393,6 @@ static int
handle_request_get_json(struct request_client *client, char *args,
int request_type, char **json_string)
{
- struct syscommon_resman_resource *res;
u_int64_t attr_id;
int resource_id;
@@ -482,18 +423,12 @@ handle_request_get_json(struct request_client *client, char *args,
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, res:id(%d)\n", resource_id);
- return -EINVAL;
- }
-
skip_res:
switch (request_type) {
case REQUEST_GET_RESOURCE_JSON:
- return syscommon_resman_get_resource_attrs_json(res, json_string);
+ return syscommon_resman_get_resource_attrs_json(resource_id, json_string);
case REQUEST_GET_VALUE_JSON:
- return syscommon_resman_get_resource_attr_json(res, attr_id, json_string);
+ return syscommon_resman_get_resource_attr_json(resource_id, attr_id, json_string);
case REQUEST_GET_RESOURCE_LIST_JSON:
return syscommon_resman_get_resource_list_json(json_string);
default:
@@ -503,7 +438,6 @@ skip_res:
static int handle_request_get_value_int(struct request_client *client, char *args, int32_t *value)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -522,19 +456,12 @@ static int handle_request_get_value_int(struct request_client *client, char *arg
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_int(res, attr_id, value);
+ ret = syscommon_resman_get_resource_attr_int(resource_id, attr_id, value);
if (ret < 0) {
_E("failed to get int value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -543,7 +470,6 @@ static int handle_request_get_value_int(struct request_client *client, char *arg
static int handle_request_get_value_int64(struct request_client *client, char *args, int64_t *value)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -562,19 +488,12 @@ static int handle_request_get_value_int64(struct request_client *client, char *a
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_int64(res, attr_id, value);
+ ret = syscommon_resman_get_resource_attr_int64(resource_id, attr_id, value);
if (ret < 0) {
_E("failed to get int64 value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -584,7 +503,6 @@ static int handle_request_get_value_int64(struct request_client *client, char *a
static int
handle_request_get_value_uint(struct request_client *client, char *args, u_int32_t *value)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -603,19 +521,12 @@ handle_request_get_value_uint(struct request_client *client, char *args, u_int32
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_uint(res, attr_id, value);
+ ret = syscommon_resman_get_resource_attr_uint(resource_id, attr_id, value);
if (ret < 0) {
_E("failed to get uint value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -625,7 +536,6 @@ handle_request_get_value_uint(struct request_client *client, char *args, u_int32
static int
handle_request_get_value_uint64(struct request_client *client, char *args, u_int64_t *value)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -644,19 +554,12 @@ handle_request_get_value_uint64(struct request_client *client, char *args, u_int
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_uint64(res, attr_id, value);
+ ret = syscommon_resman_get_resource_attr_uint64(resource_id, attr_id, value);
if (ret < 0) {
_E("failed to get uint64 value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -665,7 +568,6 @@ handle_request_get_value_uint64(struct request_client *client, char *args, u_int
static int handle_request_get_value_double(struct request_client *client, char *args, double *value)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -684,19 +586,12 @@ static int handle_request_get_value_double(struct request_client *client, char *
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_double(res, attr_id, value);
+ ret = syscommon_resman_get_resource_attr_double(resource_id, attr_id, value);
if (ret < 0) {
_E("failed to get double value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -705,7 +600,6 @@ static int handle_request_get_value_double(struct request_client *client, char *
static int handle_request_get_value_string(struct request_client *client, char *args, char *value)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -724,19 +618,12 @@ static int handle_request_get_value_string(struct request_client *client, char *
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_string(res, attr_id, value);
+ ret = syscommon_resman_get_resource_attr_string(resource_id, attr_id, value);
if (ret < 0) {
_E("failed to get string value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -746,7 +633,6 @@ static int handle_request_get_value_string(struct request_client *client, char *
static int
handle_request_get_value_array(struct request_client *client, char *args, struct syscommon_resman_array_value **arr)
{
- struct syscommon_resman_resource *res;
int resource_id, ret;
u_int64_t attr_id;
@@ -765,19 +651,12 @@ handle_request_get_value_array(struct request_client *client, char *args, struct
return -EINVAL;
}
- res = get_resource_by_id(client, resource_id);
- if (!res) {
- _E("failed to get resource, client(%d) | res:id(%d)\n",
- client->socket_fd, resource_id);
- return -EINVAL;
- }
-
- ret = syscommon_resman_get_resource_attr_array(res, attr_id, arr);
+ ret = syscommon_resman_get_resource_attr_array(resource_id, attr_id, arr);
if (ret < 0) {
_E("failed to get array value, client(%d) | (res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res), resource_id,
- syscommon_resman_get_resource_attr_name(res, attr_id), attr_id);
+ syscommon_resman_get_resource_name(resource_id), resource_id,
+ syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id);
return ret;
}
@@ -813,7 +692,7 @@ handle_request_get_resource_ts(struct request_client *client, char *args,
*/
resource_id = atoi(args);
- res_inst = get_resource_by_id(client, resource_id);
+ res_inst = get_resource_instance_by_id(client, resource_id);
if (!res_inst) {
_E("failed to get resource, client(%d) | res:id(%d)\n",
client->socket_fd, resource_id);
@@ -824,7 +703,7 @@ handle_request_get_resource_ts(struct request_client *client, char *args,
if (ret < 0) {
_E("failed to get timestamp value, client(%d) | res:name(%s)id(%d)\n",
client->socket_fd,
- syscommon_resman_get_resource_name(res_inst->res), resource_id);
+ syscommon_resman_get_resource_name(res_inst->id), resource_id);
return ret;
}
@@ -1148,7 +1027,7 @@ static void delete_resource_instance(struct resource_instance *res_inst)
if (!res_inst)
return;
- syscommon_resman_delete_resource(res_inst->res);
+ syscommon_resman_delete_resource(res_inst->id);
free(res_inst);
}
@@ -1290,29 +1169,6 @@ error_out:
return -EIO;
}
-static void init_resource_id(void)
-{
- int val;
- struct timeval tv;
-
- /*
- * Initial g_resource_id is set by a combination of
- * tv_sec and tv_usec values of gettimeofday().
- * It ensures that PASS assigns a unique resource id
- * for each create_resource request.
- *
- * Even PASS is restarted, a newly initialized value
- * of g_resource_id reflects the current value of
- * gettimeofday(). Thus, the uniqueness in resource
- * id is kept unless the number of created resources
- * crosses the time consumed (in msecs) before
- * restarted.
- */
- gettimeofday(&tv, NULL);
- val = tv.tv_sec * 1000 + tv.tv_usec / 1000;
- g_resource_id = clear_sign_bit(val);
-}
-
static int request_server_func(void *ctx, void **result)
{
struct sockaddr_un unix_address;
@@ -1328,8 +1184,6 @@ static int request_server_func(void *ctx, void **result)
if (!g_request_server_run)
return THREAD_RETURN_DONE;
- init_resource_id();
-
/* 0. initialize server socket */
ret = init_unix_socket(&server_unix_socket, &unix_address, &unix_addrlen);
if (ret < 0)