/*
- * Copyright (C) 2010-2012 jeanfi@gmail.com
+ * Copyright (C) 2010-2013 jeanfi@gmail.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
#include "psensor_json.h"
#include "url.h"
#include "server.h"
+#include "slog.h"
static const char *DEFAULT_LOG_FILE = "/var/log/psensor-server.log";
static const char *program_name;
-#define DEFAULT_PORT 3131
+static const int DEFAULT_PORT = 3131;
#define PAGE_NOT_FOUND (_("<html><body><p>"\
"Page not found - Go to <a href='/'>Main page</a></p></body>"))
{"wdir", required_argument, 0, 'w'},
{"debug", required_argument, 0, 'd'},
{"log-file", required_argument, 0, 'l'},
+ {"sensor-log-file", required_argument, 0, 0},
+ {"sensor-log-interval", required_argument, 0, 0},
{0, 0, 0, 0}
};
static int server_stop_requested;
-void print_version()
+static void print_version()
{
printf("psensor-server %s\n", VERSION);
printf(_("Copyright (C) %s jeanfi@gmail.com\n"
"2010-2012");
}
-void print_help()
+static void print_help()
{
printf(_("Usage: %s [OPTION]...\n"), program_name);
puts(_(" -d, --debug=LEVEL "
"set the debug level, integer between 0 and 3"));
puts(_(" -l, --log-file=PATH set the log file to PATH"));
+ puts(_(" --sensor-log-file=PATH set the sensor log file to PATH"));
+ puts(_(" --sensor-log-interval=S "
+ "set the sensor log interval to S (seconds)"));
puts("");
printf(_("Report bugs to: %s\n"), PACKAGE_BUGREPORT);
}
/*
- Returns the file path corresponding to a given URL
-*/
-char *get_path(const char *url, const char *www_dir)
+ * Returns the file path corresponding to a given URL
+ */
+static char *get_path(const char *url, const char *www_dir)
{
const char *p;
char *res;
return fread(buf, 1, max, file);
}
-struct MHD_Response *
-create_response_api(const char *nurl,
- const char *method,
- unsigned int *rp_code)
+static struct MHD_Response *
+create_response_api(const char *nurl, const char *method, unsigned int *rp_code)
{
struct MHD_Response *resp;
struct psensor *s;
return NULL;
}
-struct MHD_Response *
-create_response_file(const char *nurl,
- const char *method,
- unsigned int *rp_code,
- const char *fpath)
+static struct MHD_Response *create_response_file(const char *nurl,
+ const char *method,
+ unsigned int *rp_code,
+ const char *fpath)
{
struct stat st;
int ret;
return NULL;
}
-struct MHD_Response *
+static struct MHD_Response *
create_response(const char *nurl, const char *method, unsigned int *rp_code)
{
struct MHD_Response *resp = NULL;
}
}
-static int
-cbk_http_request(void *cls,
- struct MHD_Connection *connection,
- const char *url,
- const char *method,
- const char *version,
- const char *upload_data,
- size_t *upload_data_size, void **ptr)
+static int cbk_http_request(void *cls,
+ struct MHD_Connection *connection,
+ const char *url,
+ const char *method,
+ const char *version,
+ const char *upload_data,
+ size_t *upload_data_size, void **ptr)
{
static int dummy;
struct MHD_Response *response;
int main(int argc, char *argv[])
{
struct MHD_Daemon *d;
- int port = DEFAULT_PORT;
- int optc;
- int cmdok = 1;
- char *log_file;
+ int port, opti, optc, cmdok, ret, slog_interval;
+ char *log_file, *slog_file;
program_name = argv[0];
server_data.www_dir = NULL;
server_data.psysinfo.interfaces = NULL;
log_file = NULL;
-
- while ((optc = getopt_long(argc, argv,
- "vhp:w:d:", long_options, NULL)) != -1) {
+ slog_file = NULL;
+ slog_interval = 300;
+ port = DEFAULT_PORT;
+ cmdok = 1;
+
+ while ((optc = getopt_long(argc,
+ argv,
+ "vhp:w:d:l:",
+ long_options,
+ &opti)) != -1) {
switch (optc) {
case 'w':
if (optarg)
exit(EXIT_SUCCESS);
case 'd':
log_level = atoi(optarg);
- log_printf(LOG_INFO,
- _("Enables debug mode: %d"),
- log_level);
+ log_info(_("Enables debug mode: %d"), log_level);
break;
case 'l':
if (optarg)
log_file = strdup(optarg);
break;
+ case 0:
+ if (!strcmp(long_options[opti].name, "sensor-log-file"))
+ slog_file = strdup(optarg);
+ else if (!strcmp(long_options[opti].name,
+ "sensor-log-interval"))
+ slog_interval = atoi(optarg);
+ break;
default:
cmdok = 0;
break;
}
}
- if (!server_data.www_dir)
- server_data.www_dir = strdup(DEFAULT_WWW_DIR);
-
- if (!log_file)
- log_file = strdup(DEFAULT_LOG_FILE);
-
if (!cmdok || optind != argc) {
fprintf(stderr, _("Try `%s --help' for more information.\n"),
program_name);
exit(EXIT_FAILURE);
}
+ if (!server_data.www_dir)
+ server_data.www_dir = strdup(DEFAULT_WWW_DIR);
+
+ if (!log_file)
+ log_file = strdup(DEFAULT_LOG_FILE);
+
log_open(log_file);
psensor_init();
exit(EXIT_FAILURE);
}
- log_printf(LOG_INFO, _("Web server started on port: %d"), port);
- log_printf(LOG_INFO, _("WWW directory: %s"), server_data.www_dir);
- log_printf(LOG_INFO, _("URL: http://localhost:%d"), port);
+ log_info(_("Web server started on port: %d"), port);
+ log_info(_("WWW directory: %s"), server_data.www_dir);
+ log_info(_("URL: http://localhost:%d"), port);
+
+ if (slog_file) {
+ if (slog_interval <= 0)
+ slog_interval = 300;
+ ret = slog_activate(slog_file,
+ server_data.sensors,
+ &mutex,
+ slog_interval);
+ if (!ret)
+ log_err(_("Failed to activate logging of sensors."));
+ }
while (!server_stop_requested) {
pthread_mutex_lock(&mutex);
sleep(5);
}
+ slog_close();
+
MHD_stop_daemon(d);
/* sanity cleanup for valgrind */