2020-05-17 11:30:00 -07:00
|
|
|
/*
|
2021-01-23 14:38:23 -08:00
|
|
|
* Copyright 2018-2021. Alastair Roy Poole <netstar@gmail.com>
|
2019-10-05 03:49:03 -07:00
|
|
|
*
|
2020-07-11 10:47:24 -07:00
|
|
|
* See COPYING file for details.
|
2018-10-02 07:38:06 -07:00
|
|
|
*/
|
2018-06-17 00:45:46 -07:00
|
|
|
|
2019-12-10 15:17:16 -08:00
|
|
|
#include "config.h"
|
2020-05-12 16:51:30 -07:00
|
|
|
#include "evisum_config.h"
|
2020-10-26 18:33:20 -07:00
|
|
|
#include "evisum_server.h"
|
2021-03-11 03:10:13 -08:00
|
|
|
#include "ui/evisum_ui.h"
|
2018-06-04 03:11:21 -07:00
|
|
|
|
2020-11-14 09:45:22 -08:00
|
|
|
static Eina_Bool
|
|
|
|
_shutdown_cb(void *data, int type, void *event EINA_UNUSED)
|
|
|
|
{
|
2021-03-11 03:10:13 -08:00
|
|
|
Evisum_Ui *ui = data;
|
2020-11-14 09:45:22 -08:00
|
|
|
|
|
|
|
if (ui->cpu.win) evas_object_del(ui->cpu.win);
|
|
|
|
if (ui->mem.win) evas_object_del(ui->mem.win);
|
|
|
|
if (ui->disk.win) evas_object_del(ui->disk.win);
|
|
|
|
if (ui->sensors.win) evas_object_del(ui->sensors.win);
|
2020-12-28 12:20:15 -08:00
|
|
|
if (ui->proc.win) evas_object_del(ui->proc.win);
|
2020-11-14 09:45:22 -08:00
|
|
|
|
2021-01-24 05:48:40 -08:00
|
|
|
return 0;
|
2020-11-14 09:45:22 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2021-03-11 03:10:13 -08:00
|
|
|
_signals(Evisum_Ui *ui)
|
2020-11-14 09:45:22 -08:00
|
|
|
{
|
2020-12-24 02:16:19 -08:00
|
|
|
ui->handler_sig = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _shutdown_cb, ui);
|
2020-11-14 09:45:22 -08:00
|
|
|
}
|
|
|
|
|
2021-03-31 03:35:07 -07:00
|
|
|
// XXX!!!
|
|
|
|
static void
|
|
|
|
_background_poller_cb(void *data, Ecore_Thread *thread)
|
|
|
|
{
|
|
|
|
Evisum_Ui *ui = data;
|
|
|
|
double max = system_cpu_online_count_get() * 100.0;
|
|
|
|
|
|
|
|
while (!ecore_thread_check(thread))
|
|
|
|
{
|
|
|
|
meminfo_t memory;
|
|
|
|
static uint64_t cpu_time_prev = 0;
|
|
|
|
uint64_t cpu_time = 0;
|
|
|
|
int n_cpu;
|
|
|
|
|
|
|
|
cpu_core_t **cores = system_cpu_state_get(&n_cpu);
|
|
|
|
for (int i = 0; i < n_cpu; i++)
|
|
|
|
{
|
|
|
|
cpu_time += cores[i]->total - cores[i]->idle;
|
|
|
|
free(cores[i]);
|
|
|
|
}
|
|
|
|
free(cores);
|
|
|
|
|
|
|
|
memset(&memory, 0, sizeof(meminfo_t));
|
|
|
|
system_memory_usage_get(&memory);
|
|
|
|
ui->mem_total = memory.total;
|
|
|
|
ui->mem_used = memory.used;
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++)
|
|
|
|
{
|
|
|
|
if (ecore_thread_check(thread))
|
|
|
|
break;
|
|
|
|
usleep(125000);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (cpu_time_prev)
|
|
|
|
{
|
|
|
|
ui->cpu_usage = (double) (cpu_time - cpu_time_prev);
|
|
|
|
if (ui->cpu_usage > max) ui->cpu_usage = max;
|
|
|
|
}
|
|
|
|
cpu_time_prev = cpu_time;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-04 03:11:21 -07:00
|
|
|
int
|
2020-12-28 12:20:15 -08:00
|
|
|
elm_main(int argc, char **argv)
|
2018-06-04 03:11:21 -07:00
|
|
|
{
|
2021-03-11 03:10:13 -08:00
|
|
|
Evisum_Ui *ui;
|
2020-10-26 20:33:01 -07:00
|
|
|
int i, pid = -1;
|
2021-03-12 03:03:05 -08:00
|
|
|
size_t len;
|
2020-10-26 18:33:20 -07:00
|
|
|
Evisum_Action action = EVISUM_ACTION_DEFAULT;
|
2020-05-17 11:30:00 -07:00
|
|
|
|
|
|
|
for (i = 0; i < argc; i++)
|
|
|
|
{
|
|
|
|
if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-help")) ||
|
|
|
|
(!strcmp(argv[i], "--help") || !strcasecmp(argv[i], "-v")))
|
|
|
|
{
|
2021-03-12 03:03:05 -08:00
|
|
|
printf("Usage: evisum [OPTIONS] <pid>\n"
|
2021-01-22 07:07:08 -08:00
|
|
|
" Where OPTIONS can be one of\n"
|
|
|
|
" -c\n"
|
|
|
|
" Launch CPU view.\n"
|
|
|
|
" -m\n"
|
|
|
|
" Launch memory view.\n"
|
|
|
|
" -d\n"
|
|
|
|
" Launch storage view.\n"
|
2021-03-10 04:51:21 -08:00
|
|
|
" -n\n"
|
|
|
|
" Launch network view.\n"
|
2021-03-12 03:03:05 -08:00
|
|
|
" -s | -p\n"
|
2021-01-22 07:07:08 -08:00
|
|
|
" Launch sensors view.\n"
|
|
|
|
" -h | -help | --help\n"
|
|
|
|
" This menu.\n"
|
|
|
|
" No arguments will launch the process explorer.\n");
|
2020-05-17 11:30:00 -07:00
|
|
|
exit(0);
|
|
|
|
}
|
2020-10-26 18:33:20 -07:00
|
|
|
else if (!strcmp(argv[i], "-c"))
|
|
|
|
action = EVISUM_ACTION_CPU;
|
|
|
|
else if (!strcmp(argv[i], "-m"))
|
|
|
|
action = EVISUM_ACTION_MEM;
|
|
|
|
else if (!strcmp(argv[i], "-d"))
|
|
|
|
action = EVISUM_ACTION_STORAGE;
|
2021-03-12 03:03:05 -08:00
|
|
|
else if ((!strcmp(argv[i], "-s")) || (!strcmp(argv[i], "-p")))
|
2020-10-26 18:33:20 -07:00
|
|
|
action = EVISUM_ACTION_SENSORS;
|
2021-03-10 04:51:21 -08:00
|
|
|
else if (!strcmp(argv[i], "-n"))
|
|
|
|
action = EVISUM_ACTION_NETWORK;
|
2020-05-17 11:30:00 -07:00
|
|
|
}
|
2020-02-15 07:30:31 -08:00
|
|
|
|
2021-03-12 03:03:05 -08:00
|
|
|
if ((argc == 2) && (action == EVISUM_ACTION_DEFAULT))
|
|
|
|
{
|
|
|
|
action = EVISUM_ACTION_PROCESS;
|
|
|
|
len = strlen(argv[1]);
|
|
|
|
for (int i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
if (!isdigit(argv[1][i]))
|
|
|
|
{
|
|
|
|
action = EVISUM_ACTION_DEFAULT;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (len > 8) action = EVISUM_ACTION_DEFAULT;
|
|
|
|
if (action == EVISUM_ACTION_PROCESS)
|
|
|
|
pid = atoi(argv[1]);
|
|
|
|
}
|
2021-03-13 10:51:37 -08:00
|
|
|
|
2020-11-14 09:45:22 -08:00
|
|
|
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
|
2018-06-04 03:11:21 -07:00
|
|
|
|
2020-04-23 04:28:07 -07:00
|
|
|
#if ENABLE_NLS
|
|
|
|
setlocale(LC_ALL, "");
|
|
|
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
|
|
|
bind_textdomain_codeset(PACKAGE, "UTF-8");
|
|
|
|
textdomain(PACKAGE);
|
|
|
|
#endif
|
|
|
|
|
2020-10-26 20:33:01 -07:00
|
|
|
if (evisum_server_client_add(action, pid))
|
2020-10-31 08:07:29 -07:00
|
|
|
return 0;
|
2018-06-04 03:11:21 -07:00
|
|
|
|
2020-10-26 18:33:20 -07:00
|
|
|
ui = evisum_ui_init();
|
|
|
|
if (!ui) return 1;
|
|
|
|
|
2020-11-14 09:45:22 -08:00
|
|
|
_signals(ui);
|
|
|
|
|
2020-10-26 18:33:20 -07:00
|
|
|
evisum_server_init(ui);
|
2020-10-26 20:33:01 -07:00
|
|
|
evisum_ui_activate(ui, action, pid);
|
2020-10-26 18:33:20 -07:00
|
|
|
|
2021-03-31 03:35:07 -07:00
|
|
|
ecore_thread_run(_background_poller_cb, NULL, NULL, ui);
|
|
|
|
|
2020-10-26 18:33:20 -07:00
|
|
|
ecore_main_loop_begin();
|
|
|
|
|
2020-12-24 02:16:19 -08:00
|
|
|
ecore_event_handler_del(ui->handler_sig);
|
2020-11-14 09:45:22 -08:00
|
|
|
evisum_ui_shutdown(ui);
|
2020-10-26 18:33:20 -07:00
|
|
|
evisum_server_shutdown();
|
|
|
|
|
2018-06-04 03:11:21 -07:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2020-12-28 12:20:15 -08:00
|
|
|
ELM_MAIN()
|