From 2ea1e96401d38fdc9621b067e5af191f02c3b8ef Mon Sep 17 00:00:00 2001 From: Akos Horvath Date: Sat, 25 Nov 2023 13:59:28 +0100 Subject: [PATCH] logging changes --- src/util.c | 44 +++++++++++++++++++++++++++++++++++--------- src/util.h | 5 +++++ src/wm.h | 10 ++++++---- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/util.c b/src/util.c index 4fbb962..d56f9c9 100644 --- a/src/util.c +++ b/src/util.c @@ -148,7 +148,14 @@ char* wm_treenode_to_str(TreeNode *node) json_object_object_add(pos, "w", json_object_new_int(node->pos.w)); json_object_object_add(pos, "h", json_object_new_int(node->pos.h)); json_object_object_add(jobj, "pos", pos); - json_object_object_add(jobj, "client", json_object_new_uint64((uint64_t)node->client)); + if (node->type == NODE_CLIENT && node->client) { + json_object *client = json_object_new_object(); + json_object_object_add(client, "address", json_object_new_uint64((unsigned long)node->client)); + json_object_object_add(client, "name", json_object_new_string(node->client->name)); + json_object_object_add(client, "is_pid_set", json_object_new_boolean(node->client->is_pid_set)); + json_object_object_add(client, "pid", json_object_new_int(node->client->pid)); + json_object_object_add(jobj, "client", client); + } json_object_object_add(jobj, "id", json_object_new_uint64((uint64_t)node->id)); char *ret = strdup(json_object_to_json_string_ext(jobj, JSON_C_TO_STRING_PRETTY)); @@ -164,11 +171,17 @@ PtrArray wm_nonempty_workspaces_to_strptrarray(Wm *wm) for (size_t i = 0; i < wm->smon->wscount; i++) { TreeNode *node = wm->smon->workspaces[i].tree; - if (!wm_treenode_is_empty(node) || (node->type == NODE_CLIENT && node->client)) - wm_ptrarray_push(&ret, wm_treenode_to_str(wm->smon->workspaces[i].tree)); + if (!wm_treenode_is_empty(node) || (node->type == NODE_CLIENT && node->client)) { + WmWorkspaceToStrRet *ws_str_with_index = malloc(sizeof(WmWorkspaceToStrRet)); + *ws_str_with_index = (WmWorkspaceToStrRet) { + .ws_index = i, + .str = wm_treenode_to_str(wm->smon->workspaces[i].tree) + }; + wm_ptrarray_push(&ret, ws_str_with_index); + } } - DEBUG_PRINT("%s returning %d\n", __func__, ret.size); + DEBUG_PRINT("%s returning %ld\n", __func__, ret.size); return ret; } @@ -178,19 +191,32 @@ void wm_log_state(Wm *wm, const char *prefixstr, const char* logfile) RETURN_IF_NULL(prefixstr); RETURN_IF_NULL(logfile); - PtrArray ws_str = wm_nonempty_workspaces_to_strptrarray(wm); - FILE* fptr = fopen(logfile, "a"); + FILE *fptr = fopen(logfile, "a"); if (!fptr) { fprintf(stderr, "wm: could not open log file %s\n", logfile); return; } - if (prefixstr) fprintf(fptr, "%lu %s\n", time(NULL), prefixstr); + PtrArray ws_str = wm_nonempty_workspaces_to_strptrarray(wm); + + char str[128] = {0}; + char prefix[WM_PREFIX_LEN + 32] = {0}; + snprintf(prefix, sizeof(prefix), "%lu_%s", time(NULL), prefixstr); + + json_object *log_entry_obj = json_object_new_object(); + json_object_object_add(log_entry_obj, prefix, json_object_new_object()); + for (size_t i = 0; i < ws_str.size; i++) { - fprintf(fptr, "%s\n", (char*)ws_str.ptrs[i]); - free(ws_str.ptrs[i]); + WmWorkspaceToStrRet *ws_with_index = (WmWorkspaceToStrRet*)ws_str.ptrs[i]; + snprintf(str, sizeof(str), "%ld", ws_with_index->ws_index); + json_object_object_add(json_object_object_get(log_entry_obj, prefix), str, json_tokener_parse(ws_with_index->str)); + fprintf(fptr, "%s,\n", json_object_to_json_string_ext(log_entry_obj, JSON_C_TO_STRING_PRETTY)); + free(ws_with_index->str); + free(ws_with_index); } + json_object_put(log_entry_obj); + fflush(fptr); fclose(fptr); wm_ptrarray_free(&ws_str); } diff --git a/src/util.h b/src/util.h index 83fcac0..d09285b 100644 --- a/src/util.h +++ b/src/util.h @@ -61,6 +61,11 @@ struct TreeNode { unsigned int id; }; +typedef struct { + size_t ws_index; + char *str; +} WmWorkspaceToStrRet; + TreeNode* wm_treenode_new(NodeType type, TreeNode *parent); void wm_treenode_free(TreeNode *node); bool wm_treenode_is_empty(TreeNode *node); diff --git a/src/wm.h b/src/wm.h index fd7d75c..740885b 100644 --- a/src/wm.h +++ b/src/wm.h @@ -65,16 +65,18 @@ if (c == NULL) \ #define CURRENT_WS(wm) (wm)->smon->workspaces[(wm)->smon->selws] +#define WM_PREFIX_LEN 4096 + #define WM_LOGFILENAME "./log" #define WM_LOG_STATE_START(wm) do { \ wm_log_state(wm, __func__, WM_LOGFILENAME); \ } while (0); -#define WM_LOG_STATE_END(wm) do { \ - char __prefix[4096] = {0}; \ - snprintf(__prefix, 4096, "after %s", __func__); \ - wm_log_state(wm, __prefix, WM_LOGFILENAME); \ +#define WM_LOG_STATE_END(wm) do { \ + char __prefix[WM_PREFIX_LEN] = {0}; \ + snprintf(__prefix, WM_PREFIX_LEN, "after %s", __func__); \ + wm_log_state(wm, __prefix, WM_LOGFILENAME); \ } while (0); typedef struct Client Client;