* Increase logging and include various stats to XMLTV grab
This commit is contained in:
parent
f337896d21
commit
a5c67791fc
3 changed files with 47 additions and 10 deletions
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -20,6 +20,8 @@ hts-tvheadend (2.6) hts; urgency=low
|
|||
* Add support for DiSEqC 1.1 / 2.1, configured on per-adapter basis.
|
||||
Ticket #99
|
||||
|
||||
* Increase logging and include various stats to XMLTV grab
|
||||
|
||||
hts-tvheadend (2.5) hts; urgency=low
|
||||
|
||||
* If a previosly detected DVB adapter was not present during startup,
|
||||
|
|
|
@ -521,7 +521,7 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
}
|
||||
|
||||
if((e = epg_event_create(ch, start_time, start_time + duration,
|
||||
event_id)) == NULL) {
|
||||
event_id, NULL)) == NULL) {
|
||||
len -= dllen;
|
||||
ptr += dllen;
|
||||
continue;
|
||||
|
|
53
src/xmltv.c
53
src/xmltv.c
|
@ -58,6 +58,17 @@ typedef struct xmltv_grabber {
|
|||
|
||||
} xmltv_grabber_t;
|
||||
|
||||
|
||||
typedef struct parse_stats {
|
||||
int ps_channels;
|
||||
int ps_programmes;
|
||||
int ps_events_created;
|
||||
|
||||
} parse_stats_t;
|
||||
|
||||
|
||||
|
||||
|
||||
static xmltv_grabber_t *xg_current;
|
||||
|
||||
|
||||
|
@ -330,17 +341,21 @@ xmltv_parse_channel(htsmsg_t *body)
|
|||
*/
|
||||
static void
|
||||
xmltv_parse_programme_tags(xmltv_channel_t *xc, htsmsg_t *tags,
|
||||
time_t start, time_t stop)
|
||||
time_t start, time_t stop, parse_stats_t *ps)
|
||||
{
|
||||
event_t *e;
|
||||
channel_t *ch;
|
||||
const char *title = xmltv_get_cdata_by_tag(tags, "title");
|
||||
const char *desc = xmltv_get_cdata_by_tag(tags, "desc");
|
||||
int created;
|
||||
|
||||
LIST_FOREACH(ch, &xc->xc_channels, ch_xc_link) {
|
||||
if((e = epg_event_create(ch, start, stop, -1)) == NULL)
|
||||
if((e = epg_event_create(ch, start, stop, -1, &created)) == NULL)
|
||||
continue;
|
||||
|
||||
if(created)
|
||||
ps->ps_events_created++;
|
||||
|
||||
if(title != NULL) epg_event_set_title(e, title);
|
||||
if(desc != NULL) epg_event_set_desc(e, desc);
|
||||
}
|
||||
|
@ -351,7 +366,7 @@ xmltv_parse_programme_tags(xmltv_channel_t *xc, htsmsg_t *tags,
|
|||
* Parse a <programme> tag from xmltv
|
||||
*/
|
||||
static void
|
||||
xmltv_parse_programme(htsmsg_t *body)
|
||||
xmltv_parse_programme(htsmsg_t *body, parse_stats_t *ps)
|
||||
{
|
||||
htsmsg_t *attribs, *tags;
|
||||
const char *s, *chid;
|
||||
|
@ -382,7 +397,7 @@ xmltv_parse_programme(htsmsg_t *body)
|
|||
return;
|
||||
|
||||
if((xc = xmltv_channel_find(chid, 0)) != NULL) {
|
||||
xmltv_parse_programme_tags(xc, tags, start, stop);
|
||||
xmltv_parse_programme_tags(xc, tags, start, stop, ps);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -390,7 +405,7 @@ xmltv_parse_programme(htsmsg_t *body)
|
|||
*
|
||||
*/
|
||||
static void
|
||||
xmltv_parse_tv(htsmsg_t *body)
|
||||
xmltv_parse_tv(htsmsg_t *body, parse_stats_t *ps)
|
||||
{
|
||||
htsmsg_t *tags;
|
||||
htsmsg_field_t *f;
|
||||
|
@ -401,8 +416,10 @@ xmltv_parse_tv(htsmsg_t *body)
|
|||
HTSMSG_FOREACH(f, tags) {
|
||||
if(!strcmp(f->hmf_name, "channel")) {
|
||||
xmltv_parse_channel(htsmsg_get_map_by_field(f));
|
||||
ps->ps_channels++;
|
||||
} else if(!strcmp(f->hmf_name, "programme")) {
|
||||
xmltv_parse_programme(htsmsg_get_map_by_field(f));
|
||||
xmltv_parse_programme(htsmsg_get_map_by_field(f), ps);
|
||||
ps->ps_programmes++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -412,7 +429,7 @@ xmltv_parse_tv(htsmsg_t *body)
|
|||
*
|
||||
*/
|
||||
static void
|
||||
xmltv_parse(htsmsg_t *body)
|
||||
xmltv_parse(htsmsg_t *body, parse_stats_t *ps)
|
||||
{
|
||||
htsmsg_t *tags, *tv;
|
||||
|
||||
|
@ -422,7 +439,7 @@ xmltv_parse(htsmsg_t *body)
|
|||
if((tv = htsmsg_get_map(tags, "tv")) == NULL)
|
||||
return;
|
||||
|
||||
xmltv_parse_tv(tv);
|
||||
xmltv_parse_tv(tv, ps);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -435,13 +452,22 @@ xmltv_grab(const char *prog)
|
|||
char *outbuf;
|
||||
htsmsg_t *body;
|
||||
char errbuf[100];
|
||||
time_t t1, t2;
|
||||
parse_stats_t ps = {0};
|
||||
|
||||
time(&t1);
|
||||
outlen = spawn_and_store_stdout(prog, NULL, &outbuf);
|
||||
if(outlen < 1) {
|
||||
tvhlog(LOG_ERR, "xmltv", "No output from \"%s\"", prog);
|
||||
return;
|
||||
}
|
||||
|
||||
time(&t2);
|
||||
|
||||
tvhlog(LOG_DEBUG, "xmltv",
|
||||
"%s: completed, took %ld seconds",
|
||||
prog, t2 - t1);
|
||||
|
||||
body = htsmsg_xml_deserialize(outbuf, errbuf, sizeof(errbuf));
|
||||
if(body == NULL) {
|
||||
tvhlog(LOG_ERR, "xmltv", "Unable to parse output from \"%s\": %s",
|
||||
|
@ -449,10 +475,19 @@ xmltv_grab(const char *prog)
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_lock(&global_lock);
|
||||
xmltv_parse(body);
|
||||
xmltv_parse(body, &ps);
|
||||
pthread_mutex_unlock(&global_lock);
|
||||
|
||||
tvhlog(LOG_INFO, "xmltv",
|
||||
"%s: Parsing completed. XML contained %d channels, %d events, "
|
||||
"%d new events injected in EPG",
|
||||
prog,
|
||||
ps.ps_channels,
|
||||
ps.ps_programmes,
|
||||
ps.ps_events_created);
|
||||
|
||||
htsmsg_destroy(body);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue