Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose both total and enabled for gravity tables #2177

Draft
wants to merge 1 commit into
base: development
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading