monitoring: add default page index.html
[src/app-framework-binder.git] / src / afb-config.c
index efa86f2..f08081f 100644 (file)
@@ -25,8 +25,6 @@
 #include <limits.h>
 #include <unistd.h>
 
-#include <uuid/uuid.h>
-
 #include "verbose.h"
 #include "afb-config.h"
 #include "afb-hook.h"
@@ -47,7 +45,6 @@
 #define DEFLT_CACHE_TIMEOUT 100000     // default Static File Chache
                                        // [Client Side Cache
                                        // 100000~=1day]
-#define DEFLT_AUTH_TOKEN    NULL       // expect for debug should == NULL
 #define CTX_NBCLIENTS       10         // allow a default of 10 authenticated
                                        // clients
 
@@ -56,7 +53,6 @@
 #define SET_BACKGROUND     2
 #define SET_FORGROUND      3
 
-#define SET_TCP_PORT       5
 #define SET_ROOT_DIR       6
 #define SET_ROOT_BASE      7
 #define SET_ROOT_API       8
 #define SET_TRACEEVT       'E'
 #define SET_EXEC           'e'
 #define DISPLAY_HELP       'h'
+#if defined(WITH_MONITORING_OTPION)
+#define SET_MONITORING     'M'
+#endif
+#define SET_TCP_PORT       'p'
 #define SET_QUIET          'q'
 #define SET_RNDTOKEN       'r'
 #define SET_TRACESVC       'S'
 #define SET_VERBOSE        'v'
 #define SET_WORK_DIR       'w'
 
-#define SHORTOPTS      "c:D:E:ehqrT:t:u:Vvw:"
+const char shortopts[] =
+       "c:D:E:ehp:qrT:t:u:Vvw:"
+#if defined(WITH_MONITORING_OTPION)
+       "M"
+#endif
+;
 
 // Command line structure hold cli --command + help text
 typedef struct {
@@ -141,7 +146,7 @@ static AFB_options cliOptions[] = {
        {NO_LDPATH,         0, "no-ldpaths",  "Discard default ldpaths loading"},
 
        {SET_AUTH_TOKEN,    1, "token",       "Initial Secret [default=no-session, --token= for session without authentication]"},
-       {SET_RNDTOKEN,      0, "random-token","Creates a random token"},
+       {SET_RNDTOKEN,      0, "random-token","Enforce a random token"},
 
        {DISPLAY_VERSION,   0, "version",     "Display version and copyright"},
        {DISPLAY_HELP,      0, "help",        "Display this help"},
@@ -165,6 +170,9 @@ static AFB_options cliOptions[] = {
        {SET_NO_HTTPD,      0, "no-httpd",    "Forbids HTTP service"},
        {SET_EXEC,          0, "exec",        "Execute the remaining arguments"},
 
+#if defined(WITH_MONITORING_OTPION)
+       {SET_MONITORING,    0, "monitoring",  "enable HTTP monitoring at <ROOT>/monitoring/"},
+#endif
        {0, 0, NULL, NULL}
 /* *INDENT-ON* */
 };
@@ -252,18 +260,6 @@ static void printHelp(FILE * file, const char *name)
 }
 
 
-/*----------------------------------------------------------
- |   adds a string to the list
- +--------------------------------------------------------- */
-static char *random_token()
-{
-       static char uuidstr[37];
-       uuid_t uuid;
-       uuid_generate_random(uuid);
-       uuid_unparse(uuid, uuidstr);
-       return uuidstr;
-}
-
 /*----------------------------------------------------------
  |   adds a string to the list
  +--------------------------------------------------------- */
@@ -418,7 +414,7 @@ static void parse_arguments(int argc, char **argv, struct afb_config *config)
        }
 
        // get all options from command line
-       while ((optc = getopt_long(argc, argv, SHORTOPTS, gnuOptions, NULL)) != EOF) {
+       while ((optc = getopt_long(argc, argv, shortopts, gnuOptions, NULL)) != EOF) {
                switch (optc) {
                case SET_VERBOSE:
                        verbosity++;
@@ -567,9 +563,15 @@ static void parse_arguments(int argc, char **argv, struct afb_config *config)
                        break;
 
                case SET_RNDTOKEN:
-                       config->token = random_token();
+                       config->random_token = 1;
                        break;
 
+#if defined(WITH_MONITORING_OTPION)
+               case SET_MONITORING:
+                       config->monitoring = 1;
+                       break;
+#endif
+
                case DISPLAY_VERSION:
                        noarg(optc);
                        printVersion(stdout);
@@ -586,8 +588,7 @@ static void parse_arguments(int argc, char **argv, struct afb_config *config)
        free(gnuOptions);
 }
 
-// load config from disk and merge with CLI option
-static void config_set_default(struct afb_config *config)
+static void fulfill_config(struct afb_config *config)
 {
        // default HTTP port
        if (config->httpdPort == 0)
@@ -598,8 +599,8 @@ static void config_set_default(struct afb_config *config)
                config->apiTimeout = DEFLT_API_TIMEOUT;
 
        // default AUTH_TOKEN
-       if (config->token == NULL)
-               config->token = DEFLT_AUTH_TOKEN;
+       if (config->random_token)
+               config->token = NULL;
 
        // cache timeout default one hour
        if (config->cacheTimeout == 0)
@@ -633,6 +634,11 @@ static void config_set_default(struct afb_config *config)
        if (config->ldpaths == NULL && config->weak_ldpaths == NULL && !config->no_ldpaths)
                list_add(&config->ldpaths, BINDING_INSTALL_DIR);
 
+#if defined(WITH_MONITORING_OTPION)
+       if (config->monitoring)
+               list_add(&config->aliases, strdup("/monitoring:"BINDING_INSTALL_DIR"/monitoring"));
+#endif
+
        // if no config dir create a default path from uploaddir
        if (config->console == NULL) {
                config->console = malloc(512);
@@ -712,7 +718,7 @@ struct afb_config *afb_config_parse_arguments(int argc, char **argv)
        result = calloc(1, sizeof *result);
 
        parse_arguments(argc, argv, result);
-       config_set_default(result);
+       fulfill_config(result);
        if (verbosity >= 3)
                afb_config_dump(result);
        return result;