2 Copyright (C) 2011 jeanfi@gmail.com
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
28 #include <json/json.h>
33 #define HTML_TEMPLATE \
36 <script type='text/javascript'\
37 src='https://www.google.com/jsapi'></script>\n\
38 <script type='text/javascript'>\n\
39 google.load('visualization', '1', {packages:['corechart']});\
40 google.setOnLoadCallback(drawChart);\n\
41 function drawChart() {\n\
42 var data = new google.visualization.DataTable();\n\
43 data.addColumn('string', 'Date');\n\
47 var chart = new google.visualization.LineChart\
48 (document.getElementById('chart_div'));\n\
49 chart.draw(data, {width: 1024, height: 768,\
50 title: 'PPA Statistics'});\n\
56 <div id='chart_div'></div>\n\
61 get_count_array(json_object *data, const char *date)
64 json_object *o, *o_date;
67 n = json_object_array_length(data);
68 for (i = 0; i < n; i++) {
69 o = json_object_array_get_idx(data, i);
70 o_date = json_object_array_get_idx(o, 0);
71 date2 = json_object_get_string(o_date);
73 if (!strcmp(date2, date))
80 static json_object *count_array_new(json_object *data, const char *d, int n)
82 json_object *result = json_object_new_array();
85 json_object_array_add(result, json_object_new_string(d));
87 for (i = 0; i < n; i++)
88 json_object_array_add(result, json_object_new_int(0));
90 json_object_array_add(data, result);
96 build_package_display_name(struct binary_package_publishing_history *b)
98 char *str = malloc(strlen(b->binary_package_name)+
100 strlen(b->binary_package_version)+
103 sprintf(str, "%s-%s",
104 b->binary_package_name, b->binary_package_version);
110 build_addcolums_str(struct binary_package_publishing_history **list)
112 struct binary_package_publishing_history **cur = list;
113 struct binary_package_publishing_history *b;
119 const char *pattern = "%s data.addColumn('number', '%s');\n";
123 dname = build_package_display_name(b);
125 tmpstr = malloc(strlen(str)+strlen(pattern)+strlen(dname)+1);
126 sprintf(tmpstr, pattern, str, dname);
140 build_data_str(struct binary_package_publishing_history **list)
146 n = list_length((void **)list);
148 data = json_object_new_array();
149 for (i = 0; i < n; i++) {
150 struct binary_package_publishing_history *binary;
151 const struct distro_arch_series *dist;
152 struct daily_download_total **totals;
153 struct daily_download_total **t_cur;
156 dist = get_distro_arch_series(binary->distro_arch_series_link);
158 totals = get_daily_download_totals(binary->self_link);
162 char *d = malloc(10+1);
165 sprintf(d, "%d-%02d-%02d",
166 (*t_cur)->date.tm_year+1900,
167 (*t_cur)->date.tm_mon+1,
168 (*t_cur)->date.tm_mday);
170 data2 = get_count_array(data, d);
173 data2 = count_array_new(data, d, n);
175 json_object_array_put_idx
177 i+1, json_object_new_int((*t_cur)->count));
183 daily_download_total_list_free(totals);
186 str = strdup(json_object_to_json_string(data));
188 json_object_put(data);
193 static char *get_path(const char *dir, const char *file)
195 char *path = malloc(strlen(dir)+1+strlen(file)+1);
205 ppa_to_html(const char *owner,
207 const char *package_status,
208 const char *output_dir)
210 struct binary_package_publishing_history **list;
211 char *archive_url, *addcolumns_str, *data_str, *path;
213 struct ppa_stats *ppastats;
214 struct daily_download_total **totals;
216 ppastats = create_ppa_stats(owner, ppa, package_status);
217 totals = ppastats->daily_download_totals;
219 path = get_path(output_dir, "ppa.html");
220 generate_chart(path, "PPA Statistics", ppa, totals);
223 archive_url = get_archive_url(owner, ppa);
224 list = get_binary_package_publishing_history_list(archive_url,
229 fprintf(stderr, "ERROR: Failed to retrieve PPA information\n");
233 addcolumns_str = build_addcolums_str(list);
234 data_str = build_data_str(list);
236 path = get_path(output_dir, "index.html");
237 f = fopen(path, "w");
239 fprintf(f, HTML_TEMPLATE, addcolumns_str, data_str);
242 fprintf(stderr, "ERROR: failed to write %s\n", path);
246 free(addcolumns_str);
248 binary_package_publishing_history_list_free(list);
249 ppa_stats_free(ppastats);