summaryrefslogtreecommitdiff
path: root/src/html.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/html.c')
-rw-r--r--src/html.c68
1 files changed, 31 insertions, 37 deletions
diff --git a/src/html.c b/src/html.c
index b7fd4de..a848ebe 100644
--- a/src/html.c
+++ b/src/html.c
@@ -2,6 +2,7 @@
#include "mytime.h"
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
@@ -178,7 +179,6 @@ static void emit_stylesheet(FILE *f) {
" .clients > a.stale { border-left: 3px solid var(--purple); padding-left: 11px; }\n"
" .clients > a.stale .client-name { border-left: none; padding-left: 0; }\n"
"}\n"
- "/* BADGES */\n"
".badge { border: 1px solid; padding: 2px 7px; font-size: 10px; letter-spacing: 1px; justify-self: center; }\n"
".badge.ok { color: var(--green); background: var(--green-bg); border-color: var(--green-bor); }\n"
".badge.run { color: var(--yellow); background: var(--yellow-bg); border-color: var(--yellow-bor); }\n"
@@ -282,7 +282,7 @@ static void emit_stylesheet(FILE *f) {
" gap: 12px;\n"
"}\n"
".backups > div > time { color: var(--hi); font-size: 13px; flex: 1; }\n"
- ".backups > div > span { color: var(--dim); font-size: 12px; min-width: 70px; text-align: right; }\n"
+ ".backups > div > .duration { color: var(--dim); font-size: 12px; min-width: 70px; text-align: right; }\n"
"</style>\n"
);
}
@@ -298,22 +298,24 @@ static void mask_secret(const char *secret, char *out, size_t out_len) {
}
}
-static const char *status_to_badge_class(const char *status) {
- if (strcmp(status, "OK") == 0) return "ok";
- if (strcmp(status, "RUNNING") == 0) return "run";
- if (strcmp(status, "STALE") == 0) return "stale";
- if (strcmp(status, "INTERRUPTED") == 0) return "fail";
- if (strcmp(status, "FINISHED") == 0) return "ok";
- return "";
+static const char *status_to_badge_class(enum BackupStatus status) {
+ switch (status) {
+ case STATUS_RUNNING: return "run";
+ case STATUS_INTERRUPTED: return "fail";
+ case STATUS_FINISHED: return "ok";
+ }
+
+ abort();
}
-static const char *status_to_display(const char *status) {
- if (strcmp(status, "OK") == 0) return "OK";
- if (strcmp(status, "RUNNING") == 0) return "Running";
- if (strcmp(status, "STALE") == 0) return "Stale";
- if (strcmp(status, "INTERRUPTED") == 0) return "Failed";
- if (strcmp(status, "FINISHED") == 0) return "Done";
- return status;
+static const char *status_to_display(enum BackupStatus status) {
+ switch (status) {
+ case STATUS_RUNNING: return "Running";
+ case STATUS_INTERRUPTED: return "Failed";
+ case STATUS_FINISHED: return "Done";
+ }
+
+ abort();
}
char *html_render_clients_page(const struct Request *request, const struct ListClientResult *result, size_t *out_len) {
@@ -386,7 +388,7 @@ char *html_render_clients_page(const struct Request *request, const struct ListC
" <span class=\"client-name\">%s</span>\n"
" <code class=\"client-secret\">%s</code>\n"
" <span class=\"client-time\">%s</span>\n"
- " <b class=\"badge client-badge %s\">%s</b>\n"
+ " <span class=\"badge client-badge %s\">%s</span>\n"
" <span class=\"client-action\">View &rarr;</span>\n"
" </a>\n",
result->clients[i].id,
@@ -413,13 +415,13 @@ char *html_render_clients_page(const struct Request *request, const struct ListC
char *html_render_client_detail_page(const struct Request *request, const struct GetClientOnlyResult *client_result, const struct GetBackupsResult *backups_result, size_t *out_len) {
// Determine status and staleness
int is_stale = 0;
- const char *current_status = "OK";
+ enum BackupStatus current_status = 0;
if (backups_result->backups_len > 0) {
- const char *last_status = backups_result->backups[0].status;
- if (strcmp(last_status, "RUNNING") == 0) {
- current_status = "RUNNING";
- } else if (strcmp(last_status, "INTERRUPTED") == 0) {
- current_status = "INTERRUPTED";
+ enum BackupStatus last_status = backups_result->backups[0].status;
+ if (last_status == STATUS_RUNNING) {
+ current_status = STATUS_RUNNING;
+ } else if (last_status == STATUS_INTERRUPTED) {
+ current_status = STATUS_INTERRUPTED;
}
}
@@ -449,7 +451,7 @@ char *html_render_client_detail_page(const struct Request *request, const struct
" <a href=\"/clients\">&larr; Back to clients</a>\n"
" <article%s>\n"
" <h3>%s</h3>\n"
- " <p>%d backups <b class=\"badge %s\">%s</b></p>\n",
+ " <p>%d backups <span class=\"badge %s\">%s</span></p>\n",
is_stale ? " class=\"stale\"" : "",
client_result->name,
backups_result->backups_len,
@@ -485,34 +487,26 @@ char *html_render_client_detail_page(const struct Request *request, const struct
fprintf(f, " <h4>Recent Backups</h4>\n");
if(backups_result->backups_len == 0) {
+ // @CLEANUP: Remove the inline style here
fprintf(f, " <p style=\"color:var(--dim)\">No backups recorded.</p>\n");
} else {
fprintf(f, " <div class=\"backups\">\n");
for (int i = 0; i < backups_result->backups_len; i++) {
- const char *badge_class;
- const char *badge_text;
bool duration_valid = false;
- if (strcmp(backups_result->backups[i].status, "RUNNING") == 0) {
- badge_class = "run";
- badge_text = "Running";
- } else if (strcmp(backups_result->backups[i].status, "INTERRUPTED") == 0) {
+ if (backups_result->backups[i].status == STATUS_INTERRUPTED) {
duration_valid = true;
- badge_class = "fail";
- badge_text = "Failed";
} else {
duration_valid = true;
- badge_class = "ok";
- badge_text = "Done";
}
struct timespec duration = time_sub(&backups_result->backups[i].completed, &backups_result->backups[i].started);
fprintf(f,
- " <div><time>%s</time><span>%s</span><b class=\"badge %s\">%s</b></div>\n",
+ " <div><time>%s</time><time class=\"duration\">%s</time><span class=\"badge %s\">%s</span></div>\n",
format_time(backups_result->backups[i].started).buf,
duration_valid ? format_duration(duration).buf : "",
- badge_class,
- badge_text
+ status_to_badge_class(backups_result->backups[i].status),
+ status_to_display(backups_result->backups[i].status)
);
}