]> rtime.felk.cvut.cz Git - frescor/frsh.git/blobdiff - fres/contract/fres_container.c
Implemented simple logging in FCB
[frescor/frsh.git] / fres / contract / fres_container.c
index f040f43d16c3dd385e0a8b6568b9b5ca6ef8db3f..c3656bcfb87aa062a4d502d7db108ffef39f6ab8 100644 (file)
@@ -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);