| 38 | } |
| 39 | |
| 40 | int unix_rpc_info_command(cJSON *cmd_msg, cJSON *server_msg, void *data) |
| 41 | { |
| 42 | (void)cmd_msg; |
| 43 | (void)data; |
| 44 | |
| 45 | if (!cJSON_AddStringToObject(server_msg, "version", CPWORKER_VERSION)) |
| 46 | return -1; |
| 47 | if (!cJSON_AddNumberToObject(server_msg, "pid", (double)getpid())) |
| 48 | return -1; |
| 49 | |
| 50 | time_t now = time(NULL); |
| 51 | int64_t uptime_sec = g_started_at > 0 ? (int64_t)(now - g_started_at) : 0; |
| 52 | if (!cJSON_AddNumberToObject(server_msg, "uptime_sec", (double)uptime_sec)) |
| 53 | return -1; |
| 54 | if (!cJSON_AddNumberToObject(server_msg, "started_at_sec", (double)g_started_at)) |
| 55 | return -1; |
| 56 | |
| 57 | const char *cfg = g_config_path != NULL ? g_config_path : ""; |
| 58 | if (!cJSON_AddStringToObject(server_msg, "config_path", cfg)) |
| 59 | return -1; |
| 60 | |
| 61 | const char *wd = g_working_dir != NULL ? g_working_dir : ""; |
| 62 | if (!cJSON_AddStringToObject(server_msg, "working_dir", wd)) |
| 63 | return -1; |
| 64 | |
| 65 | /* cpworker logs to stderr; no log_file config exists. */ |
| 66 | if (!cJSON_AddStringToObject(server_msg, "log_destination", "stderr")) |
| 67 | return -1; |
| 68 | |
| 69 | return 0; |
| 70 | } |