#define MUSE_LOG "muse:logfile"
#define MUSE_LOCK "muse:lockfile"
+#define MUSE_LOG_PERIOD "muse:log_period"
#define MUSE_WATCHDOG_MIN_TIMEOUT "muse:min_timeout"
#define MUSE_WATCHDOG_MAX_TIMEOUT "muse:max_timeout"
#define MUSE_MEMORY_THRESHOLD "muse:memory_threshold"
#define MAX_INSTANCE "max_instance"
#define CAUTION_INSTANCE "caution_instance"
+#define DEFAULT_LOG_PERIOD 900 /* 15 minute */
#define DEFAULT_WATCHDOG_MIN_TIMEOUT 5
#define DEFAULT_WATCHDOG_MAX_TIMEOUT 60
#define DEFAULT_DISPATCH_WATCHDOG_TIMEOUT 10
#define DEFAULT_WATCHDOG_DISABLED_API_INDEX -1 /* Watchdog is applied to all dispatcher functions */
#define DEFAULT_MAX_INSTANCE -1 /* Unlimited */
#define DEFAULT_CAUTION_INSTANCE -1
-#define DEFAULT_ON_DEMAND_MAX_IDLE_TIME 600 /* 10 minutes */
+#define DEFAULT_ON_DEMAND_MAX_IDLE_TIME 600 /* 10 minute */
#define DEFAULT_ON_DEMAND_MAX_IDLE_MEMORY 30000 /* 30MB */
int host_cnt;
gboolean log_enabled;
char *lockfile;
+ int log_period;
int min_timeout;
int max_timeout;
int memory_threshold;
char *ms_config_get_lockfile(void);
gboolean ms_config_is_log_enabled(void);
void ms_config_remove_lockfile(void);
+int ms_config_get_log_period(void);
int ms_config_get_min_timeout(void);
int ms_config_get_max_timeout(void);
int ms_config_get_memory_threshold(void);
ms_state_e state;
GMutex state_lock;
struct timeval tv_s;
+ char instance_pid_info[MUSE_MSG_LEN_MAX];
} muse_server_t;
typedef struct ms_cmd_dispatch_info {
goto out;
}
+ conf->log_period = _ms_config_get_int(conf->muse_dict, MUSE_LOG_PERIOD, DEFAULT_LOG_PERIOD);
+
conf->min_timeout = _ms_config_get_int(conf->muse_dict, MUSE_WATCHDOG_MIN_TIMEOUT, DEFAULT_WATCHDOG_MIN_TIMEOUT);
conf->max_timeout = _ms_config_get_int(conf->muse_dict, MUSE_WATCHDOG_MAX_TIMEOUT, DEFAULT_WATCHDOG_MAX_TIMEOUT);
(void)unlink(conf->lockfile);
}
+int ms_config_get_log_period(void)
+{
+ ms_config_t *conf = _ms_config_get_instance();
+ muse_return_val_if_fail(conf, MUSE_ERR);
+
+ return conf->log_period;
+}
+
int ms_config_get_min_timeout(void)
{
ms_config_t *conf = _ms_config_get_instance();
muse_module_h connecting_m;
char pids[MUSE_MSG_LEN_MAX] = {'\0',};
char pid[MUSE_PARAM_MAX] = {'\0',};
- int idx, len, caution_instance;
+ int idx, len;
muse_return_if_fail(m);
muse_return_if_fail(connection);
muse_return_if_fail(queue);
+ muse_return_if_fail(ms_get_instance());
len = g_queue_get_length(queue);
strncat(pids, pid, MUSE_MSG_LEN_MAX - strlen(pids) - 1);
}
- LOGW("total number of module = %d ( %s) - %s %p from pid %d %s client (count %d)",
- len, pids, connection_cmd[cmd], m, m->pid, ms_config_get_host_name(m->idx), connection->instance_count[m->idx]);
+ strncpy(ms_get_instance()->instance_pid_info, pids, MUSE_MSG_LEN_MAX);
- caution_instance = ms_config_get_caution_instance(m->idx);
-
- if (caution_instance != DEFAULT_CAUTION_INSTANCE && connection->instance_count[m->idx] > caution_instance) {
- LOGI("[MUSE_MODULE_COMMAND_CREATE_CAUTION] player # %d | camera # %d | recorder # %d > %d",
- connection->instance_count[MUSE_PLAYER], connection->instance_count[MUSE_CAMERA],
- connection->instance_count[MUSE_RECORDER], caution_instance);
- ms_cmd_dispatch(m, MUSE_MODULE_COMMAND_CREATE_CAUTION);
- }
+ LOGW("total number of modules = %d ( %s) - %s %p from pid %d %s client (count %d)", len, ms_get_instance()->instance_pid_info,
+ connection_cmd[cmd], m, m->pid, ms_config_get_host_name(m->idx), connection->instance_count[m->idx]);
}
int ms_connection_register(muse_module_h m)
{
- int fd;
+ int fd, caution_instance;
GQueue *queue;
struct epoll_event event = { 0 };
char err_msg[MUSE_MSG_LEN_MAX] = {'\0',};
_ms_connection_module_instance_info(m, connection, queue, API_CREATE);
+ caution_instance = ms_config_get_caution_instance(m->idx);
+
+ if (caution_instance != DEFAULT_CAUTION_INSTANCE && connection->instance_count[m->idx] > caution_instance) {
+ LOGI("[MUSE_MODULE_COMMAND_CREATE_CAUTION] player # %d | camera # %d | recorder # %d > %d",
+ connection->instance_count[MUSE_PLAYER], connection->instance_count[MUSE_CAMERA],
+ connection->instance_count[MUSE_RECORDER], caution_instance);
+ ms_cmd_dispatch(m, MUSE_MODULE_COMMAND_CREATE_CAUTION);
+ }
+
ms_connection_unlock(connection);
LOGD("Leave");
static void _ms_check_idle_state(void)
{
+ ms_connection_t *connection = NULL;
+ ms_config_t *conf = NULL;
struct timeval tv_c, tv_r;
int instance_number, timeout;
+ static int period_idx = 1;
muse_return_if_fail(muse_server);
muse_return_if_fail(muse_server->state == MUSE_SERVER_STATE_READY);
+ connection = muse_server->connection;
+ muse_return_if_fail(connection);
+
+ conf = muse_server->conf;
+ muse_return_if_fail(conf);
+
gettimeofday(&tv_c, NULL);
timersub(&tv_c, &muse_server->tv_s, &tv_r);
- instance_number = g_queue_get_length(muse_server->connection->instance_queue);
timeout = (int)tv_r.tv_sec;
- LOGD("timeout %d", timeout);
+ ms_connection_lock(connection);
+
+ instance_number = g_queue_get_length(connection->instance_queue);
- if (instance_number == 0 && timeout >= ms_config_get_max_idle_time()) {
- LOGE("Timeout exit !!! [Idle time] %d sec", timeout);
- ms_remove_ready_file();
- exit(EXIT_SUCCESS);
+ if (timeout >= ms_config_get_log_period() * period_idx) {
+ LOGW("total number of modules = %d ( %s)", instance_number, muse_server->instance_pid_info);
+ period_idx++;
+ }
+
+ ms_connection_unlock(connection);
+
+ if (conf->is_on_demand) {
+ if (instance_number == 0 && timeout >= ms_config_get_max_idle_time()) {
+ LOGE("Timeout exit !!! [Idle time] %d sec", timeout);
+ ms_remove_ready_file();
+ exit(EXIT_SUCCESS);
+ }
}
}
muse_return_val_if_fail(muse_server, NULL);
while (1) {
- if (muse_server->conf->is_on_demand)
- _ms_check_idle_state();
-
+ _ms_check_idle_state();
_ms_check_connection_event();
}