Improve logging
This commit is contained in:
parent
adbac83534
commit
e8a84be36f
8 changed files with 73 additions and 38 deletions
|
@ -25,7 +25,6 @@ int main(int argc, char ** argv) {
|
|||
} else {
|
||||
disable = "";
|
||||
}
|
||||
write_log(LOG_DEBUG, "Disabling pi-hole for %s seconds", disable);
|
||||
break;
|
||||
case 'e':
|
||||
enable = true;
|
||||
|
@ -41,7 +40,6 @@ int main(int argc, char ** argv) {
|
|||
config_path[strlen(cwd)] = '/';
|
||||
strncpy(&(config_path[strlen(cwd) + 1]), optarg, strlen(optarg));
|
||||
config_path[full_path_len] = '\0';
|
||||
write_log(LOG_DEBUG, "Fixed config_path: %s", config_path);
|
||||
} else {
|
||||
// This is an absolute path, copy as-is
|
||||
config_path = malloc(strlen(optarg) + 1);
|
||||
|
@ -49,9 +47,11 @@ int main(int argc, char ** argv) {
|
|||
config_path[strlen(optarg)] = '\0';
|
||||
}
|
||||
break;
|
||||
case 'q':
|
||||
pihelper_set_log_level(PIHELPER_LOG_DISABLED);
|
||||
break;
|
||||
case 'v':
|
||||
// TODO: Add log level and set here
|
||||
//PIHELPER_DEBUG = true;
|
||||
pihelper_set_log_level(PIHELPER_LOG_DEBUG);
|
||||
break;
|
||||
case 'h':
|
||||
default:
|
||||
|
@ -69,6 +69,7 @@ int main(int argc, char ** argv) {
|
|||
FILE * config_file = fopen(config_path, "r+");
|
||||
if (config_file == NULL) {
|
||||
char * user_input = malloc(2);
|
||||
// Intentionally using printf here to ensure that this is always printed
|
||||
printf("No Pi-Helper configuration found. Would you like to create it now? [Y/n] ");
|
||||
fgets(user_input, 2, stdin);
|
||||
if (strstr(user_input, "\n") == user_input
|
||||
|
@ -79,6 +80,8 @@ int main(int argc, char ** argv) {
|
|||
} else {
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
write_log(PIHELPER_LOG_DEBUG, "Using config file at: %s", config_path);
|
||||
}
|
||||
|
||||
pihole_config * config;
|
||||
|
|
|
@ -54,7 +54,7 @@ static char * hash_string (char * raw_string) {
|
|||
|
||||
pihole_config * read_config(char * config_path) {
|
||||
if (access(config_path, F_OK)) {
|
||||
printf("ERROR: The specified config file doesn't exist\n");
|
||||
write_log(PIHELPER_LOG_ERROR, "The specified config file doesn't exist: %s", config_path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -62,8 +62,9 @@ pihole_config * read_config(char * config_path) {
|
|||
FILE * config_file = fopen(config_path, "r");
|
||||
char host[_POSIX_HOST_NAME_MAX + 7];
|
||||
fgets(host, _POSIX_HOST_NAME_MAX + 7, config_file);
|
||||
if (strstr(host, "host=") == NULL) {
|
||||
printf("Invalid config file\n");
|
||||
if (strstr(host, "host=") == NULL || strlen(host) < 7) {
|
||||
write_log(PIHELPER_LOG_DEBUG, "Config file contains invalid host: %s", host);
|
||||
write_log(PIHELPER_LOG_ERROR, "Invalid config file");
|
||||
exit(1);
|
||||
}
|
||||
config->host = calloc(1, strlen(host) - 7);
|
||||
|
@ -71,7 +72,8 @@ pihole_config * read_config(char * config_path) {
|
|||
char api_key[74];
|
||||
fgets(api_key, 74, config_file);
|
||||
if (strstr(api_key, "api-key=") == NULL) {
|
||||
printf("Invalid config file\n");
|
||||
write_log(PIHELPER_LOG_DEBUG, "Config file contains invalid api key: %s", api_key);
|
||||
write_log(PIHELPER_LOG_ERROR, "Invalid config file");
|
||||
exit(1);
|
||||
}
|
||||
config->api_key = calloc(1, strlen(api_key) - 8);
|
||||
|
@ -83,11 +85,12 @@ pihole_config * read_config(char * config_path) {
|
|||
pihole_config * configure_pihole(char * config_path) {
|
||||
if (access(config_path, F_OK) == 0) {
|
||||
// TODO: Check if file is accessible for read/write (not just if it exists)
|
||||
printf("WARNING: The config file already exists. Continuing will overwrite any existing configuration.\n");
|
||||
write_log(PIHELPER_LOG_WARN, "WARNING: The config file already exists. Continuing will overwrite any existing configuration.\n");
|
||||
}
|
||||
pihole_config * config = malloc(sizeof(pihole_config));
|
||||
config->host = calloc(1, _POSIX_HOST_NAME_MAX);
|
||||
config->host[_POSIX_HOST_NAME_MAX] = '\0';
|
||||
// Intentionally using printf to ensure this is always printed
|
||||
printf("Enter the hostname or ip address for your pi-hole: ");
|
||||
fgets(config->host, _POSIX_HOST_NAME_MAX, stdin);
|
||||
char * newline = strstr(config->host, "\n");
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef PIHELPER_CONFIG
|
||||
#define PIHELPER_CONFIG
|
||||
#include <openssl/sha.h>
|
||||
#include "log.h"
|
||||
|
||||
static char * DEFAULT_CONFIG_PATH = "/.config/pihelper.conf";
|
||||
|
||||
|
|
|
@ -5,8 +5,14 @@
|
|||
#include <string.h>
|
||||
#include "log.h"
|
||||
|
||||
int LOG_LEVEL = 2; // Default to info logs
|
||||
|
||||
void set_log_level(int level) {
|
||||
LOG_LEVEL = level;
|
||||
}
|
||||
|
||||
void write_log(int level, char * format, ...) {
|
||||
if (level == LOG_DEBUG) return;
|
||||
if (level > LOG_LEVEL) return;
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
int format_len = strlen(format);
|
||||
|
@ -14,7 +20,8 @@ void write_log(int level, char * format, ...) {
|
|||
memcpy(new_format, format, format_len);
|
||||
new_format[format_len] = '\n';
|
||||
new_format[format_len + 1] = '\0';
|
||||
vprintf(new_format, args);
|
||||
FILE *stream = level < PIHELPER_LOG_INFO ? stderr : stdout;
|
||||
vfprintf(stream, new_format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
#ifndef PIHELPER_LOG
|
||||
#define PIHELPER_LOG
|
||||
|
||||
static int LOG_ERROR = 0;
|
||||
static int LOG_WARN = 1;
|
||||
static int LOG_INFO = 2;
|
||||
static int LOG_DEBUG = 3;
|
||||
static int PIHELPER_LOG_DISABLED = -1;
|
||||
static int PIHELPER_LOG_ERROR = 0;
|
||||
static int PIHELPER_LOG_WARN = 1;
|
||||
static int PIHELPER_LOG_INFO = 2;
|
||||
static int PIHELPER_LOG_DEBUG = 3;
|
||||
|
||||
void set_log_level(int level);
|
||||
|
||||
void write_log(int level, char * format, ...);
|
||||
#endif
|
||||
|
|
|
@ -17,9 +17,11 @@ static char * HTTP_SCHEME = "http://";
|
|||
static char * HTTPS_SCHEME = "https://";
|
||||
|
||||
int get_status(pihole_config * config) {
|
||||
write_log(PIHELPER_LOG_DEBUG, "Getting Pi-hole status…");
|
||||
char * formatted_host = prepend_scheme(config->host);
|
||||
char * response = get(formatted_host);
|
||||
if (response == NULL) {
|
||||
write_log(PIHELPER_LOG_ERROR, "Failed to retrieve status for Pi-hole at %s\n", config->host);
|
||||
return 1;
|
||||
} else {
|
||||
parse_status(response);
|
||||
|
@ -29,6 +31,7 @@ int get_status(pihole_config * config) {
|
|||
}
|
||||
|
||||
int enable_pihole(pihole_config * config) {
|
||||
write_log(PIHELPER_LOG_DEBUG, "Enabling Pi-hole…");
|
||||
char * formatted_host = prepend_scheme(config->host);
|
||||
append_query_parameter(&formatted_host, AUTH_QUERY, config->api_key);
|
||||
append_query_parameter(&formatted_host, ENABLE_QUERY, NULL);
|
||||
|
@ -43,6 +46,11 @@ int enable_pihole(pihole_config * config) {
|
|||
}
|
||||
|
||||
int disable_pihole(pihole_config * config, char * duration) {
|
||||
if (*duration == '\0') {
|
||||
write_log(PIHELPER_LOG_DEBUG, "Disabling Pi-hole permanently…");
|
||||
} else {
|
||||
write_log(PIHELPER_LOG_DEBUG, "Disabling Pi-hole for %s seconds…", duration);
|
||||
}
|
||||
char * formatted_host = prepend_scheme(config->host);
|
||||
append_query_parameter(&formatted_host, AUTH_QUERY, config->api_key);
|
||||
append_query_parameter(&formatted_host, DISABLE_QUERY, duration);
|
||||
|
@ -56,8 +64,7 @@ int disable_pihole(pihole_config * config, char * duration) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
/**
|
||||
* Used to handle curl data callbacks
|
||||
*/
|
||||
static size_t receive_data(char *ptr, size_t size, size_t nmemb, void *userdata) {
|
||||
|
@ -71,6 +78,9 @@ static size_t receive_data(char *ptr, size_t size, size_t nmemb, void *userdata)
|
|||
return realsize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to make a GET request to a given endpoint
|
||||
*/
|
||||
static char * get(char endpoint[]) {
|
||||
http_response response;
|
||||
response.body = malloc(1);
|
||||
|
@ -119,7 +129,7 @@ static void parse_status(char * raw_json) {
|
|||
jobj = json_tokener_parse_ex(tok, raw_json, stringlen);
|
||||
} while ((jerr = json_tokener_get_error(tok)) == json_tokener_continue);
|
||||
if (jerr != json_tokener_success) {
|
||||
write_log(LOG_ERROR, "Failed to parse JSON: %s", json_tokener_error_desc(jerr));
|
||||
write_log(PIHELPER_LOG_ERROR, "Failed to parse JSON: %s", json_tokener_error_desc(jerr));
|
||||
return;
|
||||
}
|
||||
json_object *status = json_object_new_object();
|
||||
|
@ -128,7 +138,7 @@ static void parse_status(char * raw_json) {
|
|||
&& (status_string = json_object_get_string(status)) != NULL) {
|
||||
printf("Pi-hole status: %s\n", status_string);
|
||||
} else {
|
||||
write_log(LOG_DEBUG, "Unable to parse response: %s", raw_json);
|
||||
write_log(PIHELPER_LOG_DEBUG, "Unable to parse response: %s", raw_json);
|
||||
}
|
||||
json_tokener_free(tok);
|
||||
json_object_put(jobj);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/*
|
||||
* =====================================================================================
|
||||
*
|
||||
* Filename: pihelper.c
|
||||
*
|
||||
* Description: The main PiHelper class
|
||||
*
|
||||
* Version: 1.0
|
||||
* Created: 12/20/2019 18:24:51
|
||||
* Revision: none
|
||||
* Compiler: gcc
|
||||
*
|
||||
* Author: William Brawner (Billy), billy@wbrawner.com
|
||||
*
|
||||
* =====================================================================================
|
||||
*/
|
||||
#include "pihelper.h"
|
||||
|
||||
int pihelper_get_status(pihole_config * config) {
|
||||
return get_status(config);
|
||||
}
|
||||
|
||||
int pihelper_enable_pihole(pihole_config * config) {
|
||||
return enable_pihole(config);
|
||||
}
|
||||
|
||||
int pihelper_disable_pihole(pihole_config * config, char * duration) {
|
||||
return disable_pihole(config, duration);
|
||||
}
|
||||
|
||||
void pihelper_set_log_level(int level) {
|
||||
set_log_level(level);
|
||||
}
|
||||
|
|
|
@ -3,8 +3,16 @@
|
|||
#include "config.h"
|
||||
#include "log.h"
|
||||
#include "network.h"
|
||||
const int PIHELPER_OK = 0;
|
||||
const int PIHELPER_HELP = 1;
|
||||
const int PIHELPER_INVALID_COMMANDS = 2;
|
||||
static int PIHELPER_OK = 0;
|
||||
static int PIHELPER_HELP = 1;
|
||||
static int PIHELPER_INVALID_COMMANDS = 2;
|
||||
|
||||
void pihelper_set_log_level(int level);
|
||||
|
||||
int pihelper_get_status(pihole_config * config);
|
||||
|
||||
int pihelper_enable_pihole(pihole_config * config);
|
||||
|
||||
int pihelper_disable_pihole(pihole_config * config, char * duration);
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue