From 853c1fefc503fdaeb2385c174d48f605bd9b5d6d Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 1 Dec 2009 18:24:24 +0100 Subject: [PATCH] Implemented simple logging in FCB --- fres/cbroker/contract_log.c | 23 ++++++++++++++++++++-- fres/cbroker/fcb.c | 7 ++++--- fres/contract/fres_container.c | 36 +++++++++++++++++++++++++++++----- fres/contract/fres_container.h | 3 +++ 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/fres/cbroker/contract_log.c b/fres/cbroker/contract_log.c index f391b6d..f918fb9 100644 --- a/fres/cbroker/contract_log.c +++ b/fres/cbroker/contract_log.c @@ -13,7 +13,7 @@ #include static UL_LOG_CUST(ulogd); -static ul_log_domain_t ulogd = {UL_LOGL_MSG, "fcb_contract_log"}; +static ul_log_domain_t ulogd = {UL_LOGL_MSG, "contract_log"}; UL_LOGREG_SINGLE_DOMAIN_INIT_FUNCTION(init_ulogd_contract_log, ulogd); void @@ -24,5 +24,24 @@ log_contract(const char *prefix, int index, const struct fres_contract *c) char str[1000]; fres_contract_to_string2(str, sizeof(str), c, 4, 0); ul_logdeb("%s #%d:\n%s", prefix, index, str); -} + } + else { + char res_name[10] = ""; + frsh_contract_label_t label = ""; + fres_block_resource *block_res; + fres_block_label *block_label; + char *p; + block_res = fres_contract_get_resource(c); + if (block_res) + fres_block_to_string(res_name, sizeof(res_name), + FRES_BLOCK_RESOURCE, block_res); + block_label = fres_contract_get_label(c); + if (block_label) + strcpy(label, block_label->label); + + for (p=res_name; *p!='\n' && *p!=0; p++); + *p = 0; + + ul_logmsg("%s: %s %s\n", prefix, res_name, label); + } } diff --git a/fres/cbroker/fcb.c b/fres/cbroker/fcb.c index e906ca7..cb9e9a2 100644 --- a/fres/cbroker/fcb.c +++ b/fres/cbroker/fcb.c @@ -75,7 +75,7 @@ #endif UL_LOG_CUST(ulogd_fcb); -ul_log_domain_t ulogd_fcb = {UL_LOGL_MSG, "fcb"}; +ul_log_domain_t ulogd_fcb = {UL_LOGL_MSG, "main"}; UL_LOGREG_SINGLE_DOMAIN_INIT_FUNCTION(init_ulogd_fcb, ulogd_fcb); fosa_abs_time_t start_time; @@ -309,8 +309,6 @@ prepare_fcb_contracts(struct fcb *fcb, struct fcb_contract *fcb_contracts[], for (i=0; iid)) { /* Normal negotiation request */ forb_uuid_generate((forb_uuid_t *)&c->id); @@ -321,6 +319,7 @@ prepare_fcb_contracts(struct fcb *fcb, struct fcb_contract *fcb_contracts[], if (!get_res_key(c, &key)) { return FRSH_ERR_RESOURCE_ID_INVALID; } + log_contract("Negotiation request", i, c); } else { fc = fcb_contract_find(fcb, &c->id); if (!fc) { @@ -333,11 +332,13 @@ prepare_fcb_contracts(struct fcb *fcb, struct fcb_contract *fcb_contracts[], if (fres_contract_get_num_blocks(c) == 0) { /* Cancelation */ get_res_key(fc->user_contract, &key); + log_contract("Cancelation request", i, fc->user_contract); } else { /* Renegotiation */ if (!get_res_key(c, &key)) { return FRSH_ERR_RESOURCE_ID_INVALID; } + log_contract("Renegotiation request", i, fc->user_contract); } } } diff --git a/fres/contract/fres_container.c b/fres/contract/fres_container.c index f040f43..c3656bc 100644 --- a/fres/contract/fres_container.c +++ b/fres/contract/fres_container.c @@ -89,8 +89,24 @@ int fres_block_label_to_string(char *dest, size_t size, enum fres_block_type typ int fres_block_resource_to_string(char *dest, size_t size, enum fres_block_type type, const void *block_data) { + static const char *res_names[] = { + [FRSH_RT_PROCESSOR] = "CPU", + [FRSH_RT_NETWORK] = "NET", + [FRSH_RT_MEMORY] = "MEM", + [FRSH_RT_DISK] = "DISK" + }; + const fres_block_resource *b = block_data; - return snprintf(dest, size, "%d.%d\n", b->resource_type, b->resource_id); + char res[10]; + const char *r = NULL; + if (b->resource_type >= 0 && + b->resource_type < sizeof(res_names)/sizeof(res_names[0])) + r = res_names[b->resource_type]; + if (!r) { + snprintf(res, sizeof(res), "%d", b->resource_type); + r = res; + } + return snprintf(dest, size, "%s.%d\n", r, b->resource_id); } int fres_block_basic_to_string(char *dest, size_t size, enum fres_block_type type, @@ -611,6 +627,15 @@ err: return CORBA_FALSE; } +int fres_block_to_string(char *dest, size_t size, enum fres_block_type type, + const void *block_data) +{ + if (block_registry[type]->to_string) + return block_registry[type]->to_string(dest, size, type, block_data); + else + return 0; +} + int fres_container_to_string(char *dest, size_t size, const struct fres_container *c) { @@ -623,7 +648,8 @@ fres_container_to_string(char *dest, size_t size, const struct fres_container *c case FRES_BLOCK_EMPTY: /* nothing to do */ break; - case FRES_BLOCK_DATA: + case FRES_BLOCK_DATA: { + char tmp[1000]; ret = snprintf(dest, size, "block %s (%d)\n", block_registry[type]->name, type); if (ret < 0) goto err; @@ -632,15 +658,15 @@ fres_container_to_string(char *dest, size_t size, const struct fres_container *c size -= ret; dest += ret; } - if (block_registry[type]->to_string) { - char tmp[1000]; - block_registry[type]->to_string(tmp, sizeof(tmp), type, b->u.data); + ret = fres_block_to_string(tmp, sizeof(tmp), type, b->u.data); + if (ret > 0) { ret = fres_indent_str(dest, size, tmp, 2); written += ret; size -= ret; dest += ret; } break; + } case FRES_BLOCK_STREAM: ret = snprintf(dest, size, "unknown block (%d)\n", type); diff --git a/fres/contract/fres_container.h b/fres/contract/fres_container.h index 212d5c6..433ebd3 100644 --- a/fres/contract/fres_container.h +++ b/fres/contract/fres_container.h @@ -132,6 +132,9 @@ void * fres_container_get_block(const struct fres_container *container, enum fres_block_type type); +int fres_block_to_string(char *dest, size_t size, enum fres_block_type type, + const void *block_data); + /** * Macro which defines type-safe container "accessor" functions for * various blocks. -- 2.39.2