From 1288d571249ac21acb2b690cc9ff0d0f07a7655e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Mon, 5 Sep 2011 21:42:19 +0000 Subject: [PATCH] add distros stats in each package --- src/html.c | 45 +++++++++++++++++++++++++++++++++++++-------- src/ppastats.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- src/ppastats.h | 1 + www/css/ppastats.css | 2 +- www/js/ppastats.js | 6 ++++++ 5 files changed, 91 insertions(+), 13 deletions(-) diff --git a/src/html.c b/src/html.c index 29f9e37..3d6c630 100644 --- a/src/html.c +++ b/src/html.c @@ -72,7 +72,10 @@ enum file_copy_error { N/A/N/A\n\

\n\
\n\ -
Versions:
\n\ +
\n\ +
Versions:
\n\ +
Distros:
\n\ +
\n\ %s" #define HTML_VERSION_TEMPLATE \ @@ -103,9 +106,11 @@ enum file_copy_error { N/A/N/A\n\

\n\
\n\ -
\n\ - Distros:\n\ - \n\ +
\n\ +
\n\ + Distros:\n\ +
    \n\ +
    \n\
    \n\ %s" @@ -131,9 +136,11 @@ enum file_copy_error { \n\ \n\

    N/A

    \n\ -
    \n\ - Packages:\n\ -
      \n\ +
      \n\ +
      \n\ + Packages:\n\ +
        \n\ +
        \n\
        \n\
        \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)); diff --git a/src/ppastats.c b/src/ppastats.c index 9dd5c46..3f94038 100644 --- a/src/ppastats.c +++ b/src/ppastats.c @@ -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++; diff --git a/src/ppastats.h b/src/ppastats.h index 0c1a90f..671eea4 100644 --- a/src/ppastats.h +++ b/src/ppastats.h @@ -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 { diff --git a/www/css/ppastats.css b/www/css/ppastats.css index 0815bd9..9915e4c 100644 --- a/www/css/ppastats.css +++ b/www/css/ppastats.css @@ -28,7 +28,7 @@ a:hover { padding: 0 0 0 0; } -#versions, div.distros, div.pkgs { +#details { width: 20%; float: left; } diff --git a/www/js/ppastats.js b/www/js/ppastats.js index f70f6dd..81d2ef1 100644 --- a/www/js/ppastats.js +++ b/www/js/ppastats.js @@ -47,6 +47,12 @@ function ppastats_pkg() { $("#versions").append("
      • "+v+"
      • "); }); + $("#distros").append("
          "); + $.each(data["distros"], function(i, d) { + $("#distros ul").append("
        • "+d["name"]+": "+d["count"]+"
        • "); + }); + + ppastats_chart(data["ddts"]); }); } -- 2.7.4