WSLUA_FUNCTION wslua_format_time(lua_State* LS) { /* Formats a relative timestamp in a human readable form */ #define WSLUA_ARG_format_time_TIMESTAMP 1 /* A timestamp value to convert */ lua_Number timestamp = luaL_checknumber(LS,WSLUA_ARG_format_time_TIMESTAMP); nstime_t then; gchar* str; then.secs = (guint32)floor(timestamp); then.nsecs = (guint32) ( (timestamp-(double)(then.secs))*1000000000); str = rel_time_to_str(&then); lua_pushstring(LS,str); WSLUA_RETURN(1); /* A string with the formated time */ }
/* Function: build_suppressed_msg_value * Description: Pack info of a syslog message into a xmlrpc array of structs: * Key: "msg name" * Value: Array of N items: * Index 0 Struct of 1 members: * Index 0 Key: String "para name" * Index 0 Value: Struct "para value" * * Index 1 Struct of 1 members: * Index 1 Key: String "para name" * Index 1 Value: Struct "para value" * * Parameters: env[in]: xmlrpc env struct * p_msg[in]: ptr to a msg struct * Returns: xml formatted data */ static xmlrpc_value *build_suppressed_msg_value (xmlrpc_env *const env, syslog_msg_def_t *p_msg) { xmlrpc_value *retval; xmlrpc_value *msg_value = NULL; msg_value = xmlrpc_array_new(env); if (!msg_value) { goto done; } if ((build_xml_struct(env, msg_value, "Name", p_msg->msg_name, XMLRPC_CHAR) == NULL) || (build_xml_struct(env, msg_value, "Facility", p_msg->facility->fac_name, XMLRPC_CHAR) == NULL) || (build_xml_struct(env, msg_value, "Format", p_msg->output_format, XMLRPC_CHAR) == NULL)) { return NULL; } if (p_msg->limiter) { char ts_buf[BUFFER_SIZE], string_buffer[BUFFER_SIZE]; snprintf(string_buffer, BUFFER_SIZE, "%llu", p_msg->limiter->suppressed); abs_time_t now = get_sys_time(); rel_time_t last_sup_time = TIME_SUB_A_A(now, p_msg->limiter->last_time); if ((build_xml_struct(env, msg_value, "Limit rate", &(p_msg->limiter->rate_limit), XMLRPC_UINT) == NULL) || (build_xml_struct(env, msg_value, "Suppressed last time (sec ago)", (char *)rel_time_to_str( last_sup_time, ts_buf, BUFFER_SIZE), XMLRPC_CHAR) == NULL) || (build_xml_struct(env, msg_value, "Suppressed message count", string_buffer, XMLRPC_CHAR) == NULL)) { return NULL; } } done: retval = xmlrpc_build_value(env, "{s:A}", p_msg->msg_name, msg_value); xmlrpc_DECREF(msg_value); return retval; }