</html>"
#define HTML_PKG_TEMPLATE \
-"<html>\n\
- <head>\n\
- <link type=\"text/css\"\n\
- rel=\"stylesheet\"\n\
- href=\n\
-\"http://fonts.googleapis.com/css?family=Ubuntu:regular,bold&subset=Latin\">\n\
- <link type=\"text/css\" href=\"css/ppastats.css\" rel=\"stylesheet\" />\n\
- <link type=\"text/css\" href=\"css/jquery.jqplot.min.css\"\n\
- rel=\"stylesheet\" />\n\
- <script type=\"text/javascript\" src=\"js/jquery.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jquery.jqplot.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jqplot.dateAxisRenderer.min.js\"></script>\n\
- <script type=\"text/javascript\" src=\"js/ppastats.js\"></script>\n\
- <script>var data = %s;\n\
- ppastats_pkg();\n\
- </script>\n\
- </head>\n\
- <body>\n\
- <h1><span id=\"pkg_name\">N/A</span></h1>\n\
- <p><em>PPA</em>: \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=\"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"
+" <h1><span id=\"pkg_name\">N/A</span></h1>\n\
+ <div id=\"charts\">\n\
+ <div id=\"chart\"></div>\n\
+ <div id=\"chart_distro\"></div>\n\
+ </div>\n\
+ <div id=\"details\">\n\
+ <em>PPA</em>: \n\
+ <a href=\"index.html\">\n\
+ <span id=\"ppa_owner\">N/A</span>/\n\
+ <span id=\"ppa_name\">N/A</span>\n\
+ </a>\n\
+\n\
+ <div id=\"distros\"><em>Distros:</em></div>\n\
+ <div id=\"versions\"><em>Versions:</em></div>\n\
+ </div>"
#define HTML_VERSION_TEMPLATE \
"<html>\n\
}
}
-static char *pkg_to_json(struct ppa_stats *ppa, struct package_stats *pkg)
+static json_object *distro_to_json(struct distro_stats *d)
+{
+ json_object *json;
+
+ json = json_object_new_object();
+
+ json_object_object_add(json,
+ "name",
+ json_object_new_string(d->name));
+
+ json_object_object_add(json,
+ "count",
+ json_object_new_int(d->download_count));
+
+ json_add_ddts(json, d->ddts);
+
+ return json;
+}
+
+static json_object *
+pkg_to_json(struct ppa_stats *ppa, struct package_stats *pkg)
{
json_object *json, *json_versions, *json_distros, *json_distro;
- char *ret;
struct version_stats **versions;
- struct distro_stats **distros, *distro;
+ struct distro_stats **distros, *d;
json = json_object_new_object();
json_object_object_add(json, "distros", json_distros);
while (*distros) {
- distro = *distros;
+ d = *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));
+ if (d->download_count) {
+ json_distro = distro_to_json(d);
- json_add_ddts(json_distro, distro->ddts);
+ json_object_array_add(json_distros,
+ json_distro);
+ }
distros++;
}
json_add_ddts(json, pkg->daily_download_totals);
- ret = strdup(json_object_to_json_string(json));
-
- json_object_put(json);
-
- return ret;
+ return json;
}
static char *version_to_json(struct ppa_stats *ppa,
return json;
}
-
-static void
-pkg_to_html(struct ppa_stats *ppa, struct package_stats *pkg, const char *dir)
-{
- char *path;
- FILE *f;
- char *json;
-
- path = path_new(dir, pkg->name, ".html");
- f = fopen(path, "w");
-
- if (!f) {
- fprintf(stderr, "ERROR: failed to open: %s\n", path);
- return ;
- }
-
- json = pkg_to_json(ppa, pkg);
-
- fprintf(f, HTML_PKG_TEMPLATE, json, HTML_FOOTER);
-
- fclose(f);
-
- free(path);
- free(json);
-}
-
static void
version_to_html(struct ppa_stats *ppa,
struct package_stats *pkg,
}
static void
-packages_to_html(struct ppa_stats *ppa,
- struct package_stats **packages,
- const char *dir)
-{
- struct package_stats **cur;
- struct version_stats **versions;
-
- cur = packages;
- while (*cur) {
- pkg_to_html(ppa, *cur, dir);
-
- versions = (*cur)->versions;
- while (*versions) {
- version_to_html(ppa, *cur, *versions, dir);
-
- versions++;
- }
-
- cur++;
- }
-}
-
-static void
create_html(const char *path,
const char *title,
const char *body_template,
}
fprintf(f, HTML_HEADER, title, script);
- fputs(HTML_INDEX_TEMPLATE, f);
+ fputs(body_template, f);
fputs(HTML_FOOTER, f);
fclose(f);
json_object *json;
json = ppa_to_json(ppa);
-
json_path = path_new(dir, "index", ".json");
-
if (debug)
printf("DEBUG: generating %s\n", json_path);
-
json_object_to_file(json_path, json);
-
json_object_put(json);
+ free(json_path);
path = path_new(dir, "index", ".html");
dname = ppa_display_name(ppa);
-
create_html(path, dname, HTML_INDEX_TEMPLATE, "ppastats_ppa();");
-
free(path);
free(dname);
+}
+
+static void
+pkg_to_html(struct ppa_stats *ppa, struct package_stats *pkg, const char *dir)
+{
+ char *path, *json_path, *script;
+ json_object *json;
+
+ json_path = path_new(dir, pkg->name, ".json");
+ json = pkg_to_json(ppa, pkg);
+ if (debug)
+ printf("DEBUG: generating %s\n", json_path);
+ json_object_to_file(json_path, json);
+ json_object_put(json);
free(json_path);
+
+ path = path_new(dir, pkg->name, ".html");
+ script = malloc(strlen("ppastats_pkg(\"\");")+
+ strlen(pkg->name)+
+ strlen(".json")+
+ 1);
+ sprintf(script, "ppastats_pkg(\"%s%s\");", pkg->name, ".json");
+
+ if (debug)
+ printf("DEBUG: generating %s\n", path);
+
+ create_html(path, pkg->name, HTML_PKG_TEMPLATE, script);
+ free(path);
+ free(script);
+}
+
+static void
+pkgs_to_html(struct ppa_stats *ppa,
+ struct package_stats **pkgs,
+ const char *dir)
+{
+ struct version_stats **versions;
+
+ while (*pkgs) {
+ pkg_to_html(ppa, *pkgs, dir);
+
+ versions = (*pkgs)->versions;
+ while (*versions) {
+ version_to_html(ppa, *pkgs, *versions, dir);
+
+ versions++;
+ }
+
+ pkgs++;
+ }
}
void
path = path_new(output_dir, "ppa", ".html");
- packages_to_html(ppastats, ppastats->packages, output_dir);
+ pkgs_to_html(ppastats, ppastats->packages, output_dir);
index_to_html(ppastats, output_dir);
}
-function ppastats_pkg() {
+function ppastats_pkg(json_url) {
$(document).ready(function() {
- $("#ppa_owner").html(data["ppa_owner"]);
- $("#ppa_name").html(data["ppa_name"]);
- $("#pkg_name").html(data["name"]);
-
- $.each(data["versions"], function(i, v) {
- var v_url = data["name"]+"_"+v+".html";
-
- $("#versions").append("<li><a href='"+v_url+"'>"+v+"</a></li>");
- });
+ $.get(json_url, function(str_json) {
+ data = JSON.parse(str_json);
- $("#distros").append("<ul>");
- $.each(data["distros"], function(i, d) {
- $("#distros ul").append("<li><em>"+d["name"]+"</em>: "+d["count"]+"</li>");
+ $("#ppa_owner").html(data["ppa_owner"]);
+ $("#ppa_name").html(data["ppa_name"]);
+ $("#pkg_name").html(data["name"]);
+
+ $.each(data["versions"], function(i, v) {
+ var v_url = data["name"]+"_"+v+".html";
+
+ $("#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"]);
+ ppastats_distros(data["distros"]);
});
-
-
- ppastats_chart(data["ddts"]);
- ppastats_distros(data["distros"]);
});
}