commit - 6e17db5d70280e5d38e43301b6283d8be0f3b510
commit + 1b4e458e9c63f638eb44adeb8d8ff7b7a9b4dd19
blob - 7781170e4ab07fdf803a5646758c8fdd455977a9
blob + 6e5e69749d75a533dbb40b1051e69db748ba5b8f
--- src/testres.cgi.c
+++ src/testres.cgi.c
typedef struct config config;
-int cgi_parse(char *query_string, struct config *conf);
+void cgi_parse(char *query_string, struct config *conf);
-int cgi_parse(char *query_string, struct config *conf) {
- if (query_string == NULL) {
- conf->cgi_action = (char*)"/";
- return 0;
- }
+void cgi_parse(char *query_string, struct config *conf) {
+ conf->cgi_action = NULL;
+ conf->cgi_args = NULL;
conf->cgi_action = strtok(query_string, "=");
- conf->cgi_args = strtok(NULL, "=");
- if (conf->cgi_action == NULL) {
- return 1;
- }
- return 0;
+ if (conf->cgi_action)
+ conf->cgi_args = strtok(NULL, "=");
}
int main(void) {
- print_html_headers();
- printf("Hello!\n");
- print_html_footer();
-
config *conf = calloc(1, sizeof(config));
- if (conf == NULL) {
- perror("calloc");
- return 1;
- }
-
- char *query_string = getenv("QUERY_STRING");
- if (!cgi_parse(query_string, conf)) {
+ if (!conf) {
print_html_headers();
- printf("wrong a http request: %s\n", query_string);
+ printf("calloc\n");
print_html_footer();
- free(query_string);
- free(conf);
return 1;
}
print_html_headers();
printf("no reports found\n");
print_html_footer();
- return 0;
+ return 1;
}
- if (strcmp(conf->cgi_action, "/") == 0) {
- print_html_headers();
+
+ char *query_string = getenv("QUERY_STRING");
+ cgi_parse(query_string, conf);
+
+ print_html_headers();
+ if (!(conf->cgi_action && conf->cgi_args)) {
print_html_reports(reports);
- print_html_footer();
- free(conf);
- free_reports(reports);
- return 0;
- } else if (strcmp(conf->cgi_action, "show")) {
- tailq_report *report;
- if ((report = is_report_exists(reports, conf->cgi_args)) != NULL) {
- print_html_headers();
- print_html_report(report);
- print_html_footer();
+ } else {
+ if (!strcmp(conf->cgi_action, "show")) {
+ tailq_report *report;
+ if ((report = is_report_exists(reports, conf->cgi_args))) {
+ print_html_report(report);
+ free_report(report);
+ }
+ } else if (!strcmp(conf->cgi_action, "q")) {
+ struct reportq *filtered = NULL;
+ filtered = filter_reports(reports, conf->cgi_args);
+ print_html_reports(filtered);
+ free_reports(filtered);
} else {
- print_html_headers();
- printf("report not found\n");
- print_html_footer();
+ print_html_reports(reports);
}
- free_report(report);
- return 0;
- } else if (strcmp(conf->cgi_action, "q") == 0) {
- struct reportq *filtered = NULL;
- filtered = filter_reports(reports, conf->cgi_args);
- print_html_headers();
- print_html_reports(filtered);
- print_html_footer();
- free_reports(reports);
- free_reports(filtered);
- return 0;
- } else {
- print_html_headers();
- printf("unknown action\n");
- print_html_footer();
}
+ print_html_footer();
+ free(conf);
+ free_reports(reports);
return 0;
}
blob - fd176665cb2d64ee6f379be2bf624843c265a695
blob + 9474d09e36bf1d2297fdf982070a620d05304445
--- src/testres.h
+++ src/testres.h
/*
- * Copyright © 2019 Sergey Bronnikov
+ * Copyright © 2019-2020 Sergey Bronnikov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
#ifndef TESTRES_H
#define TESTRES_H
-#define SCRIPT_NAME "testres.cgi"
-#define STYLESHEET "testres.css"
-#define VERSION "0.1.0"
-#define SLOWEST_THRESHOLD 5
+#define SCRIPT_NAME "cgi-bin/testres.cgi"
+#define STYLESHEET "/testres.css"
+#define VERSION "0.1.0"
+#define SLOWEST_THRESHOLD 5
-#endif /* TESTRES_H */
+#endif /* TESTRES_H */
blob - 1ba93c8ea848033593eb1be781853d04c087608a
blob + 16cd8b2e7beacef628837ac33feb2c62deba9d10
--- src/ui_http.c
+++ src/ui_http.c
/*
- * Copyright © 2018-2019 Sergey Bronnikov
+ * Copyright © 2018-2020 Sergey Bronnikov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
void print_html_footer() {
printf("<div><footer class=\"footer\"><small>");
- printf("generated by testres (%s)", VERSION);
+ printf("generated by testres (%s)", VERSION);
printf("</small></footer></div>\n");
printf("</body>\n");
printf("</html>\n");
void print_html_search() {
printf("<div align=\"center\">");
- printf("<form action=\"/%s\" method=\"get\">\n", SCRIPT_NAME);
+ printf("<form action=\"/%s\" method=\"get\">\n", SCRIPT_NAME);
printf(" <input type=\"search\" name=\"q\" value=\"\" size=\"60\">\n");
printf(" <button type=\"submit\">Search</button>\n");
printf(" <br/>\n");
time_t prev_time = {0};
char datestr[128];
TAILQ_FOREACH(report_item, reports, entries) {
- printf("<td><a href=\"/testres.cgi?show=%s\">%s</a></td>\n",
- report_item->id, report_item->id);
+ printf("<td><a href=\"/%s?show=%s\">%s</a></td>\n",
+ SCRIPT_NAME, report_item->id, report_item->id);
double perc = metric_pass_rate(report_item);
if (perc >= 50) {
printf("<td><span class=\"label pass\">%0.0f</span></td>\n", perc);
printf("<th>Time</th>\n");
printf("</tr>\n");
TAILQ_FOREACH(suite_item, suites, entries) {
- if (!TAILQ_EMPTY(suite_item->tests)) {
- print_html_tests(suite_item->tests);
- }
+ if (!TAILQ_EMPTY(suite_item->tests)) {
+ print_html_tests(suite_item->tests);
+ }
}
printf("</table>\n");
}