add distros stats in each package
authorJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 5 Sep 2011 21:42:19 +0000 (21:42 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 5 Sep 2011 21:42:19 +0000 (21:42 +0000)
src/html.c
src/ppastats.c
src/ppastats.h
www/css/ppastats.css
www/js/ppastats.js

index 29f9e37..3d6c630 100644 (file)
@@ -72,7 +72,10 @@ enum file_copy_error {
           <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\
+    <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 \
@@ -103,9 +106,11 @@ enum file_copy_error {
           <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\
 %s"
 
@@ -131,9 +136,11 @@ 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\
 %s"
@@ -253,9 +260,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();
 
@@ -279,6 +287,27 @@ 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));
+                       distros++;
+               }
+       }
+
        json_add_ddts(json, pkg->daily_download_totals);
 
        ret = strdup(json_object_to_json_string(json));
index 9dd5c46..3f94038 100644 (file)
@@ -46,6 +46,7 @@ static struct package_stats *get_package_stats(struct ppa_stats *stats,
        p->versions = NULL;
        p->download_count = 0;
        p->daily_download_totals = NULL;
+       p->distros = NULL;
 
        stats->packages = (struct package_stats **)list_add
                ((void **)stats->packages, p);
@@ -81,6 +82,18 @@ static struct version_stats *get_version_stats(struct package_stats *package,
        return v;
 }
 
+static struct distro_stats *distro_stats_new(const char *name)
+{
+       struct distro_stats *d;
+
+       d = malloc(sizeof(struct distro_stats));
+       d->name = strdup(name);
+       d->archs = NULL;
+       d->download_count = 0;
+
+       return d;
+}
+
 static struct distro_stats *get_distro_stats(struct version_stats *version,
                                             const char *name)
 {
@@ -96,10 +109,7 @@ static struct distro_stats *get_distro_stats(struct version_stats *version,
                cur++;
        }
 
-       d = malloc(sizeof(struct distro_stats));
-       d->name = strdup(name);
-       d->archs = NULL;
-       d->download_count = 0;
+       d = distro_stats_new(name);
 
        version->distros
                = (struct distro_stats **)list_add((void **)version->distros,
@@ -181,6 +191,36 @@ struct daily_download_total **add_totals
        return result;
 }
 
+static void
+pkg_add_distro(struct package_stats *pkg,
+              const char *distro_name,
+              int distro_count)
+{
+       struct distro_stats **pkg_distros, *pkg_distro;
+
+       pkg_distros = pkg->distros;
+       pkg_distro = NULL;
+
+       if (pkg_distros)
+               while (*pkg_distros)  {
+                       if (!strcmp((*pkg_distros)->name, distro_name)) {
+                               pkg_distro = *pkg_distros;
+                               break;
+                       }
+
+                       pkg_distros++;
+               }
+
+       if (!pkg_distro) {
+               pkg_distro = distro_stats_new(distro_name);
+               pkg->distros
+                       = (struct distro_stats **)
+                       list_add((void **)pkg->distros, (void *)pkg_distro);
+       }
+
+       pkg_distro->download_count += distro_count;
+}
+
 struct ppa_stats *
 create_ppa_stats(const char *owner,
                 const char *ppa_name,
@@ -247,6 +287,8 @@ create_ppa_stats(const char *owner,
                arch = get_arch_stats(distro, arch_series->architecture_tag);
                arch->download_count += count;
 
+               pkg_add_distro(pkg, distro_series->name, count);
+
                daily_download_total_list_free(totals);
 
                h_cur++;
index 0c1a90f..671eea4 100644 (file)
@@ -51,6 +51,7 @@ struct package_stats {
        struct version_stats **versions;
        int download_count;
        struct daily_download_total **daily_download_totals;
+       struct distro_stats **distros;
 };
 
 struct ppa_stats {
index 0815bd9..9915e4c 100644 (file)
@@ -28,7 +28,7 @@ a:hover {
     padding: 0 0 0 0;
 }
 
-#versions, div.distros, div.pkgs {
+#details {
     width: 20%;
     float: left;
 }
index f70f6dd..81d2ef1 100644 (file)
@@ -47,6 +47,12 @@ function ppastats_pkg() {
            $("#versions").append("<li><a href='"+v_url+"'>"+v+"</a></li>");
        });
 
+       $("#distros").append("<ul>");
+       $.each(data["distros"], function(i, d) {
+           $("#distros ul").append("<li><em>"+d["name"]+"</em>: "+d["count"]+"</li>");
+       });
+
+
        ppastats_chart(data["ddts"]);
     });
 }