MT#61822 support listing contents of FS cache

Change-Id: I31f9fe2bd0b95e832e285fa96ea969c703a816be
pull/1897/head
Richard Fuchs 1 year ago
parent a2ffa18d6c
commit 33be3468a7

@ -111,6 +111,7 @@ static void cli_incoming_tag_detdtmf(str *instr, struct cli_writer *cw, const cl
static void cli_incoming_media_list_files(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_media_list_files(str *instr, struct cli_writer *cw, const cli_handler_t *);
static void cli_incoming_media_list_dbs(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_media_list_dbs(str *instr, struct cli_writer *cw, const cli_handler_t *);
static void cli_incoming_media_list_caches(str *instr, struct cli_writer *cw, const cli_handler_t *);
static void cli_incoming_media_reload_file(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_media_reload_file(str *instr, struct cli_writer *cw, const cli_handler_t *);
static void cli_incoming_media_reload_files(str *instr, struct cli_writer *cw, const cli_handler_t *); static void cli_incoming_media_reload_files(str *instr, struct cli_writer *cw, const cli_handler_t *);
@ -197,6 +198,7 @@ static const cli_handler_t cli_params_handlers[] = {
static const cli_handler_t cli_media_list_handlers[] = { static const cli_handler_t cli_media_list_handlers[] = {
{ "files", cli_incoming_media_list_files, NULL }, { "files", cli_incoming_media_list_files, NULL },
{ "dbs", cli_incoming_media_list_dbs, NULL }, { "dbs", cli_incoming_media_list_dbs, NULL },
{ "caches", cli_incoming_media_list_caches, NULL },
{ NULL, }, { NULL, },
}; };
static const cli_handler_t cli_media_reload_handlers[] = { static const cli_handler_t cli_media_reload_handlers[] = {
@ -1900,4 +1902,12 @@ static void cli_incoming_media_evict_dbs(str *instr, struct cli_writer *cw, cons
unsigned int num = media_player_evict_db_medias(); unsigned int num = media_player_evict_db_medias();
cw->cw_printf(cw, "%u DB media entries evicted\n", num); cw->cw_printf(cw, "%u DB media entries evicted\n", num);
} }
static void cli_incoming_media_list_caches(str *instr, struct cli_writer *cw, const cli_handler_t *handler) {
GQueue list = media_player_list_caches();
while (list.head) {
void *id = g_queue_pop_head(&list);
cw->cw_printf(cw, "%llu\n", (unsigned long long) GPOINTER_TO_UINT(id));
}
}
#endif #endif

@ -2374,3 +2374,43 @@ GQueue media_player_list_dbs(void) {
#endif #endif
return ret; return ret;
} }
G_DEFINE_AUTOPTR_CLEANUP_FUNC(DIR, closedir)
typedef union {
GQueue *q;
} iterate_db_cache_arg __attribute__((__transparent_union__));
static void media_player_iterate_db_cache(void (*callback)(unsigned long long, iterate_db_cache_arg),
iterate_db_cache_arg arg)
{
#ifdef WITH_TRANSCODING
if (!rtpe_config.db_media_cache)
return;
g_autoptr(DIR) dir = opendir(rtpe_config.db_media_cache);
if (!dir) {
ilog(LOG_ERR, "Failed to open media cache directory: %s", strerror(errno));
return;
}
struct dirent *de;
while ((de = readdir(dir))) {
char *errp;
unsigned long long id = strtoull(de->d_name, &errp, 10);
if (!id || strcmp(errp, ".blob"))
continue;
callback(id, arg);
}
#endif
}
static void media_player_add_to_queue(unsigned long long id, GQueue *q) {
g_queue_push_tail(q, GUINT_TO_POINTER(id));
}
GQueue media_player_list_caches(void) {
GQueue ret = G_QUEUE_INIT;
media_player_iterate_db_cache(media_player_add_to_queue, &ret);
return ret;
}

@ -163,6 +163,7 @@ bool media_player_evict_db_media(unsigned long long);
unsigned int media_player_evict_db_medias(void); unsigned int media_player_evict_db_medias(void);
str_q media_player_list_files(void); str_q media_player_list_files(void);
GQueue media_player_list_dbs(void); GQueue media_player_list_dbs(void);
GQueue media_player_list_caches(void);
struct send_timer *send_timer_new(struct packet_stream *); struct send_timer *send_timer_new(struct packet_stream *);
void send_timer_push(struct send_timer *, struct codec_packet *); void send_timer_push(struct send_timer *, struct codec_packet *);

@ -167,6 +167,7 @@ sub showusage {
print " list <option>\n"; print " list <option>\n";
print " files : list media files currently in memory\n"; print " files : list media files currently in memory\n";
print " dbs : list database media entries currently in memory\n"; print " dbs : list database media entries currently in memory\n";
print " caches : list database media entries currently in file cache\n";
print " reload <option>\n"; print " reload <option>\n";
print " file <file name> : reload one media file into memory\n"; print " file <file name> : reload one media file into memory\n";
print " files : reload all media files currently in memory\n"; print " files : reload all media files currently in memory\n";

Loading…
Cancel
Save