add: cache (WIP)
This commit is contained in:
parent
f167f9caec
commit
6d37bd9734
26 changed files with 365 additions and 61 deletions
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <cache.h>
|
||||
#include <cJSON.h>
|
||||
#include <logger.h>
|
||||
#include <database.h>
|
||||
|
@ -144,6 +145,9 @@ controller_save(controller_t *controller)
|
|||
controller->id = sqlite3_last_insert_rowid(global_database);
|
||||
}
|
||||
}
|
||||
|
||||
cache_invalidate_controller(controller->id);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -183,9 +187,15 @@ controller_free_list(controller_t **controllers)
|
|||
free(controllers);
|
||||
}
|
||||
|
||||
cJSON*
|
||||
char*
|
||||
controller_to_json(controller_t *controller)
|
||||
{
|
||||
char *cached = cache_get_json_controller(controller->id);
|
||||
if(cached)
|
||||
{
|
||||
return cached;
|
||||
}
|
||||
|
||||
char uuid_str[UUID_STR_LEN];
|
||||
uuid_unparse(controller->uid, uuid_str);
|
||||
|
||||
|
@ -245,12 +255,17 @@ controller_to_json(controller_t *controller)
|
|||
cJSON *json_relays = cJSON_CreateArray();
|
||||
for(int i = 0; relays[i] != NULL; ++i)
|
||||
{
|
||||
cJSON_AddItemToArray(json_relays, relay_to_json(relays[i]));
|
||||
cJSON *json_relay = cJSON_CreateRaw(relay_to_json(relays[i]));
|
||||
cJSON_AddItemToArray(json_relays, json_relay);
|
||||
}
|
||||
cJSON_AddItemToObject(json, "relays", json_relays);
|
||||
relay_free_list(relays);
|
||||
|
||||
return json;
|
||||
char *result = cJSON_Print(json);
|
||||
cJSON_Delete(json);
|
||||
|
||||
cache_put_json_controller(controller->id, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
controller_t*
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include <cache.h>
|
||||
#include <sqlite3.h>
|
||||
#include <logger.h>
|
||||
#include <models/junction_tag.h>
|
||||
|
@ -38,12 +39,21 @@ junction_tag_insert(int tag_id, int relay_id, int schedule_id)
|
|||
if (rc != SQLITE_DONE)
|
||||
{
|
||||
printf("ERROR inserting data: %s\n", sqlite3_errmsg(global_database));
|
||||
return false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
return true;
|
||||
if(relay_id)
|
||||
{
|
||||
cache_invalidate_relay(relay_id);
|
||||
}
|
||||
if(schedule_id)
|
||||
{
|
||||
cache_invalidate_schedule(schedule_id);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int*
|
||||
|
@ -148,19 +158,14 @@ junction_tag_remove(int tag_id, int relay_id, int schedule_id)
|
|||
rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
return rc == SQLITE_DONE;
|
||||
}
|
||||
|
||||
int
|
||||
junction_tag_remove_for_tag(int tag_id)
|
||||
{
|
||||
sqlite3_stmt *stmt;
|
||||
int rc;
|
||||
|
||||
sqlite3_prepare_v2(global_database, "DELETE FROM junction_tag WHERE tag_id=?1;", -1, &stmt, NULL);
|
||||
sqlite3_bind_int(stmt, 1, tag_id);
|
||||
rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
if(relay_id)
|
||||
{
|
||||
cache_invalidate_relay(relay_id);
|
||||
}
|
||||
if(schedule_id)
|
||||
{
|
||||
cache_invalidate_schedule(schedule_id);
|
||||
}
|
||||
|
||||
return rc == SQLITE_DONE;
|
||||
}
|
||||
|
@ -176,6 +181,8 @@ junction_tag_remove_for_relay(int relay_id)
|
|||
rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
cache_invalidate_relay(relay_id);
|
||||
|
||||
return rc == SQLITE_DONE;
|
||||
}
|
||||
|
||||
|
@ -190,5 +197,7 @@ junction_tag_remove_for_schedule(int schedule_id)
|
|||
rc = sqlite3_step(stmt);
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
cache_invalidate_schedule(schedule_id);
|
||||
|
||||
return rc == SQLITE_DONE;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <cache.h>
|
||||
#include <cJSON.h>
|
||||
#include <logger.h>
|
||||
#include <database.h>
|
||||
|
@ -161,7 +162,9 @@ relay_save(relay_t *relay)
|
|||
junction_relay_schedule_insert(i, relay->id, relay->schedules[i]->id);
|
||||
}
|
||||
|
||||
cache_invalidate_relay(relay->id);
|
||||
status_reload_entry(relay->id);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -193,9 +196,15 @@ relay_free_list(relay_t **relays)
|
|||
free(relays);
|
||||
}
|
||||
|
||||
cJSON*
|
||||
char*
|
||||
relay_to_json(relay_t *relay)
|
||||
{
|
||||
char *cached = cache_get_json_relay(relay->id);
|
||||
if(cached)
|
||||
{
|
||||
return cached;
|
||||
}
|
||||
|
||||
controller_t *controller = controller_get_by_id(relay->controller_id);
|
||||
if(!controller)
|
||||
{
|
||||
|
@ -255,12 +264,14 @@ relay_to_json(relay_t *relay)
|
|||
}
|
||||
cJSON_AddItemToObject(json, "is_on", json_is_on);
|
||||
|
||||
cJSON_AddItemToObject(json, "active_schedule", schedule_to_json(relay->active_schedule));
|
||||
cJSON *json_active_schedule = cJSON_CreateRaw(schedule_to_json(relay->active_schedule));
|
||||
cJSON_AddItemToObject(json, "active_schedule", json_active_schedule);
|
||||
|
||||
cJSON *json_schedules = cJSON_CreateArray();
|
||||
for(int i = 0; i < 7; ++i)
|
||||
{
|
||||
cJSON_AddItemToArray(json_schedules, schedule_to_json(relay->schedules[i]));
|
||||
cJSON *json_schedule = cJSON_CreateRaw(schedule_to_json(relay->schedules[i]));
|
||||
cJSON_AddItemToArray(json_schedules, json_schedule);
|
||||
}
|
||||
cJSON_AddItemToObject(json, "schedules", json_schedules);
|
||||
|
||||
|
@ -290,20 +301,27 @@ relay_to_json(relay_t *relay)
|
|||
}
|
||||
cJSON_AddItemToObject(json, "tags", json_tags);
|
||||
|
||||
return json;
|
||||
char *result = cJSON_Print(json);
|
||||
cJSON_Delete(json);
|
||||
|
||||
cache_put_json_relay(relay->id, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
cJSON*
|
||||
char*
|
||||
relay_list_to_json(relay_t **relays)
|
||||
{
|
||||
cJSON *json = cJSON_CreateArray();
|
||||
|
||||
for(int i = 0; relays[i] != NULL; ++i)
|
||||
{
|
||||
cJSON *json_relay = relay_to_json(relays[i]);
|
||||
cJSON *json_relay = cJSON_CreateRaw(relay_to_json(relays[i]));
|
||||
cJSON_AddItemToArray(json, json_relay);
|
||||
}
|
||||
return json;
|
||||
|
||||
char *result = cJSON_Print(json);
|
||||
cJSON_Delete(json);
|
||||
return result;
|
||||
}
|
||||
|
||||
relay_t*
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <cache.h>
|
||||
#include <cJSON.h>
|
||||
#include <logger.h>
|
||||
#include <database.h>
|
||||
|
@ -139,6 +140,9 @@ schedule_save(schedule_t *schedule)
|
|||
schedule->id = sqlite3_last_insert_rowid(global_database);
|
||||
}
|
||||
}
|
||||
|
||||
cache_invalidate_schedule(schedule->id);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -215,9 +219,15 @@ schedule_periods_to_blob(schedule_t *schedule)
|
|||
return blob;
|
||||
}
|
||||
|
||||
cJSON*
|
||||
char*
|
||||
schedule_to_json(schedule_t *schedule)
|
||||
{
|
||||
char *cached = cache_get_json_schedule(schedule->id);
|
||||
if(cached)
|
||||
{
|
||||
return cached;
|
||||
}
|
||||
|
||||
char uuid_str[UUID_STR_LEN];
|
||||
schedule_uid_unparse(schedule->uid, uuid_str);
|
||||
|
||||
|
@ -309,7 +319,11 @@ schedule_to_json(schedule_t *schedule)
|
|||
}
|
||||
cJSON_AddItemToObject(json, "tags", json_tags);
|
||||
|
||||
return json;
|
||||
char *result = cJSON_Print(json);
|
||||
cJSON_Delete(json);
|
||||
|
||||
cache_put_json_schedule(schedule->id, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
schedule_t*
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include <cache.h>
|
||||
#include <logger.h>
|
||||
#include <database.h>
|
||||
#include <models/tag.h>
|
||||
|
@ -163,6 +164,8 @@ tag_get_id(const char *tag)
|
|||
int
|
||||
tag_remove(int id)
|
||||
{
|
||||
cache_invalidate_tagged(id);
|
||||
|
||||
sqlite3_stmt *stmt;
|
||||
int rc;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue