Skip to content

Commit

Permalink
Expose both total and enabled for gravity tables
Browse files Browse the repository at this point in the history
Signed-off-by: DL6ER <[email protected]>
  • Loading branch information
DL6ER committed Feb 3, 2025
1 parent bbf4dae commit 43160b0
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 45 deletions.
52 changes: 40 additions & 12 deletions src/api/docs/content/specs/info.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -710,24 +710,52 @@ components:
type: object
properties:
allowed:
type: integer
description: Number of allowed domains
example: 10
type: object
properties:
total:
type: integer
description: Number of allowed domains (total)
example: 67906
enabled:
type: integer
description: Number of allowed domains (enabled)
example: 4
denied:
type: integer
description: Number of denied domains
example: 3
type: object
properties:
total:
type: integer
description: Number of denied domains (total)
example: 4
enabled:
type: integer
description: Number of denied domains (enabled)
example: 2
regex:
type: object
properties:
allowed:
type: integer
description: Number of allowed regex filters
example: 4
type: object
properties:
total:
type: integer
description: Number of allowed regex filters (total)
example: 67906
enabled:
type: integer
description: Number of allowed regex filters (enabled)
example: 4
denied:
type: integer
description: Number of denied regex filters
example: 2
type: object
properties:
total:
type: integer
description: Number of denied regex filters (total)
example: 10
enabled:
type: integer
description: Number of denied regex filters (enabled)
example: 2
privacy_level:
type: integer
description: Currently used privacy level
Expand Down
32 changes: 24 additions & 8 deletions src/api/info.c
Original file line number Diff line number Diff line change
Expand Up @@ -544,10 +544,14 @@ static int get_ftl_obj(struct ftl_conn *api, cJSON *ftl)
const int db_groups = counters->database.groups;
const int db_lists = counters->database.lists;
const int db_clients = counters->database.clients;
const int db_allowed_exact = counters->database.domains.allowed.exact;
const int db_denied_exact = counters->database.domains.denied.exact;
const int db_allowed_regex = counters->database.domains.allowed.regex;
const int db_denied_regex = counters->database.domains.denied.regex;
const int db_allowed_exact_total = counters->database.domains.allowed.exact.total;
const int db_allowed_exact_enabled = counters->database.domains.allowed.exact.enabled;
const int db_denied_exact_total = counters->database.domains.denied.exact.total;
const int db_denied_exact_enabled = counters->database.domains.denied.exact.enabled;
const int db_allowed_regex_total = counters->database.domains.allowed.regex.total;
const int db_allowed_regex_enabled = counters->database.domains.allowed.regex.enabled;
const int db_denied_regex_total = counters->database.domains.denied.regex.total;
const int db_denied_regex_enabled = counters->database.domains.denied.regex.enabled;
const int clients_total = counters->clients;
const int privacylevel = config.misc.privacylevel.v.privacy_level;
const double qps = get_qps();
Expand All @@ -571,14 +575,26 @@ static int get_ftl_obj(struct ftl_conn *api, cJSON *ftl)
JSON_ADD_NUMBER_TO_OBJECT(database, "lists", db_lists);
JSON_ADD_NUMBER_TO_OBJECT(database, "clients", db_clients);

cJSON *domains_allowed = JSON_NEW_OBJECT();
JSON_ADD_NUMBER_TO_OBJECT(domains_allowed, "total", db_allowed_exact_total);
JSON_ADD_NUMBER_TO_OBJECT(domains_allowed, "enabled", db_allowed_exact_enabled);
cJSON *domains_denied = JSON_NEW_OBJECT();
JSON_ADD_NUMBER_TO_OBJECT(domains_denied, "total", db_denied_exact_total);
JSON_ADD_NUMBER_TO_OBJECT(domains_denied, "enabled", db_denied_exact_enabled);
cJSON *domains = JSON_NEW_OBJECT();
JSON_ADD_NUMBER_TO_OBJECT(domains, "allowed", db_allowed_exact);
JSON_ADD_NUMBER_TO_OBJECT(domains, "denied", db_denied_exact);
JSON_ADD_ITEM_TO_OBJECT(domains, "allowed", domains_allowed);
JSON_ADD_ITEM_TO_OBJECT(domains, "denied", domains_denied);
JSON_ADD_ITEM_TO_OBJECT(database, "domains", domains);

cJSON *regex_allowed = JSON_NEW_OBJECT();
JSON_ADD_NUMBER_TO_OBJECT(regex_allowed, "total", db_allowed_regex_total);
JSON_ADD_NUMBER_TO_OBJECT(regex_allowed, "enabled", db_allowed_regex_enabled);
cJSON *regex_denied = JSON_NEW_OBJECT();
JSON_ADD_NUMBER_TO_OBJECT(regex_denied, "total", db_denied_regex_total);
JSON_ADD_NUMBER_TO_OBJECT(regex_denied, "enabled", db_denied_regex_enabled);
cJSON *regex = JSON_NEW_OBJECT();
JSON_ADD_NUMBER_TO_OBJECT(regex, "allowed", db_allowed_regex);
JSON_ADD_NUMBER_TO_OBJECT(regex, "denied", db_denied_regex);
JSON_ADD_ITEM_TO_OBJECT(regex, "allowed", regex_allowed);
JSON_ADD_ITEM_TO_OBJECT(regex, "denied", regex_denied);
JSON_ADD_ITEM_TO_OBJECT(database, "regex", regex);
JSON_ADD_ITEM_TO_OBJECT(ftl, "database", database);

Expand Down
22 changes: 13 additions & 9 deletions src/database/gravity-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -1000,9 +1000,9 @@ bool gravityDB_getTable(const unsigned char list)
// when domains are included in more than one group
if(list == GRAVITY_TABLE)
querystr = "SELECT DISTINCT domain FROM vw_gravity";
else if(list == EXACT_BLACKLIST_TABLE)
else if(list == EXACT_DENY_TABLE)
querystr = "SELECT domain, id FROM vw_blacklist GROUP BY id";
else if(list == EXACT_WHITELIST_TABLE)
else if(list == EXACT_ALLOW_TABLE)
querystr = "SELECT domain, id FROM vw_whitelist GROUP BY id";
else if(list == REGEX_DENY_TABLE)
querystr = "SELECT domain, id FROM vw_regex_blacklist GROUP BY id";
Expand Down Expand Up @@ -1073,7 +1073,7 @@ void gravityDB_finalizeTable(void)

// Get number of domains in a specified table of the gravity database We return
// the constant DB_FAILED and log to FTL.log if we encounter any error
int gravityDB_count(const enum gravity_tables list)
int gravityDB_count(const enum gravity_tables list, const bool total)
{
if(!gravityDB_opened && !gravityDB_open())
{
Expand All @@ -1091,17 +1091,21 @@ int gravityDB_count(const enum gravity_tables list)
// very low-end devices such as the Raspierry Pi Zero
querystr = "SELECT value FROM info WHERE property = 'gravity_count';";
break;
case EXACT_BLACKLIST_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_blacklist";
case EXACT_DENY_TABLE:
querystr = total ? "SELECT COUNT(*) FROM domainlist WHERE type = 1"
: "SELECT COUNT(*) FROM domainlist WHERE type = 1 AND enabled = 1";
break;
case EXACT_WHITELIST_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_whitelist";
case EXACT_ALLOW_TABLE:
querystr = total ? "SELECT COUNT(*) FROM domainlist WHERE type = 0"
: "SELECT COUNT(*) FROM domainlist WHERE type = 0 AND enabled = 1";
break;
case REGEX_DENY_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_regex_blacklist";
querystr = total ? "SELECT COUNT(*) FROM domainlist WHERE type = 3"
: "SELECT COUNT(*) FROM domainlist WHERE type = 3 AND enabled = 1";
break;
case REGEX_ALLOW_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_regex_whitelist";
querystr = total ? "SELECT COUNT(*) FROM domainlist WHERE type = 2"
: "SELECT COUNT(*) FROM domainlist WHERE type = 2 AND enabled = 1";
break;
case CLIENTS_TABLE:
querystr = "SELECT COUNT(1) FROM client";
Expand Down
2 changes: 1 addition & 1 deletion src/database/gravity-db.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ bool gravityDB_getTable(unsigned char list);
const char* gravityDB_getDomain(int *rowid);
char* get_client_names_from_ids(const char *group_ids) __attribute__ ((malloc));
void gravityDB_finalizeTable(void);
int gravityDB_count(const enum gravity_tables list);
int gravityDB_count(const enum gravity_tables list, const bool total);
void check_inaccessible_adlists(void);
void check_restored_gravity(void);
bool gravity_updated(void);
Expand Down
24 changes: 16 additions & 8 deletions src/datastructure.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,14 +663,22 @@ void FTL_reload_all_domainlists(void)
gravityDB_reopen();

// Get size of gravity, number of domains, groups, clients, and lists
counters->database.gravity = gravityDB_count(GRAVITY_TABLE);
counters->database.groups = gravityDB_count(GROUPS_TABLE);
counters->database.clients = gravityDB_count(CLIENTS_TABLE);
counters->database.lists = gravityDB_count(ADLISTS_TABLE);
counters->database.domains.allowed.exact = gravityDB_count(EXACT_WHITELIST_TABLE);
counters->database.domains.denied.exact = gravityDB_count(EXACT_BLACKLIST_TABLE);
counters->database.domains.allowed.regex = gravityDB_count(REGEX_ALLOW_TABLE);
counters->database.domains.denied.regex = gravityDB_count(REGEX_DENY_TABLE);
counters->database.gravity = gravityDB_count(GRAVITY_TABLE, false);
counters->database.groups = gravityDB_count(GROUPS_TABLE, false);
counters->database.clients = gravityDB_count(CLIENTS_TABLE, false);
counters->database.lists = gravityDB_count(ADLISTS_TABLE, false);

counters->database.domains.allowed.exact.total = gravityDB_count(EXACT_ALLOW_TABLE, true);
counters->database.domains.allowed.exact.enabled = gravityDB_count(EXACT_ALLOW_TABLE, false);

counters->database.domains.denied.exact.enabled = gravityDB_count(EXACT_DENY_TABLE, false);
counters->database.domains.denied.exact.total = gravityDB_count(EXACT_DENY_TABLE, true);

counters->database.domains.allowed.regex.enabled = gravityDB_count(REGEX_ALLOW_TABLE, false);
counters->database.domains.allowed.regex.total = gravityDB_count(REGEX_ALLOW_TABLE, true);

counters->database.domains.denied.regex.enabled = gravityDB_count(REGEX_DENY_TABLE, false);
counters->database.domains.denied.regex.total = gravityDB_count(REGEX_DENY_TABLE, true);

// Read and compile possible regex filters
// only after having called gravityDB_reopen()
Expand Down
4 changes: 2 additions & 2 deletions src/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,8 @@ enum gravity_list_type {

enum gravity_tables {
GRAVITY_TABLE,
EXACT_BLACKLIST_TABLE,
EXACT_WHITELIST_TABLE,
EXACT_DENY_TABLE,
EXACT_ALLOW_TABLE,
REGEX_DENY_TABLE,
REGEX_ALLOW_TABLE,
CLIENTS_TABLE,
Expand Down
2 changes: 1 addition & 1 deletion src/regex.c
Original file line number Diff line number Diff line change
Expand Up @@ -720,7 +720,7 @@ static void read_regex_table(const enum regex_type regexid)

// Get number of lines in the regex table
num_regex[regexid] = 0;
int count = gravityDB_count(tableID);
const int count = gravityDB_count(tableID, false);

if(count == 0)
{
Expand Down
20 changes: 16 additions & 4 deletions src/shmem.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,24 @@ typedef struct {
int lists;
struct {
struct {
int exact;
int regex;
struct {
int total;
int enabled;
} exact;
struct {
int total;
int enabled;
} regex;
} allowed;
struct {
int exact;
int regex;
struct {
int total;
int enabled;
} exact;
struct {
int total;
int enabled;
} regex;
} denied;
} domains;
} database;
Expand Down

0 comments on commit 43160b0

Please sign in to comment.