]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
* Increase logging and include various stats to XMLTV grab
authorAndreas Öman <andreas@lonelycoder.com>
Wed, 14 Oct 2009 20:07:35 +0000 (20:07 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Wed, 14 Oct 2009 20:07:35 +0000 (20:07 +0000)
debian/changelog
src/dvb/dvb_tables.c
src/xmltv.c

index fd7bfb426763a65421bda0da406f10f09e93aa4c..febf59c3a852d3bab562fdba28c037bff7d50da3 100644 (file)
@@ -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,
index 031a759649ddfa78278cbc5e6875899f9257e286..b92820d2b9a2d19e1d98ed546c8a4cc618c4dd30 100644 (file)
@@ -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;
index c67e102b5f0d75928ff5c706645e5030352bffbd..f4c2f5b9c620a7b45f3230398ea141f08b5b8a1b 100644 (file)
@@ -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);
 }