Added distribution chart in the package page.
[ppastats.git] / src / html.c
index da02b38..e1c9e9f 100644 (file)
@@ -39,6 +39,12 @@ enum file_copy_error {
        FILE_COPY_ERROR_ALLOC_BUFFER
 };
 
+#define HTML_FOOTER \
+" <div id=\"footer\">Generated by \
+<a href='http://wpitchoune.net/ppastats'>ppastats</a></div>\n\
+  </body>\n\
+</html>"
+
 #define HTML_PKG_TEMPLATE \
 "<html>\n\
   <head>\n\
@@ -62,13 +68,18 @@ enum file_copy_error {
   <body>\n\
     <h1><span id=\"pkg_name\">N/A</span></h1>\n\
     <p><em>PPA</em>: \n\
-       <a href=\".\">\n\
+       <a href=\"index.html\">\n\
           <span id=\"ppa_owner\">N/A</span>/<span id=\"ppa_name\">N/A</span>\n\
        </a></p>\n\
-    <div id=\"chart\"></div>\n\
-    <div id=\"versions\"><em>Versions:</em></div>\n\
-  </body>\n\
-</html>"
+    <div id=\"charts\">\n\
+       <div id=\"chart\"></div>\n\
+       <div id=\"chart_distro\"></div>\n\
+    </div>\n\
+    <div id=\"details\">\n\
+      <div id=\"versions\"><em>Versions:</em></div>\n\
+      <div id=\"distros\"><em>Distros:</em></div>\n\
+    </div>\n\
+%s"
 
 #define HTML_VERSION_TEMPLATE \
 "<html>\n\
@@ -94,16 +105,17 @@ enum file_copy_error {
     <h1><span id=\"pkg_name\">N/A</span></h1>\n\
     <div id=\"version\"><em>Version:</em></div>\n\
     <p><em>PPA</em>: \n\
-       <a href=\".\">\n\
+       <a href=\"index.html\">\n\
           <span id=\"ppa_owner\">N/A</span>/<span id=\"ppa_name\">N/A</span>\n\
        </a></p>\n\
     <div id=\"chart\"></div>\n\
-    <div class=\"distros\">\n\
-       <em>Distros</em>:\n\
-       <ul id=\"distros\"></ul>\n\
+    <div id=\"details\">\n\
+      <div class=\"distros\">\n\
+       <em>Distros</em>:\n\
+       <ul id=\"distros\"></ul>\n\
+      </div>\n\
     </div>\n\
-  </body>\n\
-</html>"
+%s"
 
 #define HTML_INDEX_TEMPLATE \
 "<html>\n\
@@ -127,14 +139,14 @@ enum file_copy_error {
   </head>\n\
   <body>\n\
     <h1><span id=\"ppa_name\">N/A</span></h1>\n\
-    <div class=\"pkgs\">\n\
-       <em>Packages</em>:\n\
-       <ul id=\"pkgs\"></ul>\n\
+    <div id=\"details\">\n\
+      <div class=\"pkgs\">\n\
+       <em>Packages</em>:\n\
+       <ul id=\"pkgs\"></ul>\n\
+      </div>\n\
     </div>\n\
     <div id=\"chart\"></div>\n\
-  </body>\n\
-</html>"
-
+%s"
 
 #define FCOPY_BUF_SZ 4096
 static int file_copy(FILE * src, FILE * dst)
@@ -251,9 +263,10 @@ static void json_add_ddts(json_object *json,
 
 static char *pkg_to_json(struct ppa_stats *ppa, struct package_stats *pkg)
 {
-       json_object *json, *json_versions;
+       json_object *json, *json_versions, *json_distros, *json_distro;
        char *ret;
        struct version_stats **versions;
+       struct distro_stats **distros, *distro;
 
        json = json_object_new_object();
 
@@ -277,6 +290,30 @@ static char *pkg_to_json(struct ppa_stats *ppa, struct package_stats *pkg)
                versions++;
        }
 
+       distros = pkg->distros;
+       if (distros) {
+               json_distros = json_object_new_array();
+               json_object_object_add(json, "distros", json_distros);
+
+               while (*distros) {
+                       distro = *distros;
+
+                       json_distro = json_object_new_object();
+                       json_object_array_add(json_distros, json_distro);
+                       json_object_object_add
+                               (json_distro,
+                                "name", json_object_new_string(distro->name));
+                       json_object_object_add
+                               (json_distro,
+                                "count",
+                                json_object_new_int(distro->download_count));
+
+                       json_add_ddts(json_distro, distro->ddts);
+
+                       distros++;
+               }
+       }
+
        json_add_ddts(json, pkg->daily_download_totals);
 
        ret = strdup(json_object_to_json_string(json));
@@ -412,7 +449,7 @@ pkg_to_html(struct ppa_stats *ppa, struct package_stats *pkg, const char *dir)
 
        json = pkg_to_json(ppa, pkg);
 
-       fprintf(f, HTML_PKG_TEMPLATE, json);
+       fprintf(f, HTML_PKG_TEMPLATE, json, HTML_FOOTER);
 
        fclose(f);
 
@@ -440,7 +477,9 @@ version_to_html(struct ppa_stats *ppa,
                return ;
        }
 
-       fprintf(f, HTML_VERSION_TEMPLATE, version_to_json(ppa, pkg, version));
+       fprintf(f, HTML_VERSION_TEMPLATE,
+               version_to_json(ppa, pkg, version),
+               HTML_FOOTER);
 
        fclose(f);
 
@@ -485,7 +524,7 @@ index_to_html(struct ppa_stats *ppa, const char *dir)
                return ;
        }
 
-       fprintf(f, HTML_INDEX_TEMPLATE, ppa_to_json(ppa));
+       fprintf(f, HTML_INDEX_TEMPLATE, ppa_to_json(ppa), HTML_FOOTER);
 
        fclose(f);